<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="en">
	<id>https://mediawiki.kfs.oeaw.ac.at/stx/docs/wiki/api.php?action=feedcontributions&amp;feedformat=atom&amp;user=Jw</id>
	<title>STX Wiki - User contributions [en]</title>
	<link rel="self" type="application/atom+xml" href="https://mediawiki.kfs.oeaw.ac.at/stx/docs/wiki/api.php?action=feedcontributions&amp;feedformat=atom&amp;user=Jw"/>
	<link rel="alternate" type="text/html" href="https://mediawiki.kfs.oeaw.ac.at/stx/docs/wiki/index.php/Special:Contributions/Jw"/>
	<updated>2026-05-06T03:21:23Z</updated>
	<subtitle>User contributions</subtitle>
	<generator>MediaWiki 1.43.6</generator>
	<entry>
		<id>https://mediawiki.kfs.oeaw.ac.at/stx/docs/wiki/index.php?title=History_of_Changes&amp;diff=10709</id>
		<title>History of Changes</title>
		<link rel="alternate" type="text/html" href="https://mediawiki.kfs.oeaw.ac.at/stx/docs/wiki/index.php?title=History_of_Changes&amp;diff=10709"/>
		<updated>2026-04-21T08:45:54Z</updated>

		<summary type="html">&lt;p&gt;Jw: /* Downloads */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;div class=&amp;quot;noautonum&amp;quot;&amp;gt;{{TOC limit|3}}&amp;lt;/div&amp;gt;&lt;br /&gt;
=5.0=&lt;br /&gt;
&lt;br /&gt;
==Features==&lt;br /&gt;
&lt;br /&gt;
===Compact Workspace Mode===&lt;br /&gt;
The Workspace now has a [[User_Guide/Workspace#Modes|compact mode]]. The compact mode is a simplified interface for new users. Although it was designed with linguists in mind, it can be used by anyone.&lt;br /&gt;
&lt;br /&gt;
===webMAUS===&lt;br /&gt;
Automatic segmentation using the [https://clarin.phonetik.uni-muenchen.de/BASWebServices/interface webMAUS] REST API. This has been implemented in the toolbox [[User_Guide/Toolbox/runMAUSBasicDlg|&amp;lt;samp&amp;gt;runMAUSBasicDlg&amp;lt;/samp&amp;gt;]].&lt;br /&gt;
&lt;br /&gt;
==Bugfixes==&lt;br /&gt;
&lt;br /&gt;
* Correctly handle corrupt Workspace file (generate new one, rather than silently exiting)&lt;br /&gt;
&lt;br /&gt;
==5.0.6==&lt;br /&gt;
&lt;br /&gt;
Released: 30th December 2020&lt;br /&gt;
&lt;br /&gt;
Revision: 10071&lt;br /&gt;
&lt;br /&gt;
* bugfix: No longer dying with &amp;quot;The parameter is incorrect&amp;quot; error&lt;br /&gt;
&lt;br /&gt;
==5.0.4==&lt;br /&gt;
&lt;br /&gt;
Released: 12th November 2019&lt;br /&gt;
&lt;br /&gt;
Revision: 10016&lt;br /&gt;
&lt;br /&gt;
* bugfix: SPExL V1.1.11. Adding new segments respects vertical drawing order. &lt;br /&gt;
* bugfix: SPExL V1.1.11. Faster deselection of segments. &lt;br /&gt;
* bugfix: Real-time waterfall axis drawing correctly&lt;br /&gt;
* bugfix: show/hide sectioner setting now respected.&lt;br /&gt;
* bugfix: sectioner height setting now respected.&lt;br /&gt;
&lt;br /&gt;
==5.0.3==&lt;br /&gt;
&lt;br /&gt;
Released: 1st October 2019&lt;br /&gt;
&lt;br /&gt;
Revision: 9967&lt;br /&gt;
&lt;br /&gt;
* feature: Signal.All is now selected by default, if no other segment is selected.&lt;br /&gt;
* feature: When exporting profiles, the present working directory is used, rather than always selecting the &#039;profiles&#039; directory. The profiles directory is only used if the present working directory is the root directory.&lt;br /&gt;
* feature: The first sound file in the project is selected by default in the compact mode.&lt;br /&gt;
* bugfix: When adding a file per drag and drop, the file is now selected.&lt;br /&gt;
* bugfix: enabling a disabled edit box now sets the background color correctly (back to white).&lt;br /&gt;
* bugfix: debugger trace window now visible in release version too&lt;br /&gt;
* bugfix: [[Programmer_Guide/Command_Reference/SYSINFO|SYSINFO]] command now supports Windows 8.1 and Windows 10 (was returning Windows 8)&lt;br /&gt;
* bugfix: SPExL V1.1.10. Playlist listview now processes listsorted message and displays sort order set by clicking a column heading. The sort order was first being displayed when clicking in the control after clicking the column heading.&lt;br /&gt;
* bugfix: The &#039;Start&#039; button should now be activated correctly in the Compact Mode.&lt;br /&gt;
&lt;br /&gt;
==5.0.2==&lt;br /&gt;
&lt;br /&gt;
Released: 19th September 2019&lt;br /&gt;
&lt;br /&gt;
Revision: 9946&lt;br /&gt;
&lt;br /&gt;
* bugfix:  The context menu Add Sound File now working from the Audio File list in the Compact Mode.&lt;br /&gt;
* feature: The possible number of plots in XPlot was increased from 64 to 128&lt;br /&gt;
&lt;br /&gt;
==5.0.0==&lt;br /&gt;
&lt;br /&gt;
Released: 12th September 2019&lt;br /&gt;
&lt;br /&gt;
Revision: 9935&lt;br /&gt;
&lt;br /&gt;
Initial release.&lt;br /&gt;
&lt;br /&gt;
=4.4=&lt;br /&gt;
&lt;br /&gt;
==Features==&lt;br /&gt;
===Transcription Script SPExL 1.1.6===&lt;br /&gt;
The transcription script SPExL has been simplified and improved.&lt;br /&gt;
* Hotkeys can be defined by the user in the SPExL_SegTrans.hotkeys file&lt;br /&gt;
* The number of available &#039;views&#039; has been reduced to 3:&lt;br /&gt;
** wave overview &amp;amp; spg. section (a waveform of the whole file in the top graph, with a section of the file as spectrogram below)&lt;br /&gt;
** wave only (a waveform of a section of the file with scrollbar functionality)&lt;br /&gt;
** wave and spg. section (a synced waveform and spectrogram of a section of the file with scrollbar functionality)&lt;br /&gt;
* Segment selection between graphs and the list are now synchronised. If you select a segment in the graph, it is selected in the list and vice versa.&lt;br /&gt;
* Changes made to the project (new segments, edited attributes) are now made directly in the project rather than the user having to explicitly press the &#039;save segments to project file&#039; button to copy them from SPExL to the Workspace. Note that they are only written to disk, however, if the project is saved (press the &#039;Save&#039; button).&lt;br /&gt;
===Visible Segment Attributes Saved per Project File===&lt;br /&gt;
If you choose to display other attributes other than the default attributes in the Workspace Detail View, these settings are now saved in the open project file. When a project file is then opened, the relevant attribute list is loaded and used, rather than the user having to [[User_Guide/Workspace/Detail/Search_for_Element_Attributes|search for them]] again. You can still modify which attributes are displayed using the General Settings [[User_Guide/Workspace/Application_and_Setup_Tree/Options/General_Settings#.22Set.22_Attributes_.26_.22Segment.22_Attributes|&#039;Select &amp;quot;Segment&amp;quot; Attributes&#039; dialog]].&lt;br /&gt;
===Global / Profile Sectioner Settings===&lt;br /&gt;
The sectioner settings in the {{Viewer2}} analysis application were always global to STx. As of STx 4.4.0, you can choose to save your sectioner settings with your profile. The default is still the &#039;global&#039; variant. To switch to profile sectioner settings, uncheck the &#039;&#039;&#039;use global sectioner settings&#039;&#039;&#039; checkbox in the {{Viewer2}} [[User_Guide/Spectrogram_and_Parameter_Viewer/Settings_Dialog|settings dialog]].&lt;br /&gt;
&lt;br /&gt;
==4.4.10==&lt;br /&gt;
&lt;br /&gt;
Released: 17th January 2019&lt;br /&gt;
&lt;br /&gt;
Revision: 9712&lt;br /&gt;
&lt;br /&gt;
* bugfix: playback gain factor - the playback gain is now working also for asio devices (see CSTXASIOEngine::Transfer())&lt;br /&gt;
* bugfix: renumbering command did not update detail as expected.&lt;br /&gt;
* bugfix: the update version dialogs now display the correct workspace path&lt;br /&gt;
&lt;br /&gt;
==4.4.9==&lt;br /&gt;
&lt;br /&gt;
Released: 25th September 2018&lt;br /&gt;
&lt;br /&gt;
Revision:&lt;br /&gt;
&lt;br /&gt;
* feature: don&#039;t ask user where to put sound file if there are no sets in the project.&lt;br /&gt;
* feature: dragging and dropping a template onto {{ST}X} copies it to the templates folder.&lt;br /&gt;
* feature: added &#039;Open Containing Folder&#039; context menu for sound files and links. Improved contextualisation of context menu in detail (overview==root/set)&lt;br /&gt;
* feature: &#039;txt2wav&#039; script: Adding decimal symbol and field delimiter to parameters, as well as the ability to specify which extension to use to filter files (was hard-coded to &#039;txt&#039;). Now this macro can be used to&lt;br /&gt;
* feature: bdataset createwave and createwwaveex now take an openmode keyword: auto|create|read|write, which is passed on to bsf open. This means that we can now open files in modes other than &#039;auto&#039;.&lt;br /&gt;
process CSV files.&lt;br /&gt;
* bugfix: very long capture text for edit controls with &#039;text above&#039; could lead to capture static being longer than the edit control and unintentionally overlapping with other controls (e.g. in Transcription Setup dialog).&lt;br /&gt;
* bugfix: closing con log window no longer resets PARENT shell variable, unless it is set the the con log window itself.&lt;br /&gt;
* bugfix: sound files now opened using the FILE_SHARE_READ dwShareMode. This should mean, that STx no longer prevents other processes from reading the sound files. &lt;br /&gt;
* bugfix: viewer opens sound file in read mode, rather than read/write.&lt;br /&gt;
* bugfix: the !PATH attribute (MakePath()) now returns the correct path for files in the root of a drive. Bug was introduced in r8998 (STx 4.2.19). This was, for example, was causing sound files in the root directory not to be unloaded, and hence was causing sharing violations.&lt;br /&gt;
&lt;br /&gt;
==4.4.8==&lt;br /&gt;
&lt;br /&gt;
Released: 25th July 2018&lt;br /&gt;
&lt;br /&gt;
Revision: 9500&lt;br /&gt;
&lt;br /&gt;
* feature: Spectrogram &amp;amp; Parameters viewer sectioner window now remembers which function cursor is bound to when being replotted.&lt;br /&gt;
* feature: The &amp;lt;samp&amp;gt;downsampling.sts&amp;lt;/samp&amp;gt; script now has a &amp;lt;samp&amp;gt;ResampleCLI&amp;lt;/samp&amp;gt; macro for automatic resampling of one or more files (see source). The old &amp;lt;samp&amp;gt;ResampleDialog&amp;lt;/samp&amp;gt; was renamed to &amp;lt;samp&amp;gt;ResampleDLG&amp;lt;/samp&amp;gt;.&lt;br /&gt;
* feature: Adding help for &amp;quot;Import_PRAAT_TextGrid&amp;quot; toolbox.&lt;br /&gt;
* feature: Adding ability to edit &#039;Sectioner Settings&#039; from the profile dialog. &lt;br /&gt;
* feature: Transcription 1.1.8 - removed segment &#039;refresh&#039; button, since segments always reflect current project state.&lt;br /&gt;
* bugfix: a window that was maximised will now be maximised to the correct monitor. It was always being maximised to monitor 1 on display creation.&lt;br /&gt;
* bugfix: the profile version number is now imported with the profile. This means that, for example, the use global profile settings flag is now also set correctly on import.&lt;br /&gt;
* bugfix: minor fix of position of two controls which were overlapping with controls beneath&lt;br /&gt;
* bugfix: stop playback cursor if wave is stopped by starting playback in another graph. Beforehand, the playback cursor was stopped if it got to the end, or the ESC key was pressed.&lt;br /&gt;
* bugfix: Y coordinate vector conversion was inaccurate by 1 pixel (bug introduced in r2536) This affects the XY, parameter, scatter, wave and waterfall functions.&lt;br /&gt;
&lt;br /&gt;
==4.4.6==&lt;br /&gt;
&lt;br /&gt;
Released: 21. March 2018&lt;br /&gt;
&lt;br /&gt;
Revision: 9441&lt;br /&gt;
&lt;br /&gt;
* bugfix: some bugfixes and minor changes in BSeq &lt;br /&gt;
* bugfix: BScript: logging of unhandled messages in msg-loop disabled // Conlog: /ton and /toff options implemented (timer on/off + show elapsed time) &lt;br /&gt;
* bugfix: Viewer3 settings now being saved (bug introduced in r9318 - STx 4.4.0)&lt;br /&gt;
* bugfix CShellFile::Status() - catch CTime exception if file time is illegal (avoid program crash)&lt;br /&gt;
&lt;br /&gt;
==4.4.5==&lt;br /&gt;
&lt;br /&gt;
Released: 19. February 2018&lt;br /&gt;
&lt;br /&gt;
Revision: 9416&lt;br /&gt;
&lt;br /&gt;
* bugfix: in Viewer2 large asegtemplates (with many fields) are now displayed correctly - note: the same problem exists in Viewer1 if the segment dialog part (created by the macro call &amp;quot;&amp;quot;metasegment msdialog&amp;quot;) needs more than 90 controls (around 40 segment attributes)&lt;br /&gt;
* feature: the bscript.stx function loaddata (con loaddata) can now also load string tables (extenden tables) from csv-files. The file types TEXT/TEXTCONTINUATION (numeric parameter table), STRING/STRINCONTINUATION (extended string table) and BINARY (binary stx-data files) are available. Type ASCII/ASCIICONTINUATION has been removed.&lt;br /&gt;
* feature: new feature (bugfix?): CShellTable::Read() - handling of field-separator tab has been changed - empty fields are now possible - warning: may have an effect on existing script/macro code!&lt;br /&gt;
&lt;br /&gt;
==4.4.4==&lt;br /&gt;
&lt;br /&gt;
Released: 26. January 2018&lt;br /&gt;
&lt;br /&gt;
Revision: 9404&lt;br /&gt;
&lt;br /&gt;
* bugfix: combobox entries with underliners retain their underliners now in the workspace detail (reported by Anton Baotic), and in Spexl.&lt;br /&gt;
&lt;br /&gt;
==4.4.3==&lt;br /&gt;
&lt;br /&gt;
Released: 18. December 2017&lt;br /&gt;
&lt;br /&gt;
Revision: 9391&lt;br /&gt;
&lt;br /&gt;
* bugfix: adding missing Transcription hotkey file and retisimo scripts&lt;br /&gt;
&lt;br /&gt;
==4.4.2==&lt;br /&gt;
&lt;br /&gt;
Released: 30. November 2017&lt;br /&gt;
&lt;br /&gt;
Revision: 9377&lt;br /&gt;
&lt;br /&gt;
* bugfix: SPExL Transcription script V1.1.7: the /U ASegTemplate flag is now respected, and, if used, the last entered value for a segment attribute is used as the default for the next new segment.&lt;br /&gt;
* bugfix: default profile names no longer have the invalid blank character in them. A check was also added, so new profiles cannot be created with blanks.&lt;br /&gt;
&lt;br /&gt;
==4.4.1==&lt;br /&gt;
&lt;br /&gt;
Released: 23. November 2017&lt;br /&gt;
&lt;br /&gt;
Revision: 9369&lt;br /&gt;
&lt;br /&gt;
* bugfix: if zooming is turned off in {{Viewer2}}, segments are now correctly visible on the Y axis. This bug has existed since at least STx 4.2.&lt;br /&gt;
&lt;br /&gt;
==4.4.0==&lt;br /&gt;
&lt;br /&gt;
Released: 14 November 2017&lt;br /&gt;
&lt;br /&gt;
Revision: 9350&lt;br /&gt;
&lt;br /&gt;
Initial release.&lt;br /&gt;
&lt;br /&gt;
=4.3=&lt;br /&gt;
&lt;br /&gt;
==Features==&lt;br /&gt;
====Load or export parameters from super or sub segments====&lt;br /&gt;
Parameters from super segments or from sub segments can now be loaded into the selected segment. For example, if you have analysed a word and corrected the parameters, you can use these corrected parameters when viewing phoneme segments within the word. This is achieved by selecting &#039;super segment data only&#039; setting in the Viewer settings [[User_Guide/Spectrogram_and_Parameter_Viewer/Settings_Dialog#Parameter_IO_Configuration|Parameter IO Configuration]] dialog.&lt;br /&gt;
&lt;br /&gt;
It is possible to select which super/sub segment parameters should be used, filtering by time, attribute or ID.&lt;br /&gt;
&lt;br /&gt;
This feature is also available in the parameter export dialog.&lt;br /&gt;
&lt;br /&gt;
====Parameter setting summary====&lt;br /&gt;
A summary of the settings used for parameter analysis is now saved with the parameter in the project file. This information is displayed in the [[User_Guide/Workspace/Detail/Views/Parameter_View|Parameter View]].&lt;br /&gt;
&lt;br /&gt;
====Exact sample positioning in {{Viewer2}}====&lt;br /&gt;
&lt;br /&gt;
You can now select a position in the [[User_Guide/Spectrogram_and_Parameter_Viewer#Waveform_zoom_window|Waveform Zoom window]] in {{Viewer2}} and move the active time cursor to that position using the hotkey &#039;1&#039;. This is useful for exact positioning of the time cursors when segmenting, for example, words.&lt;br /&gt;
&lt;br /&gt;
==4.3.10==&lt;br /&gt;
&lt;br /&gt;
Released: 26. January 2018&lt;br /&gt;
&lt;br /&gt;
Revision: 9407&lt;br /&gt;
*bugfix: do not allow user to give a profile a name including blanks.&lt;br /&gt;
*bugfix: renaming spectrum profiles (removing blanks)&lt;br /&gt;
*bugfix: the correct most recently entered value in a listctrl is now saved (not the last in the list).&lt;br /&gt;
*bugfix: passing delete, insert and back keys to static control.&lt;br /&gt;
*bugfix: &#039;spexl*.hotkeys.default&#039; &#039;retisimo.sts&#039; &#039;retisimo_*.sts&#039; &#039;HRTF_II_new.txt&#039; &#039;downsample.sts&#039; files are now being copied too (bug introduced in r8789)&lt;br /&gt;
*bugfix: removing extraneous / from Editing segments help URL&lt;br /&gt;
*bugfix: combobox entries with underliners retain their underliners now in the workspace detail (reported by Anton Baotic), and in Spexl.&lt;br /&gt;
&lt;br /&gt;
==4.3.9==&lt;br /&gt;
&lt;br /&gt;
Released: 23. November 2017&lt;br /&gt;
&lt;br /&gt;
Revision: 9363&lt;br /&gt;
&lt;br /&gt;
* bugfix: if zooming is turned off in {{Viewer2}}, segments are now correctly visible on the Y axis. This bug has existed since at least STx 4.2.&lt;br /&gt;
&lt;br /&gt;
==4.3.8==&lt;br /&gt;
&lt;br /&gt;
Released: 14. November 2017&lt;br /&gt;
&lt;br /&gt;
Revision: 9347&lt;br /&gt;
&lt;br /&gt;
* bugfix: zooming and replotting in the xplot class now working&lt;br /&gt;
* feature: user is now informed about bugfixes in current release, and/or new major/minor releases. This means that you will be informed of bug fixes for your version of STx, not just for the newest STx.&lt;br /&gt;
&lt;br /&gt;
==4.3.7==&lt;br /&gt;
&lt;br /&gt;
Released: 19. October 2017&lt;br /&gt;
&lt;br /&gt;
Revision: 9328&lt;br /&gt;
&lt;br /&gt;
* bugfix: stx no longer crashing on y zoom (bug introduced in r9293 - STx 4.3.6)&lt;br /&gt;
* bugfix: binary_file_example.sts now working&lt;br /&gt;
* bugfix: if navigating in file dialog using the keyboard, the edit box is now updated with the selected file.&lt;br /&gt;
&lt;br /&gt;
==4.3.6==&lt;br /&gt;
&lt;br /&gt;
Released 25. September 2017&lt;br /&gt;
&lt;br /&gt;
Revision: 9297&lt;br /&gt;
&lt;br /&gt;
* bugfix: the spectrogram dataset now frees up memory once dataset is drawn&lt;br /&gt;
* bugfix: adding specials folder to installer&lt;br /&gt;
&lt;br /&gt;
==4.3.5==&lt;br /&gt;
&lt;br /&gt;
Released: 6. September 2017&lt;br /&gt;
&lt;br /&gt;
Revision: 9286&lt;br /&gt;
&lt;br /&gt;
* bugfix: auto-saving the project file no longer leaks memory&lt;br /&gt;
* bugfix: editing segments in the workspace now uses the segment template by default&lt;br /&gt;
* bugfix: a backup copy of the project file is now made when saving&lt;br /&gt;
* bugfix: lists with one item are now selectable with the keyboard&lt;br /&gt;
* bugfix: listview column width now calculated with correct font&lt;br /&gt;
* bugfix: default values from aseg templates now written to new segment before editing&lt;br /&gt;
* bugfix: correct default value written to segment, even if attribute value starts with a number&lt;br /&gt;
* bugfix: combobox entries no longer replacing underlines&lt;br /&gt;
&lt;br /&gt;
==4.3.4==&lt;br /&gt;
&lt;br /&gt;
Released: 3. July 2017&lt;br /&gt;
&lt;br /&gt;
Revision: 9214&lt;br /&gt;
&lt;br /&gt;
====Features====&lt;br /&gt;
* feature: the [[Programmer_Guide/Macro_Library/CONLOG|conlog]] command can now log to a file.&lt;br /&gt;
====Bug Fixes====&lt;br /&gt;
* bugfix: the conlog savedata command no longer fails silently if the file cannot be created.&lt;br /&gt;
&lt;br /&gt;
==4.3.3==&lt;br /&gt;
&lt;br /&gt;
Released: 19. June 2017&lt;br /&gt;
&lt;br /&gt;
Revision: 9185&lt;br /&gt;
&lt;br /&gt;
====Bug Fixes====&lt;br /&gt;
* bugfix: segment address in the Transcription script is now rounded to 10th of a millisecond (4 decimal places) rather than 1 millisecond.&lt;br /&gt;
* bugfix: saving the project file now resets the automatic save timer.&lt;br /&gt;
* bugfix: the Transcription, Import Word List and Reorder Word List should now be working correctly again.&lt;br /&gt;
====Features====&lt;br /&gt;
* feature: new script: [[User_Guide/Scripts/Anonymize.sts|Anonymize.sts]] - anonymize segments (attributes and signal) - requested by the ARI phonetics group&lt;br /&gt;
* feature: adding option to automatically save every minute.&lt;br /&gt;
&lt;br /&gt;
==4.3.2==&lt;br /&gt;
&lt;br /&gt;
Released: 13. June 2017&lt;br /&gt;
&lt;br /&gt;
Revision: 9170&lt;br /&gt;
&lt;br /&gt;
====Bug Fixes====&lt;br /&gt;
* bugfix: The segment &#039;Signal.All&#039; is now created when a new sound file is imported. This bug was introduced in version 4.3.1.&lt;br /&gt;
* bugfix: the &#039;wave-only&#039; view in the Transcription script is now available again.&lt;br /&gt;
&lt;br /&gt;
==4.3.1==&lt;br /&gt;
&lt;br /&gt;
Released: 8. June 2017&lt;br /&gt;
&lt;br /&gt;
Revision: 9165&lt;br /&gt;
&lt;br /&gt;
====Bug Fixes====&lt;br /&gt;
&lt;br /&gt;
* bugfix: clicking SPExL graph whilst editing segment in the segment list now draws the segment in the graph (previously needed an explicit refresh to draw the segment).&lt;br /&gt;
* bugfix: the workspace is now saved even if the path contains spaces (bug introduced in r8843)&lt;br /&gt;
* bugfix: searching using keyboard in listctrl now working in correct order (not backwards). Bug introduced in r9002.&lt;br /&gt;
* bugfix: zooming out in SPExL on the y axis with Ctrl+Subtract is now working correctly. This appears to have been around since at least r4442 (STx 3.9)&lt;br /&gt;
* bugfix: y position of cursors is now retained when zooming&lt;br /&gt;
* bugfix: Viewers/SPEXL create segments at selected address and not with P=0 and L=0&lt;br /&gt;
* bugfix: maximising whilst spectrogram is drawing no longer leaves the spectrogram in unfinished version on screen (set new &#039;m_bRecalculate&#039; flag to force recalculation/redraw when dataset sync has finished).&lt;br /&gt;
&lt;br /&gt;
==4.3.0==&lt;br /&gt;
&lt;br /&gt;
Released: April 2017&lt;br /&gt;
&lt;br /&gt;
Revision: 9149&lt;br /&gt;
&lt;br /&gt;
=Older Versions=&lt;br /&gt;
&lt;br /&gt;
==4.2==&lt;br /&gt;
====4.2.23====&lt;br /&gt;
Released: 24 August 2017&lt;br /&gt;
Revision: 9264&lt;br /&gt;
* BUGFIX: correct font used for calculation of formant dialog column size in {{Viewer2}}&lt;br /&gt;
&lt;br /&gt;
====4.2.22====&lt;br /&gt;
Released: 25 January 2017&lt;br /&gt;
Revision: 9064&lt;br /&gt;
* BUGFIX: The following wildcard string comparison will now match:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
if &#039;*ha&#039; =SI &#039;haha&#039; then&lt;br /&gt;
   // it&#039;s a match :-)&lt;br /&gt;
end&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
* BUGFIX: Changed behavior of comparisons in FIND-TABLE/XML: if a field/attribute is not defined all &amp;quot;notequal&amp;quot; and &amp;quot;notmatching&amp;quot; operators evaluates to &amp;quot;true&amp;quot; and all others to &amp;quot;false&amp;quot;&lt;br /&gt;
&lt;br /&gt;
====4.2.21====&lt;br /&gt;
Released: 9 January 2017&lt;br /&gt;
Revision: 9023&lt;br /&gt;
* BUGFIX: Edit segment dialog now referencing correct segment attributes (bug introduced in r8852 - STx 4.2.15)&lt;br /&gt;
&lt;br /&gt;
====4.2.20====&lt;br /&gt;
Released: 23 December 2016&lt;br /&gt;
* FEATURE: STx now informs the user of available update via the About dialog.&lt;br /&gt;
* BUGFIX: Removing non-existent files from STX.INI when loading&lt;br /&gt;
* BUGFIX: About dialog no long blocking workspace file.&lt;br /&gt;
&lt;br /&gt;
====4.2.19====&lt;br /&gt;
Released: 12th December 2016&lt;br /&gt;
* BUGFIX: Ctrl+U no longer the same as Ctrl+Shift+U in, e.g., signal view.&lt;br /&gt;
* BUGFIX: Generating correct hotkey string for Ctrl+Shift+&amp;lt;key&amp;gt;&lt;br /&gt;
* BUGFIX: Switching from long to short list of segments in the workspace should no longer lead to a blank detail.&lt;br /&gt;
* BUGFIX: Transcription left cursor right bitmap now correct image&lt;br /&gt;
* BUGFIX: Fixed bug in Viewer2 where setting the range did not work under all circumstances.&lt;br /&gt;
* BUGFIX: Focus moving with selection for listview key navigation and single selection.&lt;br /&gt;
* BUGFIX: Copy attributes in the Workspace overview now includes first value (bug introduced in r8297)&lt;br /&gt;
* BUGFIX: Checkbox size increased because some strings were being cut off.&lt;br /&gt;
* BUGFIX: Show Find Dialog menu now checked if Show Find Dialog is visible&lt;br /&gt;
* BUGFIX: Occasional crash in {{Viewer2}} fixed by removing use of static with CString (r9010,r9012).&lt;br /&gt;
&lt;br /&gt;
====4.2.18====&lt;br /&gt;
Released: 27 October 2016&lt;br /&gt;
&lt;br /&gt;
* FEATURE: adding PCM info to edit sound file dialog for editing existing project files too.&lt;br /&gt;
* FEATURE/BUGFIX: Improved listview keyboard handling (up/down, page up, page down). Disabled scrolling of listview whilst editing.&lt;br /&gt;
* BUGFIX: viewer2 no longer hangs if saved rmsb-data are loaded and displayed with autoscale-option&lt;br /&gt;
* BUGFIX: detail sequence view now using Ctrl+Shift+U to move selected entry up and Ctrl+Shift+D to move selected entry down (rather than Ctrl+UP and Ctrl+Down - which conflict with internal listview keyboard handling).&lt;br /&gt;
* BUGFIX: bscript log window no longer jumps in front of SPExL window when a dialog is opened.&lt;br /&gt;
* FEATURE: releases are now digitally signed by the Österreichische Akademie der Wissenschaften&lt;br /&gt;
* NOTE: the pole-zero sectioner in the {{Viewer2}} application is extremely slow for high frame rates. We are working on improving it.&lt;br /&gt;
&lt;br /&gt;
====4.2.17====&lt;br /&gt;
Released: 26 September 2016&lt;br /&gt;
* BUGFIX: Transcription (SPExL) segment list handling working correctly again (bug introduced in 4.2.16)&lt;br /&gt;
* BUGFIX: Moving selected sequence entry up/down with keyboard now uses the hotkeys Ctrl+Shift+U and Ctrl+Shift+D (rather than Ctrl+Up and Ctrl+Down) and now works as expected.&lt;br /&gt;
&lt;br /&gt;
====4.2.16====&lt;br /&gt;
Released: 30 August 2016&lt;br /&gt;
* Support for Windows XP has been removed.&lt;br /&gt;
* FEATURE: the XPLOT member &amp;quot;FORALLGRAPHS&amp;quot; is now a public function.&lt;br /&gt;
* FEATURE: the XGRAPH function Zoom -&amp;gt; X-Sync was aded to apply the x-zoom of the current graph across all other graphs.&lt;br /&gt;
* BUGFIX: the Automatic Segment Names dialog no longer allows invalid segment names.&lt;br /&gt;
* BUGFIX: The palette import/export are working again.&lt;br /&gt;
* BUGFIX: The Application and Setup tree now correctly stores it&#039;s state.&lt;br /&gt;
* BUGFIX: Keyboard focus no longer disappears after pressing enter in the Workspace Detail.&lt;br /&gt;
* BUGFIX: The selected entry no longer centers itself after editing.&lt;br /&gt;
* BUGFIX: The Transcription script SPExL now plays single selections every time (not every second time).&lt;br /&gt;
* BUGFIX: Tabbing through the entries in the Workspace Detail no longer goes backwards instead of forwards.&lt;br /&gt;
&lt;br /&gt;
====4.2.15====&lt;br /&gt;
Released: unreleased&lt;br /&gt;
* FEATURE: Improved sound file export performance&lt;br /&gt;
* BUGFIX: The File-&amp;gt;Workspace-&amp;gt;Save As workspace menu command is now working (bug introduced in r4092)&lt;br /&gt;
* BUGFIX: parameter and function now drawing (invalidating) correctly if being set whilst zoomed in.&lt;br /&gt;
* BUGFIX: parameter export dialog no longer needs manual refresh (group box is now transparent - uses WS_EX_TRANSPARENT)&lt;br /&gt;
&lt;br /&gt;
====4.2.14====&lt;br /&gt;
Released: 18 January 2016&lt;br /&gt;
* Minimising GDI use&lt;br /&gt;
* Projects files are now associated with {{STX}}&lt;br /&gt;
* BUGFIX: one memory leak fixed&lt;br /&gt;
* BUGFIX: all help menus associated with mediawiki online help&lt;br /&gt;
====4.2.13====&lt;br /&gt;
Released: 22 December 2015&lt;br /&gt;
* Default help file now the STx Wiki ([https://www.kfs.oeaw.ac.at/stx/docs/wiki/ https://www.kfs.oeaw.ac.at/stx/docs/wiki/]).&lt;br /&gt;
* BUGFIX: Find Segments dialog no longer uses ASet search criteria for ASeg search criteria when ASeg criteria is empty&lt;br /&gt;
* BUGFIX: Find Segments dialog can now search for segments within a time range.&lt;br /&gt;
* BUGFIX: assigning number values to an integer field using table[,field] := eval $#num1 + $#num2 syntax now works&lt;br /&gt;
* BUGFIX: growing table by assigning no longer corrupts heap.&lt;br /&gt;
*BUGFIX: force context menu to display within dialog window, even if called directly from shell with 0,0 coordinates.&lt;br /&gt;
*BUGFIX: edit segment dialog is now initialised with the segment channel&lt;br /&gt;
*BUGFIX: context menu now rebuilt before being displayed to ensure that it reflects current state.&lt;br /&gt;
&lt;br /&gt;
====4.2.12====&lt;br /&gt;
Released: 4 December 2015&lt;br /&gt;
* Improved spectrogram &#039;overview&#039; visualisation.&lt;br /&gt;
&lt;br /&gt;
====4.2.11====&lt;br /&gt;
&lt;br /&gt;
Released: 16 November 2015&lt;br /&gt;
&lt;br /&gt;
* Added pole-zero to {{Viewer2}} Sectioner&lt;br /&gt;
* Bugfix: pane sizes are no longer reset in {{V2}} when sectioner settings dialog is closed.&lt;br /&gt;
* Bugfix: list view control header now correct size and clickable, and entries now selectable with one, rather than two clicks.&lt;br /&gt;
* Bugfix: copied attributes are no longer preceded by blank line&lt;br /&gt;
&lt;br /&gt;
====4.2.9====&lt;br /&gt;
&lt;br /&gt;
Released: 16 October 2015&lt;br /&gt;
&lt;br /&gt;
* Bugfix: saving to PNG working again&lt;br /&gt;
&lt;br /&gt;
====4.2.8====&lt;br /&gt;
&lt;br /&gt;
Released: 5 October 2015&lt;br /&gt;
&lt;br /&gt;
* Bugfix: the pole-zero method spectrogram overlay is now working correctly.&lt;br /&gt;
&lt;br /&gt;
====4.2.5====&lt;br /&gt;
&lt;br /&gt;
Released: 30 September 2015&lt;br /&gt;
&lt;br /&gt;
* Feature: the pole-zero method is now available as an overlay in the spectrogram and parameter viewer&#039;s spectrogram graph. Note however, that this is not bug free, so please wait for 4.2.6 if you&#039;re interested in this feature.&lt;br /&gt;
&lt;br /&gt;
====4.2.4====&lt;br /&gt;
&lt;br /&gt;
Released: 10 September 2015&lt;br /&gt;
&lt;br /&gt;
* Bugfix: added missing Visual C++ 2013 Redistributable Package&lt;br /&gt;
&lt;br /&gt;
====4.2.3====&lt;br /&gt;
&lt;br /&gt;
Released: 26 August 2015&lt;br /&gt;
&lt;br /&gt;
* Metasegment size modification now locks modification mode&lt;br /&gt;
&lt;br /&gt;
====4.2.2====&lt;br /&gt;
&lt;br /&gt;
Released: 15 June 2015&lt;br /&gt;
&lt;br /&gt;
* Viewer print font now legible&lt;br /&gt;
&lt;br /&gt;
====4.2.0====&lt;br /&gt;
&lt;br /&gt;
Released: February 2015&lt;br /&gt;
&lt;br /&gt;
=====Features=====&lt;br /&gt;
&lt;br /&gt;
* The speed of audio playback can now be set in the project interface&lt;br /&gt;
* The menu shell item has been given the alias &#039;DIALOG&#039; and will now be refered to as such in the documentation (r8578)&lt;br /&gt;
* Pole-Zero [[Programmer_Guide/SPU_Reference/PZTF|SPAtom]] and [[Programmer Guide/Command Reference/EVAL/pztf|EVAL]] methods are now available and are integrated into the [[User_Guide/Spectrogram_and_Parameter_Viewer/Methods/Polezero|Spectrogram and Parameter viewer]].&lt;br /&gt;
* Support for Windows 2000/XP has been removed&lt;br /&gt;
* Pole-Zero SPU and EVAL methods&lt;br /&gt;
* Multiple bug fixes&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==4.0==&lt;br /&gt;
&lt;br /&gt;
===4.0.0===&lt;br /&gt;
&lt;br /&gt;
Released: 2012&lt;br /&gt;
&lt;br /&gt;
==3.9==&lt;br /&gt;
&lt;br /&gt;
3.9.4&lt;br /&gt;
&lt;br /&gt;
Released: 15th October 2009&lt;br /&gt;
&lt;br /&gt;
* BUGFIX: real-time analyser drawing more smoothly&lt;br /&gt;
&lt;br /&gt;
3.9.3&lt;br /&gt;
&lt;br /&gt;
Released: 16th September 2009&lt;br /&gt;
&lt;br /&gt;
* BUGFIX: sequences now being saved.&lt;br /&gt;
&lt;br /&gt;
3.9.2&lt;br /&gt;
&lt;br /&gt;
Released: 30th July 2009&lt;br /&gt;
&lt;br /&gt;
* BUGFIX: segments no longer duplicated in un-linked datasets when importing metadata.&lt;br /&gt;
* BUGFIX: user-defined amplitude range working in waveform viewer&lt;br /&gt;
* BUGFIX: spectrogram amplitude floor now correct after using settings dialog&lt;br /&gt;
* BUGFIX: recorder application now recording&lt;br /&gt;
&lt;br /&gt;
3.9.1&lt;br /&gt;
&lt;br /&gt;
Released: 3rd July 2009&lt;br /&gt;
&lt;br /&gt;
* BUGFIX: cmenu check/uncheck working for consecutive items&lt;br /&gt;
* BUGFIX: text files items and the load command can now read files encoded with an &amp;quot;FE FF&amp;quot; byte order mark (encoded in UTF-16BE). The error message &amp;quot;unsupported byte order mark&amp;quot; is returned if a UTF-32BE or UTF-32LE byte order mark is found.Supported encodings specified using a byte order mark: UTF-8, UTF-16LE, UTF-16BE&amp;lt;br /&amp;gt; Other supported encodings:windows-1252&lt;br /&gt;
* BUGFIX: wave files with chunks defined after the data chunk now have the correct length.&lt;br /&gt;
* BUGFIX: saving dataset faster&lt;br /&gt;
* BUGFIX: &amp;quot;load soundfile&amp;quot; options should no longer conflict with each other&lt;br /&gt;
* BUGFIX: prevent stack overflow in XML files with many siblings (~ 20000)&lt;br /&gt;
* BUGFXI: closing rtanalyser whilst it is running now exits shell correctly (without leaving ghost process).&lt;br /&gt;
&lt;br /&gt;
3.9.0&lt;br /&gt;
&lt;br /&gt;
Released: 15th April 2009&lt;br /&gt;
&lt;br /&gt;
Graphical User Interface&lt;br /&gt;
&lt;br /&gt;
General&lt;br /&gt;
&lt;br /&gt;
S_TOOLS-STx now supports all fonts available on the host system.&lt;br /&gt;
&lt;br /&gt;
Comboboxes in ASegTemplates can now be made editable using the flag &amp;lt;span class=&amp;quot;stxmacrocommandoption-character&amp;quot;&amp;gt;/E&amp;lt;/span&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
You can enable/disable runtime error reporting in the Log Control dialog. It is disabled by default, and should only be enabled if you are having problems with S_TOOLS-STx.&lt;br /&gt;
&lt;br /&gt;
Workspace&lt;br /&gt;
&lt;br /&gt;
The segment list can now be edited in the Workspace.&lt;br /&gt;
&lt;br /&gt;
A summary of existing parameters can now be displayed in the segment list (see the Display and Layout Settings dialog).&lt;br /&gt;
&lt;br /&gt;
The Workspace Detail cells can now display text in multiple lines (see the Display and Layout Settings dialog).&lt;br /&gt;
&lt;br /&gt;
Spectrogram &amp;amp;amp; Parameters Viewer&lt;br /&gt;
&lt;br /&gt;
The Spectrogram &amp;amp;amp; Parameters Viewer can now display a harmonic cursor in the spectrogram graph.&lt;br /&gt;
&lt;br /&gt;
The Spectrogram &amp;amp;amp; Parameters Viewer spectrogram method Wavelet has been extended, and a new Cohen&#039;s class distribution method has been implemented.&lt;br /&gt;
&lt;br /&gt;
An amplitude legend is now available in spectrogram plots (via the context menu).&lt;br /&gt;
&lt;br /&gt;
DSP&lt;br /&gt;
&lt;br /&gt;
The band-pass filters now have a window parameter.&lt;br /&gt;
&lt;br /&gt;
Toolbox&lt;br /&gt;
&lt;br /&gt;
The toolbox AutoSeg is available in Spectrogram &amp;amp;amp; Parameters Viewer (if loaded) to automatically segment using peaks, clicks or pauses.&lt;br /&gt;
&lt;br /&gt;
A range of Klatt speech synthesis and resynthesis toolbox functions are available.&lt;br /&gt;
&lt;br /&gt;
The toolbox file &#039;SegmentImEx.sts&#039; implements toolbox functions to import and export segments in the [http://www.fon.hum.uva.nl/praat/ PRAAT] file format. These functions are available in the Workspace.&lt;br /&gt;
&lt;br /&gt;
Scripts&lt;br /&gt;
&lt;br /&gt;
A script specifically designed for transcription and annotation has been developed and included in the default installation of S_TOOLS-STx. The script can be found in the script directory in the file SPExL.sts. There is also a new entry called transcription in the Workspace script tree, which calls the default segmentation routine. The SPExL macro documentation is still being written.&lt;br /&gt;
&lt;br /&gt;
Macro Language&lt;br /&gt;
&lt;br /&gt;
General&lt;br /&gt;
&lt;br /&gt;
Modal window handling has now been moved to the NEW DISPLAY command. Use the option &amp;lt;span class=&amp;quot;stxmacrocommandoption-character&amp;quot;&amp;gt;/O=$#ownerDisplay&amp;lt;/span&amp;gt; to set the owner (which is behind the new display in the z-order. You may also use the option &amp;lt;span class=&amp;quot;stxmacrocommandoption-character&amp;quot;&amp;gt;/Modal&amp;lt;/span&amp;gt; to specify that the owner should be disabled whilst the new display exists.&lt;br /&gt;
&lt;br /&gt;
The NEW command can create objects which are protected from deletion (option &amp;lt;span class=&amp;quot;stxmacrocommandoption-character&amp;quot;&amp;gt;/U|u&amp;lt;/span&amp;gt;).&lt;br /&gt;
&lt;br /&gt;
The command STXCONSTANTS now supports the keywords BITMAPS and BUTTONS.&lt;br /&gt;
&lt;br /&gt;
The command TRANSLATE can now translate the contents of a variable or table.&lt;br /&gt;
&lt;br /&gt;
The command EXIT -xLevel now returns to the first macro defining the label label &amp;quot;OnExitAll&amp;quot; or to the toplevel macro (1st called macro) (rather than to the first macro where the variable #EXITLEVEL = xLevel).&lt;br /&gt;
&lt;br /&gt;
The new command TOKEN, an extended form of the command WORD, can tokenise a string using the specified delimiter.&lt;br /&gt;
&lt;br /&gt;
The new command TRIM can be used to trim characters from the beginning and end of a string.&lt;br /&gt;
&lt;br /&gt;
The new command QUOTE can quote all special characters in a string.&lt;br /&gt;
&lt;br /&gt;
The new command LINELENGTH, although similar to LENGTH, returns the length of a line including delimiters.&lt;br /&gt;
&lt;br /&gt;
The NAME command can now check XML attributes and S_TOOLS-STx XML IDs for syntactical validity. The NAME command can also return a UNC file name for a file on a mapped drive. This is useful, for example, for making DataSets portable in a network environment.&lt;br /&gt;
&lt;br /&gt;
The new command ARG can be used to retrieve macro arguments.&lt;br /&gt;
&lt;br /&gt;
The IREF command supports the option &amp;lt;span class=&amp;quot;stxmacrocommandoption-character&amp;quot;&amp;gt;/I&amp;lt;/span&amp;gt; to simplify and suppress certain error messages.&lt;br /&gt;
&lt;br /&gt;
The global variable @REPORTRUNTIMEERRORS can be set to 1 to display a dialog every time a error occurs when processing a command. Many commands can now take an option specifying that warnings should be generated, rather than errors (DRIVE, LOAD, UNLOAD, SET file LOAD|SAVE|STATUS|DELETE|RENAME|COPY|POSITION), READ, SEGMENT). If set to specify warnings, they will not cause a runtime error.&lt;br /&gt;
&lt;br /&gt;
The READ command (and its variants READSTR, READTAB and READVAR) have a new option &amp;lt;span class=&amp;quot;stxmacrocommandoption-character&amp;quot;&amp;gt;/E&amp;lt;/span&amp;gt; which can be used to escape characters in the input from being used as separators.&lt;br /&gt;
&lt;br /&gt;
Format strings can now add a new line character (\n), using the tag %n. The standard C format tags %x and %X are now supported.&lt;br /&gt;
&lt;br /&gt;
The KEYWORD command now supports the option &amp;lt;span class=&amp;quot;stxmacrocommandoption-character&amp;quot;&amp;gt;/F&amp;lt;/span&amp;gt; which prevents abbreviations from being found and &amp;lt;span class=&amp;quot;stxmacrocommandoption-character&amp;quot;&amp;gt;/C&amp;lt;/span&amp;gt; to make the comparison case sensitive.&lt;br /&gt;
&lt;br /&gt;
The new commands SYSTEMCALL and SYSTEMCALLX are variants of SYSTEM and SYSTEMX which return warnings rather than errors on failure.&lt;br /&gt;
&lt;br /&gt;
The command TGET can now return elapsed milliseconds, when the new option &amp;lt;span class=&amp;quot;stxmacrocommandoption-character&amp;quot;&amp;gt;/ms&amp;lt;/span&amp;gt; is used.&lt;br /&gt;
&lt;br /&gt;
The NAME command, when used with the new UNC subcommand can convert a file path on a mapped drive to its UNC equivalent. This help keep project files portable when accessed from multiple computers (E.g. when the z drive is mapped to \\server\data, the command &amp;quot;name &#039;z:\ds.xml&#039; unc&amp;quot; will return &amp;quot;\\server\data\ds.xml&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
The READ commands have a new option &amp;lt;span class=&amp;quot;stxmacrocommandoption-character&amp;quot;&amp;gt;/T&amp;lt;/span&amp;gt; which prevents arguments from being trimmed.&lt;br /&gt;
&lt;br /&gt;
The macro WINDOWSIZEDLG can be used to allow a user to set a window&#039;s size (width and height in pixels).&lt;br /&gt;
&lt;br /&gt;
SPAtoms&lt;br /&gt;
&lt;br /&gt;
The new SPAtom MIXALL mixes up to eight input arrays/vectors into an output array/vector with gain scaling.&lt;br /&gt;
&lt;br /&gt;
The new SPAtom WLANA performs a general wavelet analysis, and the SPAtom CCANA implement a Cohen Class distribution.&lt;br /&gt;
&lt;br /&gt;
The SPAtoms PVANA and PVSYN no accept a windowing function parameter.&lt;br /&gt;
&lt;br /&gt;
The new SPAtom KLATTSYN can be used to generate synthesised speech.&lt;br /&gt;
&lt;br /&gt;
EVAL command&lt;br /&gt;
&lt;br /&gt;
The EVAL command has the following new subcommands:&amp;lt;br /&amp;gt; formants - a new formant tracking algorithm.&amp;lt;br /&amp;gt; limit, limitlow, limithigh - limits values to within a range of values.&amp;lt;br /&amp;gt; min, max - can receive more than one parameter.&amp;lt;br /&amp;gt; cdot, ctrn, conj - complex dot product, matrix transposition and conjugation.&amp;lt;br /&amp;gt; f0ac - F0 detection using autocorrelation.&amp;lt;br /&amp;gt; The EVAL command now supports numerical (e.g. &amp;amp;gt;=), logical (e.g. &amp;amp;amp;&amp;amp;amp;) and ternary (e.g. eval $#a &amp;amp;gt; $#b ? $#a : $#b).&lt;br /&gt;
&lt;br /&gt;
The Macro Library&lt;br /&gt;
&lt;br /&gt;
The DATASETCMD has a new subcommand AUTOSAVE with which you can turn the DataSet autosave feature on and off.&lt;br /&gt;
&lt;br /&gt;
The GRAPHSETUP macro.&lt;br /&gt;
&lt;br /&gt;
The new CGRAPHSETUP command GRAPHLEGEND displays an amplitude legend in a spectrogram plot.&lt;br /&gt;
&lt;br /&gt;
The new CGRAPHSETUP command GETCOLORPALETTE retrieves the print or screen palette in an extended table.&lt;br /&gt;
&lt;br /&gt;
The new CGRAPHSETUP command GETPROFILELIST returns a simple table with a list of color profiles defined in the settings file (S_TOOLS-STx INI).&lt;br /&gt;
&lt;br /&gt;
===== Classes =====&lt;br /&gt;
&lt;br /&gt;
BXMLDoc class&lt;br /&gt;
&lt;br /&gt;
The SETELEMENT function can now take a table containing attribute/value pairs.&lt;br /&gt;
&lt;br /&gt;
CMenu class&lt;br /&gt;
&lt;br /&gt;
The new CMenu function AddToolBoxMenu adds the standard toolbox menu items to the menu.&lt;br /&gt;
&lt;br /&gt;
XPlot class&lt;br /&gt;
&lt;br /&gt;
When constructing an XPlot instance, an owner window may now be specified.&lt;br /&gt;
&lt;br /&gt;
===== Shell Items =====&lt;br /&gt;
&lt;br /&gt;
Dialog Item&lt;br /&gt;
&lt;br /&gt;
The dialog edit control has a new option &#039;&amp;lt;span class=&amp;quot;stxmacrocommandoption-character&amp;quot;&amp;gt;/F&amp;lt;/span&amp;gt;&#039; which forwards KEY messages to the shell.&lt;br /&gt;
&lt;br /&gt;
There are now four &#039;types&#039; of edit control and a host of new parameters, which means it can display syntax highlighting, be used as a command line interface, etc.&lt;br /&gt;
&lt;br /&gt;
A listview&#039;s cells can now be editable. The option &amp;lt;span class=&amp;quot;stxmacrocommandoption-character&amp;quot;&amp;gt;/E&amp;lt;/span&amp;gt; which must be set for a ListView to be editable. The message CELLEDITED is sent if it is editable and its contents has been changed. If the user cancels editing, the message CELLCANCELLED is sent to the shell. If editing is ended because the user presses &amp;lt;span class=&amp;quot;stxhotkey&amp;quot;&amp;gt;TAB&amp;lt;/span&amp;gt; or &amp;lt;span class=&amp;quot;stxhotkey&amp;quot;&amp;gt;Shift TAB&amp;lt;/span&amp;gt;, the CELLEDITEDTAB or CELLEDITEDBACKTAB messages are sent. You can set the focus to a specific cell and enter editing mode using the new command SET dialogItem listviewIndex STARTEDIT.&lt;br /&gt;
&lt;br /&gt;
The listview now supports the &amp;lt;span class=&amp;quot;stxmacrocommandoption-character&amp;quot;&amp;gt;/F&amp;lt;/span&amp;gt; flag which forwards specific key types to the shell.&lt;br /&gt;
&lt;br /&gt;
The listview supports a new option /R=n, which determines the maximum number of lines of text which can be displayed in the listview.&lt;br /&gt;
&lt;br /&gt;
The new attribute !FOREGROUND returns 1 if the dialog window is in the foreground, 0 if it is not and -1 if the command fails in some way.&lt;br /&gt;
&lt;br /&gt;
The new dialog attribute !EDITING can be used to ascertain if a listview is currently being edited or not.&lt;br /&gt;
&lt;br /&gt;
File Item&lt;br /&gt;
&lt;br /&gt;
The NEW FILE command can now take the option &amp;lt;span class=&amp;quot;stxmacrocommandoption-character&amp;quot;&amp;gt;/S&amp;lt;/span&amp;gt;, to suppress error messages on creation failure.&lt;br /&gt;
&lt;br /&gt;
The new file item command COPY &amp;lt;span class=&amp;quot;stxmacrocommandoption-character&amp;quot;&amp;gt;/Z&amp;lt;/span&amp;gt; can be used to encrypt/decrypt a file, including optional password protection.&lt;br /&gt;
&lt;br /&gt;
The new command TRYLOCK will try to get a lock on the file but will not block the script.&lt;br /&gt;
&lt;br /&gt;
The !CHANGED attribute can now be explicitly set or reset. This functionality is new, in as much as versions previous to 3.9.0 could only reset the attribute. The meaning of assigning &#039;1&#039; to the attribute has changed, since assigning &#039;1&#039; now *sets* the attribute, whilst assigning &#039;0&#039; resets the attribute.&lt;br /&gt;
&lt;br /&gt;
A new file item type - the GDX file item - has been developed, which can be used to create files containing graphic data which are passed directly to a graph item. GDX stands for &amp;quot;graphical data exchange&amp;quot;. Currently, the spectrogram is the only plot which supports the GDX file type.&lt;br /&gt;
&lt;br /&gt;
Graph Item&lt;br /&gt;
&lt;br /&gt;
The command ADDMARKER can now be used to add a &#039;Box and Whiskers&#039; metasegment.&lt;br /&gt;
&lt;br /&gt;
The metasegment font can be specified on an individual basis using the ADDMARKER command.&lt;br /&gt;
&lt;br /&gt;
A metasegment may be told not to change color on selection. This is only available using the &amp;quot;SET graph ADDMARKER table&amp;quot; command with the parameter &amp;quot;invertSelected&amp;quot; set to &amp;quot;true&amp;quot; if the metasegment color should be inverted whilst selected or &amp;quot;false&amp;quot; if not. The default is &amp;quot;true&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
The key used to make a metasegment moveable can now be set using a &#039;modifyKeys&#039; entry in the ADDMARKER table parameter.&lt;br /&gt;
&lt;br /&gt;
A simple marker can now be displayed as a single vertical line (option &amp;lt;span class=&amp;quot;stxmacrocommandoption-character&amp;quot;&amp;gt;/M&amp;lt;/span&amp;gt;).&lt;br /&gt;
&lt;br /&gt;
The command OVERVIEW, which toggles between the &#039;view&#039; and &#039;overview&#039; modes, has been documented.&lt;br /&gt;
&lt;br /&gt;
The graph supports a new attribute !CURSORMODE which returns the currently visible cursors, as set using the last CURSORMODE command.&lt;br /&gt;
&lt;br /&gt;
The width of a graph&#039;s border can now be set using new AXIS command parameters. The default border width is 1 pixel.&lt;br /&gt;
&lt;br /&gt;
The spectrogram palette can be changed at any time using the &amp;quot;SET graph Y * * SPECTROGRAM&amp;quot; function.&lt;br /&gt;
&lt;br /&gt;
The DATASETLOADED message is now sent when a graph finishes loading data for a particular input.&lt;br /&gt;
&lt;br /&gt;
Instance Item&lt;br /&gt;
&lt;br /&gt;
The new command TRYLOCK will try to get a lock on the instance but will not block the script.&lt;br /&gt;
&lt;br /&gt;
Table Item&lt;br /&gt;
&lt;br /&gt;
A table item connected to a ListView must be configured to be editable using the CONFIG command or the !EDITABLE attribute. The CONFIG command has also been extended to allow for a restrictive set of values to be specified for a table field. If specified, the ListView will display a combobox in this column for each entry. All parameters set using the CONFIG command can now be queried via table field attributes.&lt;br /&gt;
&lt;br /&gt;
The new command TRYLOCK will try to get a lock on the table but will not block the script.&lt;br /&gt;
&lt;br /&gt;
The command NEW TABLE supports a silent error flag.&lt;br /&gt;
&lt;br /&gt;
A table field can now display multirow entries, if the !MULTIROW attribute is set to 1, or the CONFIG command multirow parameter is set to ON.&lt;br /&gt;
&lt;br /&gt;
The last user input for a particular column can now be used as the default for that column using the CONFIG command&#039;s setuserdefault parameter.&lt;br /&gt;
&lt;br /&gt;
The DEFINE command can now be used to rename an existing field.&lt;br /&gt;
&lt;br /&gt;
Wave Item&lt;br /&gt;
&lt;br /&gt;
The wave item now supports the new attribute !PLAYSRATE which can be used to return the sampling rate currently used to for playback or set a new sampling rate for playback.&lt;br /&gt;
&lt;br /&gt;
=== Changes ===&lt;br /&gt;
&lt;br /&gt;
Changes in S_TOOLS-STx &amp;amp;lt;CURRENT_VERSION&amp;amp;gt;:&lt;br /&gt;
&lt;br /&gt;
Graphical User Interface&lt;br /&gt;
&lt;br /&gt;
F0 Test, F0Lookup, Amplitude Spectrum Statistics&lt;br /&gt;
&lt;br /&gt;
The F0 Test, F0 Lookup and Amplitude Spectrum Statistics functions in the Spectrogram &amp;amp;amp; Parameters Viewer sectioner have been moved to the toolbox file SpectrumTB.sts.&lt;br /&gt;
&lt;br /&gt;
Macro Language&lt;br /&gt;
&lt;br /&gt;
UNLOAD command&lt;br /&gt;
&lt;br /&gt;
The command UNLOAD MACROCODE, UNLOAD SPUCODE and UNLOAD SOURCECODE take one parameter - the name of a sourcecode file (relative or absolute). The MACROCODE variant used to take a blank separated list of macro names and the SPUCODE version used to take a blank separated list of SPU names.&lt;br /&gt;
&lt;br /&gt;
Display and Dialog DROPFILE message&lt;br /&gt;
&lt;br /&gt;
The DROPFILE message sent to displays and dialogs when files are dropped onto them has been changed. The &amp;lt;span class=&amp;quot;stxmacrocommandparameter-character&amp;quot;&amp;gt;filePath&amp;lt;/span&amp;gt; parameter is not longer a string, but rather the id of a simple table with one absolute path per entry.&lt;br /&gt;
&lt;br /&gt;
Syntax&lt;br /&gt;
&lt;br /&gt;
The string &amp;quot;123 456&amp;quot; is no longer a valid number.&lt;br /&gt;
&lt;br /&gt;
=== Bug Fixes ===&lt;br /&gt;
&lt;br /&gt;
Bug fixes&lt;br /&gt;
&lt;br /&gt;
The waterfall graph now prints correctly.&lt;br /&gt;
&lt;br /&gt;
The BDataSet member function AddASet now selects the new audio set if adding the set succeeds (r5534).&lt;br /&gt;
&lt;br /&gt;
Shell commands using the return value RC now assign the value even if return code equals 0 (indicating success) (r5609).&lt;br /&gt;
&lt;br /&gt;
Spectrogram &amp;amp;amp; Parameters Viewer Sectioner copy to clipboard working again (r5625).&lt;br /&gt;
&lt;br /&gt;
The &#039;view&#039; graph mode now displays correctly when first drawn (r5643).&lt;br /&gt;
&lt;br /&gt;
The asterisk character * is now officially an invalid hotkey, rather than being one which doesn&#039;t work correctly (r5500).&lt;br /&gt;
&lt;br /&gt;
Loading an XML file which an unsupported character encoding now fails rather than asserting (r5614).&lt;br /&gt;
&lt;br /&gt;
The Spectrum viewer can now saving CEPST parameters (r6470).&lt;br /&gt;
&lt;br /&gt;
The color &#039;GRAY&#039; is now defined as the RGB value 96:96:96, which fixes the bug where cursors were invisible on a &#039;GRAY&#039; background (r6148).&lt;br /&gt;
&lt;br /&gt;
The &amp;quot;SET graph XSCALE&amp;quot; flag &amp;quot;/I&amp;quot; is now working (r6187).&lt;br /&gt;
&lt;br /&gt;
Using the correct normal/dual/tight phase vocoder pv filters (r5874).&lt;br /&gt;
&lt;br /&gt;
All valid number formats (including mmmE /-eee) can now be used in time-expressions (r5746).&lt;br /&gt;
&lt;br /&gt;
=== Corrections ===&lt;br /&gt;
&lt;br /&gt;
S_TOOLS-STx Version: 3.9&lt;br /&gt;
&lt;br /&gt;
A list of documentation corrections since the last release (3.7).&lt;br /&gt;
&lt;br /&gt;
The macro COBJ has been superseded by the COBJ class and no longer exists.&lt;br /&gt;
&lt;br /&gt;
The command SYSTEM MKDIR and SYSTEM RMDIR were undocumented.&lt;br /&gt;
&lt;br /&gt;
The SPAtom ASEG1 parameters are now in the correct order (&amp;lt;span class=&amp;quot;stxmacrocommandparameter-character&amp;quot;&amp;gt;TABS&amp;lt;/span&amp;gt; and &amp;lt;span class=&amp;quot;stxmacrocommandparameter-character&amp;quot;&amp;gt;TABM&amp;lt;/span&amp;gt; were swapped).&lt;br /&gt;
&lt;br /&gt;
The SPAtom VSPLIT was mistakenly documented as VSPLIT1.&lt;br /&gt;
&lt;br /&gt;
The macro DEBUGTB no longer exists.&lt;br /&gt;
&lt;br /&gt;
The descriptions of the different formulas used by the SPAtom MORLET have been corrected.&lt;br /&gt;
&lt;br /&gt;
The section FILE item command LOAD parameters were not documented as mandatory.&lt;br /&gt;
&lt;br /&gt;
Added description of shell variables SCRIPTFILEPATH, SCRIPTDIRECTORY AND SCRIPTMAINNAME.&lt;br /&gt;
&lt;br /&gt;
The AWEIGHT SPAtom has now been documented.&lt;br /&gt;
&lt;br /&gt;
The WAVEOUT SPAtom has now been documented.&lt;br /&gt;
&lt;br /&gt;
A list of documentation corrections since the last release (3.6.2).&lt;br /&gt;
&lt;br /&gt;
The BUTIL FILEDIALOG no longer has a &amp;lt;span class=&amp;quot;stxmacrocommandparameter-character&amp;quot;&amp;gt;path&amp;lt;/span&amp;gt; parameter.&lt;br /&gt;
&lt;br /&gt;
A list of documentation corrections since the last release (3.6.1).&lt;br /&gt;
&lt;br /&gt;
The SET table FIND &amp;lt;span class=&amp;quot;stxmacrocommandparameter-character&amp;quot;&amp;gt;cexpr&amp;lt;/span&amp;gt; format uses colons, not commas as delimiters.&lt;br /&gt;
&lt;br /&gt;
The SET value OUTPUT commands can take &amp;lt;span class=&amp;quot;stxmacrocommandoption-character&amp;quot;&amp;gt;/Double&amp;lt;/span&amp;gt; options.&lt;br /&gt;
&lt;br /&gt;
The description of the parameters for the NEW TABLE command where field definitions are possible has been corrected.&lt;br /&gt;
&lt;br /&gt;
The SET graph CURSORMODE command now describes the bound and locked parameters correctly.&lt;br /&gt;
&lt;br /&gt;
The VAR arithmetic operators DIV, MUL and SUB are actually called DIVIDE, MULTIPLY and SUBTRACT&lt;br /&gt;
&lt;br /&gt;
The SET graph ZSCALE command parameters were incorrect.&lt;br /&gt;
&lt;br /&gt;
=== Known Bugs ===&lt;br /&gt;
&lt;br /&gt;
S_TOOLS-STx Version: 3.9&lt;br /&gt;
&lt;br /&gt;
These bugs were known to exist at the time of the release and are proving difficult, if not impossible to fix.&lt;br /&gt;
&lt;br /&gt;
Interface&lt;br /&gt;
&lt;br /&gt;
Sometimes 44KB soundfiles are created, which are invalid. This bug has not proved easy to replicate, so if you can replicate it, please contact us ( \n  This e-mail address is being protected from spam bots, you need JavaScript enabled to view it  ).&lt;br /&gt;
&lt;br /&gt;
Can&#039;t delete an entry in the DataSet if it has no ID. It is highly unlikely that you will ever have a DataSet entry with no ID. If this is the case however, you must currently delete it by hand (Close S_TOOLS-STx, open the DataSet in a text editor and either give the offending entry an ID, or remove it). Should you be able to reproduce any action which creates an entry without an ID, please contact us ( \n  This e-mail address is being protected from spam bots, you need JavaScript enabled to view it  ).&lt;br /&gt;
&lt;br /&gt;
Spectrogram &amp;amp;amp; Parameters Viewer&lt;br /&gt;
&lt;br /&gt;
Interpolation of very short signals is incorrect (Deutsch - 2004-11-10 - since 1.0).&lt;br /&gt;
&lt;br /&gt;
Graphics&lt;br /&gt;
&lt;br /&gt;
Copying a display graphic to the clipboard and pasting into a graphics program does not always achieve the desired results. This bug will not be fixed in the foreseeable future. Some graphics programs paste it properly (IrfanView, Microsoft Word), others don&#039;t (PaintShop Pro) - (Jonnie White - 2004-07-14).&lt;br /&gt;
&lt;br /&gt;
Selected cursors is not visible if background is set to GRAY (White - 2004-07-12 - since 1.0).&lt;br /&gt;
&lt;br /&gt;
Macro&lt;br /&gt;
&lt;br /&gt;
The dialog control listbox does not handle displaying huge strings properly. This seems to be a problem with the underlying CListBox control (Becker/White - 2004-12 - since 1.0).&lt;br /&gt;
&lt;br /&gt;
The DCOM command INVOKEMETHOD Evaluate always returns an error when communicating with the R DCOM server even if the command was actually successful (Deutsch/White - 2004 - since 3.6.0).&lt;br /&gt;
&lt;br /&gt;
==3.8==&lt;br /&gt;
&lt;br /&gt;
3.8.3&lt;br /&gt;
&lt;br /&gt;
* BUGFIX: zoom in in viewer3 now working when zooming around active cursor&lt;br /&gt;
* BUGFIX: spectragram title display corrected (amin/amax)&lt;br /&gt;
* BUGFIX: CDLGMAP now deletes window only if it has created the window during construction&lt;br /&gt;
&lt;br /&gt;
3.8.2&lt;br /&gt;
&lt;br /&gt;
* BUGFIX: dataset path now displayed, even if it has spaces in it.&lt;br /&gt;
* BUGFIX: Parameter plot explicitly redrawn when new data is sent. This fixes the bug (reported by Julia Brandstaetter) where Set Zero and Undo were not working properly in Spectrogram and Parameter plot.&lt;br /&gt;
&lt;br /&gt;
3.8.1&lt;br /&gt;
&lt;br /&gt;
* BUGFIX: Warn user that more waveform samples are being sent than expected and refrain from crashing.&lt;br /&gt;
* BUGFIX: CDlgMap now always uses the next free dialog index for a new entry. This means that multiple maps can reference the same dialog and still work. The functions fci and nc were removed since they are never used. Display now using second event to synchronise creation and variable initialisation. This fixes the mysterious bug where the window class was only sometimes used.&lt;br /&gt;
* BUGFIX: If the polyline function is called with less than two points it no longer asserts, but rather ends gracefully.&lt;br /&gt;
* BUGFIX: send keys not processed by dialog on to graph hotkey handlers&lt;br /&gt;
* BUGFIX: spectrogram is now being initialised with the correct context menu when formants are displayed in it.&lt;br /&gt;
* BUGFIX: giving dialog focus if there are no graphs&lt;br /&gt;
* BUGFIX: buttons in dialogs in a graph no longer process normal mneumonics. This means that the graph can process them (for Moosmueller). Buttons can still be activated with return and the space bar and tabbed/arrowed to.&lt;br /&gt;
* BUGFIX: preventing race conditions in Attach/Detach. This removes one possible cause of autosave crashing. It does not guarantee, though, there to be no other reasons for autosave to crash.&lt;br /&gt;
&lt;br /&gt;
=Downloads=&lt;br /&gt;
The {{STX}} downloads are available here: https://s02kfs1.kfs.oeaw.ac.at/pub/stx&lt;/div&gt;</summary>
		<author><name>Jw</name></author>
	</entry>
	<entry>
		<id>https://mediawiki.kfs.oeaw.ac.at/stx/docs/wiki/index.php?title=History_of_Changes&amp;diff=10708</id>
		<title>History of Changes</title>
		<link rel="alternate" type="text/html" href="https://mediawiki.kfs.oeaw.ac.at/stx/docs/wiki/index.php?title=History_of_Changes&amp;diff=10708"/>
		<updated>2026-04-21T08:45:37Z</updated>

		<summary type="html">&lt;p&gt;Jw: /* Downloads */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;div class=&amp;quot;noautonum&amp;quot;&amp;gt;{{TOC limit|3}}&amp;lt;/div&amp;gt;&lt;br /&gt;
=5.0=&lt;br /&gt;
&lt;br /&gt;
==Features==&lt;br /&gt;
&lt;br /&gt;
===Compact Workspace Mode===&lt;br /&gt;
The Workspace now has a [[User_Guide/Workspace#Modes|compact mode]]. The compact mode is a simplified interface for new users. Although it was designed with linguists in mind, it can be used by anyone.&lt;br /&gt;
&lt;br /&gt;
===webMAUS===&lt;br /&gt;
Automatic segmentation using the [https://clarin.phonetik.uni-muenchen.de/BASWebServices/interface webMAUS] REST API. This has been implemented in the toolbox [[User_Guide/Toolbox/runMAUSBasicDlg|&amp;lt;samp&amp;gt;runMAUSBasicDlg&amp;lt;/samp&amp;gt;]].&lt;br /&gt;
&lt;br /&gt;
==Bugfixes==&lt;br /&gt;
&lt;br /&gt;
* Correctly handle corrupt Workspace file (generate new one, rather than silently exiting)&lt;br /&gt;
&lt;br /&gt;
==5.0.6==&lt;br /&gt;
&lt;br /&gt;
Released: 30th December 2020&lt;br /&gt;
&lt;br /&gt;
Revision: 10071&lt;br /&gt;
&lt;br /&gt;
* bugfix: No longer dying with &amp;quot;The parameter is incorrect&amp;quot; error&lt;br /&gt;
&lt;br /&gt;
==5.0.4==&lt;br /&gt;
&lt;br /&gt;
Released: 12th November 2019&lt;br /&gt;
&lt;br /&gt;
Revision: 10016&lt;br /&gt;
&lt;br /&gt;
* bugfix: SPExL V1.1.11. Adding new segments respects vertical drawing order. &lt;br /&gt;
* bugfix: SPExL V1.1.11. Faster deselection of segments. &lt;br /&gt;
* bugfix: Real-time waterfall axis drawing correctly&lt;br /&gt;
* bugfix: show/hide sectioner setting now respected.&lt;br /&gt;
* bugfix: sectioner height setting now respected.&lt;br /&gt;
&lt;br /&gt;
==5.0.3==&lt;br /&gt;
&lt;br /&gt;
Released: 1st October 2019&lt;br /&gt;
&lt;br /&gt;
Revision: 9967&lt;br /&gt;
&lt;br /&gt;
* feature: Signal.All is now selected by default, if no other segment is selected.&lt;br /&gt;
* feature: When exporting profiles, the present working directory is used, rather than always selecting the &#039;profiles&#039; directory. The profiles directory is only used if the present working directory is the root directory.&lt;br /&gt;
* feature: The first sound file in the project is selected by default in the compact mode.&lt;br /&gt;
* bugfix: When adding a file per drag and drop, the file is now selected.&lt;br /&gt;
* bugfix: enabling a disabled edit box now sets the background color correctly (back to white).&lt;br /&gt;
* bugfix: debugger trace window now visible in release version too&lt;br /&gt;
* bugfix: [[Programmer_Guide/Command_Reference/SYSINFO|SYSINFO]] command now supports Windows 8.1 and Windows 10 (was returning Windows 8)&lt;br /&gt;
* bugfix: SPExL V1.1.10. Playlist listview now processes listsorted message and displays sort order set by clicking a column heading. The sort order was first being displayed when clicking in the control after clicking the column heading.&lt;br /&gt;
* bugfix: The &#039;Start&#039; button should now be activated correctly in the Compact Mode.&lt;br /&gt;
&lt;br /&gt;
==5.0.2==&lt;br /&gt;
&lt;br /&gt;
Released: 19th September 2019&lt;br /&gt;
&lt;br /&gt;
Revision: 9946&lt;br /&gt;
&lt;br /&gt;
* bugfix:  The context menu Add Sound File now working from the Audio File list in the Compact Mode.&lt;br /&gt;
* feature: The possible number of plots in XPlot was increased from 64 to 128&lt;br /&gt;
&lt;br /&gt;
==5.0.0==&lt;br /&gt;
&lt;br /&gt;
Released: 12th September 2019&lt;br /&gt;
&lt;br /&gt;
Revision: 9935&lt;br /&gt;
&lt;br /&gt;
Initial release.&lt;br /&gt;
&lt;br /&gt;
=4.4=&lt;br /&gt;
&lt;br /&gt;
==Features==&lt;br /&gt;
===Transcription Script SPExL 1.1.6===&lt;br /&gt;
The transcription script SPExL has been simplified and improved.&lt;br /&gt;
* Hotkeys can be defined by the user in the SPExL_SegTrans.hotkeys file&lt;br /&gt;
* The number of available &#039;views&#039; has been reduced to 3:&lt;br /&gt;
** wave overview &amp;amp; spg. section (a waveform of the whole file in the top graph, with a section of the file as spectrogram below)&lt;br /&gt;
** wave only (a waveform of a section of the file with scrollbar functionality)&lt;br /&gt;
** wave and spg. section (a synced waveform and spectrogram of a section of the file with scrollbar functionality)&lt;br /&gt;
* Segment selection between graphs and the list are now synchronised. If you select a segment in the graph, it is selected in the list and vice versa.&lt;br /&gt;
* Changes made to the project (new segments, edited attributes) are now made directly in the project rather than the user having to explicitly press the &#039;save segments to project file&#039; button to copy them from SPExL to the Workspace. Note that they are only written to disk, however, if the project is saved (press the &#039;Save&#039; button).&lt;br /&gt;
===Visible Segment Attributes Saved per Project File===&lt;br /&gt;
If you choose to display other attributes other than the default attributes in the Workspace Detail View, these settings are now saved in the open project file. When a project file is then opened, the relevant attribute list is loaded and used, rather than the user having to [[User_Guide/Workspace/Detail/Search_for_Element_Attributes|search for them]] again. You can still modify which attributes are displayed using the General Settings [[User_Guide/Workspace/Application_and_Setup_Tree/Options/General_Settings#.22Set.22_Attributes_.26_.22Segment.22_Attributes|&#039;Select &amp;quot;Segment&amp;quot; Attributes&#039; dialog]].&lt;br /&gt;
===Global / Profile Sectioner Settings===&lt;br /&gt;
The sectioner settings in the {{Viewer2}} analysis application were always global to STx. As of STx 4.4.0, you can choose to save your sectioner settings with your profile. The default is still the &#039;global&#039; variant. To switch to profile sectioner settings, uncheck the &#039;&#039;&#039;use global sectioner settings&#039;&#039;&#039; checkbox in the {{Viewer2}} [[User_Guide/Spectrogram_and_Parameter_Viewer/Settings_Dialog|settings dialog]].&lt;br /&gt;
&lt;br /&gt;
==4.4.10==&lt;br /&gt;
&lt;br /&gt;
Released: 17th January 2019&lt;br /&gt;
&lt;br /&gt;
Revision: 9712&lt;br /&gt;
&lt;br /&gt;
* bugfix: playback gain factor - the playback gain is now working also for asio devices (see CSTXASIOEngine::Transfer())&lt;br /&gt;
* bugfix: renumbering command did not update detail as expected.&lt;br /&gt;
* bugfix: the update version dialogs now display the correct workspace path&lt;br /&gt;
&lt;br /&gt;
==4.4.9==&lt;br /&gt;
&lt;br /&gt;
Released: 25th September 2018&lt;br /&gt;
&lt;br /&gt;
Revision:&lt;br /&gt;
&lt;br /&gt;
* feature: don&#039;t ask user where to put sound file if there are no sets in the project.&lt;br /&gt;
* feature: dragging and dropping a template onto {{ST}X} copies it to the templates folder.&lt;br /&gt;
* feature: added &#039;Open Containing Folder&#039; context menu for sound files and links. Improved contextualisation of context menu in detail (overview==root/set)&lt;br /&gt;
* feature: &#039;txt2wav&#039; script: Adding decimal symbol and field delimiter to parameters, as well as the ability to specify which extension to use to filter files (was hard-coded to &#039;txt&#039;). Now this macro can be used to&lt;br /&gt;
* feature: bdataset createwave and createwwaveex now take an openmode keyword: auto|create|read|write, which is passed on to bsf open. This means that we can now open files in modes other than &#039;auto&#039;.&lt;br /&gt;
process CSV files.&lt;br /&gt;
* bugfix: very long capture text for edit controls with &#039;text above&#039; could lead to capture static being longer than the edit control and unintentionally overlapping with other controls (e.g. in Transcription Setup dialog).&lt;br /&gt;
* bugfix: closing con log window no longer resets PARENT shell variable, unless it is set the the con log window itself.&lt;br /&gt;
* bugfix: sound files now opened using the FILE_SHARE_READ dwShareMode. This should mean, that STx no longer prevents other processes from reading the sound files. &lt;br /&gt;
* bugfix: viewer opens sound file in read mode, rather than read/write.&lt;br /&gt;
* bugfix: the !PATH attribute (MakePath()) now returns the correct path for files in the root of a drive. Bug was introduced in r8998 (STx 4.2.19). This was, for example, was causing sound files in the root directory not to be unloaded, and hence was causing sharing violations.&lt;br /&gt;
&lt;br /&gt;
==4.4.8==&lt;br /&gt;
&lt;br /&gt;
Released: 25th July 2018&lt;br /&gt;
&lt;br /&gt;
Revision: 9500&lt;br /&gt;
&lt;br /&gt;
* feature: Spectrogram &amp;amp; Parameters viewer sectioner window now remembers which function cursor is bound to when being replotted.&lt;br /&gt;
* feature: The &amp;lt;samp&amp;gt;downsampling.sts&amp;lt;/samp&amp;gt; script now has a &amp;lt;samp&amp;gt;ResampleCLI&amp;lt;/samp&amp;gt; macro for automatic resampling of one or more files (see source). The old &amp;lt;samp&amp;gt;ResampleDialog&amp;lt;/samp&amp;gt; was renamed to &amp;lt;samp&amp;gt;ResampleDLG&amp;lt;/samp&amp;gt;.&lt;br /&gt;
* feature: Adding help for &amp;quot;Import_PRAAT_TextGrid&amp;quot; toolbox.&lt;br /&gt;
* feature: Adding ability to edit &#039;Sectioner Settings&#039; from the profile dialog. &lt;br /&gt;
* feature: Transcription 1.1.8 - removed segment &#039;refresh&#039; button, since segments always reflect current project state.&lt;br /&gt;
* bugfix: a window that was maximised will now be maximised to the correct monitor. It was always being maximised to monitor 1 on display creation.&lt;br /&gt;
* bugfix: the profile version number is now imported with the profile. This means that, for example, the use global profile settings flag is now also set correctly on import.&lt;br /&gt;
* bugfix: minor fix of position of two controls which were overlapping with controls beneath&lt;br /&gt;
* bugfix: stop playback cursor if wave is stopped by starting playback in another graph. Beforehand, the playback cursor was stopped if it got to the end, or the ESC key was pressed.&lt;br /&gt;
* bugfix: Y coordinate vector conversion was inaccurate by 1 pixel (bug introduced in r2536) This affects the XY, parameter, scatter, wave and waterfall functions.&lt;br /&gt;
&lt;br /&gt;
==4.4.6==&lt;br /&gt;
&lt;br /&gt;
Released: 21. March 2018&lt;br /&gt;
&lt;br /&gt;
Revision: 9441&lt;br /&gt;
&lt;br /&gt;
* bugfix: some bugfixes and minor changes in BSeq &lt;br /&gt;
* bugfix: BScript: logging of unhandled messages in msg-loop disabled // Conlog: /ton and /toff options implemented (timer on/off + show elapsed time) &lt;br /&gt;
* bugfix: Viewer3 settings now being saved (bug introduced in r9318 - STx 4.4.0)&lt;br /&gt;
* bugfix CShellFile::Status() - catch CTime exception if file time is illegal (avoid program crash)&lt;br /&gt;
&lt;br /&gt;
==4.4.5==&lt;br /&gt;
&lt;br /&gt;
Released: 19. February 2018&lt;br /&gt;
&lt;br /&gt;
Revision: 9416&lt;br /&gt;
&lt;br /&gt;
* bugfix: in Viewer2 large asegtemplates (with many fields) are now displayed correctly - note: the same problem exists in Viewer1 if the segment dialog part (created by the macro call &amp;quot;&amp;quot;metasegment msdialog&amp;quot;) needs more than 90 controls (around 40 segment attributes)&lt;br /&gt;
* feature: the bscript.stx function loaddata (con loaddata) can now also load string tables (extenden tables) from csv-files. The file types TEXT/TEXTCONTINUATION (numeric parameter table), STRING/STRINCONTINUATION (extended string table) and BINARY (binary stx-data files) are available. Type ASCII/ASCIICONTINUATION has been removed.&lt;br /&gt;
* feature: new feature (bugfix?): CShellTable::Read() - handling of field-separator tab has been changed - empty fields are now possible - warning: may have an effect on existing script/macro code!&lt;br /&gt;
&lt;br /&gt;
==4.4.4==&lt;br /&gt;
&lt;br /&gt;
Released: 26. January 2018&lt;br /&gt;
&lt;br /&gt;
Revision: 9404&lt;br /&gt;
&lt;br /&gt;
* bugfix: combobox entries with underliners retain their underliners now in the workspace detail (reported by Anton Baotic), and in Spexl.&lt;br /&gt;
&lt;br /&gt;
==4.4.3==&lt;br /&gt;
&lt;br /&gt;
Released: 18. December 2017&lt;br /&gt;
&lt;br /&gt;
Revision: 9391&lt;br /&gt;
&lt;br /&gt;
* bugfix: adding missing Transcription hotkey file and retisimo scripts&lt;br /&gt;
&lt;br /&gt;
==4.4.2==&lt;br /&gt;
&lt;br /&gt;
Released: 30. November 2017&lt;br /&gt;
&lt;br /&gt;
Revision: 9377&lt;br /&gt;
&lt;br /&gt;
* bugfix: SPExL Transcription script V1.1.7: the /U ASegTemplate flag is now respected, and, if used, the last entered value for a segment attribute is used as the default for the next new segment.&lt;br /&gt;
* bugfix: default profile names no longer have the invalid blank character in them. A check was also added, so new profiles cannot be created with blanks.&lt;br /&gt;
&lt;br /&gt;
==4.4.1==&lt;br /&gt;
&lt;br /&gt;
Released: 23. November 2017&lt;br /&gt;
&lt;br /&gt;
Revision: 9369&lt;br /&gt;
&lt;br /&gt;
* bugfix: if zooming is turned off in {{Viewer2}}, segments are now correctly visible on the Y axis. This bug has existed since at least STx 4.2.&lt;br /&gt;
&lt;br /&gt;
==4.4.0==&lt;br /&gt;
&lt;br /&gt;
Released: 14 November 2017&lt;br /&gt;
&lt;br /&gt;
Revision: 9350&lt;br /&gt;
&lt;br /&gt;
Initial release.&lt;br /&gt;
&lt;br /&gt;
=4.3=&lt;br /&gt;
&lt;br /&gt;
==Features==&lt;br /&gt;
====Load or export parameters from super or sub segments====&lt;br /&gt;
Parameters from super segments or from sub segments can now be loaded into the selected segment. For example, if you have analysed a word and corrected the parameters, you can use these corrected parameters when viewing phoneme segments within the word. This is achieved by selecting &#039;super segment data only&#039; setting in the Viewer settings [[User_Guide/Spectrogram_and_Parameter_Viewer/Settings_Dialog#Parameter_IO_Configuration|Parameter IO Configuration]] dialog.&lt;br /&gt;
&lt;br /&gt;
It is possible to select which super/sub segment parameters should be used, filtering by time, attribute or ID.&lt;br /&gt;
&lt;br /&gt;
This feature is also available in the parameter export dialog.&lt;br /&gt;
&lt;br /&gt;
====Parameter setting summary====&lt;br /&gt;
A summary of the settings used for parameter analysis is now saved with the parameter in the project file. This information is displayed in the [[User_Guide/Workspace/Detail/Views/Parameter_View|Parameter View]].&lt;br /&gt;
&lt;br /&gt;
====Exact sample positioning in {{Viewer2}}====&lt;br /&gt;
&lt;br /&gt;
You can now select a position in the [[User_Guide/Spectrogram_and_Parameter_Viewer#Waveform_zoom_window|Waveform Zoom window]] in {{Viewer2}} and move the active time cursor to that position using the hotkey &#039;1&#039;. This is useful for exact positioning of the time cursors when segmenting, for example, words.&lt;br /&gt;
&lt;br /&gt;
==4.3.10==&lt;br /&gt;
&lt;br /&gt;
Released: 26. January 2018&lt;br /&gt;
&lt;br /&gt;
Revision: 9407&lt;br /&gt;
*bugfix: do not allow user to give a profile a name including blanks.&lt;br /&gt;
*bugfix: renaming spectrum profiles (removing blanks)&lt;br /&gt;
*bugfix: the correct most recently entered value in a listctrl is now saved (not the last in the list).&lt;br /&gt;
*bugfix: passing delete, insert and back keys to static control.&lt;br /&gt;
*bugfix: &#039;spexl*.hotkeys.default&#039; &#039;retisimo.sts&#039; &#039;retisimo_*.sts&#039; &#039;HRTF_II_new.txt&#039; &#039;downsample.sts&#039; files are now being copied too (bug introduced in r8789)&lt;br /&gt;
*bugfix: removing extraneous / from Editing segments help URL&lt;br /&gt;
*bugfix: combobox entries with underliners retain their underliners now in the workspace detail (reported by Anton Baotic), and in Spexl.&lt;br /&gt;
&lt;br /&gt;
==4.3.9==&lt;br /&gt;
&lt;br /&gt;
Released: 23. November 2017&lt;br /&gt;
&lt;br /&gt;
Revision: 9363&lt;br /&gt;
&lt;br /&gt;
* bugfix: if zooming is turned off in {{Viewer2}}, segments are now correctly visible on the Y axis. This bug has existed since at least STx 4.2.&lt;br /&gt;
&lt;br /&gt;
==4.3.8==&lt;br /&gt;
&lt;br /&gt;
Released: 14. November 2017&lt;br /&gt;
&lt;br /&gt;
Revision: 9347&lt;br /&gt;
&lt;br /&gt;
* bugfix: zooming and replotting in the xplot class now working&lt;br /&gt;
* feature: user is now informed about bugfixes in current release, and/or new major/minor releases. This means that you will be informed of bug fixes for your version of STx, not just for the newest STx.&lt;br /&gt;
&lt;br /&gt;
==4.3.7==&lt;br /&gt;
&lt;br /&gt;
Released: 19. October 2017&lt;br /&gt;
&lt;br /&gt;
Revision: 9328&lt;br /&gt;
&lt;br /&gt;
* bugfix: stx no longer crashing on y zoom (bug introduced in r9293 - STx 4.3.6)&lt;br /&gt;
* bugfix: binary_file_example.sts now working&lt;br /&gt;
* bugfix: if navigating in file dialog using the keyboard, the edit box is now updated with the selected file.&lt;br /&gt;
&lt;br /&gt;
==4.3.6==&lt;br /&gt;
&lt;br /&gt;
Released 25. September 2017&lt;br /&gt;
&lt;br /&gt;
Revision: 9297&lt;br /&gt;
&lt;br /&gt;
* bugfix: the spectrogram dataset now frees up memory once dataset is drawn&lt;br /&gt;
* bugfix: adding specials folder to installer&lt;br /&gt;
&lt;br /&gt;
==4.3.5==&lt;br /&gt;
&lt;br /&gt;
Released: 6. September 2017&lt;br /&gt;
&lt;br /&gt;
Revision: 9286&lt;br /&gt;
&lt;br /&gt;
* bugfix: auto-saving the project file no longer leaks memory&lt;br /&gt;
* bugfix: editing segments in the workspace now uses the segment template by default&lt;br /&gt;
* bugfix: a backup copy of the project file is now made when saving&lt;br /&gt;
* bugfix: lists with one item are now selectable with the keyboard&lt;br /&gt;
* bugfix: listview column width now calculated with correct font&lt;br /&gt;
* bugfix: default values from aseg templates now written to new segment before editing&lt;br /&gt;
* bugfix: correct default value written to segment, even if attribute value starts with a number&lt;br /&gt;
* bugfix: combobox entries no longer replacing underlines&lt;br /&gt;
&lt;br /&gt;
==4.3.4==&lt;br /&gt;
&lt;br /&gt;
Released: 3. July 2017&lt;br /&gt;
&lt;br /&gt;
Revision: 9214&lt;br /&gt;
&lt;br /&gt;
====Features====&lt;br /&gt;
* feature: the [[Programmer_Guide/Macro_Library/CONLOG|conlog]] command can now log to a file.&lt;br /&gt;
====Bug Fixes====&lt;br /&gt;
* bugfix: the conlog savedata command no longer fails silently if the file cannot be created.&lt;br /&gt;
&lt;br /&gt;
==4.3.3==&lt;br /&gt;
&lt;br /&gt;
Released: 19. June 2017&lt;br /&gt;
&lt;br /&gt;
Revision: 9185&lt;br /&gt;
&lt;br /&gt;
====Bug Fixes====&lt;br /&gt;
* bugfix: segment address in the Transcription script is now rounded to 10th of a millisecond (4 decimal places) rather than 1 millisecond.&lt;br /&gt;
* bugfix: saving the project file now resets the automatic save timer.&lt;br /&gt;
* bugfix: the Transcription, Import Word List and Reorder Word List should now be working correctly again.&lt;br /&gt;
====Features====&lt;br /&gt;
* feature: new script: [[User_Guide/Scripts/Anonymize.sts|Anonymize.sts]] - anonymize segments (attributes and signal) - requested by the ARI phonetics group&lt;br /&gt;
* feature: adding option to automatically save every minute.&lt;br /&gt;
&lt;br /&gt;
==4.3.2==&lt;br /&gt;
&lt;br /&gt;
Released: 13. June 2017&lt;br /&gt;
&lt;br /&gt;
Revision: 9170&lt;br /&gt;
&lt;br /&gt;
====Bug Fixes====&lt;br /&gt;
* bugfix: The segment &#039;Signal.All&#039; is now created when a new sound file is imported. This bug was introduced in version 4.3.1.&lt;br /&gt;
* bugfix: the &#039;wave-only&#039; view in the Transcription script is now available again.&lt;br /&gt;
&lt;br /&gt;
==4.3.1==&lt;br /&gt;
&lt;br /&gt;
Released: 8. June 2017&lt;br /&gt;
&lt;br /&gt;
Revision: 9165&lt;br /&gt;
&lt;br /&gt;
====Bug Fixes====&lt;br /&gt;
&lt;br /&gt;
* bugfix: clicking SPExL graph whilst editing segment in the segment list now draws the segment in the graph (previously needed an explicit refresh to draw the segment).&lt;br /&gt;
* bugfix: the workspace is now saved even if the path contains spaces (bug introduced in r8843)&lt;br /&gt;
* bugfix: searching using keyboard in listctrl now working in correct order (not backwards). Bug introduced in r9002.&lt;br /&gt;
* bugfix: zooming out in SPExL on the y axis with Ctrl+Subtract is now working correctly. This appears to have been around since at least r4442 (STx 3.9)&lt;br /&gt;
* bugfix: y position of cursors is now retained when zooming&lt;br /&gt;
* bugfix: Viewers/SPEXL create segments at selected address and not with P=0 and L=0&lt;br /&gt;
* bugfix: maximising whilst spectrogram is drawing no longer leaves the spectrogram in unfinished version on screen (set new &#039;m_bRecalculate&#039; flag to force recalculation/redraw when dataset sync has finished).&lt;br /&gt;
&lt;br /&gt;
==4.3.0==&lt;br /&gt;
&lt;br /&gt;
Released: April 2017&lt;br /&gt;
&lt;br /&gt;
Revision: 9149&lt;br /&gt;
&lt;br /&gt;
=Older Versions=&lt;br /&gt;
&lt;br /&gt;
==4.2==&lt;br /&gt;
====4.2.23====&lt;br /&gt;
Released: 24 August 2017&lt;br /&gt;
Revision: 9264&lt;br /&gt;
* BUGFIX: correct font used for calculation of formant dialog column size in {{Viewer2}}&lt;br /&gt;
&lt;br /&gt;
====4.2.22====&lt;br /&gt;
Released: 25 January 2017&lt;br /&gt;
Revision: 9064&lt;br /&gt;
* BUGFIX: The following wildcard string comparison will now match:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
if &#039;*ha&#039; =SI &#039;haha&#039; then&lt;br /&gt;
   // it&#039;s a match :-)&lt;br /&gt;
end&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
* BUGFIX: Changed behavior of comparisons in FIND-TABLE/XML: if a field/attribute is not defined all &amp;quot;notequal&amp;quot; and &amp;quot;notmatching&amp;quot; operators evaluates to &amp;quot;true&amp;quot; and all others to &amp;quot;false&amp;quot;&lt;br /&gt;
&lt;br /&gt;
====4.2.21====&lt;br /&gt;
Released: 9 January 2017&lt;br /&gt;
Revision: 9023&lt;br /&gt;
* BUGFIX: Edit segment dialog now referencing correct segment attributes (bug introduced in r8852 - STx 4.2.15)&lt;br /&gt;
&lt;br /&gt;
====4.2.20====&lt;br /&gt;
Released: 23 December 2016&lt;br /&gt;
* FEATURE: STx now informs the user of available update via the About dialog.&lt;br /&gt;
* BUGFIX: Removing non-existent files from STX.INI when loading&lt;br /&gt;
* BUGFIX: About dialog no long blocking workspace file.&lt;br /&gt;
&lt;br /&gt;
====4.2.19====&lt;br /&gt;
Released: 12th December 2016&lt;br /&gt;
* BUGFIX: Ctrl+U no longer the same as Ctrl+Shift+U in, e.g., signal view.&lt;br /&gt;
* BUGFIX: Generating correct hotkey string for Ctrl+Shift+&amp;lt;key&amp;gt;&lt;br /&gt;
* BUGFIX: Switching from long to short list of segments in the workspace should no longer lead to a blank detail.&lt;br /&gt;
* BUGFIX: Transcription left cursor right bitmap now correct image&lt;br /&gt;
* BUGFIX: Fixed bug in Viewer2 where setting the range did not work under all circumstances.&lt;br /&gt;
* BUGFIX: Focus moving with selection for listview key navigation and single selection.&lt;br /&gt;
* BUGFIX: Copy attributes in the Workspace overview now includes first value (bug introduced in r8297)&lt;br /&gt;
* BUGFIX: Checkbox size increased because some strings were being cut off.&lt;br /&gt;
* BUGFIX: Show Find Dialog menu now checked if Show Find Dialog is visible&lt;br /&gt;
* BUGFIX: Occasional crash in {{Viewer2}} fixed by removing use of static with CString (r9010,r9012).&lt;br /&gt;
&lt;br /&gt;
====4.2.18====&lt;br /&gt;
Released: 27 October 2016&lt;br /&gt;
&lt;br /&gt;
* FEATURE: adding PCM info to edit sound file dialog for editing existing project files too.&lt;br /&gt;
* FEATURE/BUGFIX: Improved listview keyboard handling (up/down, page up, page down). Disabled scrolling of listview whilst editing.&lt;br /&gt;
* BUGFIX: viewer2 no longer hangs if saved rmsb-data are loaded and displayed with autoscale-option&lt;br /&gt;
* BUGFIX: detail sequence view now using Ctrl+Shift+U to move selected entry up and Ctrl+Shift+D to move selected entry down (rather than Ctrl+UP and Ctrl+Down - which conflict with internal listview keyboard handling).&lt;br /&gt;
* BUGFIX: bscript log window no longer jumps in front of SPExL window when a dialog is opened.&lt;br /&gt;
* FEATURE: releases are now digitally signed by the Österreichische Akademie der Wissenschaften&lt;br /&gt;
* NOTE: the pole-zero sectioner in the {{Viewer2}} application is extremely slow for high frame rates. We are working on improving it.&lt;br /&gt;
&lt;br /&gt;
====4.2.17====&lt;br /&gt;
Released: 26 September 2016&lt;br /&gt;
* BUGFIX: Transcription (SPExL) segment list handling working correctly again (bug introduced in 4.2.16)&lt;br /&gt;
* BUGFIX: Moving selected sequence entry up/down with keyboard now uses the hotkeys Ctrl+Shift+U and Ctrl+Shift+D (rather than Ctrl+Up and Ctrl+Down) and now works as expected.&lt;br /&gt;
&lt;br /&gt;
====4.2.16====&lt;br /&gt;
Released: 30 August 2016&lt;br /&gt;
* Support for Windows XP has been removed.&lt;br /&gt;
* FEATURE: the XPLOT member &amp;quot;FORALLGRAPHS&amp;quot; is now a public function.&lt;br /&gt;
* FEATURE: the XGRAPH function Zoom -&amp;gt; X-Sync was aded to apply the x-zoom of the current graph across all other graphs.&lt;br /&gt;
* BUGFIX: the Automatic Segment Names dialog no longer allows invalid segment names.&lt;br /&gt;
* BUGFIX: The palette import/export are working again.&lt;br /&gt;
* BUGFIX: The Application and Setup tree now correctly stores it&#039;s state.&lt;br /&gt;
* BUGFIX: Keyboard focus no longer disappears after pressing enter in the Workspace Detail.&lt;br /&gt;
* BUGFIX: The selected entry no longer centers itself after editing.&lt;br /&gt;
* BUGFIX: The Transcription script SPExL now plays single selections every time (not every second time).&lt;br /&gt;
* BUGFIX: Tabbing through the entries in the Workspace Detail no longer goes backwards instead of forwards.&lt;br /&gt;
&lt;br /&gt;
====4.2.15====&lt;br /&gt;
Released: unreleased&lt;br /&gt;
* FEATURE: Improved sound file export performance&lt;br /&gt;
* BUGFIX: The File-&amp;gt;Workspace-&amp;gt;Save As workspace menu command is now working (bug introduced in r4092)&lt;br /&gt;
* BUGFIX: parameter and function now drawing (invalidating) correctly if being set whilst zoomed in.&lt;br /&gt;
* BUGFIX: parameter export dialog no longer needs manual refresh (group box is now transparent - uses WS_EX_TRANSPARENT)&lt;br /&gt;
&lt;br /&gt;
====4.2.14====&lt;br /&gt;
Released: 18 January 2016&lt;br /&gt;
* Minimising GDI use&lt;br /&gt;
* Projects files are now associated with {{STX}}&lt;br /&gt;
* BUGFIX: one memory leak fixed&lt;br /&gt;
* BUGFIX: all help menus associated with mediawiki online help&lt;br /&gt;
====4.2.13====&lt;br /&gt;
Released: 22 December 2015&lt;br /&gt;
* Default help file now the STx Wiki ([https://www.kfs.oeaw.ac.at/stx/docs/wiki/ https://www.kfs.oeaw.ac.at/stx/docs/wiki/]).&lt;br /&gt;
* BUGFIX: Find Segments dialog no longer uses ASet search criteria for ASeg search criteria when ASeg criteria is empty&lt;br /&gt;
* BUGFIX: Find Segments dialog can now search for segments within a time range.&lt;br /&gt;
* BUGFIX: assigning number values to an integer field using table[,field] := eval $#num1 + $#num2 syntax now works&lt;br /&gt;
* BUGFIX: growing table by assigning no longer corrupts heap.&lt;br /&gt;
*BUGFIX: force context menu to display within dialog window, even if called directly from shell with 0,0 coordinates.&lt;br /&gt;
*BUGFIX: edit segment dialog is now initialised with the segment channel&lt;br /&gt;
*BUGFIX: context menu now rebuilt before being displayed to ensure that it reflects current state.&lt;br /&gt;
&lt;br /&gt;
====4.2.12====&lt;br /&gt;
Released: 4 December 2015&lt;br /&gt;
* Improved spectrogram &#039;overview&#039; visualisation.&lt;br /&gt;
&lt;br /&gt;
====4.2.11====&lt;br /&gt;
&lt;br /&gt;
Released: 16 November 2015&lt;br /&gt;
&lt;br /&gt;
* Added pole-zero to {{Viewer2}} Sectioner&lt;br /&gt;
* Bugfix: pane sizes are no longer reset in {{V2}} when sectioner settings dialog is closed.&lt;br /&gt;
* Bugfix: list view control header now correct size and clickable, and entries now selectable with one, rather than two clicks.&lt;br /&gt;
* Bugfix: copied attributes are no longer preceded by blank line&lt;br /&gt;
&lt;br /&gt;
====4.2.9====&lt;br /&gt;
&lt;br /&gt;
Released: 16 October 2015&lt;br /&gt;
&lt;br /&gt;
* Bugfix: saving to PNG working again&lt;br /&gt;
&lt;br /&gt;
====4.2.8====&lt;br /&gt;
&lt;br /&gt;
Released: 5 October 2015&lt;br /&gt;
&lt;br /&gt;
* Bugfix: the pole-zero method spectrogram overlay is now working correctly.&lt;br /&gt;
&lt;br /&gt;
====4.2.5====&lt;br /&gt;
&lt;br /&gt;
Released: 30 September 2015&lt;br /&gt;
&lt;br /&gt;
* Feature: the pole-zero method is now available as an overlay in the spectrogram and parameter viewer&#039;s spectrogram graph. Note however, that this is not bug free, so please wait for 4.2.6 if you&#039;re interested in this feature.&lt;br /&gt;
&lt;br /&gt;
====4.2.4====&lt;br /&gt;
&lt;br /&gt;
Released: 10 September 2015&lt;br /&gt;
&lt;br /&gt;
* Bugfix: added missing Visual C++ 2013 Redistributable Package&lt;br /&gt;
&lt;br /&gt;
====4.2.3====&lt;br /&gt;
&lt;br /&gt;
Released: 26 August 2015&lt;br /&gt;
&lt;br /&gt;
* Metasegment size modification now locks modification mode&lt;br /&gt;
&lt;br /&gt;
====4.2.2====&lt;br /&gt;
&lt;br /&gt;
Released: 15 June 2015&lt;br /&gt;
&lt;br /&gt;
* Viewer print font now legible&lt;br /&gt;
&lt;br /&gt;
====4.2.0====&lt;br /&gt;
&lt;br /&gt;
Released: February 2015&lt;br /&gt;
&lt;br /&gt;
=====Features=====&lt;br /&gt;
&lt;br /&gt;
* The speed of audio playback can now be set in the project interface&lt;br /&gt;
* The menu shell item has been given the alias &#039;DIALOG&#039; and will now be refered to as such in the documentation (r8578)&lt;br /&gt;
* Pole-Zero [[Programmer_Guide/SPU_Reference/PZTF|SPAtom]] and [[Programmer Guide/Command Reference/EVAL/pztf|EVAL]] methods are now available and are integrated into the [[User_Guide/Spectrogram_and_Parameter_Viewer/Methods/Polezero|Spectrogram and Parameter viewer]].&lt;br /&gt;
* Support for Windows 2000/XP has been removed&lt;br /&gt;
* Pole-Zero SPU and EVAL methods&lt;br /&gt;
* Multiple bug fixes&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==4.0==&lt;br /&gt;
&lt;br /&gt;
===4.0.0===&lt;br /&gt;
&lt;br /&gt;
Released: 2012&lt;br /&gt;
&lt;br /&gt;
==3.9==&lt;br /&gt;
&lt;br /&gt;
3.9.4&lt;br /&gt;
&lt;br /&gt;
Released: 15th October 2009&lt;br /&gt;
&lt;br /&gt;
* BUGFIX: real-time analyser drawing more smoothly&lt;br /&gt;
&lt;br /&gt;
3.9.3&lt;br /&gt;
&lt;br /&gt;
Released: 16th September 2009&lt;br /&gt;
&lt;br /&gt;
* BUGFIX: sequences now being saved.&lt;br /&gt;
&lt;br /&gt;
3.9.2&lt;br /&gt;
&lt;br /&gt;
Released: 30th July 2009&lt;br /&gt;
&lt;br /&gt;
* BUGFIX: segments no longer duplicated in un-linked datasets when importing metadata.&lt;br /&gt;
* BUGFIX: user-defined amplitude range working in waveform viewer&lt;br /&gt;
* BUGFIX: spectrogram amplitude floor now correct after using settings dialog&lt;br /&gt;
* BUGFIX: recorder application now recording&lt;br /&gt;
&lt;br /&gt;
3.9.1&lt;br /&gt;
&lt;br /&gt;
Released: 3rd July 2009&lt;br /&gt;
&lt;br /&gt;
* BUGFIX: cmenu check/uncheck working for consecutive items&lt;br /&gt;
* BUGFIX: text files items and the load command can now read files encoded with an &amp;quot;FE FF&amp;quot; byte order mark (encoded in UTF-16BE). The error message &amp;quot;unsupported byte order mark&amp;quot; is returned if a UTF-32BE or UTF-32LE byte order mark is found.Supported encodings specified using a byte order mark: UTF-8, UTF-16LE, UTF-16BE&amp;lt;br /&amp;gt; Other supported encodings:windows-1252&lt;br /&gt;
* BUGFIX: wave files with chunks defined after the data chunk now have the correct length.&lt;br /&gt;
* BUGFIX: saving dataset faster&lt;br /&gt;
* BUGFIX: &amp;quot;load soundfile&amp;quot; options should no longer conflict with each other&lt;br /&gt;
* BUGFIX: prevent stack overflow in XML files with many siblings (~ 20000)&lt;br /&gt;
* BUGFXI: closing rtanalyser whilst it is running now exits shell correctly (without leaving ghost process).&lt;br /&gt;
&lt;br /&gt;
3.9.0&lt;br /&gt;
&lt;br /&gt;
Released: 15th April 2009&lt;br /&gt;
&lt;br /&gt;
Graphical User Interface&lt;br /&gt;
&lt;br /&gt;
General&lt;br /&gt;
&lt;br /&gt;
S_TOOLS-STx now supports all fonts available on the host system.&lt;br /&gt;
&lt;br /&gt;
Comboboxes in ASegTemplates can now be made editable using the flag &amp;lt;span class=&amp;quot;stxmacrocommandoption-character&amp;quot;&amp;gt;/E&amp;lt;/span&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
You can enable/disable runtime error reporting in the Log Control dialog. It is disabled by default, and should only be enabled if you are having problems with S_TOOLS-STx.&lt;br /&gt;
&lt;br /&gt;
Workspace&lt;br /&gt;
&lt;br /&gt;
The segment list can now be edited in the Workspace.&lt;br /&gt;
&lt;br /&gt;
A summary of existing parameters can now be displayed in the segment list (see the Display and Layout Settings dialog).&lt;br /&gt;
&lt;br /&gt;
The Workspace Detail cells can now display text in multiple lines (see the Display and Layout Settings dialog).&lt;br /&gt;
&lt;br /&gt;
Spectrogram &amp;amp;amp; Parameters Viewer&lt;br /&gt;
&lt;br /&gt;
The Spectrogram &amp;amp;amp; Parameters Viewer can now display a harmonic cursor in the spectrogram graph.&lt;br /&gt;
&lt;br /&gt;
The Spectrogram &amp;amp;amp; Parameters Viewer spectrogram method Wavelet has been extended, and a new Cohen&#039;s class distribution method has been implemented.&lt;br /&gt;
&lt;br /&gt;
An amplitude legend is now available in spectrogram plots (via the context menu).&lt;br /&gt;
&lt;br /&gt;
DSP&lt;br /&gt;
&lt;br /&gt;
The band-pass filters now have a window parameter.&lt;br /&gt;
&lt;br /&gt;
Toolbox&lt;br /&gt;
&lt;br /&gt;
The toolbox AutoSeg is available in Spectrogram &amp;amp;amp; Parameters Viewer (if loaded) to automatically segment using peaks, clicks or pauses.&lt;br /&gt;
&lt;br /&gt;
A range of Klatt speech synthesis and resynthesis toolbox functions are available.&lt;br /&gt;
&lt;br /&gt;
The toolbox file &#039;SegmentImEx.sts&#039; implements toolbox functions to import and export segments in the [http://www.fon.hum.uva.nl/praat/ PRAAT] file format. These functions are available in the Workspace.&lt;br /&gt;
&lt;br /&gt;
Scripts&lt;br /&gt;
&lt;br /&gt;
A script specifically designed for transcription and annotation has been developed and included in the default installation of S_TOOLS-STx. The script can be found in the script directory in the file SPExL.sts. There is also a new entry called transcription in the Workspace script tree, which calls the default segmentation routine. The SPExL macro documentation is still being written.&lt;br /&gt;
&lt;br /&gt;
Macro Language&lt;br /&gt;
&lt;br /&gt;
General&lt;br /&gt;
&lt;br /&gt;
Modal window handling has now been moved to the NEW DISPLAY command. Use the option &amp;lt;span class=&amp;quot;stxmacrocommandoption-character&amp;quot;&amp;gt;/O=$#ownerDisplay&amp;lt;/span&amp;gt; to set the owner (which is behind the new display in the z-order. You may also use the option &amp;lt;span class=&amp;quot;stxmacrocommandoption-character&amp;quot;&amp;gt;/Modal&amp;lt;/span&amp;gt; to specify that the owner should be disabled whilst the new display exists.&lt;br /&gt;
&lt;br /&gt;
The NEW command can create objects which are protected from deletion (option &amp;lt;span class=&amp;quot;stxmacrocommandoption-character&amp;quot;&amp;gt;/U|u&amp;lt;/span&amp;gt;).&lt;br /&gt;
&lt;br /&gt;
The command STXCONSTANTS now supports the keywords BITMAPS and BUTTONS.&lt;br /&gt;
&lt;br /&gt;
The command TRANSLATE can now translate the contents of a variable or table.&lt;br /&gt;
&lt;br /&gt;
The command EXIT -xLevel now returns to the first macro defining the label label &amp;quot;OnExitAll&amp;quot; or to the toplevel macro (1st called macro) (rather than to the first macro where the variable #EXITLEVEL = xLevel).&lt;br /&gt;
&lt;br /&gt;
The new command TOKEN, an extended form of the command WORD, can tokenise a string using the specified delimiter.&lt;br /&gt;
&lt;br /&gt;
The new command TRIM can be used to trim characters from the beginning and end of a string.&lt;br /&gt;
&lt;br /&gt;
The new command QUOTE can quote all special characters in a string.&lt;br /&gt;
&lt;br /&gt;
The new command LINELENGTH, although similar to LENGTH, returns the length of a line including delimiters.&lt;br /&gt;
&lt;br /&gt;
The NAME command can now check XML attributes and S_TOOLS-STx XML IDs for syntactical validity. The NAME command can also return a UNC file name for a file on a mapped drive. This is useful, for example, for making DataSets portable in a network environment.&lt;br /&gt;
&lt;br /&gt;
The new command ARG can be used to retrieve macro arguments.&lt;br /&gt;
&lt;br /&gt;
The IREF command supports the option &amp;lt;span class=&amp;quot;stxmacrocommandoption-character&amp;quot;&amp;gt;/I&amp;lt;/span&amp;gt; to simplify and suppress certain error messages.&lt;br /&gt;
&lt;br /&gt;
The global variable @REPORTRUNTIMEERRORS can be set to 1 to display a dialog every time a error occurs when processing a command. Many commands can now take an option specifying that warnings should be generated, rather than errors (DRIVE, LOAD, UNLOAD, SET file LOAD|SAVE|STATUS|DELETE|RENAME|COPY|POSITION), READ, SEGMENT). If set to specify warnings, they will not cause a runtime error.&lt;br /&gt;
&lt;br /&gt;
The READ command (and its variants READSTR, READTAB and READVAR) have a new option &amp;lt;span class=&amp;quot;stxmacrocommandoption-character&amp;quot;&amp;gt;/E&amp;lt;/span&amp;gt; which can be used to escape characters in the input from being used as separators.&lt;br /&gt;
&lt;br /&gt;
Format strings can now add a new line character (\n), using the tag %n. The standard C format tags %x and %X are now supported.&lt;br /&gt;
&lt;br /&gt;
The KEYWORD command now supports the option &amp;lt;span class=&amp;quot;stxmacrocommandoption-character&amp;quot;&amp;gt;/F&amp;lt;/span&amp;gt; which prevents abbreviations from being found and &amp;lt;span class=&amp;quot;stxmacrocommandoption-character&amp;quot;&amp;gt;/C&amp;lt;/span&amp;gt; to make the comparison case sensitive.&lt;br /&gt;
&lt;br /&gt;
The new commands SYSTEMCALL and SYSTEMCALLX are variants of SYSTEM and SYSTEMX which return warnings rather than errors on failure.&lt;br /&gt;
&lt;br /&gt;
The command TGET can now return elapsed milliseconds, when the new option &amp;lt;span class=&amp;quot;stxmacrocommandoption-character&amp;quot;&amp;gt;/ms&amp;lt;/span&amp;gt; is used.&lt;br /&gt;
&lt;br /&gt;
The NAME command, when used with the new UNC subcommand can convert a file path on a mapped drive to its UNC equivalent. This help keep project files portable when accessed from multiple computers (E.g. when the z drive is mapped to \\server\data, the command &amp;quot;name &#039;z:\ds.xml&#039; unc&amp;quot; will return &amp;quot;\\server\data\ds.xml&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
The READ commands have a new option &amp;lt;span class=&amp;quot;stxmacrocommandoption-character&amp;quot;&amp;gt;/T&amp;lt;/span&amp;gt; which prevents arguments from being trimmed.&lt;br /&gt;
&lt;br /&gt;
The macro WINDOWSIZEDLG can be used to allow a user to set a window&#039;s size (width and height in pixels).&lt;br /&gt;
&lt;br /&gt;
SPAtoms&lt;br /&gt;
&lt;br /&gt;
The new SPAtom MIXALL mixes up to eight input arrays/vectors into an output array/vector with gain scaling.&lt;br /&gt;
&lt;br /&gt;
The new SPAtom WLANA performs a general wavelet analysis, and the SPAtom CCANA implement a Cohen Class distribution.&lt;br /&gt;
&lt;br /&gt;
The SPAtoms PVANA and PVSYN no accept a windowing function parameter.&lt;br /&gt;
&lt;br /&gt;
The new SPAtom KLATTSYN can be used to generate synthesised speech.&lt;br /&gt;
&lt;br /&gt;
EVAL command&lt;br /&gt;
&lt;br /&gt;
The EVAL command has the following new subcommands:&amp;lt;br /&amp;gt; formants - a new formant tracking algorithm.&amp;lt;br /&amp;gt; limit, limitlow, limithigh - limits values to within a range of values.&amp;lt;br /&amp;gt; min, max - can receive more than one parameter.&amp;lt;br /&amp;gt; cdot, ctrn, conj - complex dot product, matrix transposition and conjugation.&amp;lt;br /&amp;gt; f0ac - F0 detection using autocorrelation.&amp;lt;br /&amp;gt; The EVAL command now supports numerical (e.g. &amp;amp;gt;=), logical (e.g. &amp;amp;amp;&amp;amp;amp;) and ternary (e.g. eval $#a &amp;amp;gt; $#b ? $#a : $#b).&lt;br /&gt;
&lt;br /&gt;
The Macro Library&lt;br /&gt;
&lt;br /&gt;
The DATASETCMD has a new subcommand AUTOSAVE with which you can turn the DataSet autosave feature on and off.&lt;br /&gt;
&lt;br /&gt;
The GRAPHSETUP macro.&lt;br /&gt;
&lt;br /&gt;
The new CGRAPHSETUP command GRAPHLEGEND displays an amplitude legend in a spectrogram plot.&lt;br /&gt;
&lt;br /&gt;
The new CGRAPHSETUP command GETCOLORPALETTE retrieves the print or screen palette in an extended table.&lt;br /&gt;
&lt;br /&gt;
The new CGRAPHSETUP command GETPROFILELIST returns a simple table with a list of color profiles defined in the settings file (S_TOOLS-STx INI).&lt;br /&gt;
&lt;br /&gt;
===== Classes =====&lt;br /&gt;
&lt;br /&gt;
BXMLDoc class&lt;br /&gt;
&lt;br /&gt;
The SETELEMENT function can now take a table containing attribute/value pairs.&lt;br /&gt;
&lt;br /&gt;
CMenu class&lt;br /&gt;
&lt;br /&gt;
The new CMenu function AddToolBoxMenu adds the standard toolbox menu items to the menu.&lt;br /&gt;
&lt;br /&gt;
XPlot class&lt;br /&gt;
&lt;br /&gt;
When constructing an XPlot instance, an owner window may now be specified.&lt;br /&gt;
&lt;br /&gt;
===== Shell Items =====&lt;br /&gt;
&lt;br /&gt;
Dialog Item&lt;br /&gt;
&lt;br /&gt;
The dialog edit control has a new option &#039;&amp;lt;span class=&amp;quot;stxmacrocommandoption-character&amp;quot;&amp;gt;/F&amp;lt;/span&amp;gt;&#039; which forwards KEY messages to the shell.&lt;br /&gt;
&lt;br /&gt;
There are now four &#039;types&#039; of edit control and a host of new parameters, which means it can display syntax highlighting, be used as a command line interface, etc.&lt;br /&gt;
&lt;br /&gt;
A listview&#039;s cells can now be editable. The option &amp;lt;span class=&amp;quot;stxmacrocommandoption-character&amp;quot;&amp;gt;/E&amp;lt;/span&amp;gt; which must be set for a ListView to be editable. The message CELLEDITED is sent if it is editable and its contents has been changed. If the user cancels editing, the message CELLCANCELLED is sent to the shell. If editing is ended because the user presses &amp;lt;span class=&amp;quot;stxhotkey&amp;quot;&amp;gt;TAB&amp;lt;/span&amp;gt; or &amp;lt;span class=&amp;quot;stxhotkey&amp;quot;&amp;gt;Shift TAB&amp;lt;/span&amp;gt;, the CELLEDITEDTAB or CELLEDITEDBACKTAB messages are sent. You can set the focus to a specific cell and enter editing mode using the new command SET dialogItem listviewIndex STARTEDIT.&lt;br /&gt;
&lt;br /&gt;
The listview now supports the &amp;lt;span class=&amp;quot;stxmacrocommandoption-character&amp;quot;&amp;gt;/F&amp;lt;/span&amp;gt; flag which forwards specific key types to the shell.&lt;br /&gt;
&lt;br /&gt;
The listview supports a new option /R=n, which determines the maximum number of lines of text which can be displayed in the listview.&lt;br /&gt;
&lt;br /&gt;
The new attribute !FOREGROUND returns 1 if the dialog window is in the foreground, 0 if it is not and -1 if the command fails in some way.&lt;br /&gt;
&lt;br /&gt;
The new dialog attribute !EDITING can be used to ascertain if a listview is currently being edited or not.&lt;br /&gt;
&lt;br /&gt;
File Item&lt;br /&gt;
&lt;br /&gt;
The NEW FILE command can now take the option &amp;lt;span class=&amp;quot;stxmacrocommandoption-character&amp;quot;&amp;gt;/S&amp;lt;/span&amp;gt;, to suppress error messages on creation failure.&lt;br /&gt;
&lt;br /&gt;
The new file item command COPY &amp;lt;span class=&amp;quot;stxmacrocommandoption-character&amp;quot;&amp;gt;/Z&amp;lt;/span&amp;gt; can be used to encrypt/decrypt a file, including optional password protection.&lt;br /&gt;
&lt;br /&gt;
The new command TRYLOCK will try to get a lock on the file but will not block the script.&lt;br /&gt;
&lt;br /&gt;
The !CHANGED attribute can now be explicitly set or reset. This functionality is new, in as much as versions previous to 3.9.0 could only reset the attribute. The meaning of assigning &#039;1&#039; to the attribute has changed, since assigning &#039;1&#039; now *sets* the attribute, whilst assigning &#039;0&#039; resets the attribute.&lt;br /&gt;
&lt;br /&gt;
A new file item type - the GDX file item - has been developed, which can be used to create files containing graphic data which are passed directly to a graph item. GDX stands for &amp;quot;graphical data exchange&amp;quot;. Currently, the spectrogram is the only plot which supports the GDX file type.&lt;br /&gt;
&lt;br /&gt;
Graph Item&lt;br /&gt;
&lt;br /&gt;
The command ADDMARKER can now be used to add a &#039;Box and Whiskers&#039; metasegment.&lt;br /&gt;
&lt;br /&gt;
The metasegment font can be specified on an individual basis using the ADDMARKER command.&lt;br /&gt;
&lt;br /&gt;
A metasegment may be told not to change color on selection. This is only available using the &amp;quot;SET graph ADDMARKER table&amp;quot; command with the parameter &amp;quot;invertSelected&amp;quot; set to &amp;quot;true&amp;quot; if the metasegment color should be inverted whilst selected or &amp;quot;false&amp;quot; if not. The default is &amp;quot;true&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
The key used to make a metasegment moveable can now be set using a &#039;modifyKeys&#039; entry in the ADDMARKER table parameter.&lt;br /&gt;
&lt;br /&gt;
A simple marker can now be displayed as a single vertical line (option &amp;lt;span class=&amp;quot;stxmacrocommandoption-character&amp;quot;&amp;gt;/M&amp;lt;/span&amp;gt;).&lt;br /&gt;
&lt;br /&gt;
The command OVERVIEW, which toggles between the &#039;view&#039; and &#039;overview&#039; modes, has been documented.&lt;br /&gt;
&lt;br /&gt;
The graph supports a new attribute !CURSORMODE which returns the currently visible cursors, as set using the last CURSORMODE command.&lt;br /&gt;
&lt;br /&gt;
The width of a graph&#039;s border can now be set using new AXIS command parameters. The default border width is 1 pixel.&lt;br /&gt;
&lt;br /&gt;
The spectrogram palette can be changed at any time using the &amp;quot;SET graph Y * * SPECTROGRAM&amp;quot; function.&lt;br /&gt;
&lt;br /&gt;
The DATASETLOADED message is now sent when a graph finishes loading data for a particular input.&lt;br /&gt;
&lt;br /&gt;
Instance Item&lt;br /&gt;
&lt;br /&gt;
The new command TRYLOCK will try to get a lock on the instance but will not block the script.&lt;br /&gt;
&lt;br /&gt;
Table Item&lt;br /&gt;
&lt;br /&gt;
A table item connected to a ListView must be configured to be editable using the CONFIG command or the !EDITABLE attribute. The CONFIG command has also been extended to allow for a restrictive set of values to be specified for a table field. If specified, the ListView will display a combobox in this column for each entry. All parameters set using the CONFIG command can now be queried via table field attributes.&lt;br /&gt;
&lt;br /&gt;
The new command TRYLOCK will try to get a lock on the table but will not block the script.&lt;br /&gt;
&lt;br /&gt;
The command NEW TABLE supports a silent error flag.&lt;br /&gt;
&lt;br /&gt;
A table field can now display multirow entries, if the !MULTIROW attribute is set to 1, or the CONFIG command multirow parameter is set to ON.&lt;br /&gt;
&lt;br /&gt;
The last user input for a particular column can now be used as the default for that column using the CONFIG command&#039;s setuserdefault parameter.&lt;br /&gt;
&lt;br /&gt;
The DEFINE command can now be used to rename an existing field.&lt;br /&gt;
&lt;br /&gt;
Wave Item&lt;br /&gt;
&lt;br /&gt;
The wave item now supports the new attribute !PLAYSRATE which can be used to return the sampling rate currently used to for playback or set a new sampling rate for playback.&lt;br /&gt;
&lt;br /&gt;
=== Changes ===&lt;br /&gt;
&lt;br /&gt;
Changes in S_TOOLS-STx &amp;amp;lt;CURRENT_VERSION&amp;amp;gt;:&lt;br /&gt;
&lt;br /&gt;
Graphical User Interface&lt;br /&gt;
&lt;br /&gt;
F0 Test, F0Lookup, Amplitude Spectrum Statistics&lt;br /&gt;
&lt;br /&gt;
The F0 Test, F0 Lookup and Amplitude Spectrum Statistics functions in the Spectrogram &amp;amp;amp; Parameters Viewer sectioner have been moved to the toolbox file SpectrumTB.sts.&lt;br /&gt;
&lt;br /&gt;
Macro Language&lt;br /&gt;
&lt;br /&gt;
UNLOAD command&lt;br /&gt;
&lt;br /&gt;
The command UNLOAD MACROCODE, UNLOAD SPUCODE and UNLOAD SOURCECODE take one parameter - the name of a sourcecode file (relative or absolute). The MACROCODE variant used to take a blank separated list of macro names and the SPUCODE version used to take a blank separated list of SPU names.&lt;br /&gt;
&lt;br /&gt;
Display and Dialog DROPFILE message&lt;br /&gt;
&lt;br /&gt;
The DROPFILE message sent to displays and dialogs when files are dropped onto them has been changed. The &amp;lt;span class=&amp;quot;stxmacrocommandparameter-character&amp;quot;&amp;gt;filePath&amp;lt;/span&amp;gt; parameter is not longer a string, but rather the id of a simple table with one absolute path per entry.&lt;br /&gt;
&lt;br /&gt;
Syntax&lt;br /&gt;
&lt;br /&gt;
The string &amp;quot;123 456&amp;quot; is no longer a valid number.&lt;br /&gt;
&lt;br /&gt;
=== Bug Fixes ===&lt;br /&gt;
&lt;br /&gt;
Bug fixes&lt;br /&gt;
&lt;br /&gt;
The waterfall graph now prints correctly.&lt;br /&gt;
&lt;br /&gt;
The BDataSet member function AddASet now selects the new audio set if adding the set succeeds (r5534).&lt;br /&gt;
&lt;br /&gt;
Shell commands using the return value RC now assign the value even if return code equals 0 (indicating success) (r5609).&lt;br /&gt;
&lt;br /&gt;
Spectrogram &amp;amp;amp; Parameters Viewer Sectioner copy to clipboard working again (r5625).&lt;br /&gt;
&lt;br /&gt;
The &#039;view&#039; graph mode now displays correctly when first drawn (r5643).&lt;br /&gt;
&lt;br /&gt;
The asterisk character * is now officially an invalid hotkey, rather than being one which doesn&#039;t work correctly (r5500).&lt;br /&gt;
&lt;br /&gt;
Loading an XML file which an unsupported character encoding now fails rather than asserting (r5614).&lt;br /&gt;
&lt;br /&gt;
The Spectrum viewer can now saving CEPST parameters (r6470).&lt;br /&gt;
&lt;br /&gt;
The color &#039;GRAY&#039; is now defined as the RGB value 96:96:96, which fixes the bug where cursors were invisible on a &#039;GRAY&#039; background (r6148).&lt;br /&gt;
&lt;br /&gt;
The &amp;quot;SET graph XSCALE&amp;quot; flag &amp;quot;/I&amp;quot; is now working (r6187).&lt;br /&gt;
&lt;br /&gt;
Using the correct normal/dual/tight phase vocoder pv filters (r5874).&lt;br /&gt;
&lt;br /&gt;
All valid number formats (including mmmE /-eee) can now be used in time-expressions (r5746).&lt;br /&gt;
&lt;br /&gt;
=== Corrections ===&lt;br /&gt;
&lt;br /&gt;
S_TOOLS-STx Version: 3.9&lt;br /&gt;
&lt;br /&gt;
A list of documentation corrections since the last release (3.7).&lt;br /&gt;
&lt;br /&gt;
The macro COBJ has been superseded by the COBJ class and no longer exists.&lt;br /&gt;
&lt;br /&gt;
The command SYSTEM MKDIR and SYSTEM RMDIR were undocumented.&lt;br /&gt;
&lt;br /&gt;
The SPAtom ASEG1 parameters are now in the correct order (&amp;lt;span class=&amp;quot;stxmacrocommandparameter-character&amp;quot;&amp;gt;TABS&amp;lt;/span&amp;gt; and &amp;lt;span class=&amp;quot;stxmacrocommandparameter-character&amp;quot;&amp;gt;TABM&amp;lt;/span&amp;gt; were swapped).&lt;br /&gt;
&lt;br /&gt;
The SPAtom VSPLIT was mistakenly documented as VSPLIT1.&lt;br /&gt;
&lt;br /&gt;
The macro DEBUGTB no longer exists.&lt;br /&gt;
&lt;br /&gt;
The descriptions of the different formulas used by the SPAtom MORLET have been corrected.&lt;br /&gt;
&lt;br /&gt;
The section FILE item command LOAD parameters were not documented as mandatory.&lt;br /&gt;
&lt;br /&gt;
Added description of shell variables SCRIPTFILEPATH, SCRIPTDIRECTORY AND SCRIPTMAINNAME.&lt;br /&gt;
&lt;br /&gt;
The AWEIGHT SPAtom has now been documented.&lt;br /&gt;
&lt;br /&gt;
The WAVEOUT SPAtom has now been documented.&lt;br /&gt;
&lt;br /&gt;
A list of documentation corrections since the last release (3.6.2).&lt;br /&gt;
&lt;br /&gt;
The BUTIL FILEDIALOG no longer has a &amp;lt;span class=&amp;quot;stxmacrocommandparameter-character&amp;quot;&amp;gt;path&amp;lt;/span&amp;gt; parameter.&lt;br /&gt;
&lt;br /&gt;
A list of documentation corrections since the last release (3.6.1).&lt;br /&gt;
&lt;br /&gt;
The SET table FIND &amp;lt;span class=&amp;quot;stxmacrocommandparameter-character&amp;quot;&amp;gt;cexpr&amp;lt;/span&amp;gt; format uses colons, not commas as delimiters.&lt;br /&gt;
&lt;br /&gt;
The SET value OUTPUT commands can take &amp;lt;span class=&amp;quot;stxmacrocommandoption-character&amp;quot;&amp;gt;/Double&amp;lt;/span&amp;gt; options.&lt;br /&gt;
&lt;br /&gt;
The description of the parameters for the NEW TABLE command where field definitions are possible has been corrected.&lt;br /&gt;
&lt;br /&gt;
The SET graph CURSORMODE command now describes the bound and locked parameters correctly.&lt;br /&gt;
&lt;br /&gt;
The VAR arithmetic operators DIV, MUL and SUB are actually called DIVIDE, MULTIPLY and SUBTRACT&lt;br /&gt;
&lt;br /&gt;
The SET graph ZSCALE command parameters were incorrect.&lt;br /&gt;
&lt;br /&gt;
=== Known Bugs ===&lt;br /&gt;
&lt;br /&gt;
S_TOOLS-STx Version: 3.9&lt;br /&gt;
&lt;br /&gt;
These bugs were known to exist at the time of the release and are proving difficult, if not impossible to fix.&lt;br /&gt;
&lt;br /&gt;
Interface&lt;br /&gt;
&lt;br /&gt;
Sometimes 44KB soundfiles are created, which are invalid. This bug has not proved easy to replicate, so if you can replicate it, please contact us ( \n  This e-mail address is being protected from spam bots, you need JavaScript enabled to view it  ).&lt;br /&gt;
&lt;br /&gt;
Can&#039;t delete an entry in the DataSet if it has no ID. It is highly unlikely that you will ever have a DataSet entry with no ID. If this is the case however, you must currently delete it by hand (Close S_TOOLS-STx, open the DataSet in a text editor and either give the offending entry an ID, or remove it). Should you be able to reproduce any action which creates an entry without an ID, please contact us ( \n  This e-mail address is being protected from spam bots, you need JavaScript enabled to view it  ).&lt;br /&gt;
&lt;br /&gt;
Spectrogram &amp;amp;amp; Parameters Viewer&lt;br /&gt;
&lt;br /&gt;
Interpolation of very short signals is incorrect (Deutsch - 2004-11-10 - since 1.0).&lt;br /&gt;
&lt;br /&gt;
Graphics&lt;br /&gt;
&lt;br /&gt;
Copying a display graphic to the clipboard and pasting into a graphics program does not always achieve the desired results. This bug will not be fixed in the foreseeable future. Some graphics programs paste it properly (IrfanView, Microsoft Word), others don&#039;t (PaintShop Pro) - (Jonnie White - 2004-07-14).&lt;br /&gt;
&lt;br /&gt;
Selected cursors is not visible if background is set to GRAY (White - 2004-07-12 - since 1.0).&lt;br /&gt;
&lt;br /&gt;
Macro&lt;br /&gt;
&lt;br /&gt;
The dialog control listbox does not handle displaying huge strings properly. This seems to be a problem with the underlying CListBox control (Becker/White - 2004-12 - since 1.0).&lt;br /&gt;
&lt;br /&gt;
The DCOM command INVOKEMETHOD Evaluate always returns an error when communicating with the R DCOM server even if the command was actually successful (Deutsch/White - 2004 - since 3.6.0).&lt;br /&gt;
&lt;br /&gt;
==3.8==&lt;br /&gt;
&lt;br /&gt;
3.8.3&lt;br /&gt;
&lt;br /&gt;
* BUGFIX: zoom in in viewer3 now working when zooming around active cursor&lt;br /&gt;
* BUGFIX: spectragram title display corrected (amin/amax)&lt;br /&gt;
* BUGFIX: CDLGMAP now deletes window only if it has created the window during construction&lt;br /&gt;
&lt;br /&gt;
3.8.2&lt;br /&gt;
&lt;br /&gt;
* BUGFIX: dataset path now displayed, even if it has spaces in it.&lt;br /&gt;
* BUGFIX: Parameter plot explicitly redrawn when new data is sent. This fixes the bug (reported by Julia Brandstaetter) where Set Zero and Undo were not working properly in Spectrogram and Parameter plot.&lt;br /&gt;
&lt;br /&gt;
3.8.1&lt;br /&gt;
&lt;br /&gt;
* BUGFIX: Warn user that more waveform samples are being sent than expected and refrain from crashing.&lt;br /&gt;
* BUGFIX: CDlgMap now always uses the next free dialog index for a new entry. This means that multiple maps can reference the same dialog and still work. The functions fci and nc were removed since they are never used. Display now using second event to synchronise creation and variable initialisation. This fixes the mysterious bug where the window class was only sometimes used.&lt;br /&gt;
* BUGFIX: If the polyline function is called with less than two points it no longer asserts, but rather ends gracefully.&lt;br /&gt;
* BUGFIX: send keys not processed by dialog on to graph hotkey handlers&lt;br /&gt;
* BUGFIX: spectrogram is now being initialised with the correct context menu when formants are displayed in it.&lt;br /&gt;
* BUGFIX: giving dialog focus if there are no graphs&lt;br /&gt;
* BUGFIX: buttons in dialogs in a graph no longer process normal mneumonics. This means that the graph can process them (for Moosmueller). Buttons can still be activated with return and the space bar and tabbed/arrowed to.&lt;br /&gt;
* BUGFIX: preventing race conditions in Attach/Detach. This removes one possible cause of autosave crashing. It does not guarantee, though, there to be no other reasons for autosave to crash.&lt;br /&gt;
&lt;br /&gt;
=Downloads=&lt;br /&gt;
The {{STX}} downloads are available here: https://s02kfs1.oeaw.ac.at/pub/stx&lt;/div&gt;</summary>
		<author><name>Jw</name></author>
	</entry>
	<entry>
		<id>https://mediawiki.kfs.oeaw.ac.at/stx/docs/wiki/index.php?title=File:Isflogo-480x480.png&amp;diff=10693</id>
		<title>File:Isflogo-480x480.png</title>
		<link rel="alternate" type="text/html" href="https://mediawiki.kfs.oeaw.ac.at/stx/docs/wiki/index.php?title=File:Isflogo-480x480.png&amp;diff=10693"/>
		<updated>2023-02-01T12:29:19Z</updated>

		<summary type="html">&lt;p&gt;Jw: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;/div&gt;</summary>
		<author><name>Jw</name></author>
	</entry>
	<entry>
		<id>https://mediawiki.kfs.oeaw.ac.at/stx/docs/wiki/index.php?title=File:Isf-logo125x125.png&amp;diff=10692</id>
		<title>File:Isf-logo125x125.png</title>
		<link rel="alternate" type="text/html" href="https://mediawiki.kfs.oeaw.ac.at/stx/docs/wiki/index.php?title=File:Isf-logo125x125.png&amp;diff=10692"/>
		<updated>2023-02-01T12:29:09Z</updated>

		<summary type="html">&lt;p&gt;Jw: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;/div&gt;</summary>
		<author><name>Jw</name></author>
	</entry>
	<entry>
		<id>https://mediawiki.kfs.oeaw.ac.at/stx/docs/wiki/index.php?title=File:Isf-logo.png&amp;diff=10691</id>
		<title>File:Isf-logo.png</title>
		<link rel="alternate" type="text/html" href="https://mediawiki.kfs.oeaw.ac.at/stx/docs/wiki/index.php?title=File:Isf-logo.png&amp;diff=10691"/>
		<updated>2023-02-01T12:25:15Z</updated>

		<summary type="html">&lt;p&gt;Jw: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;/div&gt;</summary>
		<author><name>Jw</name></author>
	</entry>
	<entry>
		<id>https://mediawiki.kfs.oeaw.ac.at/stx/docs/wiki/index.php?title=History_of_Changes&amp;diff=10689</id>
		<title>History of Changes</title>
		<link rel="alternate" type="text/html" href="https://mediawiki.kfs.oeaw.ac.at/stx/docs/wiki/index.php?title=History_of_Changes&amp;diff=10689"/>
		<updated>2020-12-30T06:38:05Z</updated>

		<summary type="html">&lt;p&gt;Jw: /* 5.0.6 */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;div class=&amp;quot;noautonum&amp;quot;&amp;gt;{{TOC limit|3}}&amp;lt;/div&amp;gt;&lt;br /&gt;
=5.0=&lt;br /&gt;
&lt;br /&gt;
==Features==&lt;br /&gt;
&lt;br /&gt;
===Compact Workspace Mode===&lt;br /&gt;
The Workspace now has a [[User_Guide/Workspace#Modes|compact mode]]. The compact mode is a simplified interface for new users. Although it was designed with linguists in mind, it can be used by anyone.&lt;br /&gt;
&lt;br /&gt;
===webMAUS===&lt;br /&gt;
Automatic segmentation using the [https://clarin.phonetik.uni-muenchen.de/BASWebServices/interface webMAUS] REST API. This has been implemented in the toolbox [[User_Guide/Toolbox/runMAUSBasicDlg|&amp;lt;samp&amp;gt;runMAUSBasicDlg&amp;lt;/samp&amp;gt;]].&lt;br /&gt;
&lt;br /&gt;
==Bugfixes==&lt;br /&gt;
&lt;br /&gt;
* Correctly handle corrupt Workspace file (generate new one, rather than silently exiting)&lt;br /&gt;
&lt;br /&gt;
==5.0.6==&lt;br /&gt;
&lt;br /&gt;
Released: 30th December 2020&lt;br /&gt;
&lt;br /&gt;
Revision: 10071&lt;br /&gt;
&lt;br /&gt;
* bugfix: No longer dying with &amp;quot;The parameter is incorrect&amp;quot; error&lt;br /&gt;
&lt;br /&gt;
==5.0.4==&lt;br /&gt;
&lt;br /&gt;
Released: 12th November 2019&lt;br /&gt;
&lt;br /&gt;
Revision: 10016&lt;br /&gt;
&lt;br /&gt;
* bugfix: SPExL V1.1.11. Adding new segments respects vertical drawing order. &lt;br /&gt;
* bugfix: SPExL V1.1.11. Faster deselection of segments. &lt;br /&gt;
* bugfix: Real-time waterfall axis drawing correctly&lt;br /&gt;
* bugfix: show/hide sectioner setting now respected.&lt;br /&gt;
* bugfix: sectioner height setting now respected.&lt;br /&gt;
&lt;br /&gt;
==5.0.3==&lt;br /&gt;
&lt;br /&gt;
Released: 1st October 2019&lt;br /&gt;
&lt;br /&gt;
Revision: 9967&lt;br /&gt;
&lt;br /&gt;
* feature: Signal.All is now selected by default, if no other segment is selected.&lt;br /&gt;
* feature: When exporting profiles, the present working directory is used, rather than always selecting the &#039;profiles&#039; directory. The profiles directory is only used if the present working directory is the root directory.&lt;br /&gt;
* feature: The first sound file in the project is selected by default in the compact mode.&lt;br /&gt;
* bugfix: When adding a file per drag and drop, the file is now selected.&lt;br /&gt;
* bugfix: enabling a disabled edit box now sets the background color correctly (back to white).&lt;br /&gt;
* bugfix: debugger trace window now visible in release version too&lt;br /&gt;
* bugfix: [[Programmer_Guide/Command_Reference/SYSINFO|SYSINFO]] command now supports Windows 8.1 and Windows 10 (was returning Windows 8)&lt;br /&gt;
* bugfix: SPExL V1.1.10. Playlist listview now processes listsorted message and displays sort order set by clicking a column heading. The sort order was first being displayed when clicking in the control after clicking the column heading.&lt;br /&gt;
* bugfix: The &#039;Start&#039; button should now be activated correctly in the Compact Mode.&lt;br /&gt;
&lt;br /&gt;
==5.0.2==&lt;br /&gt;
&lt;br /&gt;
Released: 19th September 2019&lt;br /&gt;
&lt;br /&gt;
Revision: 9946&lt;br /&gt;
&lt;br /&gt;
* bugfix:  The context menu Add Sound File now working from the Audio File list in the Compact Mode.&lt;br /&gt;
* feature: The possible number of plots in XPlot was increased from 64 to 128&lt;br /&gt;
&lt;br /&gt;
==5.0.0==&lt;br /&gt;
&lt;br /&gt;
Released: 12th September 2019&lt;br /&gt;
&lt;br /&gt;
Revision: 9935&lt;br /&gt;
&lt;br /&gt;
Initial release.&lt;br /&gt;
&lt;br /&gt;
=4.4=&lt;br /&gt;
&lt;br /&gt;
==Features==&lt;br /&gt;
===Transcription Script SPExL 1.1.6===&lt;br /&gt;
The transcription script SPExL has been simplified and improved.&lt;br /&gt;
* Hotkeys can be defined by the user in the SPExL_SegTrans.hotkeys file&lt;br /&gt;
* The number of available &#039;views&#039; has been reduced to 3:&lt;br /&gt;
** wave overview &amp;amp; spg. section (a waveform of the whole file in the top graph, with a section of the file as spectrogram below)&lt;br /&gt;
** wave only (a waveform of a section of the file with scrollbar functionality)&lt;br /&gt;
** wave and spg. section (a synced waveform and spectrogram of a section of the file with scrollbar functionality)&lt;br /&gt;
* Segment selection between graphs and the list are now synchronised. If you select a segment in the graph, it is selected in the list and vice versa.&lt;br /&gt;
* Changes made to the project (new segments, edited attributes) are now made directly in the project rather than the user having to explicitly press the &#039;save segments to project file&#039; button to copy them from SPExL to the Workspace. Note that they are only written to disk, however, if the project is saved (press the &#039;Save&#039; button).&lt;br /&gt;
===Visible Segment Attributes Saved per Project File===&lt;br /&gt;
If you choose to display other attributes other than the default attributes in the Workspace Detail View, these settings are now saved in the open project file. When a project file is then opened, the relevant attribute list is loaded and used, rather than the user having to [[User_Guide/Workspace/Detail/Search_for_Element_Attributes|search for them]] again. You can still modify which attributes are displayed using the General Settings [[User_Guide/Workspace/Application_and_Setup_Tree/Options/General_Settings#.22Set.22_Attributes_.26_.22Segment.22_Attributes|&#039;Select &amp;quot;Segment&amp;quot; Attributes&#039; dialog]].&lt;br /&gt;
===Global / Profile Sectioner Settings===&lt;br /&gt;
The sectioner settings in the {{Viewer2}} analysis application were always global to STx. As of STx 4.4.0, you can choose to save your sectioner settings with your profile. The default is still the &#039;global&#039; variant. To switch to profile sectioner settings, uncheck the &#039;&#039;&#039;use global sectioner settings&#039;&#039;&#039; checkbox in the {{Viewer2}} [[User_Guide/Spectrogram_and_Parameter_Viewer/Settings_Dialog|settings dialog]].&lt;br /&gt;
&lt;br /&gt;
==4.4.10==&lt;br /&gt;
&lt;br /&gt;
Released: 17th January 2019&lt;br /&gt;
&lt;br /&gt;
Revision: 9712&lt;br /&gt;
&lt;br /&gt;
* bugfix: playback gain factor - the playback gain is now working also for asio devices (see CSTXASIOEngine::Transfer())&lt;br /&gt;
* bugfix: renumbering command did not update detail as expected.&lt;br /&gt;
* bugfix: the update version dialogs now display the correct workspace path&lt;br /&gt;
&lt;br /&gt;
==4.4.9==&lt;br /&gt;
&lt;br /&gt;
Released: 25th September 2018&lt;br /&gt;
&lt;br /&gt;
Revision:&lt;br /&gt;
&lt;br /&gt;
* feature: don&#039;t ask user where to put sound file if there are no sets in the project.&lt;br /&gt;
* feature: dragging and dropping a template onto {{ST}X} copies it to the templates folder.&lt;br /&gt;
* feature: added &#039;Open Containing Folder&#039; context menu for sound files and links. Improved contextualisation of context menu in detail (overview==root/set)&lt;br /&gt;
* feature: &#039;txt2wav&#039; script: Adding decimal symbol and field delimiter to parameters, as well as the ability to specify which extension to use to filter files (was hard-coded to &#039;txt&#039;). Now this macro can be used to&lt;br /&gt;
* feature: bdataset createwave and createwwaveex now take an openmode keyword: auto|create|read|write, which is passed on to bsf open. This means that we can now open files in modes other than &#039;auto&#039;.&lt;br /&gt;
process CSV files.&lt;br /&gt;
* bugfix: very long capture text for edit controls with &#039;text above&#039; could lead to capture static being longer than the edit control and unintentionally overlapping with other controls (e.g. in Transcription Setup dialog).&lt;br /&gt;
* bugfix: closing con log window no longer resets PARENT shell variable, unless it is set the the con log window itself.&lt;br /&gt;
* bugfix: sound files now opened using the FILE_SHARE_READ dwShareMode. This should mean, that STx no longer prevents other processes from reading the sound files. &lt;br /&gt;
* bugfix: viewer opens sound file in read mode, rather than read/write.&lt;br /&gt;
* bugfix: the !PATH attribute (MakePath()) now returns the correct path for files in the root of a drive. Bug was introduced in r8998 (STx 4.2.19). This was, for example, was causing sound files in the root directory not to be unloaded, and hence was causing sharing violations.&lt;br /&gt;
&lt;br /&gt;
==4.4.8==&lt;br /&gt;
&lt;br /&gt;
Released: 25th July 2018&lt;br /&gt;
&lt;br /&gt;
Revision: 9500&lt;br /&gt;
&lt;br /&gt;
* feature: Spectrogram &amp;amp; Parameters viewer sectioner window now remembers which function cursor is bound to when being replotted.&lt;br /&gt;
* feature: The &amp;lt;samp&amp;gt;downsampling.sts&amp;lt;/samp&amp;gt; script now has a &amp;lt;samp&amp;gt;ResampleCLI&amp;lt;/samp&amp;gt; macro for automatic resampling of one or more files (see source). The old &amp;lt;samp&amp;gt;ResampleDialog&amp;lt;/samp&amp;gt; was renamed to &amp;lt;samp&amp;gt;ResampleDLG&amp;lt;/samp&amp;gt;.&lt;br /&gt;
* feature: Adding help for &amp;quot;Import_PRAAT_TextGrid&amp;quot; toolbox.&lt;br /&gt;
* feature: Adding ability to edit &#039;Sectioner Settings&#039; from the profile dialog. &lt;br /&gt;
* feature: Transcription 1.1.8 - removed segment &#039;refresh&#039; button, since segments always reflect current project state.&lt;br /&gt;
* bugfix: a window that was maximised will now be maximised to the correct monitor. It was always being maximised to monitor 1 on display creation.&lt;br /&gt;
* bugfix: the profile version number is now imported with the profile. This means that, for example, the use global profile settings flag is now also set correctly on import.&lt;br /&gt;
* bugfix: minor fix of position of two controls which were overlapping with controls beneath&lt;br /&gt;
* bugfix: stop playback cursor if wave is stopped by starting playback in another graph. Beforehand, the playback cursor was stopped if it got to the end, or the ESC key was pressed.&lt;br /&gt;
* bugfix: Y coordinate vector conversion was inaccurate by 1 pixel (bug introduced in r2536) This affects the XY, parameter, scatter, wave and waterfall functions.&lt;br /&gt;
&lt;br /&gt;
==4.4.6==&lt;br /&gt;
&lt;br /&gt;
Released: 21. March 2018&lt;br /&gt;
&lt;br /&gt;
Revision: 9441&lt;br /&gt;
&lt;br /&gt;
* bugfix: some bugfixes and minor changes in BSeq &lt;br /&gt;
* bugfix: BScript: logging of unhandled messages in msg-loop disabled // Conlog: /ton and /toff options implemented (timer on/off + show elapsed time) &lt;br /&gt;
* bugfix: Viewer3 settings now being saved (bug introduced in r9318 - STx 4.4.0)&lt;br /&gt;
* bugfix CShellFile::Status() - catch CTime exception if file time is illegal (avoid program crash)&lt;br /&gt;
&lt;br /&gt;
==4.4.5==&lt;br /&gt;
&lt;br /&gt;
Released: 19. February 2018&lt;br /&gt;
&lt;br /&gt;
Revision: 9416&lt;br /&gt;
&lt;br /&gt;
* bugfix: in Viewer2 large asegtemplates (with many fields) are now displayed correctly - note: the same problem exists in Viewer1 if the segment dialog part (created by the macro call &amp;quot;&amp;quot;metasegment msdialog&amp;quot;) needs more than 90 controls (around 40 segment attributes)&lt;br /&gt;
* feature: the bscript.stx function loaddata (con loaddata) can now also load string tables (extenden tables) from csv-files. The file types TEXT/TEXTCONTINUATION (numeric parameter table), STRING/STRINCONTINUATION (extended string table) and BINARY (binary stx-data files) are available. Type ASCII/ASCIICONTINUATION has been removed.&lt;br /&gt;
* feature: new feature (bugfix?): CShellTable::Read() - handling of field-separator tab has been changed - empty fields are now possible - warning: may have an effect on existing script/macro code!&lt;br /&gt;
&lt;br /&gt;
==4.4.4==&lt;br /&gt;
&lt;br /&gt;
Released: 26. January 2018&lt;br /&gt;
&lt;br /&gt;
Revision: 9404&lt;br /&gt;
&lt;br /&gt;
* bugfix: combobox entries with underliners retain their underliners now in the workspace detail (reported by Anton Baotic), and in Spexl.&lt;br /&gt;
&lt;br /&gt;
==4.4.3==&lt;br /&gt;
&lt;br /&gt;
Released: 18. December 2017&lt;br /&gt;
&lt;br /&gt;
Revision: 9391&lt;br /&gt;
&lt;br /&gt;
* bugfix: adding missing Transcription hotkey file and retisimo scripts&lt;br /&gt;
&lt;br /&gt;
==4.4.2==&lt;br /&gt;
&lt;br /&gt;
Released: 30. November 2017&lt;br /&gt;
&lt;br /&gt;
Revision: 9377&lt;br /&gt;
&lt;br /&gt;
* bugfix: SPExL Transcription script V1.1.7: the /U ASegTemplate flag is now respected, and, if used, the last entered value for a segment attribute is used as the default for the next new segment.&lt;br /&gt;
* bugfix: default profile names no longer have the invalid blank character in them. A check was also added, so new profiles cannot be created with blanks.&lt;br /&gt;
&lt;br /&gt;
==4.4.1==&lt;br /&gt;
&lt;br /&gt;
Released: 23. November 2017&lt;br /&gt;
&lt;br /&gt;
Revision: 9369&lt;br /&gt;
&lt;br /&gt;
* bugfix: if zooming is turned off in {{Viewer2}}, segments are now correctly visible on the Y axis. This bug has existed since at least STx 4.2.&lt;br /&gt;
&lt;br /&gt;
==4.4.0==&lt;br /&gt;
&lt;br /&gt;
Released: 14 November 2017&lt;br /&gt;
&lt;br /&gt;
Revision: 9350&lt;br /&gt;
&lt;br /&gt;
Initial release.&lt;br /&gt;
&lt;br /&gt;
=4.3=&lt;br /&gt;
&lt;br /&gt;
==Features==&lt;br /&gt;
====Load or export parameters from super or sub segments====&lt;br /&gt;
Parameters from super segments or from sub segments can now be loaded into the selected segment. For example, if you have analysed a word and corrected the parameters, you can use these corrected parameters when viewing phoneme segments within the word. This is achieved by selecting &#039;super segment data only&#039; setting in the Viewer settings [[User_Guide/Spectrogram_and_Parameter_Viewer/Settings_Dialog#Parameter_IO_Configuration|Parameter IO Configuration]] dialog.&lt;br /&gt;
&lt;br /&gt;
It is possible to select which super/sub segment parameters should be used, filtering by time, attribute or ID.&lt;br /&gt;
&lt;br /&gt;
This feature is also available in the parameter export dialog.&lt;br /&gt;
&lt;br /&gt;
====Parameter setting summary====&lt;br /&gt;
A summary of the settings used for parameter analysis is now saved with the parameter in the project file. This information is displayed in the [[User_Guide/Workspace/Detail/Views/Parameter_View|Parameter View]].&lt;br /&gt;
&lt;br /&gt;
====Exact sample positioning in {{Viewer2}}====&lt;br /&gt;
&lt;br /&gt;
You can now select a position in the [[User_Guide/Spectrogram_and_Parameter_Viewer#Waveform_zoom_window|Waveform Zoom window]] in {{Viewer2}} and move the active time cursor to that position using the hotkey &#039;1&#039;. This is useful for exact positioning of the time cursors when segmenting, for example, words.&lt;br /&gt;
&lt;br /&gt;
==4.3.10==&lt;br /&gt;
&lt;br /&gt;
Released: 26. January 2018&lt;br /&gt;
&lt;br /&gt;
Revision: 9407&lt;br /&gt;
*bugfix: do not allow user to give a profile a name including blanks.&lt;br /&gt;
*bugfix: renaming spectrum profiles (removing blanks)&lt;br /&gt;
*bugfix: the correct most recently entered value in a listctrl is now saved (not the last in the list).&lt;br /&gt;
*bugfix: passing delete, insert and back keys to static control.&lt;br /&gt;
*bugfix: &#039;spexl*.hotkeys.default&#039; &#039;retisimo.sts&#039; &#039;retisimo_*.sts&#039; &#039;HRTF_II_new.txt&#039; &#039;downsample.sts&#039; files are now being copied too (bug introduced in r8789)&lt;br /&gt;
*bugfix: removing extraneous / from Editing segments help URL&lt;br /&gt;
*bugfix: combobox entries with underliners retain their underliners now in the workspace detail (reported by Anton Baotic), and in Spexl.&lt;br /&gt;
&lt;br /&gt;
==4.3.9==&lt;br /&gt;
&lt;br /&gt;
Released: 23. November 2017&lt;br /&gt;
&lt;br /&gt;
Revision: 9363&lt;br /&gt;
&lt;br /&gt;
* bugfix: if zooming is turned off in {{Viewer2}}, segments are now correctly visible on the Y axis. This bug has existed since at least STx 4.2.&lt;br /&gt;
&lt;br /&gt;
==4.3.8==&lt;br /&gt;
&lt;br /&gt;
Released: 14. November 2017&lt;br /&gt;
&lt;br /&gt;
Revision: 9347&lt;br /&gt;
&lt;br /&gt;
* bugfix: zooming and replotting in the xplot class now working&lt;br /&gt;
* feature: user is now informed about bugfixes in current release, and/or new major/minor releases. This means that you will be informed of bug fixes for your version of STx, not just for the newest STx.&lt;br /&gt;
&lt;br /&gt;
==4.3.7==&lt;br /&gt;
&lt;br /&gt;
Released: 19. October 2017&lt;br /&gt;
&lt;br /&gt;
Revision: 9328&lt;br /&gt;
&lt;br /&gt;
* bugfix: stx no longer crashing on y zoom (bug introduced in r9293 - STx 4.3.6)&lt;br /&gt;
* bugfix: binary_file_example.sts now working&lt;br /&gt;
* bugfix: if navigating in file dialog using the keyboard, the edit box is now updated with the selected file.&lt;br /&gt;
&lt;br /&gt;
==4.3.6==&lt;br /&gt;
&lt;br /&gt;
Released 25. September 2017&lt;br /&gt;
&lt;br /&gt;
Revision: 9297&lt;br /&gt;
&lt;br /&gt;
* bugfix: the spectrogram dataset now frees up memory once dataset is drawn&lt;br /&gt;
* bugfix: adding specials folder to installer&lt;br /&gt;
&lt;br /&gt;
==4.3.5==&lt;br /&gt;
&lt;br /&gt;
Released: 6. September 2017&lt;br /&gt;
&lt;br /&gt;
Revision: 9286&lt;br /&gt;
&lt;br /&gt;
* bugfix: auto-saving the project file no longer leaks memory&lt;br /&gt;
* bugfix: editing segments in the workspace now uses the segment template by default&lt;br /&gt;
* bugfix: a backup copy of the project file is now made when saving&lt;br /&gt;
* bugfix: lists with one item are now selectable with the keyboard&lt;br /&gt;
* bugfix: listview column width now calculated with correct font&lt;br /&gt;
* bugfix: default values from aseg templates now written to new segment before editing&lt;br /&gt;
* bugfix: correct default value written to segment, even if attribute value starts with a number&lt;br /&gt;
* bugfix: combobox entries no longer replacing underlines&lt;br /&gt;
&lt;br /&gt;
==4.3.4==&lt;br /&gt;
&lt;br /&gt;
Released: 3. July 2017&lt;br /&gt;
&lt;br /&gt;
Revision: 9214&lt;br /&gt;
&lt;br /&gt;
====Features====&lt;br /&gt;
* feature: the [[Programmer_Guide/Macro_Library/CONLOG|conlog]] command can now log to a file.&lt;br /&gt;
====Bug Fixes====&lt;br /&gt;
* bugfix: the conlog savedata command no longer fails silently if the file cannot be created.&lt;br /&gt;
&lt;br /&gt;
==4.3.3==&lt;br /&gt;
&lt;br /&gt;
Released: 19. June 2017&lt;br /&gt;
&lt;br /&gt;
Revision: 9185&lt;br /&gt;
&lt;br /&gt;
====Bug Fixes====&lt;br /&gt;
* bugfix: segment address in the Transcription script is now rounded to 10th of a millisecond (4 decimal places) rather than 1 millisecond.&lt;br /&gt;
* bugfix: saving the project file now resets the automatic save timer.&lt;br /&gt;
* bugfix: the Transcription, Import Word List and Reorder Word List should now be working correctly again.&lt;br /&gt;
====Features====&lt;br /&gt;
* feature: new script: [[User_Guide/Scripts/Anonymize.sts|Anonymize.sts]] - anonymize segments (attributes and signal) - requested by the ARI phonetics group&lt;br /&gt;
* feature: adding option to automatically save every minute.&lt;br /&gt;
&lt;br /&gt;
==4.3.2==&lt;br /&gt;
&lt;br /&gt;
Released: 13. June 2017&lt;br /&gt;
&lt;br /&gt;
Revision: 9170&lt;br /&gt;
&lt;br /&gt;
====Bug Fixes====&lt;br /&gt;
* bugfix: The segment &#039;Signal.All&#039; is now created when a new sound file is imported. This bug was introduced in version 4.3.1.&lt;br /&gt;
* bugfix: the &#039;wave-only&#039; view in the Transcription script is now available again.&lt;br /&gt;
&lt;br /&gt;
==4.3.1==&lt;br /&gt;
&lt;br /&gt;
Released: 8. June 2017&lt;br /&gt;
&lt;br /&gt;
Revision: 9165&lt;br /&gt;
&lt;br /&gt;
====Bug Fixes====&lt;br /&gt;
&lt;br /&gt;
* bugfix: clicking SPExL graph whilst editing segment in the segment list now draws the segment in the graph (previously needed an explicit refresh to draw the segment).&lt;br /&gt;
* bugfix: the workspace is now saved even if the path contains spaces (bug introduced in r8843)&lt;br /&gt;
* bugfix: searching using keyboard in listctrl now working in correct order (not backwards). Bug introduced in r9002.&lt;br /&gt;
* bugfix: zooming out in SPExL on the y axis with Ctrl+Subtract is now working correctly. This appears to have been around since at least r4442 (STx 3.9)&lt;br /&gt;
* bugfix: y position of cursors is now retained when zooming&lt;br /&gt;
* bugfix: Viewers/SPEXL create segments at selected address and not with P=0 and L=0&lt;br /&gt;
* bugfix: maximising whilst spectrogram is drawing no longer leaves the spectrogram in unfinished version on screen (set new &#039;m_bRecalculate&#039; flag to force recalculation/redraw when dataset sync has finished).&lt;br /&gt;
&lt;br /&gt;
==4.3.0==&lt;br /&gt;
&lt;br /&gt;
Released: April 2017&lt;br /&gt;
&lt;br /&gt;
Revision: 9149&lt;br /&gt;
&lt;br /&gt;
=Older Versions=&lt;br /&gt;
&lt;br /&gt;
==4.2==&lt;br /&gt;
====4.2.23====&lt;br /&gt;
Released: 24 August 2017&lt;br /&gt;
Revision: 9264&lt;br /&gt;
* BUGFIX: correct font used for calculation of formant dialog column size in {{Viewer2}}&lt;br /&gt;
&lt;br /&gt;
====4.2.22====&lt;br /&gt;
Released: 25 January 2017&lt;br /&gt;
Revision: 9064&lt;br /&gt;
* BUGFIX: The following wildcard string comparison will now match:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
if &#039;*ha&#039; =SI &#039;haha&#039; then&lt;br /&gt;
   // it&#039;s a match :-)&lt;br /&gt;
end&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
* BUGFIX: Changed behavior of comparisons in FIND-TABLE/XML: if a field/attribute is not defined all &amp;quot;notequal&amp;quot; and &amp;quot;notmatching&amp;quot; operators evaluates to &amp;quot;true&amp;quot; and all others to &amp;quot;false&amp;quot;&lt;br /&gt;
&lt;br /&gt;
====4.2.21====&lt;br /&gt;
Released: 9 January 2017&lt;br /&gt;
Revision: 9023&lt;br /&gt;
* BUGFIX: Edit segment dialog now referencing correct segment attributes (bug introduced in r8852 - STx 4.2.15)&lt;br /&gt;
&lt;br /&gt;
====4.2.20====&lt;br /&gt;
Released: 23 December 2016&lt;br /&gt;
* FEATURE: STx now informs the user of available update via the About dialog.&lt;br /&gt;
* BUGFIX: Removing non-existent files from STX.INI when loading&lt;br /&gt;
* BUGFIX: About dialog no long blocking workspace file.&lt;br /&gt;
&lt;br /&gt;
====4.2.19====&lt;br /&gt;
Released: 12th December 2016&lt;br /&gt;
* BUGFIX: Ctrl+U no longer the same as Ctrl+Shift+U in, e.g., signal view.&lt;br /&gt;
* BUGFIX: Generating correct hotkey string for Ctrl+Shift+&amp;lt;key&amp;gt;&lt;br /&gt;
* BUGFIX: Switching from long to short list of segments in the workspace should no longer lead to a blank detail.&lt;br /&gt;
* BUGFIX: Transcription left cursor right bitmap now correct image&lt;br /&gt;
* BUGFIX: Fixed bug in Viewer2 where setting the range did not work under all circumstances.&lt;br /&gt;
* BUGFIX: Focus moving with selection for listview key navigation and single selection.&lt;br /&gt;
* BUGFIX: Copy attributes in the Workspace overview now includes first value (bug introduced in r8297)&lt;br /&gt;
* BUGFIX: Checkbox size increased because some strings were being cut off.&lt;br /&gt;
* BUGFIX: Show Find Dialog menu now checked if Show Find Dialog is visible&lt;br /&gt;
* BUGFIX: Occasional crash in {{Viewer2}} fixed by removing use of static with CString (r9010,r9012).&lt;br /&gt;
&lt;br /&gt;
====4.2.18====&lt;br /&gt;
Released: 27 October 2016&lt;br /&gt;
&lt;br /&gt;
* FEATURE: adding PCM info to edit sound file dialog for editing existing project files too.&lt;br /&gt;
* FEATURE/BUGFIX: Improved listview keyboard handling (up/down, page up, page down). Disabled scrolling of listview whilst editing.&lt;br /&gt;
* BUGFIX: viewer2 no longer hangs if saved rmsb-data are loaded and displayed with autoscale-option&lt;br /&gt;
* BUGFIX: detail sequence view now using Ctrl+Shift+U to move selected entry up and Ctrl+Shift+D to move selected entry down (rather than Ctrl+UP and Ctrl+Down - which conflict with internal listview keyboard handling).&lt;br /&gt;
* BUGFIX: bscript log window no longer jumps in front of SPExL window when a dialog is opened.&lt;br /&gt;
* FEATURE: releases are now digitally signed by the Österreichische Akademie der Wissenschaften&lt;br /&gt;
* NOTE: the pole-zero sectioner in the {{Viewer2}} application is extremely slow for high frame rates. We are working on improving it.&lt;br /&gt;
&lt;br /&gt;
====4.2.17====&lt;br /&gt;
Released: 26 September 2016&lt;br /&gt;
* BUGFIX: Transcription (SPExL) segment list handling working correctly again (bug introduced in 4.2.16)&lt;br /&gt;
* BUGFIX: Moving selected sequence entry up/down with keyboard now uses the hotkeys Ctrl+Shift+U and Ctrl+Shift+D (rather than Ctrl+Up and Ctrl+Down) and now works as expected.&lt;br /&gt;
&lt;br /&gt;
====4.2.16====&lt;br /&gt;
Released: 30 August 2016&lt;br /&gt;
* Support for Windows XP has been removed.&lt;br /&gt;
* FEATURE: the XPLOT member &amp;quot;FORALLGRAPHS&amp;quot; is now a public function.&lt;br /&gt;
* FEATURE: the XGRAPH function Zoom -&amp;gt; X-Sync was aded to apply the x-zoom of the current graph across all other graphs.&lt;br /&gt;
* BUGFIX: the Automatic Segment Names dialog no longer allows invalid segment names.&lt;br /&gt;
* BUGFIX: The palette import/export are working again.&lt;br /&gt;
* BUGFIX: The Application and Setup tree now correctly stores it&#039;s state.&lt;br /&gt;
* BUGFIX: Keyboard focus no longer disappears after pressing enter in the Workspace Detail.&lt;br /&gt;
* BUGFIX: The selected entry no longer centers itself after editing.&lt;br /&gt;
* BUGFIX: The Transcription script SPExL now plays single selections every time (not every second time).&lt;br /&gt;
* BUGFIX: Tabbing through the entries in the Workspace Detail no longer goes backwards instead of forwards.&lt;br /&gt;
&lt;br /&gt;
====4.2.15====&lt;br /&gt;
Released: unreleased&lt;br /&gt;
* FEATURE: Improved sound file export performance&lt;br /&gt;
* BUGFIX: The File-&amp;gt;Workspace-&amp;gt;Save As workspace menu command is now working (bug introduced in r4092)&lt;br /&gt;
* BUGFIX: parameter and function now drawing (invalidating) correctly if being set whilst zoomed in.&lt;br /&gt;
* BUGFIX: parameter export dialog no longer needs manual refresh (group box is now transparent - uses WS_EX_TRANSPARENT)&lt;br /&gt;
&lt;br /&gt;
====4.2.14====&lt;br /&gt;
Released: 18 January 2016&lt;br /&gt;
* Minimising GDI use&lt;br /&gt;
* Projects files are now associated with {{STX}}&lt;br /&gt;
* BUGFIX: one memory leak fixed&lt;br /&gt;
* BUGFIX: all help menus associated with mediawiki online help&lt;br /&gt;
====4.2.13====&lt;br /&gt;
Released: 22 December 2015&lt;br /&gt;
* Default help file now the STx Wiki ([https://www.kfs.oeaw.ac.at/stx/docs/wiki/ https://www.kfs.oeaw.ac.at/stx/docs/wiki/]).&lt;br /&gt;
* BUGFIX: Find Segments dialog no longer uses ASet search criteria for ASeg search criteria when ASeg criteria is empty&lt;br /&gt;
* BUGFIX: Find Segments dialog can now search for segments within a time range.&lt;br /&gt;
* BUGFIX: assigning number values to an integer field using table[,field] := eval $#num1 + $#num2 syntax now works&lt;br /&gt;
* BUGFIX: growing table by assigning no longer corrupts heap.&lt;br /&gt;
*BUGFIX: force context menu to display within dialog window, even if called directly from shell with 0,0 coordinates.&lt;br /&gt;
*BUGFIX: edit segment dialog is now initialised with the segment channel&lt;br /&gt;
*BUGFIX: context menu now rebuilt before being displayed to ensure that it reflects current state.&lt;br /&gt;
&lt;br /&gt;
====4.2.12====&lt;br /&gt;
Released: 4 December 2015&lt;br /&gt;
* Improved spectrogram &#039;overview&#039; visualisation.&lt;br /&gt;
&lt;br /&gt;
====4.2.11====&lt;br /&gt;
&lt;br /&gt;
Released: 16 November 2015&lt;br /&gt;
&lt;br /&gt;
* Added pole-zero to {{Viewer2}} Sectioner&lt;br /&gt;
* Bugfix: pane sizes are no longer reset in {{V2}} when sectioner settings dialog is closed.&lt;br /&gt;
* Bugfix: list view control header now correct size and clickable, and entries now selectable with one, rather than two clicks.&lt;br /&gt;
* Bugfix: copied attributes are no longer preceded by blank line&lt;br /&gt;
&lt;br /&gt;
====4.2.9====&lt;br /&gt;
&lt;br /&gt;
Released: 16 October 2015&lt;br /&gt;
&lt;br /&gt;
* Bugfix: saving to PNG working again&lt;br /&gt;
&lt;br /&gt;
====4.2.8====&lt;br /&gt;
&lt;br /&gt;
Released: 5 October 2015&lt;br /&gt;
&lt;br /&gt;
* Bugfix: the pole-zero method spectrogram overlay is now working correctly.&lt;br /&gt;
&lt;br /&gt;
====4.2.5====&lt;br /&gt;
&lt;br /&gt;
Released: 30 September 2015&lt;br /&gt;
&lt;br /&gt;
* Feature: the pole-zero method is now available as an overlay in the spectrogram and parameter viewer&#039;s spectrogram graph. Note however, that this is not bug free, so please wait for 4.2.6 if you&#039;re interested in this feature.&lt;br /&gt;
&lt;br /&gt;
====4.2.4====&lt;br /&gt;
&lt;br /&gt;
Released: 10 September 2015&lt;br /&gt;
&lt;br /&gt;
* Bugfix: added missing Visual C++ 2013 Redistributable Package&lt;br /&gt;
&lt;br /&gt;
====4.2.3====&lt;br /&gt;
&lt;br /&gt;
Released: 26 August 2015&lt;br /&gt;
&lt;br /&gt;
* Metasegment size modification now locks modification mode&lt;br /&gt;
&lt;br /&gt;
====4.2.2====&lt;br /&gt;
&lt;br /&gt;
Released: 15 June 2015&lt;br /&gt;
&lt;br /&gt;
* Viewer print font now legible&lt;br /&gt;
&lt;br /&gt;
====4.2.0====&lt;br /&gt;
&lt;br /&gt;
Released: February 2015&lt;br /&gt;
&lt;br /&gt;
=====Features=====&lt;br /&gt;
&lt;br /&gt;
* The speed of audio playback can now be set in the project interface&lt;br /&gt;
* The menu shell item has been given the alias &#039;DIALOG&#039; and will now be refered to as such in the documentation (r8578)&lt;br /&gt;
* Pole-Zero [[Programmer_Guide/SPU_Reference/PZTF|SPAtom]] and [[Programmer Guide/Command Reference/EVAL/pztf|EVAL]] methods are now available and are integrated into the [[User_Guide/Spectrogram_and_Parameter_Viewer/Methods/Polezero|Spectrogram and Parameter viewer]].&lt;br /&gt;
* Support for Windows 2000/XP has been removed&lt;br /&gt;
* Pole-Zero SPU and EVAL methods&lt;br /&gt;
* Multiple bug fixes&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==4.0==&lt;br /&gt;
&lt;br /&gt;
===4.0.0===&lt;br /&gt;
&lt;br /&gt;
Released: 2012&lt;br /&gt;
&lt;br /&gt;
==3.9==&lt;br /&gt;
&lt;br /&gt;
3.9.4&lt;br /&gt;
&lt;br /&gt;
Released: 15th October 2009&lt;br /&gt;
&lt;br /&gt;
* BUGFIX: real-time analyser drawing more smoothly&lt;br /&gt;
&lt;br /&gt;
3.9.3&lt;br /&gt;
&lt;br /&gt;
Released: 16th September 2009&lt;br /&gt;
&lt;br /&gt;
* BUGFIX: sequences now being saved.&lt;br /&gt;
&lt;br /&gt;
3.9.2&lt;br /&gt;
&lt;br /&gt;
Released: 30th July 2009&lt;br /&gt;
&lt;br /&gt;
* BUGFIX: segments no longer duplicated in un-linked datasets when importing metadata.&lt;br /&gt;
* BUGFIX: user-defined amplitude range working in waveform viewer&lt;br /&gt;
* BUGFIX: spectrogram amplitude floor now correct after using settings dialog&lt;br /&gt;
* BUGFIX: recorder application now recording&lt;br /&gt;
&lt;br /&gt;
3.9.1&lt;br /&gt;
&lt;br /&gt;
Released: 3rd July 2009&lt;br /&gt;
&lt;br /&gt;
* BUGFIX: cmenu check/uncheck working for consecutive items&lt;br /&gt;
* BUGFIX: text files items and the load command can now read files encoded with an &amp;quot;FE FF&amp;quot; byte order mark (encoded in UTF-16BE). The error message &amp;quot;unsupported byte order mark&amp;quot; is returned if a UTF-32BE or UTF-32LE byte order mark is found.Supported encodings specified using a byte order mark: UTF-8, UTF-16LE, UTF-16BE&amp;lt;br /&amp;gt; Other supported encodings:windows-1252&lt;br /&gt;
* BUGFIX: wave files with chunks defined after the data chunk now have the correct length.&lt;br /&gt;
* BUGFIX: saving dataset faster&lt;br /&gt;
* BUGFIX: &amp;quot;load soundfile&amp;quot; options should no longer conflict with each other&lt;br /&gt;
* BUGFIX: prevent stack overflow in XML files with many siblings (~ 20000)&lt;br /&gt;
* BUGFXI: closing rtanalyser whilst it is running now exits shell correctly (without leaving ghost process).&lt;br /&gt;
&lt;br /&gt;
3.9.0&lt;br /&gt;
&lt;br /&gt;
Released: 15th April 2009&lt;br /&gt;
&lt;br /&gt;
Graphical User Interface&lt;br /&gt;
&lt;br /&gt;
General&lt;br /&gt;
&lt;br /&gt;
S_TOOLS-STx now supports all fonts available on the host system.&lt;br /&gt;
&lt;br /&gt;
Comboboxes in ASegTemplates can now be made editable using the flag &amp;lt;span class=&amp;quot;stxmacrocommandoption-character&amp;quot;&amp;gt;/E&amp;lt;/span&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
You can enable/disable runtime error reporting in the Log Control dialog. It is disabled by default, and should only be enabled if you are having problems with S_TOOLS-STx.&lt;br /&gt;
&lt;br /&gt;
Workspace&lt;br /&gt;
&lt;br /&gt;
The segment list can now be edited in the Workspace.&lt;br /&gt;
&lt;br /&gt;
A summary of existing parameters can now be displayed in the segment list (see the Display and Layout Settings dialog).&lt;br /&gt;
&lt;br /&gt;
The Workspace Detail cells can now display text in multiple lines (see the Display and Layout Settings dialog).&lt;br /&gt;
&lt;br /&gt;
Spectrogram &amp;amp;amp; Parameters Viewer&lt;br /&gt;
&lt;br /&gt;
The Spectrogram &amp;amp;amp; Parameters Viewer can now display a harmonic cursor in the spectrogram graph.&lt;br /&gt;
&lt;br /&gt;
The Spectrogram &amp;amp;amp; Parameters Viewer spectrogram method Wavelet has been extended, and a new Cohen&#039;s class distribution method has been implemented.&lt;br /&gt;
&lt;br /&gt;
An amplitude legend is now available in spectrogram plots (via the context menu).&lt;br /&gt;
&lt;br /&gt;
DSP&lt;br /&gt;
&lt;br /&gt;
The band-pass filters now have a window parameter.&lt;br /&gt;
&lt;br /&gt;
Toolbox&lt;br /&gt;
&lt;br /&gt;
The toolbox AutoSeg is available in Spectrogram &amp;amp;amp; Parameters Viewer (if loaded) to automatically segment using peaks, clicks or pauses.&lt;br /&gt;
&lt;br /&gt;
A range of Klatt speech synthesis and resynthesis toolbox functions are available.&lt;br /&gt;
&lt;br /&gt;
The toolbox file &#039;SegmentImEx.sts&#039; implements toolbox functions to import and export segments in the [http://www.fon.hum.uva.nl/praat/ PRAAT] file format. These functions are available in the Workspace.&lt;br /&gt;
&lt;br /&gt;
Scripts&lt;br /&gt;
&lt;br /&gt;
A script specifically designed for transcription and annotation has been developed and included in the default installation of S_TOOLS-STx. The script can be found in the script directory in the file SPExL.sts. There is also a new entry called transcription in the Workspace script tree, which calls the default segmentation routine. The SPExL macro documentation is still being written.&lt;br /&gt;
&lt;br /&gt;
Macro Language&lt;br /&gt;
&lt;br /&gt;
General&lt;br /&gt;
&lt;br /&gt;
Modal window handling has now been moved to the NEW DISPLAY command. Use the option &amp;lt;span class=&amp;quot;stxmacrocommandoption-character&amp;quot;&amp;gt;/O=$#ownerDisplay&amp;lt;/span&amp;gt; to set the owner (which is behind the new display in the z-order. You may also use the option &amp;lt;span class=&amp;quot;stxmacrocommandoption-character&amp;quot;&amp;gt;/Modal&amp;lt;/span&amp;gt; to specify that the owner should be disabled whilst the new display exists.&lt;br /&gt;
&lt;br /&gt;
The NEW command can create objects which are protected from deletion (option &amp;lt;span class=&amp;quot;stxmacrocommandoption-character&amp;quot;&amp;gt;/U|u&amp;lt;/span&amp;gt;).&lt;br /&gt;
&lt;br /&gt;
The command STXCONSTANTS now supports the keywords BITMAPS and BUTTONS.&lt;br /&gt;
&lt;br /&gt;
The command TRANSLATE can now translate the contents of a variable or table.&lt;br /&gt;
&lt;br /&gt;
The command EXIT -xLevel now returns to the first macro defining the label label &amp;quot;OnExitAll&amp;quot; or to the toplevel macro (1st called macro) (rather than to the first macro where the variable #EXITLEVEL = xLevel).&lt;br /&gt;
&lt;br /&gt;
The new command TOKEN, an extended form of the command WORD, can tokenise a string using the specified delimiter.&lt;br /&gt;
&lt;br /&gt;
The new command TRIM can be used to trim characters from the beginning and end of a string.&lt;br /&gt;
&lt;br /&gt;
The new command QUOTE can quote all special characters in a string.&lt;br /&gt;
&lt;br /&gt;
The new command LINELENGTH, although similar to LENGTH, returns the length of a line including delimiters.&lt;br /&gt;
&lt;br /&gt;
The NAME command can now check XML attributes and S_TOOLS-STx XML IDs for syntactical validity. The NAME command can also return a UNC file name for a file on a mapped drive. This is useful, for example, for making DataSets portable in a network environment.&lt;br /&gt;
&lt;br /&gt;
The new command ARG can be used to retrieve macro arguments.&lt;br /&gt;
&lt;br /&gt;
The IREF command supports the option &amp;lt;span class=&amp;quot;stxmacrocommandoption-character&amp;quot;&amp;gt;/I&amp;lt;/span&amp;gt; to simplify and suppress certain error messages.&lt;br /&gt;
&lt;br /&gt;
The global variable @REPORTRUNTIMEERRORS can be set to 1 to display a dialog every time a error occurs when processing a command. Many commands can now take an option specifying that warnings should be generated, rather than errors (DRIVE, LOAD, UNLOAD, SET file LOAD|SAVE|STATUS|DELETE|RENAME|COPY|POSITION), READ, SEGMENT). If set to specify warnings, they will not cause a runtime error.&lt;br /&gt;
&lt;br /&gt;
The READ command (and its variants READSTR, READTAB and READVAR) have a new option &amp;lt;span class=&amp;quot;stxmacrocommandoption-character&amp;quot;&amp;gt;/E&amp;lt;/span&amp;gt; which can be used to escape characters in the input from being used as separators.&lt;br /&gt;
&lt;br /&gt;
Format strings can now add a new line character (\n), using the tag %n. The standard C format tags %x and %X are now supported.&lt;br /&gt;
&lt;br /&gt;
The KEYWORD command now supports the option &amp;lt;span class=&amp;quot;stxmacrocommandoption-character&amp;quot;&amp;gt;/F&amp;lt;/span&amp;gt; which prevents abbreviations from being found and &amp;lt;span class=&amp;quot;stxmacrocommandoption-character&amp;quot;&amp;gt;/C&amp;lt;/span&amp;gt; to make the comparison case sensitive.&lt;br /&gt;
&lt;br /&gt;
The new commands SYSTEMCALL and SYSTEMCALLX are variants of SYSTEM and SYSTEMX which return warnings rather than errors on failure.&lt;br /&gt;
&lt;br /&gt;
The command TGET can now return elapsed milliseconds, when the new option &amp;lt;span class=&amp;quot;stxmacrocommandoption-character&amp;quot;&amp;gt;/ms&amp;lt;/span&amp;gt; is used.&lt;br /&gt;
&lt;br /&gt;
The NAME command, when used with the new UNC subcommand can convert a file path on a mapped drive to its UNC equivalent. This help keep project files portable when accessed from multiple computers (E.g. when the z drive is mapped to \\server\data, the command &amp;quot;name &#039;z:\ds.xml&#039; unc&amp;quot; will return &amp;quot;\\server\data\ds.xml&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
The READ commands have a new option &amp;lt;span class=&amp;quot;stxmacrocommandoption-character&amp;quot;&amp;gt;/T&amp;lt;/span&amp;gt; which prevents arguments from being trimmed.&lt;br /&gt;
&lt;br /&gt;
The macro WINDOWSIZEDLG can be used to allow a user to set a window&#039;s size (width and height in pixels).&lt;br /&gt;
&lt;br /&gt;
SPAtoms&lt;br /&gt;
&lt;br /&gt;
The new SPAtom MIXALL mixes up to eight input arrays/vectors into an output array/vector with gain scaling.&lt;br /&gt;
&lt;br /&gt;
The new SPAtom WLANA performs a general wavelet analysis, and the SPAtom CCANA implement a Cohen Class distribution.&lt;br /&gt;
&lt;br /&gt;
The SPAtoms PVANA and PVSYN no accept a windowing function parameter.&lt;br /&gt;
&lt;br /&gt;
The new SPAtom KLATTSYN can be used to generate synthesised speech.&lt;br /&gt;
&lt;br /&gt;
EVAL command&lt;br /&gt;
&lt;br /&gt;
The EVAL command has the following new subcommands:&amp;lt;br /&amp;gt; formants - a new formant tracking algorithm.&amp;lt;br /&amp;gt; limit, limitlow, limithigh - limits values to within a range of values.&amp;lt;br /&amp;gt; min, max - can receive more than one parameter.&amp;lt;br /&amp;gt; cdot, ctrn, conj - complex dot product, matrix transposition and conjugation.&amp;lt;br /&amp;gt; f0ac - F0 detection using autocorrelation.&amp;lt;br /&amp;gt; The EVAL command now supports numerical (e.g. &amp;amp;gt;=), logical (e.g. &amp;amp;amp;&amp;amp;amp;) and ternary (e.g. eval $#a &amp;amp;gt; $#b ? $#a : $#b).&lt;br /&gt;
&lt;br /&gt;
The Macro Library&lt;br /&gt;
&lt;br /&gt;
The DATASETCMD has a new subcommand AUTOSAVE with which you can turn the DataSet autosave feature on and off.&lt;br /&gt;
&lt;br /&gt;
The GRAPHSETUP macro.&lt;br /&gt;
&lt;br /&gt;
The new CGRAPHSETUP command GRAPHLEGEND displays an amplitude legend in a spectrogram plot.&lt;br /&gt;
&lt;br /&gt;
The new CGRAPHSETUP command GETCOLORPALETTE retrieves the print or screen palette in an extended table.&lt;br /&gt;
&lt;br /&gt;
The new CGRAPHSETUP command GETPROFILELIST returns a simple table with a list of color profiles defined in the settings file (S_TOOLS-STx INI).&lt;br /&gt;
&lt;br /&gt;
===== Classes =====&lt;br /&gt;
&lt;br /&gt;
BXMLDoc class&lt;br /&gt;
&lt;br /&gt;
The SETELEMENT function can now take a table containing attribute/value pairs.&lt;br /&gt;
&lt;br /&gt;
CMenu class&lt;br /&gt;
&lt;br /&gt;
The new CMenu function AddToolBoxMenu adds the standard toolbox menu items to the menu.&lt;br /&gt;
&lt;br /&gt;
XPlot class&lt;br /&gt;
&lt;br /&gt;
When constructing an XPlot instance, an owner window may now be specified.&lt;br /&gt;
&lt;br /&gt;
===== Shell Items =====&lt;br /&gt;
&lt;br /&gt;
Dialog Item&lt;br /&gt;
&lt;br /&gt;
The dialog edit control has a new option &#039;&amp;lt;span class=&amp;quot;stxmacrocommandoption-character&amp;quot;&amp;gt;/F&amp;lt;/span&amp;gt;&#039; which forwards KEY messages to the shell.&lt;br /&gt;
&lt;br /&gt;
There are now four &#039;types&#039; of edit control and a host of new parameters, which means it can display syntax highlighting, be used as a command line interface, etc.&lt;br /&gt;
&lt;br /&gt;
A listview&#039;s cells can now be editable. The option &amp;lt;span class=&amp;quot;stxmacrocommandoption-character&amp;quot;&amp;gt;/E&amp;lt;/span&amp;gt; which must be set for a ListView to be editable. The message CELLEDITED is sent if it is editable and its contents has been changed. If the user cancels editing, the message CELLCANCELLED is sent to the shell. If editing is ended because the user presses &amp;lt;span class=&amp;quot;stxhotkey&amp;quot;&amp;gt;TAB&amp;lt;/span&amp;gt; or &amp;lt;span class=&amp;quot;stxhotkey&amp;quot;&amp;gt;Shift TAB&amp;lt;/span&amp;gt;, the CELLEDITEDTAB or CELLEDITEDBACKTAB messages are sent. You can set the focus to a specific cell and enter editing mode using the new command SET dialogItem listviewIndex STARTEDIT.&lt;br /&gt;
&lt;br /&gt;
The listview now supports the &amp;lt;span class=&amp;quot;stxmacrocommandoption-character&amp;quot;&amp;gt;/F&amp;lt;/span&amp;gt; flag which forwards specific key types to the shell.&lt;br /&gt;
&lt;br /&gt;
The listview supports a new option /R=n, which determines the maximum number of lines of text which can be displayed in the listview.&lt;br /&gt;
&lt;br /&gt;
The new attribute !FOREGROUND returns 1 if the dialog window is in the foreground, 0 if it is not and -1 if the command fails in some way.&lt;br /&gt;
&lt;br /&gt;
The new dialog attribute !EDITING can be used to ascertain if a listview is currently being edited or not.&lt;br /&gt;
&lt;br /&gt;
File Item&lt;br /&gt;
&lt;br /&gt;
The NEW FILE command can now take the option &amp;lt;span class=&amp;quot;stxmacrocommandoption-character&amp;quot;&amp;gt;/S&amp;lt;/span&amp;gt;, to suppress error messages on creation failure.&lt;br /&gt;
&lt;br /&gt;
The new file item command COPY &amp;lt;span class=&amp;quot;stxmacrocommandoption-character&amp;quot;&amp;gt;/Z&amp;lt;/span&amp;gt; can be used to encrypt/decrypt a file, including optional password protection.&lt;br /&gt;
&lt;br /&gt;
The new command TRYLOCK will try to get a lock on the file but will not block the script.&lt;br /&gt;
&lt;br /&gt;
The !CHANGED attribute can now be explicitly set or reset. This functionality is new, in as much as versions previous to 3.9.0 could only reset the attribute. The meaning of assigning &#039;1&#039; to the attribute has changed, since assigning &#039;1&#039; now *sets* the attribute, whilst assigning &#039;0&#039; resets the attribute.&lt;br /&gt;
&lt;br /&gt;
A new file item type - the GDX file item - has been developed, which can be used to create files containing graphic data which are passed directly to a graph item. GDX stands for &amp;quot;graphical data exchange&amp;quot;. Currently, the spectrogram is the only plot which supports the GDX file type.&lt;br /&gt;
&lt;br /&gt;
Graph Item&lt;br /&gt;
&lt;br /&gt;
The command ADDMARKER can now be used to add a &#039;Box and Whiskers&#039; metasegment.&lt;br /&gt;
&lt;br /&gt;
The metasegment font can be specified on an individual basis using the ADDMARKER command.&lt;br /&gt;
&lt;br /&gt;
A metasegment may be told not to change color on selection. This is only available using the &amp;quot;SET graph ADDMARKER table&amp;quot; command with the parameter &amp;quot;invertSelected&amp;quot; set to &amp;quot;true&amp;quot; if the metasegment color should be inverted whilst selected or &amp;quot;false&amp;quot; if not. The default is &amp;quot;true&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
The key used to make a metasegment moveable can now be set using a &#039;modifyKeys&#039; entry in the ADDMARKER table parameter.&lt;br /&gt;
&lt;br /&gt;
A simple marker can now be displayed as a single vertical line (option &amp;lt;span class=&amp;quot;stxmacrocommandoption-character&amp;quot;&amp;gt;/M&amp;lt;/span&amp;gt;).&lt;br /&gt;
&lt;br /&gt;
The command OVERVIEW, which toggles between the &#039;view&#039; and &#039;overview&#039; modes, has been documented.&lt;br /&gt;
&lt;br /&gt;
The graph supports a new attribute !CURSORMODE which returns the currently visible cursors, as set using the last CURSORMODE command.&lt;br /&gt;
&lt;br /&gt;
The width of a graph&#039;s border can now be set using new AXIS command parameters. The default border width is 1 pixel.&lt;br /&gt;
&lt;br /&gt;
The spectrogram palette can be changed at any time using the &amp;quot;SET graph Y * * SPECTROGRAM&amp;quot; function.&lt;br /&gt;
&lt;br /&gt;
The DATASETLOADED message is now sent when a graph finishes loading data for a particular input.&lt;br /&gt;
&lt;br /&gt;
Instance Item&lt;br /&gt;
&lt;br /&gt;
The new command TRYLOCK will try to get a lock on the instance but will not block the script.&lt;br /&gt;
&lt;br /&gt;
Table Item&lt;br /&gt;
&lt;br /&gt;
A table item connected to a ListView must be configured to be editable using the CONFIG command or the !EDITABLE attribute. The CONFIG command has also been extended to allow for a restrictive set of values to be specified for a table field. If specified, the ListView will display a combobox in this column for each entry. All parameters set using the CONFIG command can now be queried via table field attributes.&lt;br /&gt;
&lt;br /&gt;
The new command TRYLOCK will try to get a lock on the table but will not block the script.&lt;br /&gt;
&lt;br /&gt;
The command NEW TABLE supports a silent error flag.&lt;br /&gt;
&lt;br /&gt;
A table field can now display multirow entries, if the !MULTIROW attribute is set to 1, or the CONFIG command multirow parameter is set to ON.&lt;br /&gt;
&lt;br /&gt;
The last user input for a particular column can now be used as the default for that column using the CONFIG command&#039;s setuserdefault parameter.&lt;br /&gt;
&lt;br /&gt;
The DEFINE command can now be used to rename an existing field.&lt;br /&gt;
&lt;br /&gt;
Wave Item&lt;br /&gt;
&lt;br /&gt;
The wave item now supports the new attribute !PLAYSRATE which can be used to return the sampling rate currently used to for playback or set a new sampling rate for playback.&lt;br /&gt;
&lt;br /&gt;
=== Changes ===&lt;br /&gt;
&lt;br /&gt;
Changes in S_TOOLS-STx &amp;amp;lt;CURRENT_VERSION&amp;amp;gt;:&lt;br /&gt;
&lt;br /&gt;
Graphical User Interface&lt;br /&gt;
&lt;br /&gt;
F0 Test, F0Lookup, Amplitude Spectrum Statistics&lt;br /&gt;
&lt;br /&gt;
The F0 Test, F0 Lookup and Amplitude Spectrum Statistics functions in the Spectrogram &amp;amp;amp; Parameters Viewer sectioner have been moved to the toolbox file SpectrumTB.sts.&lt;br /&gt;
&lt;br /&gt;
Macro Language&lt;br /&gt;
&lt;br /&gt;
UNLOAD command&lt;br /&gt;
&lt;br /&gt;
The command UNLOAD MACROCODE, UNLOAD SPUCODE and UNLOAD SOURCECODE take one parameter - the name of a sourcecode file (relative or absolute). The MACROCODE variant used to take a blank separated list of macro names and the SPUCODE version used to take a blank separated list of SPU names.&lt;br /&gt;
&lt;br /&gt;
Display and Dialog DROPFILE message&lt;br /&gt;
&lt;br /&gt;
The DROPFILE message sent to displays and dialogs when files are dropped onto them has been changed. The &amp;lt;span class=&amp;quot;stxmacrocommandparameter-character&amp;quot;&amp;gt;filePath&amp;lt;/span&amp;gt; parameter is not longer a string, but rather the id of a simple table with one absolute path per entry.&lt;br /&gt;
&lt;br /&gt;
Syntax&lt;br /&gt;
&lt;br /&gt;
The string &amp;quot;123 456&amp;quot; is no longer a valid number.&lt;br /&gt;
&lt;br /&gt;
=== Bug Fixes ===&lt;br /&gt;
&lt;br /&gt;
Bug fixes&lt;br /&gt;
&lt;br /&gt;
The waterfall graph now prints correctly.&lt;br /&gt;
&lt;br /&gt;
The BDataSet member function AddASet now selects the new audio set if adding the set succeeds (r5534).&lt;br /&gt;
&lt;br /&gt;
Shell commands using the return value RC now assign the value even if return code equals 0 (indicating success) (r5609).&lt;br /&gt;
&lt;br /&gt;
Spectrogram &amp;amp;amp; Parameters Viewer Sectioner copy to clipboard working again (r5625).&lt;br /&gt;
&lt;br /&gt;
The &#039;view&#039; graph mode now displays correctly when first drawn (r5643).&lt;br /&gt;
&lt;br /&gt;
The asterisk character * is now officially an invalid hotkey, rather than being one which doesn&#039;t work correctly (r5500).&lt;br /&gt;
&lt;br /&gt;
Loading an XML file which an unsupported character encoding now fails rather than asserting (r5614).&lt;br /&gt;
&lt;br /&gt;
The Spectrum viewer can now saving CEPST parameters (r6470).&lt;br /&gt;
&lt;br /&gt;
The color &#039;GRAY&#039; is now defined as the RGB value 96:96:96, which fixes the bug where cursors were invisible on a &#039;GRAY&#039; background (r6148).&lt;br /&gt;
&lt;br /&gt;
The &amp;quot;SET graph XSCALE&amp;quot; flag &amp;quot;/I&amp;quot; is now working (r6187).&lt;br /&gt;
&lt;br /&gt;
Using the correct normal/dual/tight phase vocoder pv filters (r5874).&lt;br /&gt;
&lt;br /&gt;
All valid number formats (including mmmE /-eee) can now be used in time-expressions (r5746).&lt;br /&gt;
&lt;br /&gt;
=== Corrections ===&lt;br /&gt;
&lt;br /&gt;
S_TOOLS-STx Version: 3.9&lt;br /&gt;
&lt;br /&gt;
A list of documentation corrections since the last release (3.7).&lt;br /&gt;
&lt;br /&gt;
The macro COBJ has been superseded by the COBJ class and no longer exists.&lt;br /&gt;
&lt;br /&gt;
The command SYSTEM MKDIR and SYSTEM RMDIR were undocumented.&lt;br /&gt;
&lt;br /&gt;
The SPAtom ASEG1 parameters are now in the correct order (&amp;lt;span class=&amp;quot;stxmacrocommandparameter-character&amp;quot;&amp;gt;TABS&amp;lt;/span&amp;gt; and &amp;lt;span class=&amp;quot;stxmacrocommandparameter-character&amp;quot;&amp;gt;TABM&amp;lt;/span&amp;gt; were swapped).&lt;br /&gt;
&lt;br /&gt;
The SPAtom VSPLIT was mistakenly documented as VSPLIT1.&lt;br /&gt;
&lt;br /&gt;
The macro DEBUGTB no longer exists.&lt;br /&gt;
&lt;br /&gt;
The descriptions of the different formulas used by the SPAtom MORLET have been corrected.&lt;br /&gt;
&lt;br /&gt;
The section FILE item command LOAD parameters were not documented as mandatory.&lt;br /&gt;
&lt;br /&gt;
Added description of shell variables SCRIPTFILEPATH, SCRIPTDIRECTORY AND SCRIPTMAINNAME.&lt;br /&gt;
&lt;br /&gt;
The AWEIGHT SPAtom has now been documented.&lt;br /&gt;
&lt;br /&gt;
The WAVEOUT SPAtom has now been documented.&lt;br /&gt;
&lt;br /&gt;
A list of documentation corrections since the last release (3.6.2).&lt;br /&gt;
&lt;br /&gt;
The BUTIL FILEDIALOG no longer has a &amp;lt;span class=&amp;quot;stxmacrocommandparameter-character&amp;quot;&amp;gt;path&amp;lt;/span&amp;gt; parameter.&lt;br /&gt;
&lt;br /&gt;
A list of documentation corrections since the last release (3.6.1).&lt;br /&gt;
&lt;br /&gt;
The SET table FIND &amp;lt;span class=&amp;quot;stxmacrocommandparameter-character&amp;quot;&amp;gt;cexpr&amp;lt;/span&amp;gt; format uses colons, not commas as delimiters.&lt;br /&gt;
&lt;br /&gt;
The SET value OUTPUT commands can take &amp;lt;span class=&amp;quot;stxmacrocommandoption-character&amp;quot;&amp;gt;/Double&amp;lt;/span&amp;gt; options.&lt;br /&gt;
&lt;br /&gt;
The description of the parameters for the NEW TABLE command where field definitions are possible has been corrected.&lt;br /&gt;
&lt;br /&gt;
The SET graph CURSORMODE command now describes the bound and locked parameters correctly.&lt;br /&gt;
&lt;br /&gt;
The VAR arithmetic operators DIV, MUL and SUB are actually called DIVIDE, MULTIPLY and SUBTRACT&lt;br /&gt;
&lt;br /&gt;
The SET graph ZSCALE command parameters were incorrect.&lt;br /&gt;
&lt;br /&gt;
=== Known Bugs ===&lt;br /&gt;
&lt;br /&gt;
S_TOOLS-STx Version: 3.9&lt;br /&gt;
&lt;br /&gt;
These bugs were known to exist at the time of the release and are proving difficult, if not impossible to fix.&lt;br /&gt;
&lt;br /&gt;
Interface&lt;br /&gt;
&lt;br /&gt;
Sometimes 44KB soundfiles are created, which are invalid. This bug has not proved easy to replicate, so if you can replicate it, please contact us ( \n  This e-mail address is being protected from spam bots, you need JavaScript enabled to view it  ).&lt;br /&gt;
&lt;br /&gt;
Can&#039;t delete an entry in the DataSet if it has no ID. It is highly unlikely that you will ever have a DataSet entry with no ID. If this is the case however, you must currently delete it by hand (Close S_TOOLS-STx, open the DataSet in a text editor and either give the offending entry an ID, or remove it). Should you be able to reproduce any action which creates an entry without an ID, please contact us ( \n  This e-mail address is being protected from spam bots, you need JavaScript enabled to view it  ).&lt;br /&gt;
&lt;br /&gt;
Spectrogram &amp;amp;amp; Parameters Viewer&lt;br /&gt;
&lt;br /&gt;
Interpolation of very short signals is incorrect (Deutsch - 2004-11-10 - since 1.0).&lt;br /&gt;
&lt;br /&gt;
Graphics&lt;br /&gt;
&lt;br /&gt;
Copying a display graphic to the clipboard and pasting into a graphics program does not always achieve the desired results. This bug will not be fixed in the foreseeable future. Some graphics programs paste it properly (IrfanView, Microsoft Word), others don&#039;t (PaintShop Pro) - (Jonnie White - 2004-07-14).&lt;br /&gt;
&lt;br /&gt;
Selected cursors is not visible if background is set to GRAY (White - 2004-07-12 - since 1.0).&lt;br /&gt;
&lt;br /&gt;
Macro&lt;br /&gt;
&lt;br /&gt;
The dialog control listbox does not handle displaying huge strings properly. This seems to be a problem with the underlying CListBox control (Becker/White - 2004-12 - since 1.0).&lt;br /&gt;
&lt;br /&gt;
The DCOM command INVOKEMETHOD Evaluate always returns an error when communicating with the R DCOM server even if the command was actually successful (Deutsch/White - 2004 - since 3.6.0).&lt;br /&gt;
&lt;br /&gt;
==3.8==&lt;br /&gt;
&lt;br /&gt;
3.8.3&lt;br /&gt;
&lt;br /&gt;
* BUGFIX: zoom in in viewer3 now working when zooming around active cursor&lt;br /&gt;
* BUGFIX: spectragram title display corrected (amin/amax)&lt;br /&gt;
* BUGFIX: CDLGMAP now deletes window only if it has created the window during construction&lt;br /&gt;
&lt;br /&gt;
3.8.2&lt;br /&gt;
&lt;br /&gt;
* BUGFIX: dataset path now displayed, even if it has spaces in it.&lt;br /&gt;
* BUGFIX: Parameter plot explicitly redrawn when new data is sent. This fixes the bug (reported by Julia Brandstaetter) where Set Zero and Undo were not working properly in Spectrogram and Parameter plot.&lt;br /&gt;
&lt;br /&gt;
3.8.1&lt;br /&gt;
&lt;br /&gt;
* BUGFIX: Warn user that more waveform samples are being sent than expected and refrain from crashing.&lt;br /&gt;
* BUGFIX: CDlgMap now always uses the next free dialog index for a new entry. This means that multiple maps can reference the same dialog and still work. The functions fci and nc were removed since they are never used. Display now using second event to synchronise creation and variable initialisation. This fixes the mysterious bug where the window class was only sometimes used.&lt;br /&gt;
* BUGFIX: If the polyline function is called with less than two points it no longer asserts, but rather ends gracefully.&lt;br /&gt;
* BUGFIX: send keys not processed by dialog on to graph hotkey handlers&lt;br /&gt;
* BUGFIX: spectrogram is now being initialised with the correct context menu when formants are displayed in it.&lt;br /&gt;
* BUGFIX: giving dialog focus if there are no graphs&lt;br /&gt;
* BUGFIX: buttons in dialogs in a graph no longer process normal mneumonics. This means that the graph can process them (for Moosmueller). Buttons can still be activated with return and the space bar and tabbed/arrowed to.&lt;br /&gt;
* BUGFIX: preventing race conditions in Attach/Detach. This removes one possible cause of autosave crashing. It does not guarantee, though, there to be no other reasons for autosave to crash.&lt;br /&gt;
&lt;br /&gt;
=Downloads=&lt;br /&gt;
The {{STX}} downloads are available here: https://www.kfs.oeaw.ac.at/pub/stx&lt;/div&gt;</summary>
		<author><name>Jw</name></author>
	</entry>
	<entry>
		<id>https://mediawiki.kfs.oeaw.ac.at/stx/docs/wiki/index.php?title=History_of_Changes&amp;diff=10688</id>
		<title>History of Changes</title>
		<link rel="alternate" type="text/html" href="https://mediawiki.kfs.oeaw.ac.at/stx/docs/wiki/index.php?title=History_of_Changes&amp;diff=10688"/>
		<updated>2020-12-30T06:01:35Z</updated>

		<summary type="html">&lt;p&gt;Jw: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;div class=&amp;quot;noautonum&amp;quot;&amp;gt;{{TOC limit|3}}&amp;lt;/div&amp;gt;&lt;br /&gt;
=5.0=&lt;br /&gt;
&lt;br /&gt;
==Features==&lt;br /&gt;
&lt;br /&gt;
===Compact Workspace Mode===&lt;br /&gt;
The Workspace now has a [[User_Guide/Workspace#Modes|compact mode]]. The compact mode is a simplified interface for new users. Although it was designed with linguists in mind, it can be used by anyone.&lt;br /&gt;
&lt;br /&gt;
===webMAUS===&lt;br /&gt;
Automatic segmentation using the [https://clarin.phonetik.uni-muenchen.de/BASWebServices/interface webMAUS] REST API. This has been implemented in the toolbox [[User_Guide/Toolbox/runMAUSBasicDlg|&amp;lt;samp&amp;gt;runMAUSBasicDlg&amp;lt;/samp&amp;gt;]].&lt;br /&gt;
&lt;br /&gt;
==Bugfixes==&lt;br /&gt;
&lt;br /&gt;
* Correctly handle corrupt Workspace file (generate new one, rather than silently exiting)&lt;br /&gt;
&lt;br /&gt;
==5.0.6==&lt;br /&gt;
&lt;br /&gt;
Released: 30th December 2020&lt;br /&gt;
&lt;br /&gt;
Revision: 10071&lt;br /&gt;
&lt;br /&gt;
* bugfix: No longer dying with &amp;quot;The parameter is incorrect&amp;quot;&lt;br /&gt;
&lt;br /&gt;
==5.0.4==&lt;br /&gt;
&lt;br /&gt;
Released: 12th November 2019&lt;br /&gt;
&lt;br /&gt;
Revision: 10016&lt;br /&gt;
&lt;br /&gt;
* bugfix: SPExL V1.1.11. Adding new segments respects vertical drawing order. &lt;br /&gt;
* bugfix: SPExL V1.1.11. Faster deselection of segments. &lt;br /&gt;
* bugfix: Real-time waterfall axis drawing correctly&lt;br /&gt;
* bugfix: show/hide sectioner setting now respected.&lt;br /&gt;
* bugfix: sectioner height setting now respected.&lt;br /&gt;
&lt;br /&gt;
==5.0.3==&lt;br /&gt;
&lt;br /&gt;
Released: 1st October 2019&lt;br /&gt;
&lt;br /&gt;
Revision: 9967&lt;br /&gt;
&lt;br /&gt;
* feature: Signal.All is now selected by default, if no other segment is selected.&lt;br /&gt;
* feature: When exporting profiles, the present working directory is used, rather than always selecting the &#039;profiles&#039; directory. The profiles directory is only used if the present working directory is the root directory.&lt;br /&gt;
* feature: The first sound file in the project is selected by default in the compact mode.&lt;br /&gt;
* bugfix: When adding a file per drag and drop, the file is now selected.&lt;br /&gt;
* bugfix: enabling a disabled edit box now sets the background color correctly (back to white).&lt;br /&gt;
* bugfix: debugger trace window now visible in release version too&lt;br /&gt;
* bugfix: [[Programmer_Guide/Command_Reference/SYSINFO|SYSINFO]] command now supports Windows 8.1 and Windows 10 (was returning Windows 8)&lt;br /&gt;
* bugfix: SPExL V1.1.10. Playlist listview now processes listsorted message and displays sort order set by clicking a column heading. The sort order was first being displayed when clicking in the control after clicking the column heading.&lt;br /&gt;
* bugfix: The &#039;Start&#039; button should now be activated correctly in the Compact Mode.&lt;br /&gt;
&lt;br /&gt;
==5.0.2==&lt;br /&gt;
&lt;br /&gt;
Released: 19th September 2019&lt;br /&gt;
&lt;br /&gt;
Revision: 9946&lt;br /&gt;
&lt;br /&gt;
* bugfix:  The context menu Add Sound File now working from the Audio File list in the Compact Mode.&lt;br /&gt;
* feature: The possible number of plots in XPlot was increased from 64 to 128&lt;br /&gt;
&lt;br /&gt;
==5.0.0==&lt;br /&gt;
&lt;br /&gt;
Released: 12th September 2019&lt;br /&gt;
&lt;br /&gt;
Revision: 9935&lt;br /&gt;
&lt;br /&gt;
Initial release.&lt;br /&gt;
&lt;br /&gt;
=4.4=&lt;br /&gt;
&lt;br /&gt;
==Features==&lt;br /&gt;
===Transcription Script SPExL 1.1.6===&lt;br /&gt;
The transcription script SPExL has been simplified and improved.&lt;br /&gt;
* Hotkeys can be defined by the user in the SPExL_SegTrans.hotkeys file&lt;br /&gt;
* The number of available &#039;views&#039; has been reduced to 3:&lt;br /&gt;
** wave overview &amp;amp; spg. section (a waveform of the whole file in the top graph, with a section of the file as spectrogram below)&lt;br /&gt;
** wave only (a waveform of a section of the file with scrollbar functionality)&lt;br /&gt;
** wave and spg. section (a synced waveform and spectrogram of a section of the file with scrollbar functionality)&lt;br /&gt;
* Segment selection between graphs and the list are now synchronised. If you select a segment in the graph, it is selected in the list and vice versa.&lt;br /&gt;
* Changes made to the project (new segments, edited attributes) are now made directly in the project rather than the user having to explicitly press the &#039;save segments to project file&#039; button to copy them from SPExL to the Workspace. Note that they are only written to disk, however, if the project is saved (press the &#039;Save&#039; button).&lt;br /&gt;
===Visible Segment Attributes Saved per Project File===&lt;br /&gt;
If you choose to display other attributes other than the default attributes in the Workspace Detail View, these settings are now saved in the open project file. When a project file is then opened, the relevant attribute list is loaded and used, rather than the user having to [[User_Guide/Workspace/Detail/Search_for_Element_Attributes|search for them]] again. You can still modify which attributes are displayed using the General Settings [[User_Guide/Workspace/Application_and_Setup_Tree/Options/General_Settings#.22Set.22_Attributes_.26_.22Segment.22_Attributes|&#039;Select &amp;quot;Segment&amp;quot; Attributes&#039; dialog]].&lt;br /&gt;
===Global / Profile Sectioner Settings===&lt;br /&gt;
The sectioner settings in the {{Viewer2}} analysis application were always global to STx. As of STx 4.4.0, you can choose to save your sectioner settings with your profile. The default is still the &#039;global&#039; variant. To switch to profile sectioner settings, uncheck the &#039;&#039;&#039;use global sectioner settings&#039;&#039;&#039; checkbox in the {{Viewer2}} [[User_Guide/Spectrogram_and_Parameter_Viewer/Settings_Dialog|settings dialog]].&lt;br /&gt;
&lt;br /&gt;
==4.4.10==&lt;br /&gt;
&lt;br /&gt;
Released: 17th January 2019&lt;br /&gt;
&lt;br /&gt;
Revision: 9712&lt;br /&gt;
&lt;br /&gt;
* bugfix: playback gain factor - the playback gain is now working also for asio devices (see CSTXASIOEngine::Transfer())&lt;br /&gt;
* bugfix: renumbering command did not update detail as expected.&lt;br /&gt;
* bugfix: the update version dialogs now display the correct workspace path&lt;br /&gt;
&lt;br /&gt;
==4.4.9==&lt;br /&gt;
&lt;br /&gt;
Released: 25th September 2018&lt;br /&gt;
&lt;br /&gt;
Revision:&lt;br /&gt;
&lt;br /&gt;
* feature: don&#039;t ask user where to put sound file if there are no sets in the project.&lt;br /&gt;
* feature: dragging and dropping a template onto {{ST}X} copies it to the templates folder.&lt;br /&gt;
* feature: added &#039;Open Containing Folder&#039; context menu for sound files and links. Improved contextualisation of context menu in detail (overview==root/set)&lt;br /&gt;
* feature: &#039;txt2wav&#039; script: Adding decimal symbol and field delimiter to parameters, as well as the ability to specify which extension to use to filter files (was hard-coded to &#039;txt&#039;). Now this macro can be used to&lt;br /&gt;
* feature: bdataset createwave and createwwaveex now take an openmode keyword: auto|create|read|write, which is passed on to bsf open. This means that we can now open files in modes other than &#039;auto&#039;.&lt;br /&gt;
process CSV files.&lt;br /&gt;
* bugfix: very long capture text for edit controls with &#039;text above&#039; could lead to capture static being longer than the edit control and unintentionally overlapping with other controls (e.g. in Transcription Setup dialog).&lt;br /&gt;
* bugfix: closing con log window no longer resets PARENT shell variable, unless it is set the the con log window itself.&lt;br /&gt;
* bugfix: sound files now opened using the FILE_SHARE_READ dwShareMode. This should mean, that STx no longer prevents other processes from reading the sound files. &lt;br /&gt;
* bugfix: viewer opens sound file in read mode, rather than read/write.&lt;br /&gt;
* bugfix: the !PATH attribute (MakePath()) now returns the correct path for files in the root of a drive. Bug was introduced in r8998 (STx 4.2.19). This was, for example, was causing sound files in the root directory not to be unloaded, and hence was causing sharing violations.&lt;br /&gt;
&lt;br /&gt;
==4.4.8==&lt;br /&gt;
&lt;br /&gt;
Released: 25th July 2018&lt;br /&gt;
&lt;br /&gt;
Revision: 9500&lt;br /&gt;
&lt;br /&gt;
* feature: Spectrogram &amp;amp; Parameters viewer sectioner window now remembers which function cursor is bound to when being replotted.&lt;br /&gt;
* feature: The &amp;lt;samp&amp;gt;downsampling.sts&amp;lt;/samp&amp;gt; script now has a &amp;lt;samp&amp;gt;ResampleCLI&amp;lt;/samp&amp;gt; macro for automatic resampling of one or more files (see source). The old &amp;lt;samp&amp;gt;ResampleDialog&amp;lt;/samp&amp;gt; was renamed to &amp;lt;samp&amp;gt;ResampleDLG&amp;lt;/samp&amp;gt;.&lt;br /&gt;
* feature: Adding help for &amp;quot;Import_PRAAT_TextGrid&amp;quot; toolbox.&lt;br /&gt;
* feature: Adding ability to edit &#039;Sectioner Settings&#039; from the profile dialog. &lt;br /&gt;
* feature: Transcription 1.1.8 - removed segment &#039;refresh&#039; button, since segments always reflect current project state.&lt;br /&gt;
* bugfix: a window that was maximised will now be maximised to the correct monitor. It was always being maximised to monitor 1 on display creation.&lt;br /&gt;
* bugfix: the profile version number is now imported with the profile. This means that, for example, the use global profile settings flag is now also set correctly on import.&lt;br /&gt;
* bugfix: minor fix of position of two controls which were overlapping with controls beneath&lt;br /&gt;
* bugfix: stop playback cursor if wave is stopped by starting playback in another graph. Beforehand, the playback cursor was stopped if it got to the end, or the ESC key was pressed.&lt;br /&gt;
* bugfix: Y coordinate vector conversion was inaccurate by 1 pixel (bug introduced in r2536) This affects the XY, parameter, scatter, wave and waterfall functions.&lt;br /&gt;
&lt;br /&gt;
==4.4.6==&lt;br /&gt;
&lt;br /&gt;
Released: 21. March 2018&lt;br /&gt;
&lt;br /&gt;
Revision: 9441&lt;br /&gt;
&lt;br /&gt;
* bugfix: some bugfixes and minor changes in BSeq &lt;br /&gt;
* bugfix: BScript: logging of unhandled messages in msg-loop disabled // Conlog: /ton and /toff options implemented (timer on/off + show elapsed time) &lt;br /&gt;
* bugfix: Viewer3 settings now being saved (bug introduced in r9318 - STx 4.4.0)&lt;br /&gt;
* bugfix CShellFile::Status() - catch CTime exception if file time is illegal (avoid program crash)&lt;br /&gt;
&lt;br /&gt;
==4.4.5==&lt;br /&gt;
&lt;br /&gt;
Released: 19. February 2018&lt;br /&gt;
&lt;br /&gt;
Revision: 9416&lt;br /&gt;
&lt;br /&gt;
* bugfix: in Viewer2 large asegtemplates (with many fields) are now displayed correctly - note: the same problem exists in Viewer1 if the segment dialog part (created by the macro call &amp;quot;&amp;quot;metasegment msdialog&amp;quot;) needs more than 90 controls (around 40 segment attributes)&lt;br /&gt;
* feature: the bscript.stx function loaddata (con loaddata) can now also load string tables (extenden tables) from csv-files. The file types TEXT/TEXTCONTINUATION (numeric parameter table), STRING/STRINCONTINUATION (extended string table) and BINARY (binary stx-data files) are available. Type ASCII/ASCIICONTINUATION has been removed.&lt;br /&gt;
* feature: new feature (bugfix?): CShellTable::Read() - handling of field-separator tab has been changed - empty fields are now possible - warning: may have an effect on existing script/macro code!&lt;br /&gt;
&lt;br /&gt;
==4.4.4==&lt;br /&gt;
&lt;br /&gt;
Released: 26. January 2018&lt;br /&gt;
&lt;br /&gt;
Revision: 9404&lt;br /&gt;
&lt;br /&gt;
* bugfix: combobox entries with underliners retain their underliners now in the workspace detail (reported by Anton Baotic), and in Spexl.&lt;br /&gt;
&lt;br /&gt;
==4.4.3==&lt;br /&gt;
&lt;br /&gt;
Released: 18. December 2017&lt;br /&gt;
&lt;br /&gt;
Revision: 9391&lt;br /&gt;
&lt;br /&gt;
* bugfix: adding missing Transcription hotkey file and retisimo scripts&lt;br /&gt;
&lt;br /&gt;
==4.4.2==&lt;br /&gt;
&lt;br /&gt;
Released: 30. November 2017&lt;br /&gt;
&lt;br /&gt;
Revision: 9377&lt;br /&gt;
&lt;br /&gt;
* bugfix: SPExL Transcription script V1.1.7: the /U ASegTemplate flag is now respected, and, if used, the last entered value for a segment attribute is used as the default for the next new segment.&lt;br /&gt;
* bugfix: default profile names no longer have the invalid blank character in them. A check was also added, so new profiles cannot be created with blanks.&lt;br /&gt;
&lt;br /&gt;
==4.4.1==&lt;br /&gt;
&lt;br /&gt;
Released: 23. November 2017&lt;br /&gt;
&lt;br /&gt;
Revision: 9369&lt;br /&gt;
&lt;br /&gt;
* bugfix: if zooming is turned off in {{Viewer2}}, segments are now correctly visible on the Y axis. This bug has existed since at least STx 4.2.&lt;br /&gt;
&lt;br /&gt;
==4.4.0==&lt;br /&gt;
&lt;br /&gt;
Released: 14 November 2017&lt;br /&gt;
&lt;br /&gt;
Revision: 9350&lt;br /&gt;
&lt;br /&gt;
Initial release.&lt;br /&gt;
&lt;br /&gt;
=4.3=&lt;br /&gt;
&lt;br /&gt;
==Features==&lt;br /&gt;
====Load or export parameters from super or sub segments====&lt;br /&gt;
Parameters from super segments or from sub segments can now be loaded into the selected segment. For example, if you have analysed a word and corrected the parameters, you can use these corrected parameters when viewing phoneme segments within the word. This is achieved by selecting &#039;super segment data only&#039; setting in the Viewer settings [[User_Guide/Spectrogram_and_Parameter_Viewer/Settings_Dialog#Parameter_IO_Configuration|Parameter IO Configuration]] dialog.&lt;br /&gt;
&lt;br /&gt;
It is possible to select which super/sub segment parameters should be used, filtering by time, attribute or ID.&lt;br /&gt;
&lt;br /&gt;
This feature is also available in the parameter export dialog.&lt;br /&gt;
&lt;br /&gt;
====Parameter setting summary====&lt;br /&gt;
A summary of the settings used for parameter analysis is now saved with the parameter in the project file. This information is displayed in the [[User_Guide/Workspace/Detail/Views/Parameter_View|Parameter View]].&lt;br /&gt;
&lt;br /&gt;
====Exact sample positioning in {{Viewer2}}====&lt;br /&gt;
&lt;br /&gt;
You can now select a position in the [[User_Guide/Spectrogram_and_Parameter_Viewer#Waveform_zoom_window|Waveform Zoom window]] in {{Viewer2}} and move the active time cursor to that position using the hotkey &#039;1&#039;. This is useful for exact positioning of the time cursors when segmenting, for example, words.&lt;br /&gt;
&lt;br /&gt;
==4.3.10==&lt;br /&gt;
&lt;br /&gt;
Released: 26. January 2018&lt;br /&gt;
&lt;br /&gt;
Revision: 9407&lt;br /&gt;
*bugfix: do not allow user to give a profile a name including blanks.&lt;br /&gt;
*bugfix: renaming spectrum profiles (removing blanks)&lt;br /&gt;
*bugfix: the correct most recently entered value in a listctrl is now saved (not the last in the list).&lt;br /&gt;
*bugfix: passing delete, insert and back keys to static control.&lt;br /&gt;
*bugfix: &#039;spexl*.hotkeys.default&#039; &#039;retisimo.sts&#039; &#039;retisimo_*.sts&#039; &#039;HRTF_II_new.txt&#039; &#039;downsample.sts&#039; files are now being copied too (bug introduced in r8789)&lt;br /&gt;
*bugfix: removing extraneous / from Editing segments help URL&lt;br /&gt;
*bugfix: combobox entries with underliners retain their underliners now in the workspace detail (reported by Anton Baotic), and in Spexl.&lt;br /&gt;
&lt;br /&gt;
==4.3.9==&lt;br /&gt;
&lt;br /&gt;
Released: 23. November 2017&lt;br /&gt;
&lt;br /&gt;
Revision: 9363&lt;br /&gt;
&lt;br /&gt;
* bugfix: if zooming is turned off in {{Viewer2}}, segments are now correctly visible on the Y axis. This bug has existed since at least STx 4.2.&lt;br /&gt;
&lt;br /&gt;
==4.3.8==&lt;br /&gt;
&lt;br /&gt;
Released: 14. November 2017&lt;br /&gt;
&lt;br /&gt;
Revision: 9347&lt;br /&gt;
&lt;br /&gt;
* bugfix: zooming and replotting in the xplot class now working&lt;br /&gt;
* feature: user is now informed about bugfixes in current release, and/or new major/minor releases. This means that you will be informed of bug fixes for your version of STx, not just for the newest STx.&lt;br /&gt;
&lt;br /&gt;
==4.3.7==&lt;br /&gt;
&lt;br /&gt;
Released: 19. October 2017&lt;br /&gt;
&lt;br /&gt;
Revision: 9328&lt;br /&gt;
&lt;br /&gt;
* bugfix: stx no longer crashing on y zoom (bug introduced in r9293 - STx 4.3.6)&lt;br /&gt;
* bugfix: binary_file_example.sts now working&lt;br /&gt;
* bugfix: if navigating in file dialog using the keyboard, the edit box is now updated with the selected file.&lt;br /&gt;
&lt;br /&gt;
==4.3.6==&lt;br /&gt;
&lt;br /&gt;
Released 25. September 2017&lt;br /&gt;
&lt;br /&gt;
Revision: 9297&lt;br /&gt;
&lt;br /&gt;
* bugfix: the spectrogram dataset now frees up memory once dataset is drawn&lt;br /&gt;
* bugfix: adding specials folder to installer&lt;br /&gt;
&lt;br /&gt;
==4.3.5==&lt;br /&gt;
&lt;br /&gt;
Released: 6. September 2017&lt;br /&gt;
&lt;br /&gt;
Revision: 9286&lt;br /&gt;
&lt;br /&gt;
* bugfix: auto-saving the project file no longer leaks memory&lt;br /&gt;
* bugfix: editing segments in the workspace now uses the segment template by default&lt;br /&gt;
* bugfix: a backup copy of the project file is now made when saving&lt;br /&gt;
* bugfix: lists with one item are now selectable with the keyboard&lt;br /&gt;
* bugfix: listview column width now calculated with correct font&lt;br /&gt;
* bugfix: default values from aseg templates now written to new segment before editing&lt;br /&gt;
* bugfix: correct default value written to segment, even if attribute value starts with a number&lt;br /&gt;
* bugfix: combobox entries no longer replacing underlines&lt;br /&gt;
&lt;br /&gt;
==4.3.4==&lt;br /&gt;
&lt;br /&gt;
Released: 3. July 2017&lt;br /&gt;
&lt;br /&gt;
Revision: 9214&lt;br /&gt;
&lt;br /&gt;
====Features====&lt;br /&gt;
* feature: the [[Programmer_Guide/Macro_Library/CONLOG|conlog]] command can now log to a file.&lt;br /&gt;
====Bug Fixes====&lt;br /&gt;
* bugfix: the conlog savedata command no longer fails silently if the file cannot be created.&lt;br /&gt;
&lt;br /&gt;
==4.3.3==&lt;br /&gt;
&lt;br /&gt;
Released: 19. June 2017&lt;br /&gt;
&lt;br /&gt;
Revision: 9185&lt;br /&gt;
&lt;br /&gt;
====Bug Fixes====&lt;br /&gt;
* bugfix: segment address in the Transcription script is now rounded to 10th of a millisecond (4 decimal places) rather than 1 millisecond.&lt;br /&gt;
* bugfix: saving the project file now resets the automatic save timer.&lt;br /&gt;
* bugfix: the Transcription, Import Word List and Reorder Word List should now be working correctly again.&lt;br /&gt;
====Features====&lt;br /&gt;
* feature: new script: [[User_Guide/Scripts/Anonymize.sts|Anonymize.sts]] - anonymize segments (attributes and signal) - requested by the ARI phonetics group&lt;br /&gt;
* feature: adding option to automatically save every minute.&lt;br /&gt;
&lt;br /&gt;
==4.3.2==&lt;br /&gt;
&lt;br /&gt;
Released: 13. June 2017&lt;br /&gt;
&lt;br /&gt;
Revision: 9170&lt;br /&gt;
&lt;br /&gt;
====Bug Fixes====&lt;br /&gt;
* bugfix: The segment &#039;Signal.All&#039; is now created when a new sound file is imported. This bug was introduced in version 4.3.1.&lt;br /&gt;
* bugfix: the &#039;wave-only&#039; view in the Transcription script is now available again.&lt;br /&gt;
&lt;br /&gt;
==4.3.1==&lt;br /&gt;
&lt;br /&gt;
Released: 8. June 2017&lt;br /&gt;
&lt;br /&gt;
Revision: 9165&lt;br /&gt;
&lt;br /&gt;
====Bug Fixes====&lt;br /&gt;
&lt;br /&gt;
* bugfix: clicking SPExL graph whilst editing segment in the segment list now draws the segment in the graph (previously needed an explicit refresh to draw the segment).&lt;br /&gt;
* bugfix: the workspace is now saved even if the path contains spaces (bug introduced in r8843)&lt;br /&gt;
* bugfix: searching using keyboard in listctrl now working in correct order (not backwards). Bug introduced in r9002.&lt;br /&gt;
* bugfix: zooming out in SPExL on the y axis with Ctrl+Subtract is now working correctly. This appears to have been around since at least r4442 (STx 3.9)&lt;br /&gt;
* bugfix: y position of cursors is now retained when zooming&lt;br /&gt;
* bugfix: Viewers/SPEXL create segments at selected address and not with P=0 and L=0&lt;br /&gt;
* bugfix: maximising whilst spectrogram is drawing no longer leaves the spectrogram in unfinished version on screen (set new &#039;m_bRecalculate&#039; flag to force recalculation/redraw when dataset sync has finished).&lt;br /&gt;
&lt;br /&gt;
==4.3.0==&lt;br /&gt;
&lt;br /&gt;
Released: April 2017&lt;br /&gt;
&lt;br /&gt;
Revision: 9149&lt;br /&gt;
&lt;br /&gt;
=Older Versions=&lt;br /&gt;
&lt;br /&gt;
==4.2==&lt;br /&gt;
====4.2.23====&lt;br /&gt;
Released: 24 August 2017&lt;br /&gt;
Revision: 9264&lt;br /&gt;
* BUGFIX: correct font used for calculation of formant dialog column size in {{Viewer2}}&lt;br /&gt;
&lt;br /&gt;
====4.2.22====&lt;br /&gt;
Released: 25 January 2017&lt;br /&gt;
Revision: 9064&lt;br /&gt;
* BUGFIX: The following wildcard string comparison will now match:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
if &#039;*ha&#039; =SI &#039;haha&#039; then&lt;br /&gt;
   // it&#039;s a match :-)&lt;br /&gt;
end&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
* BUGFIX: Changed behavior of comparisons in FIND-TABLE/XML: if a field/attribute is not defined all &amp;quot;notequal&amp;quot; and &amp;quot;notmatching&amp;quot; operators evaluates to &amp;quot;true&amp;quot; and all others to &amp;quot;false&amp;quot;&lt;br /&gt;
&lt;br /&gt;
====4.2.21====&lt;br /&gt;
Released: 9 January 2017&lt;br /&gt;
Revision: 9023&lt;br /&gt;
* BUGFIX: Edit segment dialog now referencing correct segment attributes (bug introduced in r8852 - STx 4.2.15)&lt;br /&gt;
&lt;br /&gt;
====4.2.20====&lt;br /&gt;
Released: 23 December 2016&lt;br /&gt;
* FEATURE: STx now informs the user of available update via the About dialog.&lt;br /&gt;
* BUGFIX: Removing non-existent files from STX.INI when loading&lt;br /&gt;
* BUGFIX: About dialog no long blocking workspace file.&lt;br /&gt;
&lt;br /&gt;
====4.2.19====&lt;br /&gt;
Released: 12th December 2016&lt;br /&gt;
* BUGFIX: Ctrl+U no longer the same as Ctrl+Shift+U in, e.g., signal view.&lt;br /&gt;
* BUGFIX: Generating correct hotkey string for Ctrl+Shift+&amp;lt;key&amp;gt;&lt;br /&gt;
* BUGFIX: Switching from long to short list of segments in the workspace should no longer lead to a blank detail.&lt;br /&gt;
* BUGFIX: Transcription left cursor right bitmap now correct image&lt;br /&gt;
* BUGFIX: Fixed bug in Viewer2 where setting the range did not work under all circumstances.&lt;br /&gt;
* BUGFIX: Focus moving with selection for listview key navigation and single selection.&lt;br /&gt;
* BUGFIX: Copy attributes in the Workspace overview now includes first value (bug introduced in r8297)&lt;br /&gt;
* BUGFIX: Checkbox size increased because some strings were being cut off.&lt;br /&gt;
* BUGFIX: Show Find Dialog menu now checked if Show Find Dialog is visible&lt;br /&gt;
* BUGFIX: Occasional crash in {{Viewer2}} fixed by removing use of static with CString (r9010,r9012).&lt;br /&gt;
&lt;br /&gt;
====4.2.18====&lt;br /&gt;
Released: 27 October 2016&lt;br /&gt;
&lt;br /&gt;
* FEATURE: adding PCM info to edit sound file dialog for editing existing project files too.&lt;br /&gt;
* FEATURE/BUGFIX: Improved listview keyboard handling (up/down, page up, page down). Disabled scrolling of listview whilst editing.&lt;br /&gt;
* BUGFIX: viewer2 no longer hangs if saved rmsb-data are loaded and displayed with autoscale-option&lt;br /&gt;
* BUGFIX: detail sequence view now using Ctrl+Shift+U to move selected entry up and Ctrl+Shift+D to move selected entry down (rather than Ctrl+UP and Ctrl+Down - which conflict with internal listview keyboard handling).&lt;br /&gt;
* BUGFIX: bscript log window no longer jumps in front of SPExL window when a dialog is opened.&lt;br /&gt;
* FEATURE: releases are now digitally signed by the Österreichische Akademie der Wissenschaften&lt;br /&gt;
* NOTE: the pole-zero sectioner in the {{Viewer2}} application is extremely slow for high frame rates. We are working on improving it.&lt;br /&gt;
&lt;br /&gt;
====4.2.17====&lt;br /&gt;
Released: 26 September 2016&lt;br /&gt;
* BUGFIX: Transcription (SPExL) segment list handling working correctly again (bug introduced in 4.2.16)&lt;br /&gt;
* BUGFIX: Moving selected sequence entry up/down with keyboard now uses the hotkeys Ctrl+Shift+U and Ctrl+Shift+D (rather than Ctrl+Up and Ctrl+Down) and now works as expected.&lt;br /&gt;
&lt;br /&gt;
====4.2.16====&lt;br /&gt;
Released: 30 August 2016&lt;br /&gt;
* Support for Windows XP has been removed.&lt;br /&gt;
* FEATURE: the XPLOT member &amp;quot;FORALLGRAPHS&amp;quot; is now a public function.&lt;br /&gt;
* FEATURE: the XGRAPH function Zoom -&amp;gt; X-Sync was aded to apply the x-zoom of the current graph across all other graphs.&lt;br /&gt;
* BUGFIX: the Automatic Segment Names dialog no longer allows invalid segment names.&lt;br /&gt;
* BUGFIX: The palette import/export are working again.&lt;br /&gt;
* BUGFIX: The Application and Setup tree now correctly stores it&#039;s state.&lt;br /&gt;
* BUGFIX: Keyboard focus no longer disappears after pressing enter in the Workspace Detail.&lt;br /&gt;
* BUGFIX: The selected entry no longer centers itself after editing.&lt;br /&gt;
* BUGFIX: The Transcription script SPExL now plays single selections every time (not every second time).&lt;br /&gt;
* BUGFIX: Tabbing through the entries in the Workspace Detail no longer goes backwards instead of forwards.&lt;br /&gt;
&lt;br /&gt;
====4.2.15====&lt;br /&gt;
Released: unreleased&lt;br /&gt;
* FEATURE: Improved sound file export performance&lt;br /&gt;
* BUGFIX: The File-&amp;gt;Workspace-&amp;gt;Save As workspace menu command is now working (bug introduced in r4092)&lt;br /&gt;
* BUGFIX: parameter and function now drawing (invalidating) correctly if being set whilst zoomed in.&lt;br /&gt;
* BUGFIX: parameter export dialog no longer needs manual refresh (group box is now transparent - uses WS_EX_TRANSPARENT)&lt;br /&gt;
&lt;br /&gt;
====4.2.14====&lt;br /&gt;
Released: 18 January 2016&lt;br /&gt;
* Minimising GDI use&lt;br /&gt;
* Projects files are now associated with {{STX}}&lt;br /&gt;
* BUGFIX: one memory leak fixed&lt;br /&gt;
* BUGFIX: all help menus associated with mediawiki online help&lt;br /&gt;
====4.2.13====&lt;br /&gt;
Released: 22 December 2015&lt;br /&gt;
* Default help file now the STx Wiki ([https://www.kfs.oeaw.ac.at/stx/docs/wiki/ https://www.kfs.oeaw.ac.at/stx/docs/wiki/]).&lt;br /&gt;
* BUGFIX: Find Segments dialog no longer uses ASet search criteria for ASeg search criteria when ASeg criteria is empty&lt;br /&gt;
* BUGFIX: Find Segments dialog can now search for segments within a time range.&lt;br /&gt;
* BUGFIX: assigning number values to an integer field using table[,field] := eval $#num1 + $#num2 syntax now works&lt;br /&gt;
* BUGFIX: growing table by assigning no longer corrupts heap.&lt;br /&gt;
*BUGFIX: force context menu to display within dialog window, even if called directly from shell with 0,0 coordinates.&lt;br /&gt;
*BUGFIX: edit segment dialog is now initialised with the segment channel&lt;br /&gt;
*BUGFIX: context menu now rebuilt before being displayed to ensure that it reflects current state.&lt;br /&gt;
&lt;br /&gt;
====4.2.12====&lt;br /&gt;
Released: 4 December 2015&lt;br /&gt;
* Improved spectrogram &#039;overview&#039; visualisation.&lt;br /&gt;
&lt;br /&gt;
====4.2.11====&lt;br /&gt;
&lt;br /&gt;
Released: 16 November 2015&lt;br /&gt;
&lt;br /&gt;
* Added pole-zero to {{Viewer2}} Sectioner&lt;br /&gt;
* Bugfix: pane sizes are no longer reset in {{V2}} when sectioner settings dialog is closed.&lt;br /&gt;
* Bugfix: list view control header now correct size and clickable, and entries now selectable with one, rather than two clicks.&lt;br /&gt;
* Bugfix: copied attributes are no longer preceded by blank line&lt;br /&gt;
&lt;br /&gt;
====4.2.9====&lt;br /&gt;
&lt;br /&gt;
Released: 16 October 2015&lt;br /&gt;
&lt;br /&gt;
* Bugfix: saving to PNG working again&lt;br /&gt;
&lt;br /&gt;
====4.2.8====&lt;br /&gt;
&lt;br /&gt;
Released: 5 October 2015&lt;br /&gt;
&lt;br /&gt;
* Bugfix: the pole-zero method spectrogram overlay is now working correctly.&lt;br /&gt;
&lt;br /&gt;
====4.2.5====&lt;br /&gt;
&lt;br /&gt;
Released: 30 September 2015&lt;br /&gt;
&lt;br /&gt;
* Feature: the pole-zero method is now available as an overlay in the spectrogram and parameter viewer&#039;s spectrogram graph. Note however, that this is not bug free, so please wait for 4.2.6 if you&#039;re interested in this feature.&lt;br /&gt;
&lt;br /&gt;
====4.2.4====&lt;br /&gt;
&lt;br /&gt;
Released: 10 September 2015&lt;br /&gt;
&lt;br /&gt;
* Bugfix: added missing Visual C++ 2013 Redistributable Package&lt;br /&gt;
&lt;br /&gt;
====4.2.3====&lt;br /&gt;
&lt;br /&gt;
Released: 26 August 2015&lt;br /&gt;
&lt;br /&gt;
* Metasegment size modification now locks modification mode&lt;br /&gt;
&lt;br /&gt;
====4.2.2====&lt;br /&gt;
&lt;br /&gt;
Released: 15 June 2015&lt;br /&gt;
&lt;br /&gt;
* Viewer print font now legible&lt;br /&gt;
&lt;br /&gt;
====4.2.0====&lt;br /&gt;
&lt;br /&gt;
Released: February 2015&lt;br /&gt;
&lt;br /&gt;
=====Features=====&lt;br /&gt;
&lt;br /&gt;
* The speed of audio playback can now be set in the project interface&lt;br /&gt;
* The menu shell item has been given the alias &#039;DIALOG&#039; and will now be refered to as such in the documentation (r8578)&lt;br /&gt;
* Pole-Zero [[Programmer_Guide/SPU_Reference/PZTF|SPAtom]] and [[Programmer Guide/Command Reference/EVAL/pztf|EVAL]] methods are now available and are integrated into the [[User_Guide/Spectrogram_and_Parameter_Viewer/Methods/Polezero|Spectrogram and Parameter viewer]].&lt;br /&gt;
* Support for Windows 2000/XP has been removed&lt;br /&gt;
* Pole-Zero SPU and EVAL methods&lt;br /&gt;
* Multiple bug fixes&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==4.0==&lt;br /&gt;
&lt;br /&gt;
===4.0.0===&lt;br /&gt;
&lt;br /&gt;
Released: 2012&lt;br /&gt;
&lt;br /&gt;
==3.9==&lt;br /&gt;
&lt;br /&gt;
3.9.4&lt;br /&gt;
&lt;br /&gt;
Released: 15th October 2009&lt;br /&gt;
&lt;br /&gt;
* BUGFIX: real-time analyser drawing more smoothly&lt;br /&gt;
&lt;br /&gt;
3.9.3&lt;br /&gt;
&lt;br /&gt;
Released: 16th September 2009&lt;br /&gt;
&lt;br /&gt;
* BUGFIX: sequences now being saved.&lt;br /&gt;
&lt;br /&gt;
3.9.2&lt;br /&gt;
&lt;br /&gt;
Released: 30th July 2009&lt;br /&gt;
&lt;br /&gt;
* BUGFIX: segments no longer duplicated in un-linked datasets when importing metadata.&lt;br /&gt;
* BUGFIX: user-defined amplitude range working in waveform viewer&lt;br /&gt;
* BUGFIX: spectrogram amplitude floor now correct after using settings dialog&lt;br /&gt;
* BUGFIX: recorder application now recording&lt;br /&gt;
&lt;br /&gt;
3.9.1&lt;br /&gt;
&lt;br /&gt;
Released: 3rd July 2009&lt;br /&gt;
&lt;br /&gt;
* BUGFIX: cmenu check/uncheck working for consecutive items&lt;br /&gt;
* BUGFIX: text files items and the load command can now read files encoded with an &amp;quot;FE FF&amp;quot; byte order mark (encoded in UTF-16BE). The error message &amp;quot;unsupported byte order mark&amp;quot; is returned if a UTF-32BE or UTF-32LE byte order mark is found.Supported encodings specified using a byte order mark: UTF-8, UTF-16LE, UTF-16BE&amp;lt;br /&amp;gt; Other supported encodings:windows-1252&lt;br /&gt;
* BUGFIX: wave files with chunks defined after the data chunk now have the correct length.&lt;br /&gt;
* BUGFIX: saving dataset faster&lt;br /&gt;
* BUGFIX: &amp;quot;load soundfile&amp;quot; options should no longer conflict with each other&lt;br /&gt;
* BUGFIX: prevent stack overflow in XML files with many siblings (~ 20000)&lt;br /&gt;
* BUGFXI: closing rtanalyser whilst it is running now exits shell correctly (without leaving ghost process).&lt;br /&gt;
&lt;br /&gt;
3.9.0&lt;br /&gt;
&lt;br /&gt;
Released: 15th April 2009&lt;br /&gt;
&lt;br /&gt;
Graphical User Interface&lt;br /&gt;
&lt;br /&gt;
General&lt;br /&gt;
&lt;br /&gt;
S_TOOLS-STx now supports all fonts available on the host system.&lt;br /&gt;
&lt;br /&gt;
Comboboxes in ASegTemplates can now be made editable using the flag &amp;lt;span class=&amp;quot;stxmacrocommandoption-character&amp;quot;&amp;gt;/E&amp;lt;/span&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
You can enable/disable runtime error reporting in the Log Control dialog. It is disabled by default, and should only be enabled if you are having problems with S_TOOLS-STx.&lt;br /&gt;
&lt;br /&gt;
Workspace&lt;br /&gt;
&lt;br /&gt;
The segment list can now be edited in the Workspace.&lt;br /&gt;
&lt;br /&gt;
A summary of existing parameters can now be displayed in the segment list (see the Display and Layout Settings dialog).&lt;br /&gt;
&lt;br /&gt;
The Workspace Detail cells can now display text in multiple lines (see the Display and Layout Settings dialog).&lt;br /&gt;
&lt;br /&gt;
Spectrogram &amp;amp;amp; Parameters Viewer&lt;br /&gt;
&lt;br /&gt;
The Spectrogram &amp;amp;amp; Parameters Viewer can now display a harmonic cursor in the spectrogram graph.&lt;br /&gt;
&lt;br /&gt;
The Spectrogram &amp;amp;amp; Parameters Viewer spectrogram method Wavelet has been extended, and a new Cohen&#039;s class distribution method has been implemented.&lt;br /&gt;
&lt;br /&gt;
An amplitude legend is now available in spectrogram plots (via the context menu).&lt;br /&gt;
&lt;br /&gt;
DSP&lt;br /&gt;
&lt;br /&gt;
The band-pass filters now have a window parameter.&lt;br /&gt;
&lt;br /&gt;
Toolbox&lt;br /&gt;
&lt;br /&gt;
The toolbox AutoSeg is available in Spectrogram &amp;amp;amp; Parameters Viewer (if loaded) to automatically segment using peaks, clicks or pauses.&lt;br /&gt;
&lt;br /&gt;
A range of Klatt speech synthesis and resynthesis toolbox functions are available.&lt;br /&gt;
&lt;br /&gt;
The toolbox file &#039;SegmentImEx.sts&#039; implements toolbox functions to import and export segments in the [http://www.fon.hum.uva.nl/praat/ PRAAT] file format. These functions are available in the Workspace.&lt;br /&gt;
&lt;br /&gt;
Scripts&lt;br /&gt;
&lt;br /&gt;
A script specifically designed for transcription and annotation has been developed and included in the default installation of S_TOOLS-STx. The script can be found in the script directory in the file SPExL.sts. There is also a new entry called transcription in the Workspace script tree, which calls the default segmentation routine. The SPExL macro documentation is still being written.&lt;br /&gt;
&lt;br /&gt;
Macro Language&lt;br /&gt;
&lt;br /&gt;
General&lt;br /&gt;
&lt;br /&gt;
Modal window handling has now been moved to the NEW DISPLAY command. Use the option &amp;lt;span class=&amp;quot;stxmacrocommandoption-character&amp;quot;&amp;gt;/O=$#ownerDisplay&amp;lt;/span&amp;gt; to set the owner (which is behind the new display in the z-order. You may also use the option &amp;lt;span class=&amp;quot;stxmacrocommandoption-character&amp;quot;&amp;gt;/Modal&amp;lt;/span&amp;gt; to specify that the owner should be disabled whilst the new display exists.&lt;br /&gt;
&lt;br /&gt;
The NEW command can create objects which are protected from deletion (option &amp;lt;span class=&amp;quot;stxmacrocommandoption-character&amp;quot;&amp;gt;/U|u&amp;lt;/span&amp;gt;).&lt;br /&gt;
&lt;br /&gt;
The command STXCONSTANTS now supports the keywords BITMAPS and BUTTONS.&lt;br /&gt;
&lt;br /&gt;
The command TRANSLATE can now translate the contents of a variable or table.&lt;br /&gt;
&lt;br /&gt;
The command EXIT -xLevel now returns to the first macro defining the label label &amp;quot;OnExitAll&amp;quot; or to the toplevel macro (1st called macro) (rather than to the first macro where the variable #EXITLEVEL = xLevel).&lt;br /&gt;
&lt;br /&gt;
The new command TOKEN, an extended form of the command WORD, can tokenise a string using the specified delimiter.&lt;br /&gt;
&lt;br /&gt;
The new command TRIM can be used to trim characters from the beginning and end of a string.&lt;br /&gt;
&lt;br /&gt;
The new command QUOTE can quote all special characters in a string.&lt;br /&gt;
&lt;br /&gt;
The new command LINELENGTH, although similar to LENGTH, returns the length of a line including delimiters.&lt;br /&gt;
&lt;br /&gt;
The NAME command can now check XML attributes and S_TOOLS-STx XML IDs for syntactical validity. The NAME command can also return a UNC file name for a file on a mapped drive. This is useful, for example, for making DataSets portable in a network environment.&lt;br /&gt;
&lt;br /&gt;
The new command ARG can be used to retrieve macro arguments.&lt;br /&gt;
&lt;br /&gt;
The IREF command supports the option &amp;lt;span class=&amp;quot;stxmacrocommandoption-character&amp;quot;&amp;gt;/I&amp;lt;/span&amp;gt; to simplify and suppress certain error messages.&lt;br /&gt;
&lt;br /&gt;
The global variable @REPORTRUNTIMEERRORS can be set to 1 to display a dialog every time a error occurs when processing a command. Many commands can now take an option specifying that warnings should be generated, rather than errors (DRIVE, LOAD, UNLOAD, SET file LOAD|SAVE|STATUS|DELETE|RENAME|COPY|POSITION), READ, SEGMENT). If set to specify warnings, they will not cause a runtime error.&lt;br /&gt;
&lt;br /&gt;
The READ command (and its variants READSTR, READTAB and READVAR) have a new option &amp;lt;span class=&amp;quot;stxmacrocommandoption-character&amp;quot;&amp;gt;/E&amp;lt;/span&amp;gt; which can be used to escape characters in the input from being used as separators.&lt;br /&gt;
&lt;br /&gt;
Format strings can now add a new line character (\n), using the tag %n. The standard C format tags %x and %X are now supported.&lt;br /&gt;
&lt;br /&gt;
The KEYWORD command now supports the option &amp;lt;span class=&amp;quot;stxmacrocommandoption-character&amp;quot;&amp;gt;/F&amp;lt;/span&amp;gt; which prevents abbreviations from being found and &amp;lt;span class=&amp;quot;stxmacrocommandoption-character&amp;quot;&amp;gt;/C&amp;lt;/span&amp;gt; to make the comparison case sensitive.&lt;br /&gt;
&lt;br /&gt;
The new commands SYSTEMCALL and SYSTEMCALLX are variants of SYSTEM and SYSTEMX which return warnings rather than errors on failure.&lt;br /&gt;
&lt;br /&gt;
The command TGET can now return elapsed milliseconds, when the new option &amp;lt;span class=&amp;quot;stxmacrocommandoption-character&amp;quot;&amp;gt;/ms&amp;lt;/span&amp;gt; is used.&lt;br /&gt;
&lt;br /&gt;
The NAME command, when used with the new UNC subcommand can convert a file path on a mapped drive to its UNC equivalent. This help keep project files portable when accessed from multiple computers (E.g. when the z drive is mapped to \\server\data, the command &amp;quot;name &#039;z:\ds.xml&#039; unc&amp;quot; will return &amp;quot;\\server\data\ds.xml&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
The READ commands have a new option &amp;lt;span class=&amp;quot;stxmacrocommandoption-character&amp;quot;&amp;gt;/T&amp;lt;/span&amp;gt; which prevents arguments from being trimmed.&lt;br /&gt;
&lt;br /&gt;
The macro WINDOWSIZEDLG can be used to allow a user to set a window&#039;s size (width and height in pixels).&lt;br /&gt;
&lt;br /&gt;
SPAtoms&lt;br /&gt;
&lt;br /&gt;
The new SPAtom MIXALL mixes up to eight input arrays/vectors into an output array/vector with gain scaling.&lt;br /&gt;
&lt;br /&gt;
The new SPAtom WLANA performs a general wavelet analysis, and the SPAtom CCANA implement a Cohen Class distribution.&lt;br /&gt;
&lt;br /&gt;
The SPAtoms PVANA and PVSYN no accept a windowing function parameter.&lt;br /&gt;
&lt;br /&gt;
The new SPAtom KLATTSYN can be used to generate synthesised speech.&lt;br /&gt;
&lt;br /&gt;
EVAL command&lt;br /&gt;
&lt;br /&gt;
The EVAL command has the following new subcommands:&amp;lt;br /&amp;gt; formants - a new formant tracking algorithm.&amp;lt;br /&amp;gt; limit, limitlow, limithigh - limits values to within a range of values.&amp;lt;br /&amp;gt; min, max - can receive more than one parameter.&amp;lt;br /&amp;gt; cdot, ctrn, conj - complex dot product, matrix transposition and conjugation.&amp;lt;br /&amp;gt; f0ac - F0 detection using autocorrelation.&amp;lt;br /&amp;gt; The EVAL command now supports numerical (e.g. &amp;amp;gt;=), logical (e.g. &amp;amp;amp;&amp;amp;amp;) and ternary (e.g. eval $#a &amp;amp;gt; $#b ? $#a : $#b).&lt;br /&gt;
&lt;br /&gt;
The Macro Library&lt;br /&gt;
&lt;br /&gt;
The DATASETCMD has a new subcommand AUTOSAVE with which you can turn the DataSet autosave feature on and off.&lt;br /&gt;
&lt;br /&gt;
The GRAPHSETUP macro.&lt;br /&gt;
&lt;br /&gt;
The new CGRAPHSETUP command GRAPHLEGEND displays an amplitude legend in a spectrogram plot.&lt;br /&gt;
&lt;br /&gt;
The new CGRAPHSETUP command GETCOLORPALETTE retrieves the print or screen palette in an extended table.&lt;br /&gt;
&lt;br /&gt;
The new CGRAPHSETUP command GETPROFILELIST returns a simple table with a list of color profiles defined in the settings file (S_TOOLS-STx INI).&lt;br /&gt;
&lt;br /&gt;
===== Classes =====&lt;br /&gt;
&lt;br /&gt;
BXMLDoc class&lt;br /&gt;
&lt;br /&gt;
The SETELEMENT function can now take a table containing attribute/value pairs.&lt;br /&gt;
&lt;br /&gt;
CMenu class&lt;br /&gt;
&lt;br /&gt;
The new CMenu function AddToolBoxMenu adds the standard toolbox menu items to the menu.&lt;br /&gt;
&lt;br /&gt;
XPlot class&lt;br /&gt;
&lt;br /&gt;
When constructing an XPlot instance, an owner window may now be specified.&lt;br /&gt;
&lt;br /&gt;
===== Shell Items =====&lt;br /&gt;
&lt;br /&gt;
Dialog Item&lt;br /&gt;
&lt;br /&gt;
The dialog edit control has a new option &#039;&amp;lt;span class=&amp;quot;stxmacrocommandoption-character&amp;quot;&amp;gt;/F&amp;lt;/span&amp;gt;&#039; which forwards KEY messages to the shell.&lt;br /&gt;
&lt;br /&gt;
There are now four &#039;types&#039; of edit control and a host of new parameters, which means it can display syntax highlighting, be used as a command line interface, etc.&lt;br /&gt;
&lt;br /&gt;
A listview&#039;s cells can now be editable. The option &amp;lt;span class=&amp;quot;stxmacrocommandoption-character&amp;quot;&amp;gt;/E&amp;lt;/span&amp;gt; which must be set for a ListView to be editable. The message CELLEDITED is sent if it is editable and its contents has been changed. If the user cancels editing, the message CELLCANCELLED is sent to the shell. If editing is ended because the user presses &amp;lt;span class=&amp;quot;stxhotkey&amp;quot;&amp;gt;TAB&amp;lt;/span&amp;gt; or &amp;lt;span class=&amp;quot;stxhotkey&amp;quot;&amp;gt;Shift TAB&amp;lt;/span&amp;gt;, the CELLEDITEDTAB or CELLEDITEDBACKTAB messages are sent. You can set the focus to a specific cell and enter editing mode using the new command SET dialogItem listviewIndex STARTEDIT.&lt;br /&gt;
&lt;br /&gt;
The listview now supports the &amp;lt;span class=&amp;quot;stxmacrocommandoption-character&amp;quot;&amp;gt;/F&amp;lt;/span&amp;gt; flag which forwards specific key types to the shell.&lt;br /&gt;
&lt;br /&gt;
The listview supports a new option /R=n, which determines the maximum number of lines of text which can be displayed in the listview.&lt;br /&gt;
&lt;br /&gt;
The new attribute !FOREGROUND returns 1 if the dialog window is in the foreground, 0 if it is not and -1 if the command fails in some way.&lt;br /&gt;
&lt;br /&gt;
The new dialog attribute !EDITING can be used to ascertain if a listview is currently being edited or not.&lt;br /&gt;
&lt;br /&gt;
File Item&lt;br /&gt;
&lt;br /&gt;
The NEW FILE command can now take the option &amp;lt;span class=&amp;quot;stxmacrocommandoption-character&amp;quot;&amp;gt;/S&amp;lt;/span&amp;gt;, to suppress error messages on creation failure.&lt;br /&gt;
&lt;br /&gt;
The new file item command COPY &amp;lt;span class=&amp;quot;stxmacrocommandoption-character&amp;quot;&amp;gt;/Z&amp;lt;/span&amp;gt; can be used to encrypt/decrypt a file, including optional password protection.&lt;br /&gt;
&lt;br /&gt;
The new command TRYLOCK will try to get a lock on the file but will not block the script.&lt;br /&gt;
&lt;br /&gt;
The !CHANGED attribute can now be explicitly set or reset. This functionality is new, in as much as versions previous to 3.9.0 could only reset the attribute. The meaning of assigning &#039;1&#039; to the attribute has changed, since assigning &#039;1&#039; now *sets* the attribute, whilst assigning &#039;0&#039; resets the attribute.&lt;br /&gt;
&lt;br /&gt;
A new file item type - the GDX file item - has been developed, which can be used to create files containing graphic data which are passed directly to a graph item. GDX stands for &amp;quot;graphical data exchange&amp;quot;. Currently, the spectrogram is the only plot which supports the GDX file type.&lt;br /&gt;
&lt;br /&gt;
Graph Item&lt;br /&gt;
&lt;br /&gt;
The command ADDMARKER can now be used to add a &#039;Box and Whiskers&#039; metasegment.&lt;br /&gt;
&lt;br /&gt;
The metasegment font can be specified on an individual basis using the ADDMARKER command.&lt;br /&gt;
&lt;br /&gt;
A metasegment may be told not to change color on selection. This is only available using the &amp;quot;SET graph ADDMARKER table&amp;quot; command with the parameter &amp;quot;invertSelected&amp;quot; set to &amp;quot;true&amp;quot; if the metasegment color should be inverted whilst selected or &amp;quot;false&amp;quot; if not. The default is &amp;quot;true&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
The key used to make a metasegment moveable can now be set using a &#039;modifyKeys&#039; entry in the ADDMARKER table parameter.&lt;br /&gt;
&lt;br /&gt;
A simple marker can now be displayed as a single vertical line (option &amp;lt;span class=&amp;quot;stxmacrocommandoption-character&amp;quot;&amp;gt;/M&amp;lt;/span&amp;gt;).&lt;br /&gt;
&lt;br /&gt;
The command OVERVIEW, which toggles between the &#039;view&#039; and &#039;overview&#039; modes, has been documented.&lt;br /&gt;
&lt;br /&gt;
The graph supports a new attribute !CURSORMODE which returns the currently visible cursors, as set using the last CURSORMODE command.&lt;br /&gt;
&lt;br /&gt;
The width of a graph&#039;s border can now be set using new AXIS command parameters. The default border width is 1 pixel.&lt;br /&gt;
&lt;br /&gt;
The spectrogram palette can be changed at any time using the &amp;quot;SET graph Y * * SPECTROGRAM&amp;quot; function.&lt;br /&gt;
&lt;br /&gt;
The DATASETLOADED message is now sent when a graph finishes loading data for a particular input.&lt;br /&gt;
&lt;br /&gt;
Instance Item&lt;br /&gt;
&lt;br /&gt;
The new command TRYLOCK will try to get a lock on the instance but will not block the script.&lt;br /&gt;
&lt;br /&gt;
Table Item&lt;br /&gt;
&lt;br /&gt;
A table item connected to a ListView must be configured to be editable using the CONFIG command or the !EDITABLE attribute. The CONFIG command has also been extended to allow for a restrictive set of values to be specified for a table field. If specified, the ListView will display a combobox in this column for each entry. All parameters set using the CONFIG command can now be queried via table field attributes.&lt;br /&gt;
&lt;br /&gt;
The new command TRYLOCK will try to get a lock on the table but will not block the script.&lt;br /&gt;
&lt;br /&gt;
The command NEW TABLE supports a silent error flag.&lt;br /&gt;
&lt;br /&gt;
A table field can now display multirow entries, if the !MULTIROW attribute is set to 1, or the CONFIG command multirow parameter is set to ON.&lt;br /&gt;
&lt;br /&gt;
The last user input for a particular column can now be used as the default for that column using the CONFIG command&#039;s setuserdefault parameter.&lt;br /&gt;
&lt;br /&gt;
The DEFINE command can now be used to rename an existing field.&lt;br /&gt;
&lt;br /&gt;
Wave Item&lt;br /&gt;
&lt;br /&gt;
The wave item now supports the new attribute !PLAYSRATE which can be used to return the sampling rate currently used to for playback or set a new sampling rate for playback.&lt;br /&gt;
&lt;br /&gt;
=== Changes ===&lt;br /&gt;
&lt;br /&gt;
Changes in S_TOOLS-STx &amp;amp;lt;CURRENT_VERSION&amp;amp;gt;:&lt;br /&gt;
&lt;br /&gt;
Graphical User Interface&lt;br /&gt;
&lt;br /&gt;
F0 Test, F0Lookup, Amplitude Spectrum Statistics&lt;br /&gt;
&lt;br /&gt;
The F0 Test, F0 Lookup and Amplitude Spectrum Statistics functions in the Spectrogram &amp;amp;amp; Parameters Viewer sectioner have been moved to the toolbox file SpectrumTB.sts.&lt;br /&gt;
&lt;br /&gt;
Macro Language&lt;br /&gt;
&lt;br /&gt;
UNLOAD command&lt;br /&gt;
&lt;br /&gt;
The command UNLOAD MACROCODE, UNLOAD SPUCODE and UNLOAD SOURCECODE take one parameter - the name of a sourcecode file (relative or absolute). The MACROCODE variant used to take a blank separated list of macro names and the SPUCODE version used to take a blank separated list of SPU names.&lt;br /&gt;
&lt;br /&gt;
Display and Dialog DROPFILE message&lt;br /&gt;
&lt;br /&gt;
The DROPFILE message sent to displays and dialogs when files are dropped onto them has been changed. The &amp;lt;span class=&amp;quot;stxmacrocommandparameter-character&amp;quot;&amp;gt;filePath&amp;lt;/span&amp;gt; parameter is not longer a string, but rather the id of a simple table with one absolute path per entry.&lt;br /&gt;
&lt;br /&gt;
Syntax&lt;br /&gt;
&lt;br /&gt;
The string &amp;quot;123 456&amp;quot; is no longer a valid number.&lt;br /&gt;
&lt;br /&gt;
=== Bug Fixes ===&lt;br /&gt;
&lt;br /&gt;
Bug fixes&lt;br /&gt;
&lt;br /&gt;
The waterfall graph now prints correctly.&lt;br /&gt;
&lt;br /&gt;
The BDataSet member function AddASet now selects the new audio set if adding the set succeeds (r5534).&lt;br /&gt;
&lt;br /&gt;
Shell commands using the return value RC now assign the value even if return code equals 0 (indicating success) (r5609).&lt;br /&gt;
&lt;br /&gt;
Spectrogram &amp;amp;amp; Parameters Viewer Sectioner copy to clipboard working again (r5625).&lt;br /&gt;
&lt;br /&gt;
The &#039;view&#039; graph mode now displays correctly when first drawn (r5643).&lt;br /&gt;
&lt;br /&gt;
The asterisk character * is now officially an invalid hotkey, rather than being one which doesn&#039;t work correctly (r5500).&lt;br /&gt;
&lt;br /&gt;
Loading an XML file which an unsupported character encoding now fails rather than asserting (r5614).&lt;br /&gt;
&lt;br /&gt;
The Spectrum viewer can now saving CEPST parameters (r6470).&lt;br /&gt;
&lt;br /&gt;
The color &#039;GRAY&#039; is now defined as the RGB value 96:96:96, which fixes the bug where cursors were invisible on a &#039;GRAY&#039; background (r6148).&lt;br /&gt;
&lt;br /&gt;
The &amp;quot;SET graph XSCALE&amp;quot; flag &amp;quot;/I&amp;quot; is now working (r6187).&lt;br /&gt;
&lt;br /&gt;
Using the correct normal/dual/tight phase vocoder pv filters (r5874).&lt;br /&gt;
&lt;br /&gt;
All valid number formats (including mmmE /-eee) can now be used in time-expressions (r5746).&lt;br /&gt;
&lt;br /&gt;
=== Corrections ===&lt;br /&gt;
&lt;br /&gt;
S_TOOLS-STx Version: 3.9&lt;br /&gt;
&lt;br /&gt;
A list of documentation corrections since the last release (3.7).&lt;br /&gt;
&lt;br /&gt;
The macro COBJ has been superseded by the COBJ class and no longer exists.&lt;br /&gt;
&lt;br /&gt;
The command SYSTEM MKDIR and SYSTEM RMDIR were undocumented.&lt;br /&gt;
&lt;br /&gt;
The SPAtom ASEG1 parameters are now in the correct order (&amp;lt;span class=&amp;quot;stxmacrocommandparameter-character&amp;quot;&amp;gt;TABS&amp;lt;/span&amp;gt; and &amp;lt;span class=&amp;quot;stxmacrocommandparameter-character&amp;quot;&amp;gt;TABM&amp;lt;/span&amp;gt; were swapped).&lt;br /&gt;
&lt;br /&gt;
The SPAtom VSPLIT was mistakenly documented as VSPLIT1.&lt;br /&gt;
&lt;br /&gt;
The macro DEBUGTB no longer exists.&lt;br /&gt;
&lt;br /&gt;
The descriptions of the different formulas used by the SPAtom MORLET have been corrected.&lt;br /&gt;
&lt;br /&gt;
The section FILE item command LOAD parameters were not documented as mandatory.&lt;br /&gt;
&lt;br /&gt;
Added description of shell variables SCRIPTFILEPATH, SCRIPTDIRECTORY AND SCRIPTMAINNAME.&lt;br /&gt;
&lt;br /&gt;
The AWEIGHT SPAtom has now been documented.&lt;br /&gt;
&lt;br /&gt;
The WAVEOUT SPAtom has now been documented.&lt;br /&gt;
&lt;br /&gt;
A list of documentation corrections since the last release (3.6.2).&lt;br /&gt;
&lt;br /&gt;
The BUTIL FILEDIALOG no longer has a &amp;lt;span class=&amp;quot;stxmacrocommandparameter-character&amp;quot;&amp;gt;path&amp;lt;/span&amp;gt; parameter.&lt;br /&gt;
&lt;br /&gt;
A list of documentation corrections since the last release (3.6.1).&lt;br /&gt;
&lt;br /&gt;
The SET table FIND &amp;lt;span class=&amp;quot;stxmacrocommandparameter-character&amp;quot;&amp;gt;cexpr&amp;lt;/span&amp;gt; format uses colons, not commas as delimiters.&lt;br /&gt;
&lt;br /&gt;
The SET value OUTPUT commands can take &amp;lt;span class=&amp;quot;stxmacrocommandoption-character&amp;quot;&amp;gt;/Double&amp;lt;/span&amp;gt; options.&lt;br /&gt;
&lt;br /&gt;
The description of the parameters for the NEW TABLE command where field definitions are possible has been corrected.&lt;br /&gt;
&lt;br /&gt;
The SET graph CURSORMODE command now describes the bound and locked parameters correctly.&lt;br /&gt;
&lt;br /&gt;
The VAR arithmetic operators DIV, MUL and SUB are actually called DIVIDE, MULTIPLY and SUBTRACT&lt;br /&gt;
&lt;br /&gt;
The SET graph ZSCALE command parameters were incorrect.&lt;br /&gt;
&lt;br /&gt;
=== Known Bugs ===&lt;br /&gt;
&lt;br /&gt;
S_TOOLS-STx Version: 3.9&lt;br /&gt;
&lt;br /&gt;
These bugs were known to exist at the time of the release and are proving difficult, if not impossible to fix.&lt;br /&gt;
&lt;br /&gt;
Interface&lt;br /&gt;
&lt;br /&gt;
Sometimes 44KB soundfiles are created, which are invalid. This bug has not proved easy to replicate, so if you can replicate it, please contact us ( \n  This e-mail address is being protected from spam bots, you need JavaScript enabled to view it  ).&lt;br /&gt;
&lt;br /&gt;
Can&#039;t delete an entry in the DataSet if it has no ID. It is highly unlikely that you will ever have a DataSet entry with no ID. If this is the case however, you must currently delete it by hand (Close S_TOOLS-STx, open the DataSet in a text editor and either give the offending entry an ID, or remove it). Should you be able to reproduce any action which creates an entry without an ID, please contact us ( \n  This e-mail address is being protected from spam bots, you need JavaScript enabled to view it  ).&lt;br /&gt;
&lt;br /&gt;
Spectrogram &amp;amp;amp; Parameters Viewer&lt;br /&gt;
&lt;br /&gt;
Interpolation of very short signals is incorrect (Deutsch - 2004-11-10 - since 1.0).&lt;br /&gt;
&lt;br /&gt;
Graphics&lt;br /&gt;
&lt;br /&gt;
Copying a display graphic to the clipboard and pasting into a graphics program does not always achieve the desired results. This bug will not be fixed in the foreseeable future. Some graphics programs paste it properly (IrfanView, Microsoft Word), others don&#039;t (PaintShop Pro) - (Jonnie White - 2004-07-14).&lt;br /&gt;
&lt;br /&gt;
Selected cursors is not visible if background is set to GRAY (White - 2004-07-12 - since 1.0).&lt;br /&gt;
&lt;br /&gt;
Macro&lt;br /&gt;
&lt;br /&gt;
The dialog control listbox does not handle displaying huge strings properly. This seems to be a problem with the underlying CListBox control (Becker/White - 2004-12 - since 1.0).&lt;br /&gt;
&lt;br /&gt;
The DCOM command INVOKEMETHOD Evaluate always returns an error when communicating with the R DCOM server even if the command was actually successful (Deutsch/White - 2004 - since 3.6.0).&lt;br /&gt;
&lt;br /&gt;
==3.8==&lt;br /&gt;
&lt;br /&gt;
3.8.3&lt;br /&gt;
&lt;br /&gt;
* BUGFIX: zoom in in viewer3 now working when zooming around active cursor&lt;br /&gt;
* BUGFIX: spectragram title display corrected (amin/amax)&lt;br /&gt;
* BUGFIX: CDLGMAP now deletes window only if it has created the window during construction&lt;br /&gt;
&lt;br /&gt;
3.8.2&lt;br /&gt;
&lt;br /&gt;
* BUGFIX: dataset path now displayed, even if it has spaces in it.&lt;br /&gt;
* BUGFIX: Parameter plot explicitly redrawn when new data is sent. This fixes the bug (reported by Julia Brandstaetter) where Set Zero and Undo were not working properly in Spectrogram and Parameter plot.&lt;br /&gt;
&lt;br /&gt;
3.8.1&lt;br /&gt;
&lt;br /&gt;
* BUGFIX: Warn user that more waveform samples are being sent than expected and refrain from crashing.&lt;br /&gt;
* BUGFIX: CDlgMap now always uses the next free dialog index for a new entry. This means that multiple maps can reference the same dialog and still work. The functions fci and nc were removed since they are never used. Display now using second event to synchronise creation and variable initialisation. This fixes the mysterious bug where the window class was only sometimes used.&lt;br /&gt;
* BUGFIX: If the polyline function is called with less than two points it no longer asserts, but rather ends gracefully.&lt;br /&gt;
* BUGFIX: send keys not processed by dialog on to graph hotkey handlers&lt;br /&gt;
* BUGFIX: spectrogram is now being initialised with the correct context menu when formants are displayed in it.&lt;br /&gt;
* BUGFIX: giving dialog focus if there are no graphs&lt;br /&gt;
* BUGFIX: buttons in dialogs in a graph no longer process normal mneumonics. This means that the graph can process them (for Moosmueller). Buttons can still be activated with return and the space bar and tabbed/arrowed to.&lt;br /&gt;
* BUGFIX: preventing race conditions in Attach/Detach. This removes one possible cause of autosave crashing. It does not guarantee, though, there to be no other reasons for autosave to crash.&lt;br /&gt;
&lt;br /&gt;
=Downloads=&lt;br /&gt;
The {{STX}} downloads are available here: https://www.kfs.oeaw.ac.at/pub/stx&lt;/div&gt;</summary>
		<author><name>Jw</name></author>
	</entry>
	<entry>
		<id>https://mediawiki.kfs.oeaw.ac.at/stx/docs/wiki/index.php?title=Template:VERSION&amp;diff=10687</id>
		<title>Template:VERSION</title>
		<link rel="alternate" type="text/html" href="https://mediawiki.kfs.oeaw.ac.at/stx/docs/wiki/index.php?title=Template:VERSION&amp;diff=10687"/>
		<updated>2020-12-30T05:59:42Z</updated>

		<summary type="html">&lt;p&gt;Jw: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;5.0.6&lt;/div&gt;</summary>
		<author><name>Jw</name></author>
	</entry>
	<entry>
		<id>https://mediawiki.kfs.oeaw.ac.at/stx/docs/wiki/index.php?title=Main_Page&amp;diff=10686</id>
		<title>Main Page</title>
		<link rel="alternate" type="text/html" href="https://mediawiki.kfs.oeaw.ac.at/stx/docs/wiki/index.php?title=Main_Page&amp;diff=10686"/>
		<updated>2020-12-30T05:55:55Z</updated>

		<summary type="html">&lt;p&gt;Jw: /* Download */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== {{STx}} {{VERSION}}==&lt;br /&gt;
&lt;br /&gt;
{{STX}} is a software tool for the analysis, signal processing and annotation of Wave sound files. {{STX}} runs on the Windows operating system. It was originally a port of the S_TOOLS application for dedicated DSP hardware developed at the [https://www.kfs.oeaw.ac.at Acoustics Research Institute] in the 1980s. This documentation is work in progress and by no means complete. If you fail to find something you need, please [[Contact|get in touch]] with the development team.&lt;br /&gt;
&lt;br /&gt;
=== Using {{STx}} ===&lt;br /&gt;
&lt;br /&gt;
* [[User_Guide|User Guide]]&lt;br /&gt;
* Introductory Video: [https://kfsmail.kfs.oeaw.ac.at/owncloud/index.php/s/cbMjVjgQLZGjYk8 The Compact Workspace]&lt;br /&gt;
&lt;br /&gt;
=== {{STx}} Programming ===&lt;br /&gt;
&lt;br /&gt;
* [[Programmer_Guide/STx_Guru|Starting with {{STx}} Programming]]&lt;br /&gt;
* [[Programmer_Guide|Programmer Guide]]&lt;br /&gt;
* [[Programmer_Guide/Quick_Reference|Quick Reference]]&lt;br /&gt;
&lt;br /&gt;
=== About {{STx}} {{VERSION}} ===&lt;br /&gt;
&lt;br /&gt;
* Platform: runs on Windows Vista and higher&lt;br /&gt;
* [[History of Changes]]&lt;br /&gt;
* [[Known Bugs]]&lt;br /&gt;
* [[Feature Requests]]&lt;br /&gt;
* [[Contact]]&lt;br /&gt;
* [[Running STx under Linux or macOS]]&lt;br /&gt;
&lt;br /&gt;
=== Download ===&lt;br /&gt;
&lt;br /&gt;
[https://s02kfs1.kfs.oeaw.ac.at/pub/stx/stx-5.0.6.10071-freeware.exe STx 5.0.6]&lt;br /&gt;
&lt;br /&gt;
[https://s02kfs1.kfs.oeaw.ac.at/pub/stx/ older releases]&lt;br /&gt;
&lt;br /&gt;
==MediaWiki Links==&lt;br /&gt;
* [[STx Documentation Style Guide|Style guide]] for documenting {{STx}} in this wiki.&lt;br /&gt;
* Consult the [http://meta.wikimedia.org/wiki/Help:Contents User&#039;s Guide] for information on using the wiki software.&lt;br /&gt;
* [http://www.mediawiki.org/wiki/Manual:Configuration_settings Configuration settings list]&lt;br /&gt;
* [http://www.mediawiki.org/wiki/Manual:FAQ MediaWiki FAQ]&lt;br /&gt;
* [https://lists.wikimedia.org/mailman/listinfo/mediawiki-announce MediaWiki release mailing list]&lt;br /&gt;
__NOTOC__&lt;/div&gt;</summary>
		<author><name>Jw</name></author>
	</entry>
	<entry>
		<id>https://mediawiki.kfs.oeaw.ac.at/stx/docs/wiki/index.php?title=User_Guide/SPExL/Transcription_Script&amp;diff=10685</id>
		<title>User Guide/SPExL/Transcription Script</title>
		<link rel="alternate" type="text/html" href="https://mediawiki.kfs.oeaw.ac.at/stx/docs/wiki/index.php?title=User_Guide/SPExL/Transcription_Script&amp;diff=10685"/>
		<updated>2020-11-27T11:08:37Z</updated>

		<summary type="html">&lt;p&gt;Jw: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{DISPLAYTITLE:{{SUBPAGENAME}}}}&lt;br /&gt;
{{User Guide}}&lt;br /&gt;
{{SPExL}}&lt;br /&gt;
{{Hotkeys}}&lt;br /&gt;
[[File:stx_ug_spexl_transcription.png|thumb]]&lt;br /&gt;
&lt;br /&gt;
The &#039;Transcription&#039; script is a tool in {{STX}} specifically written for transcribing sound files. The idea is to make transcribing as simple and efficient as possible. In addition to using the mouse, you can do the transcribing with the keyboard alone. The hotkeys are user-definable.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div class=&amp;quot;noautonum&amp;quot;&amp;gt;&lt;br /&gt;
{{TOC limit|2}}&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
You will find it in the bottom left-hand corner of the [[User_Guide/Workspace|Workspace]] where it is called &amp;lt;code&amp;gt;Transcription&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
When starting the Transcription script, you must select the sound file in the Workspace you wish to transcribe. This is unlike the [[User_Guide/Workspace/Application_and_Setup_Tree/Signal_Analysis_and_Display/Profile|analysis profiles]], which analyse a segment. The following dialog will then appear.&lt;br /&gt;
&lt;br /&gt;
[[File:Stx_transcription_startup_dialog.png]]&lt;br /&gt;
&lt;br /&gt;
==Spectrogram / Waveform Views==&lt;br /&gt;
You can display either a spectrogram or a waveform of the sound file (or both). There three different combinations available:&lt;br /&gt;
===Whole file as waveform, with section as spectrogram===&lt;br /&gt;
This view displays a waveform of the whole file and a spectrogram of a section of that file. This means that you can see all the segments in the file in the waveform graph. Navigating around the file in the waveform, you can then view a section of it as a spectrogram (e.g. with the hotkey &amp;lt;kbd&amp;gt;S&amp;lt;/kbd&amp;gt;). When starting the transcription script, choose &#039;&#039;&#039;wave overview &amp;amp; spg. section&#039;&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
===Section of file as waveform===&lt;br /&gt;
This is the fastest view, displaying a section of the sound file as a waveform. The whole of the file is available to scroll through. When starting the transcription script, choose &#039;&#039;&#039;wave only&#039;&#039;&#039;. The length of signal displayed is specified by the scrollbar &#039;&#039;&#039;Length&#039;&#039;&#039; value in the start-up dialog. You can then scroll through the sound file using, for example, the hotkeys &amp;lt;kbd&amp;gt;M&amp;lt;/kbd&amp;gt; (forwards) and &amp;lt;kbd&amp;gt;N&amp;lt;/kbd&amp;gt; (backwards).&lt;br /&gt;
&lt;br /&gt;
===Section of file as synchronised waveform and spectrogram===&lt;br /&gt;
This view displays a section of the sound file as both a waveform and a spectrogram. The waveform and spectrogram are time-aligned. The initial length of analysed signal is determined by the &#039;&#039;&#039;Length&#039;&#039;&#039; value in the start-up dialog. You can zoom in and out of the signal as well as scroll through the whole sound file.&lt;br /&gt;
&lt;br /&gt;
Note that the &#039;&#039;&#039;Fixed&#039;&#039;&#039; checkbox will mean you can zoom into a signal, but cannot zoom out to display more of the signal than the length specified by &#039;Length&#039;.&lt;br /&gt;
&lt;br /&gt;
==Dialog Description==&lt;br /&gt;
&lt;br /&gt;
[[file: Spexl_dialog.png]]&lt;br /&gt;
&lt;br /&gt;
===timebar===&lt;br /&gt;
The timebar lets you scroll through the sound file. This is useful, if you have a large sound file, and therefore only load part of it at any one time.&lt;br /&gt;
* The &amp;lt;samp&amp;gt;|&amp;lt;&amp;lt;/samp&amp;gt; button scrolls back to the beginning of the file.&lt;br /&gt;
* The &amp;lt;samp&amp;gt;&amp;lt;&amp;lt;/samp&amp;gt; button scrolls back one step.&lt;br /&gt;
* The &amp;lt;samp&amp;gt;&amp;gt;&amp;lt;/samp&amp;gt; button scrolls forward one step.&lt;br /&gt;
* The &amp;lt;samp&amp;gt;&amp;gt;|&amp;lt;/samp&amp;gt; button scrolls to the end of the file.&lt;br /&gt;
* The &amp;lt;samp&amp;gt;Play&amp;lt;/samp&amp;gt; button plays the whole signal currently loaded from disk.&lt;br /&gt;
* The &amp;lt;samp&amp;gt;Draw&amp;lt;/samp&amp;gt; button redraws the section of the sound file specified by the scroll bar (if &amp;lt;samp&amp;gt;auto&amp;lt;/samp&amp;gt; is unchecked).&lt;br /&gt;
* The &amp;lt;samp&amp;gt;&amp;lt;Seg&amp;lt;/samp&amp;gt; and &amp;lt;samp&amp;gt;Seg&amp;gt;&amp;lt;/samp&amp;gt; buttons scrolls to the previous and next segments outside of the current loaded signal. This can be useful, if you have a long file with few segments in it.&lt;br /&gt;
* If the &amp;lt;samp&amp;gt;auto&amp;lt;/samp&amp;gt; setting is checked, then moving the scroll bar automatically redraws the graphs. This is the default. If unchecked, you must explicitly press the &amp;lt;samp&amp;gt;Draw&amp;lt;/samp&amp;gt; button.&lt;br /&gt;
&lt;br /&gt;
If you are already viewing the entire sound file, the time bar is not very useful. See [[#Scrolling|Scrolling]] for further details.&lt;br /&gt;
&lt;br /&gt;
===spec.===&lt;br /&gt;
The &amp;lt;samp&amp;gt;spec.&amp;lt;/samp&amp;gt; area of the dialog is only enabled if the spectrogram graph (&amp;lt;samp&amp;gt;wave &amp;amp; spg. section&amp;lt;/samp&amp;gt; or &amp;lt;samp&amp;gt;wave overview &amp;amp; spg. section&amp;lt;/samp&amp;gt; view) is being used. Choose the 1st or 2nd frame/overlap settings specified in the [[User_Guide/SPExL/Settings#Spectrogram_Display_and_Parameter_Setup|settings dialog]].&lt;br /&gt;
&lt;br /&gt;
===f0/for.===&lt;br /&gt;
&lt;br /&gt;
The F0 and formants can be calculated for the displayed spectrogram. This is not available in the &amp;lt;samp&amp;gt;wave only&amp;lt;/samp&amp;gt; view. See [[User_Guide/Transcription_Script#F0_.2F_Formant_Extraction|F0 and Formant Extraction]] for further details.&lt;br /&gt;
&lt;br /&gt;
===main===&lt;br /&gt;
&lt;br /&gt;
Here you can save changes you&#039;ve made to your segments ([[File:resource_dosave.png]]), revert any changes you have made since you last saved the project file (&#039;Revert&#039;), open the settings dialog ([[File: Resource setup.png]] or exit the transcription script.&lt;br /&gt;
&lt;br /&gt;
===playback===&lt;br /&gt;
&lt;br /&gt;
The playback section of the dialog can be used to play the sound file. The most interesting setting is the ability to repeat the signal when played, which can be useful when transcribing. Alternatively you can repeat the signal forever (or until the ESC key is pressed).&lt;br /&gt;
&lt;br /&gt;
===cursor control===&lt;br /&gt;
&lt;br /&gt;
In addition to moving the cursors around by clicking and dragging in the graph, you can also do it with these buttons. All buttons are also associated with [[#Hotkeys|hotkeys]].&lt;br /&gt;
&lt;br /&gt;
==Scrolling==&lt;br /&gt;
&lt;br /&gt;
Since displaying a long sound file can take a while, it can be useful to load only part of the sound file. This is achieved with scrolling in the &amp;lt;samp&amp;gt;wave only&amp;lt;/samp&amp;gt; and &amp;lt;samp&amp;gt;wave &amp;amp; spg. section&amp;lt;/samp&amp;gt; [[User_Guide/Transcription_Script#Spectrogram_.2F_Waveform_Views|views]]. The lowest graph displays the section of the sound file which is loaded (purple) and visible (brown). &lt;br /&gt;
&lt;br /&gt;
Note that the &amp;lt;samp&amp;gt;wave overview &amp;amp; spg. section&amp;lt;/samp&amp;gt; [[User_Guide/Transcription_Script#Spectrogram_.2F_Waveform_Views|view]] always loads the whole sound file.&lt;br /&gt;
&lt;br /&gt;
==F0 / Formant Extraction==&lt;br /&gt;
You can display the F0 and formants in the spectrogram by pressing the [[File: Resource run.png]] button. The settings for extraction are in the [[User Guide/SPExL/Transcription_Script/F0_Formant_Extraction_Settings|F0 / Formant Extraction Settings]] dialog reached by pressing the &#039;f0/for&#039; button [[File: Resource setup.png]].&lt;br /&gt;
&lt;br /&gt;
==Settings==&lt;br /&gt;
There are many settings you can change via the [[User Guide/SPExL/Transcription_Script/Settings|Settings]] dialog reached by the &#039;main&#039; [[File: Resource setup.png]] button, or the &#039;settings-&amp;gt;setup dialog&#039; context menu.&lt;br /&gt;
&lt;br /&gt;
==Hotkeys==&lt;br /&gt;
&lt;br /&gt;
Many operations are available using hotkeys. &lt;br /&gt;
&lt;br /&gt;
===User Defined Hotkeys===&lt;br /&gt;
&lt;br /&gt;
As of version 1.1, these hotkeys can be changed by the user by modifying the &amp;lt;samp&amp;gt;spexl_segtrans.hotkeys&amp;lt;/samp&amp;gt; file. The default hotkeys are defined in the file &amp;lt;samp&amp;gt;spexl_segtrans.hotkeys.default&amp;lt;/samp&amp;gt;. These files are in the &amp;lt;samp&amp;gt;profiles&amp;lt;/samp&amp;gt; directory in {{STX}} &amp;gt;= 5.0 and in the &amp;lt;samp&amp;gt;scripts&amp;lt;/samp&amp;gt; directory in {{STX}} &amp;lt;= 4.4.10.&lt;br /&gt;
&amp;lt;!--&lt;br /&gt;
&lt;br /&gt;
===Default Hotkeys===&lt;br /&gt;
&lt;br /&gt;
Note that unless otherwise specified (e.g. with &amp;lt;kbd&amp;gt;Shift&amp;lt;/kbd&amp;gt;), all hotkeys are lowercase.&lt;br /&gt;
&lt;br /&gt;
====Analyze Hotkeys====&lt;br /&gt;
&lt;br /&gt;
{|&lt;br /&gt;
|&amp;lt;kbd&amp;gt;Ctrl&amp;lt;/kbd&amp;gt;+&amp;lt;kbd&amp;gt;N&amp;lt;/kbd&amp;gt;&lt;br /&gt;
|Select a viewer and profile to analyze the signal between the cursors with (opens new window).&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;kbd&amp;gt;Ctrl&amp;lt;/kbd&amp;gt;+&amp;lt;kbd&amp;gt;A&amp;lt;/kbd&amp;gt;&lt;br /&gt;
|Analyze the signal between the cursors with the viewer/profile which was used last.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
====Cursor Hotkeys====&lt;br /&gt;
&lt;br /&gt;
{|&lt;br /&gt;
!Key&lt;br /&gt;
!Description&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;kbd&amp;gt;B&amp;lt;/kbd&amp;gt;&lt;br /&gt;
|Move the cursors to the selected segment.&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;kbd&amp;gt;D&amp;lt;/kbd&amp;gt;&lt;br /&gt;
|Move left cursor to the left.&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;kbd&amp;gt;F&amp;lt;/kbd&amp;gt;&lt;br /&gt;
|Move left cursor to the right.&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;kbd&amp;gt;E&amp;lt;/kbd&amp;gt;&lt;br /&gt;
|Move left cursor to the left in large steps.&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;kbd&amp;gt;R&amp;lt;/kbd&amp;gt;&lt;br /&gt;
|Move left cursor to the right in large steps.&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;kbd&amp;gt;J&amp;lt;/kbd&amp;gt;&lt;br /&gt;
|Move right cursor to the left.&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;kbd&amp;gt;K&amp;lt;/kbd&amp;gt;&lt;br /&gt;
|Move right cursor to the right.&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;kbd&amp;gt;U&amp;lt;/kbd&amp;gt;&lt;br /&gt;
|Move right cursor to left in large steps.&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;kbd&amp;gt;I&amp;lt;/kbd&amp;gt;&lt;br /&gt;
|Move right cursor to right in large steps.&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;kbd&amp;gt;L&amp;lt;/kbd&amp;gt;&lt;br /&gt;
|Flip left cursor around right cursor.&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;kbd&amp;gt;Shift&amp;lt;/kbd&amp;gt;+&amp;lt;kbd&amp;gt;L&amp;lt;/kbd&amp;gt;&lt;br /&gt;
|Flip right cursor around left cursor.&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;kbd&amp;gt;Ctrl&amp;lt;/kbd&amp;gt;+&amp;lt;kbd&amp;gt;Y&amp;lt;/kbd&amp;gt;&lt;br /&gt;
|Rotate through the available cursor styles.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
====Playback Hotkeys====&lt;br /&gt;
&lt;br /&gt;
{|&lt;br /&gt;
|&amp;lt;kbd&amp;gt;Escape&amp;lt;/kbd&amp;gt;&lt;br /&gt;
|Stops playback&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;kbd&amp;gt;Space&amp;lt;/kbd&amp;gt;&lt;br /&gt;
|Play between the cursors&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;kbd&amp;gt;A&amp;lt;/kbd&amp;gt;&lt;br /&gt;
|Play all of signal in waveform window&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;kbd&amp;gt;O&amp;lt;/kbd&amp;gt;&lt;br /&gt;
|Play all of the signal from the right-hand cursor to end of waveform window&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;kbd&amp;gt;P&amp;lt;/kbd&amp;gt;&lt;br /&gt;
|Play the selected segment&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;kbd&amp;gt;W&amp;lt;/kbd&amp;gt;&lt;br /&gt;
|Play all of signal up to the left-hand cursor&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
====Scrollbar Hotkeys====&lt;br /&gt;
The length scrolled is defined when the transcription script starts up (Scrollbar Step (%)).&lt;br /&gt;
{|&lt;br /&gt;
|&amp;lt;kbd&amp;gt;Ctrl&amp;lt;/kbd&amp;gt;+&amp;lt;kbd&amp;gt;G&amp;lt;/kbd&amp;gt;&lt;br /&gt;
|Jump top a position specified in seconds&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;kbd&amp;gt;M&amp;lt;/kbd&amp;gt;&lt;br /&gt;
|Scroll forward&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;kbd&amp;gt;N&amp;lt;/kbd&amp;gt;&lt;br /&gt;
|Scroll backwards&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
====Segment Hotkeys====&lt;br /&gt;
{|&lt;br /&gt;
|&amp;lt;kbd&amp;gt;Shift&amp;lt;/kbd&amp;gt;+&amp;lt;kbd&amp;gt;B&amp;lt;/kbd&amp;gt;&lt;br /&gt;
|Move the selected segment to the cursor positions.&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;kbd&amp;gt;Enter&amp;lt;/kbd&amp;gt;&lt;br /&gt;
|Create new segment between the cursors.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
====Segment List Hotkeys====&lt;br /&gt;
{|&lt;br /&gt;
|&amp;lt;kbd&amp;gt;Ctrl&amp;lt;/kbd&amp;gt;+&amp;lt;kbd&amp;gt;R&amp;lt;/kbd&amp;gt;&lt;br /&gt;
|Open the segment list sort order dialog.&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;kbd&amp;gt;Ctrl&amp;lt;/kbd&amp;gt;+&amp;lt;kbd&amp;gt;Numpad Plus&amp;lt;/kbd&amp;gt;&lt;br /&gt;
|Resize all columns to fit their content&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
====Spectrogram Hotkeys====&lt;br /&gt;
{|&lt;br /&gt;
|&amp;lt;kbd&amp;gt;Shift&amp;lt;/kbd&amp;gt;+&amp;lt;kbd&amp;gt;Add&amp;lt;/kbd&amp;gt;&lt;br /&gt;
|Increase amplitude floor.&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;kbd&amp;gt;Shift&amp;lt;/kbd&amp;gt;+&amp;lt;kbd&amp;gt;Subtract&amp;lt;/kbd&amp;gt;&lt;br /&gt;
|Decrease amplitude floor.&lt;br /&gt;
&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
====Zoom Hotkeys====&lt;br /&gt;
&lt;br /&gt;
{|&lt;br /&gt;
|&amp;lt;kbd&amp;gt;Y&amp;lt;/kbd&amp;gt;&lt;br /&gt;
|Zoom in on the x axis around the mid point between the cursors.&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;kbd&amp;gt;Q&amp;lt;/kbd&amp;gt;&lt;br /&gt;
|Zoom out on the x axis around the mid point between the cursors.&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;kbd&amp;gt;Ctrl&amp;lt;/kbd&amp;gt;+&amp;lt;kbd&amp;gt;Add&amp;lt;/kbd&amp;gt;&lt;br /&gt;
|Zoom in on the y axis around the active cursor&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;kbd&amp;gt;Ctrl&amp;lt;/kbd&amp;gt;+&amp;lt;kbd&amp;gt;Subtract&amp;lt;/kbd&amp;gt;&lt;br /&gt;
|Zoom out on the y axis around the active cursor&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;kbd&amp;gt;V&amp;lt;/kbd&amp;gt;&lt;br /&gt;
|Zoom between cursors on the x axis&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;kbd&amp;gt;Shift&amp;lt;/kbd&amp;gt;+&amp;lt;kbd&amp;gt;V&amp;lt;/kbd&amp;gt;&lt;br /&gt;
|Zoom between cursors on the y axis. Note that this only works if the cursor style allows y axis positioning.&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;kbd&amp;gt;G&amp;lt;/kbd&amp;gt;&lt;br /&gt;
|Zoom in around the left-hand cursor.&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;kbd&amp;gt;T&amp;lt;/kbd&amp;gt;&lt;br /&gt;
|Zoom out around the left-hand cursor.&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;kbd&amp;gt;H&amp;lt;/kbd&amp;gt;&lt;br /&gt;
|Zoom in around the right-hand cursor.&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;kbd&amp;gt;Z&amp;lt;/kbd&amp;gt;&lt;br /&gt;
|Zoom out around the right-hand cursor.&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;kbd&amp;gt;X&amp;lt;/kbd&amp;gt;&lt;br /&gt;
|Reset the zoom&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
====Misc Hotkeys====&lt;br /&gt;
{|&lt;br /&gt;
!Key&lt;br /&gt;
!Description&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;kbd&amp;gt;S&amp;lt;/kbd&amp;gt;&lt;br /&gt;
|Redraw the spectragraph graph showing the signal between the cursors in the waveform graph. This is only relevant for the [[#Spectrogram_.2F_Waveform_Views|waveform overview &amp;amp; spg. section view]].&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;kbd&amp;gt;TAB&amp;lt;/kbd&amp;gt;&lt;br /&gt;
|If a graph is currently active, move the focus to the next graph. If the dialog is active, move the focus to the next control.&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;kbd&amp;gt;Ctrl&amp;lt;/kbd&amp;gt;+&amp;lt;kbd&amp;gt;TAB&amp;lt;/kbd&amp;gt;&lt;br /&gt;
|Move the focus from the dialog to the graphs, or vica versa.&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;kbd&amp;gt;Ctrl&amp;lt;/kbd&amp;gt;+&amp;lt;kbd&amp;gt;F&amp;lt;/kbd&amp;gt;&lt;br /&gt;
|Toggle between spectrogram frame settings 1 and 2.&lt;br /&gt;
|}&lt;br /&gt;
--&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Versions==&lt;br /&gt;
Note that versions &amp;gt; 1.0 require {{STX}} &amp;gt;= 4.4&lt;br /&gt;
&lt;br /&gt;
===1.1.10===&lt;br /&gt;
* bugfix: Playlist listview now processes listsorted message and displays sort order set by clicking a column heading. The sort order was first being displayed when clicking in the control after clicking the column heading.&lt;br /&gt;
===1.1.9===&lt;br /&gt;
* feature: removed the now unnecessary &#039;autoDraw&#039; function.&lt;br /&gt;
* bugfix: use &#039;ID&#039; as default attribute for text in segments where no attribute is specified.&lt;br /&gt;
===1.1.8===&lt;br /&gt;
* feature: removed the now unnecessary &#039;Refresh&#039; button&lt;br /&gt;
===1.1.7===&lt;br /&gt;
* bugfix: the /U ASegTemplate flag is now respected, and, if used, the last entered value for a segment attribute is used as the default for the next new segment.&lt;br /&gt;
===1.1.5===&lt;br /&gt;
* bugfix: segment placement algorithm no longer drawing segments off screen.&lt;br /&gt;
* bugfix: moving scrollbar no longer generates an error message in the log window.&lt;br /&gt;
Download [https://www.kfs.oeaw.ac.at/pub/stx/spexl/ Transcription script downloads].&lt;/div&gt;</summary>
		<author><name>Jw</name></author>
	</entry>
	<entry>
		<id>https://mediawiki.kfs.oeaw.ac.at/stx/docs/wiki/index.php?title=User_Guide/SPExL/Transcription_Script&amp;diff=10684</id>
		<title>User Guide/SPExL/Transcription Script</title>
		<link rel="alternate" type="text/html" href="https://mediawiki.kfs.oeaw.ac.at/stx/docs/wiki/index.php?title=User_Guide/SPExL/Transcription_Script&amp;diff=10684"/>
		<updated>2020-11-27T05:33:56Z</updated>

		<summary type="html">&lt;p&gt;Jw: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{DISPLAYTITLE:{{SUBPAGENAME}}}}&lt;br /&gt;
{{User Guide}}&lt;br /&gt;
{{SPExL}}&lt;br /&gt;
{{Hotkeys}}&lt;br /&gt;
[[File:stx_ug_spexl_transcription.png|thumb]]&lt;br /&gt;
&lt;br /&gt;
The &#039;Transcription&#039; script is a tool in {{STX}} specifically written for transcribing sound files. The idea is to make transcribing as simple and efficient as possible. In addition to using the mouse, you can do the transcribing with the keyboard alone. The hotkeys are user-definable.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div class=&amp;quot;noautonum&amp;quot;&amp;gt;&lt;br /&gt;
{{TOC limit|2}}&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
You will find it in the bottom left-hand corner of the [[User_Guide/Workspace|Workspace]] where it is called &amp;lt;code&amp;gt;Transcription&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
When starting the Transcription script, you must select the sound file in the Workspace you wish to transcribe. This is unlike the [[User_Guide/Workspace/Application_and_Setup_Tree/Signal_Analysis_and_Display/Profile|analysis profiles]], which analyse a segment. The following dialog will then appear.&lt;br /&gt;
&lt;br /&gt;
[[File:Stx_transcription_startup_dialog.png]]&lt;br /&gt;
&lt;br /&gt;
==Spectrogram / Waveform Views==&lt;br /&gt;
You can display either a spectrogram or a waveform of the sound file (or both). There three different combinations available:&lt;br /&gt;
===Whole file as waveform, with section as spectrogram===&lt;br /&gt;
This view displays a waveform of the whole file and a spectrogram of a section of that file. This means that you can see all the segments in the file in the waveform graph. Navigating around the file in the waveform, you can then view a section of it as a spectrogram (e.g. with the hotkey &amp;lt;kbd&amp;gt;S&amp;lt;/kbd&amp;gt;). When starting the transcription script, choose &#039;&#039;&#039;wave overview &amp;amp; spg. section&#039;&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
===Section of file as waveform===&lt;br /&gt;
This is the fastest view, displaying a section of the sound file as a waveform. The whole of the file is available to scroll through. When starting the transcription script, choose &#039;&#039;&#039;wave only&#039;&#039;&#039;. The length of signal displayed is specified by the scrollbar &#039;&#039;&#039;Length&#039;&#039;&#039; value in the start-up dialog. You can then scroll through the sound file using, for example, the hotkeys &amp;lt;kbd&amp;gt;M&amp;lt;/kbd&amp;gt; (forwards) and &amp;lt;kbd&amp;gt;N&amp;lt;/kbd&amp;gt; (backwards).&lt;br /&gt;
&lt;br /&gt;
===Section of file as synchronised waveform and spectrogram===&lt;br /&gt;
This view displays a section of the sound file as both a waveform and a spectrogram. The waveform and spectrogram are time-aligned. The initial length of analysed signal is determined by the &#039;&#039;&#039;Length&#039;&#039;&#039; value in the start-up dialog. You can zoom in and out of the signal as well as scroll through the whole sound file.&lt;br /&gt;
&lt;br /&gt;
Note that the &#039;&#039;&#039;Fixed&#039;&#039;&#039; checkbox will mean you can zoom into a signal, but cannot zoom out to display more of the signal than the length specified by &#039;Length&#039;.&lt;br /&gt;
&lt;br /&gt;
==Dialog Description==&lt;br /&gt;
&lt;br /&gt;
[[file: Spexl_dialog.png]]&lt;br /&gt;
&lt;br /&gt;
===timebar===&lt;br /&gt;
The timebar lets you scroll through the sound file. This is useful, if you have a large sound file, and therefore only load part of it at any one time.&lt;br /&gt;
* The &amp;lt;samp&amp;gt;|&amp;lt;&amp;lt;/samp&amp;gt; button scrolls back to the beginning of the file.&lt;br /&gt;
* The &amp;lt;samp&amp;gt;&amp;lt;&amp;lt;/samp&amp;gt; button scrolls back one step.&lt;br /&gt;
* The &amp;lt;samp&amp;gt;&amp;gt;&amp;lt;/samp&amp;gt; button scrolls forward one step.&lt;br /&gt;
* The &amp;lt;samp&amp;gt;&amp;gt;|&amp;lt;/samp&amp;gt; button scrolls to the end of the file.&lt;br /&gt;
* The &amp;lt;samp&amp;gt;Play&amp;lt;/samp&amp;gt; button plays the whole signal currently loaded from disk.&lt;br /&gt;
* The &amp;lt;samp&amp;gt;Draw&amp;lt;/samp&amp;gt; button redraws the section of the sound file specified by the scroll bar (if &amp;lt;samp&amp;gt;auto&amp;lt;/samp&amp;gt; is unchecked).&lt;br /&gt;
* The &amp;lt;samp&amp;gt;&amp;lt;Seg&amp;lt;/samp&amp;gt; and &amp;lt;samp&amp;gt;Seg&amp;gt;&amp;lt;/samp&amp;gt; buttons scrolls to the previous and next segments outside of the current loaded signal. This can be useful, if you have a long file with few segments in it.&lt;br /&gt;
* If the &amp;lt;samp&amp;gt;auto&amp;lt;/samp&amp;gt; setting is checked, then moving the scroll bar automatically redraws the graphs. This is the default. If unchecked, you must explicitly press the &amp;lt;samp&amp;gt;Draw&amp;lt;/samp&amp;gt; button.&lt;br /&gt;
&lt;br /&gt;
If you are already viewing the entire sound file, the time bar is not very useful. See [[#Scrolling|Scrolling]] for further details.&lt;br /&gt;
&lt;br /&gt;
===spec.===&lt;br /&gt;
The &amp;lt;samp&amp;gt;spec.&amp;lt;/samp&amp;gt; area of the dialog is only enabled if the spectrogram graph (&amp;lt;samp&amp;gt;wave &amp;amp; spg. section&amp;lt;/samp&amp;gt; or &amp;lt;samp&amp;gt;wave overview &amp;amp; spg. section&amp;lt;/samp&amp;gt; view) is being used. Choose the 1st or 2nd frame/overlap settings specified in the [[User_Guide/SPExL/Settings#Spectrogram_Display_and_Parameter_Setup|settings dialog]].&lt;br /&gt;
&lt;br /&gt;
===f0/for.===&lt;br /&gt;
&lt;br /&gt;
The F0 and formants can be calculated for the displayed spectrogram. This is not available in the &amp;lt;samp&amp;gt;wave only&amp;lt;/samp&amp;gt; view. See [[User_Guide/Transcription_Script#F0_.2F_Formant_Extraction|F0 and Formant Extraction]] for further details.&lt;br /&gt;
&lt;br /&gt;
===main===&lt;br /&gt;
&lt;br /&gt;
Here you can save changes you&#039;ve made to your segments ([[File:resource_dosave.png]]), revert any changes you have made since you last saved the project file (&#039;Revert&#039;), open the settings dialog ([[File: Resource setup.png]] or exit the transcription script.&lt;br /&gt;
&lt;br /&gt;
===playback===&lt;br /&gt;
&lt;br /&gt;
The playback section of the dialog can be used to play the sound file. The most interesting setting is the ability to repeat the signal when played, which can be useful when transcribing. Alternatively you can repeat the signal forever (or until the ESC key is pressed).&lt;br /&gt;
&lt;br /&gt;
===cursor control===&lt;br /&gt;
&lt;br /&gt;
In addition to moving the cursors around by clicking and dragging in the graph, you can also do it with these buttons. All buttons are also associated with [[#Hotkeys|hotkeys]].&lt;br /&gt;
&lt;br /&gt;
==Scrolling==&lt;br /&gt;
&lt;br /&gt;
Since displaying a long sound file can take a while, it can be useful to load only part of the sound file. This is achieved with scrolling in the &amp;lt;samp&amp;gt;wave only&amp;lt;/samp&amp;gt; and &amp;lt;samp&amp;gt;wave &amp;amp; spg. section&amp;lt;/samp&amp;gt; [[User_Guide/Transcription_Script#Spectrogram_.2F_Waveform_Views|views]]. The lowest graph displays the section of the sound file which is loaded (purple) and visible (brown). &lt;br /&gt;
&lt;br /&gt;
Note that the &amp;lt;samp&amp;gt;wave overview &amp;amp; spg. section&amp;lt;/samp&amp;gt; [[User_Guide/Transcription_Script#Spectrogram_.2F_Waveform_Views|view]] always loads the whole sound file.&lt;br /&gt;
&lt;br /&gt;
==F0 / Formant Extraction==&lt;br /&gt;
You can display the F0 and formants in the spectrogram by pressing the [[File: Resource run.png]] button. The settings for extraction are in the [[User Guide/SPExL/Transcription_Script/F0_Formant_Extraction_Settings|F0 / Formant Extraction Settings]] dialog reached by pressing the &#039;f0/for&#039; button [[File: Resource setup.png]].&lt;br /&gt;
&lt;br /&gt;
==Settings==&lt;br /&gt;
There are many settings you can change via the [[User Guide/SPExL/Transcription_Script/Settings|Settings]] dialog reached by the &#039;main&#039; [[File: Resource setup.png]] button, or the &#039;settings-&amp;gt;setup dialog&#039; context menu.&lt;br /&gt;
&lt;br /&gt;
==Hotkeys==&lt;br /&gt;
&lt;br /&gt;
Many operations are available using hotkeys. &lt;br /&gt;
&lt;br /&gt;
===User Defined Hotkeys===&lt;br /&gt;
&lt;br /&gt;
As of version 1.1, these hotkeys can be changed by the user by modifying the &amp;lt;samp&amp;gt;spexl_segtrans.hotkeys&amp;lt;/samp&amp;gt; file. The default hotkeys are defined in the file &amp;lt;samp&amp;gt;spexl_segtrans.hotkeys.default&amp;lt;/samp&amp;gt;. These files are in the &amp;lt;samp&amp;gt;profiles&amp;lt;/samp&amp;gt; directory in {{STX}} &amp;gt;= 5.0 and in the &amp;lt;samp&amp;gt;scripts&amp;lt;/samp&amp;gt; directory in {{STX}} &amp;lt;= 4.4.10.&lt;br /&gt;
&amp;lt;!--&lt;br /&gt;
&lt;br /&gt;
===Default Hotkeys===&lt;br /&gt;
&lt;br /&gt;
Note that unless otherwise specified (e.g. with &amp;lt;kbd&amp;gt;Shift&amp;lt;/kbd&amp;gt;), all hotkeys are lowercase.&lt;br /&gt;
&lt;br /&gt;
====Analyze Hotkeys====&lt;br /&gt;
&lt;br /&gt;
{|&lt;br /&gt;
|&amp;lt;kbd&amp;gt;Ctrl&amp;lt;/kbd&amp;gt;+&amp;lt;kbd&amp;gt;N&amp;lt;/kbd&amp;gt;&lt;br /&gt;
|Select a viewer and profile to analyze the signal between the cursors with (opens new window).&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;kbd&amp;gt;Ctrl&amp;lt;/kbd&amp;gt;+&amp;lt;kbd&amp;gt;A&amp;lt;/kbd&amp;gt;&lt;br /&gt;
|Analyze the signal between the cursors with the viewer/profile which was used last.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
====Cursor Hotkeys====&lt;br /&gt;
&lt;br /&gt;
{|&lt;br /&gt;
!Key&lt;br /&gt;
!Description&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;kbd&amp;gt;B&amp;lt;/kbd&amp;gt;&lt;br /&gt;
|Move the cursors to the selected segment.&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;kbd&amp;gt;D&amp;lt;/kbd&amp;gt;&lt;br /&gt;
|Move left cursor to the left.&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;kbd&amp;gt;F&amp;lt;/kbd&amp;gt;&lt;br /&gt;
|Move left cursor to the right.&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;kbd&amp;gt;E&amp;lt;/kbd&amp;gt;&lt;br /&gt;
|Move left cursor to the left in large steps.&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;kbd&amp;gt;R&amp;lt;/kbd&amp;gt;&lt;br /&gt;
|Move left cursor to the right in large steps.&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;kbd&amp;gt;J&amp;lt;/kbd&amp;gt;&lt;br /&gt;
|Move right cursor to the left.&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;kbd&amp;gt;K&amp;lt;/kbd&amp;gt;&lt;br /&gt;
|Move right cursor to the right.&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;kbd&amp;gt;U&amp;lt;/kbd&amp;gt;&lt;br /&gt;
|Move right cursor to left in large steps.&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;kbd&amp;gt;I&amp;lt;/kbd&amp;gt;&lt;br /&gt;
|Move right cursor to right in large steps.&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;kbd&amp;gt;L&amp;lt;/kbd&amp;gt;&lt;br /&gt;
|Flip left cursor around right cursor.&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;kbd&amp;gt;Shift&amp;lt;/kbd&amp;gt;+&amp;lt;kbd&amp;gt;L&amp;lt;/kbd&amp;gt;&lt;br /&gt;
|Flip right cursor around left cursor.&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;kbd&amp;gt;Ctrl&amp;lt;/kbd&amp;gt;+&amp;lt;kbd&amp;gt;Y&amp;lt;/kbd&amp;gt;&lt;br /&gt;
|Rotate through the available cursor styles.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
====Playback Hotkeys====&lt;br /&gt;
&lt;br /&gt;
{|&lt;br /&gt;
|&amp;lt;kbd&amp;gt;Escape&amp;lt;/kbd&amp;gt;&lt;br /&gt;
|Stops playback&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;kbd&amp;gt;Space&amp;lt;/kbd&amp;gt;&lt;br /&gt;
|Play between the cursors&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;kbd&amp;gt;A&amp;lt;/kbd&amp;gt;&lt;br /&gt;
|Play all of signal in waveform window&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;kbd&amp;gt;O&amp;lt;/kbd&amp;gt;&lt;br /&gt;
|Play all of the signal from the right-hand cursor to end of waveform window&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;kbd&amp;gt;P&amp;lt;/kbd&amp;gt;&lt;br /&gt;
|Play the selected segment&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;kbd&amp;gt;W&amp;lt;/kbd&amp;gt;&lt;br /&gt;
|Play all of signal up to the left-hand cursor&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
====Scrollbar Hotkeys====&lt;br /&gt;
The length scrolled is defined when the transcription script starts up (Scrollbar Step (%)).&lt;br /&gt;
{|&lt;br /&gt;
|&amp;lt;kbd&amp;gt;Ctrl&amp;lt;/kbd&amp;gt;+&amp;lt;kbd&amp;gt;G&amp;lt;/kbd&amp;gt;&lt;br /&gt;
|Jump top a position specified in seconds&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;kbd&amp;gt;M&amp;lt;/kbd&amp;gt;&lt;br /&gt;
|Scroll forward&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;kbd&amp;gt;N&amp;lt;/kbd&amp;gt;&lt;br /&gt;
|Scroll backwards&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
====Segment Hotkeys====&lt;br /&gt;
{|&lt;br /&gt;
|&amp;lt;kbd&amp;gt;Shift&amp;lt;/kbd&amp;gt;+&amp;lt;kbd&amp;gt;B&amp;lt;/kbd&amp;gt;&lt;br /&gt;
|Move the selected segment to the cursor positions.&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;kbd&amp;gt;Enter&amp;lt;/kbd&amp;gt;&lt;br /&gt;
|Create new segment between the cursors.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
====Segment List Hotkeys====&lt;br /&gt;
{|&lt;br /&gt;
|&amp;lt;kbd&amp;gt;Ctrl&amp;lt;/kbd&amp;gt;+&amp;lt;kbd&amp;gt;R&amp;lt;/kbd&amp;gt;&lt;br /&gt;
|Open the segment list sort order dialog.&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;kbd&amp;gt;Ctrl&amp;lt;/kbd&amp;gt;+&amp;lt;kbd&amp;gt;Numpad Plus&amp;lt;/kbd&amp;gt;&lt;br /&gt;
|Resize all columns to fit their content&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
====Spectrogram Hotkeys====&lt;br /&gt;
{|&lt;br /&gt;
|&amp;lt;kbd&amp;gt;Shift&amp;lt;/kbd&amp;gt;+&amp;lt;kbd&amp;gt;Add&amp;lt;/kbd&amp;gt;&lt;br /&gt;
|Increase amplitude floor.&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;kbd&amp;gt;Shift&amp;lt;/kbd&amp;gt;+&amp;lt;kbd&amp;gt;Subtract&amp;lt;/kbd&amp;gt;&lt;br /&gt;
|Decrease amplitude floor.&lt;br /&gt;
&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
====Zoom Hotkeys====&lt;br /&gt;
&lt;br /&gt;
{|&lt;br /&gt;
|&amp;lt;kbd&amp;gt;Y&amp;lt;/kbd&amp;gt;&lt;br /&gt;
|Zoom in on the x axis around the mid point between the cursors.&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;kbd&amp;gt;Q&amp;lt;/kbd&amp;gt;&lt;br /&gt;
|Zoom out on the x axis around the mid point between the cursors.&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;kbd&amp;gt;Ctrl&amp;lt;/kbd&amp;gt;+&amp;lt;kbd&amp;gt;Add&amp;lt;/kbd&amp;gt;&lt;br /&gt;
|Zoom in on the y axis around the active cursor&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;kbd&amp;gt;Ctrl&amp;lt;/kbd&amp;gt;+&amp;lt;kbd&amp;gt;Subtract&amp;lt;/kbd&amp;gt;&lt;br /&gt;
|Zoom out on the y axis around the active cursor&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;kbd&amp;gt;V&amp;lt;/kbd&amp;gt;&lt;br /&gt;
|Zoom between cursors on the x axis&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;kbd&amp;gt;Shift&amp;lt;/kbd&amp;gt;+&amp;lt;kbd&amp;gt;V&amp;lt;/kbd&amp;gt;&lt;br /&gt;
|Zoom between cursors on the y axis. Note that this only works if the cursor style allows y axis positioning.&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;kbd&amp;gt;G&amp;lt;/kbd&amp;gt;&lt;br /&gt;
|Zoom in around the left-hand cursor.&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;kbd&amp;gt;T&amp;lt;/kbd&amp;gt;&lt;br /&gt;
|Zoom out around the left-hand cursor.&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;kbd&amp;gt;H&amp;lt;/kbd&amp;gt;&lt;br /&gt;
|Zoom in around the right-hand cursor.&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;kbd&amp;gt;Z&amp;lt;/kbd&amp;gt;&lt;br /&gt;
|Zoom out around the right-hand cursor.&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;kbd&amp;gt;X&amp;lt;/kbd&amp;gt;&lt;br /&gt;
|Reset the zoom&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
====Misc Hotkeys====&lt;br /&gt;
{|&lt;br /&gt;
!Key&lt;br /&gt;
!Description&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;kbd&amp;gt;S&amp;lt;/kbd&amp;gt;&lt;br /&gt;
|Redraw the spectragraph graph showing the signal between the cursors in the waveform graph. This is only relevant for the [[#Spectrogram_.2F_Waveform_Views|waveform overview &amp;amp; spg. section view]].&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;kbd&amp;gt;TAB&amp;lt;/kbd&amp;gt;&lt;br /&gt;
|If a graph is currently active, move the focus to the next graph. If the dialog is active, move the focus to the next control.&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;kbd&amp;gt;Ctrl&amp;lt;/kbd&amp;gt;+&amp;lt;kbd&amp;gt;TAB&amp;lt;/kbd&amp;gt;&lt;br /&gt;
|Move the focus from the dialog to the graphs, or vica versa.&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;kbd&amp;gt;Ctrl&amp;lt;/kbd&amp;gt;+&amp;lt;kbd&amp;gt;F&amp;lt;/kbd&amp;gt;&lt;br /&gt;
|Toggle between spectrogram frame settings 1 and 2.&lt;br /&gt;
|}&lt;br /&gt;
--&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Versions==&lt;br /&gt;
Note that versions &amp;gt; 1.0 require {{STX}} &amp;gt;= 4.4&lt;br /&gt;
&lt;br /&gt;
===1.1.10===&lt;br /&gt;
* bugfix: Playlist listview now processes listsorted message and displays sort order set by clicking a column heading. The sort order was first being displayed when clicking in the control after clicking the column heading.&lt;br /&gt;
===1.1.9===&lt;br /&gt;
* feature: removed the now unnecessary &#039;autoDraw&#039; function.&lt;br /&gt;
* bugfix: use &#039;ID&#039; as default attribute for text in segments where no attribute is specified.&lt;br /&gt;
===1.1.8===&lt;br /&gt;
* feature: removed the now unnecessary &#039;Refresh&#039; button&lt;br /&gt;
===1.1.7===&lt;br /&gt;
* bugfix: the /U ASegTemplate flag is now respected, and, if used, the last entered value for a segment attribute is used as the default for the next new segment.&lt;br /&gt;
===1.1.5===&lt;br /&gt;
* bugfix: segment placement algorithm no longer drawing segments off screen.&lt;br /&gt;
* bugfix: moving scrollbar no longer generates an error message in the log window.&lt;br /&gt;
Download [https://www.kfs.oeaw.ac.at/pub/stx/spexl/ Transcription script downloads].&lt;br /&gt;
&lt;br /&gt;
test&lt;/div&gt;</summary>
		<author><name>Jw</name></author>
	</entry>
	<entry>
		<id>https://mediawiki.kfs.oeaw.ac.at/stx/docs/wiki/index.php?title=User_Guide/Spectrum_Viewer&amp;diff=10683</id>
		<title>User Guide/Spectrum Viewer</title>
		<link rel="alternate" type="text/html" href="https://mediawiki.kfs.oeaw.ac.at/stx/docs/wiki/index.php?title=User_Guide/Spectrum_Viewer&amp;diff=10683"/>
		<updated>2020-11-27T05:05:21Z</updated>

		<summary type="html">&lt;p&gt;Jw: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{DISPLAYTITLE:{{SUBPAGENAME}}}}&lt;br /&gt;
{{V3}}&lt;br /&gt;
[[file:stx_ug_spectrum_viewer.png|thumb]]&lt;br /&gt;
The {{Viewer3}} application computes and displays the averaged spectra as defined by the [[User Guide/Spectrum Viewer/Settings|spectrum settings]]. The spectra can be saved in the project.&lt;br /&gt;
&lt;br /&gt;
==Methods==&lt;br /&gt;
&lt;br /&gt;
The {{Viewer3}} implements the following analysis methods:&lt;br /&gt;
* [[/Method/Cepstrum_Smoothing/|Cepstrum Smoothing]]&lt;br /&gt;
* [[/Method/LPC Transfer Function/|LPC Transfer Function]]&lt;br /&gt;
* [[/Method/Wavelet Amplitude Spectrum and Phase/|Wavelet Amplitude Spectrum and Phase]]&lt;br /&gt;
&lt;br /&gt;
==Settings==&lt;br /&gt;
&lt;br /&gt;
You can setup your spectrum analysis in the [[User_Guide/Spectrum_Viewer/Settings|Settings]] dialog, available if you double click a Spectrum Viewer [[User_Guide/Workspace/Application_and_Setup_Tree/Signal_Analysis_and_Display/Profile|profile]] in the [[User Guide/Workspace|Workspace]].&lt;br /&gt;
&lt;br /&gt;
==Pre-Configured Profiles==&lt;br /&gt;
&lt;br /&gt;
*Default&lt;br /&gt;
*CEP Spectrum Magnitude&lt;br /&gt;
*LPC Spectral Magnitude&lt;br /&gt;
&lt;br /&gt;
==Hotkeys, Context Menu, Copy &amp;amp; Print Dialog==&lt;br /&gt;
&lt;br /&gt;
The available hotkeys are documented [[User Guide/Spectrum_Viewer/Hotkeys|here]]. The context menu is documented [[User Guide/Spectrum Viewer/Context Menu|here]]. The Copy/Print dialog is documented [[User Guide/Copy or Print Dialog|here]].&lt;/div&gt;</summary>
		<author><name>Jw</name></author>
	</entry>
	<entry>
		<id>https://mediawiki.kfs.oeaw.ac.at/stx/docs/wiki/index.php?title=User_Guide/Spectrum_Viewer&amp;diff=10682</id>
		<title>User Guide/Spectrum Viewer</title>
		<link rel="alternate" type="text/html" href="https://mediawiki.kfs.oeaw.ac.at/stx/docs/wiki/index.php?title=User_Guide/Spectrum_Viewer&amp;diff=10682"/>
		<updated>2020-11-27T05:05:09Z</updated>

		<summary type="html">&lt;p&gt;Jw: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{DISPLAYTITLE:{{SUBPAGENAME}}}}&lt;br /&gt;
{{V3}}&lt;br /&gt;
[[file:stx_ug_spectrum_viewer.png|thumb]]&lt;br /&gt;
The {{Viewer3}} application computes and displays the averaged spectra as defined by the [[User Guide/Spectrum Viewer/Settings|spectrum settings]]. The spectra can be saved in the project.&lt;br /&gt;
&lt;br /&gt;
==Methods==&lt;br /&gt;
&lt;br /&gt;
The {{Viewer3}} implements the following analysis methods:&lt;br /&gt;
* [[/Method/Cepstrum_Smoothing/|Cepstrum Smoothing]]&lt;br /&gt;
* [[/Method/LPC Transfer Function/|LPC Transfer Function]]&lt;br /&gt;
* [[/Method/Wavelet Amplitude Spectrum and Phase/|Wavelet Amplitude Spectrum and Phase]]&lt;br /&gt;
&lt;br /&gt;
==Settings==&lt;br /&gt;
&lt;br /&gt;
You can setup your spectrum analysis in the [[User_Guide/Spectrum_Viewer/Settings|Settings]] dialog, available if you double click a Spectrum Viewer [[User_Guide/Workspace/Application_and_Setup_Tree/Signal_Analysis_and_Display/Profile|profile]] in the [[User Guide/Workspace|Workspace]].&lt;br /&gt;
&lt;br /&gt;
==Pre-Configured Profiles==&lt;br /&gt;
&lt;br /&gt;
*Default&lt;br /&gt;
*CEP Spectrum Magnitude&lt;br /&gt;
*LPC Spectral Magnitude&lt;br /&gt;
&lt;br /&gt;
==Hotkeys, Context Menu, Copy &amp;amp; Print Dialog==&lt;br /&gt;
&lt;br /&gt;
The available hotkeys are documented [[User Guide/Spectrum_Viewer/Hotkeys|here]]. The context menu is documented [[User Guide/Spectrum Viewer/Context Menu|here]]. The Copy/Print dialog is documented [[User Guide/Copy or Print Dialog|here]].&lt;br /&gt;
&lt;br /&gt;
test&lt;/div&gt;</summary>
		<author><name>Jw</name></author>
	</entry>
	<entry>
		<id>https://mediawiki.kfs.oeaw.ac.at/stx/docs/wiki/index.php?title=Programmer_Guide/Macro_Library/XPlot&amp;diff=10679</id>
		<title>Programmer Guide/Macro Library/XPlot</title>
		<link rel="alternate" type="text/html" href="https://mediawiki.kfs.oeaw.ac.at/stx/docs/wiki/index.php?title=Programmer_Guide/Macro_Library/XPlot&amp;diff=10679"/>
		<updated>2020-02-20T09:08:38Z</updated>

		<summary type="html">&lt;p&gt;Jw: /* Plot */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{DISPLAYTITLE:{{SUBPAGENAME}}}}&lt;br /&gt;
&lt;br /&gt;
{{TOC limit|4}}&lt;br /&gt;
&lt;br /&gt;
==XPlot : CObjEx==&lt;br /&gt;
&lt;br /&gt;
A general class for plotting multiple graphs.&lt;br /&gt;
&lt;br /&gt;
===XPlot Construction===&lt;br /&gt;
&lt;br /&gt;
Initialize a new XPlot-instance to display 1 or more graphs. Returns the new object or an empty string. Information and error messages are written to the &amp;lt;code&amp;gt;BSCRIPT CON&amp;lt;/code&amp;gt; console.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div class=&amp;quot;sourcelabel&amp;quot;&amp;gt;Usage:&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;XPlot &amp;lt;var&amp;gt;rows&amp;lt;/var&amp;gt;=1 ; &amp;lt;var&amp;gt;columns&amp;lt;/var&amp;gt;=1 ; &amp;lt;var&amp;gt;title&amp;lt;/var&amp;gt; ; &amp;lt;var&amp;gt;profile&amp;lt;/var&amp;gt; ; &amp;lt;var&amp;gt;window&amp;lt;/var&amp;gt; ; &amp;lt;var&amp;gt;owner&amp;lt;/var&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div class=&amp;quot;sourcelabel&amp;quot;&amp;gt;Parameters:&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
;&amp;lt;var&amp;gt;rows&amp;lt;/var&amp;gt;&lt;br /&gt;
&lt;br /&gt;
:The number of rows (default=&amp;lt;code&amp;gt;1&amp;lt;/code&amp;gt;).&lt;br /&gt;
&lt;br /&gt;
;&amp;lt;var&amp;gt;columns&amp;lt;/var&amp;gt;&lt;br /&gt;
&lt;br /&gt;
:The number of columns for each row (inrow0 inrow1 ...). The default is one column per row.&lt;br /&gt;
&lt;br /&gt;
;&amp;lt;var&amp;gt;title&amp;lt;/var&amp;gt;&lt;br /&gt;
&lt;br /&gt;
:The display window title.&lt;br /&gt;
&lt;br /&gt;
;&amp;lt;var&amp;gt;profile&amp;lt;/var&amp;gt;&lt;br /&gt;
&lt;br /&gt;
:The name of the graphics profile to use. A graphics profile is also known as a colour scheme.&lt;br /&gt;
&lt;br /&gt;
;&amp;lt;var&amp;gt;window&amp;lt;/var&amp;gt;&lt;br /&gt;
&lt;br /&gt;
:The window position and size (in the format &#039;&amp;lt;code&amp;gt;x y width height&amp;lt;/code&amp;gt;&#039;).&lt;br /&gt;
&lt;br /&gt;
;&amp;lt;var&amp;gt;owner&amp;lt;/var&amp;gt;&lt;br /&gt;
&lt;br /&gt;
:The id of an existing display item which should own this new window. See &amp;lt;code&amp;gt;NEW DISPLAY&amp;lt;/code&amp;gt; for details.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div class=&amp;quot;sourcelabel&amp;quot;&amp;gt;Result:&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
A new &amp;lt;code&amp;gt;XPlot&amp;lt;/code&amp;gt; object if successful or an empty string.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div class=&amp;quot;sourcelabel&amp;quot;&amp;gt;Examples:&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The simplest way to create an &amp;lt;code&amp;gt;XPlot&amp;lt;/code&amp;gt; instance with one graph is as follows:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
#xplot := xplot&lt;br /&gt;
if &#039;$#xplot[?]&#039; != &#039;instance&#039; em -1 ; Failed to create the xplot instance&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===XPlot Member Functions===&lt;br /&gt;
&lt;br /&gt;
The &amp;lt;code&amp;gt;XPLOT&amp;lt;/code&amp;gt; class has the following member functions. See CObjEx Member Functions for a list of functions implemented in the parent class.&lt;br /&gt;
&lt;br /&gt;
====AddPlot====&lt;br /&gt;
&lt;br /&gt;
The &amp;lt;code&amp;gt;XPLOT&amp;lt;/code&amp;gt; function &amp;lt;code&amp;gt;AddPlot&amp;lt;/code&amp;gt; is identical to the &amp;lt;code&amp;gt;PLOT&amp;lt;/code&amp;gt; function, except that it adds to an existing graph (in addition to or on top of the original plot). If no graph exists at the specified &amp;lt;var&amp;gt;adr&amp;lt;/var&amp;gt;, then the call is passed to &amp;lt;code&amp;gt;Plot&amp;lt;/code&amp;gt;. It supports the following plot types: &amp;lt;code&amp;gt;XYPLOT&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;FUNCTION&amp;lt;/code&amp;gt; and &amp;lt;code&amp;gt;PARAMETER&amp;lt;/code&amp;gt;. The parameters are identical to the &amp;lt;code&amp;gt;[[#Plot|PLOT]]&amp;lt;/code&amp;gt; function.&lt;br /&gt;
&lt;br /&gt;
====Dialog====&lt;br /&gt;
&lt;br /&gt;
The function &amp;lt;code&amp;gt;Dialog&amp;lt;/code&amp;gt; can be used to show and hide a dialog in the &amp;lt;code&amp;gt;XPlot&amp;lt;/code&amp;gt; display.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div class=&amp;quot;sourcelabel&amp;quot;&amp;gt;Usage:&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;&amp;lt;var&amp;gt;inst&amp;lt;/var&amp;gt; Dialog &amp;lt;var&amp;gt;cmd&amp;lt;/var&amp;gt; ; &amp;lt;var&amp;gt;args&amp;lt;/var&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div class=&amp;quot;sourcelabel&amp;quot;&amp;gt;Parameters:&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
;&amp;lt;var&amp;gt;cmd&amp;lt;/var&amp;gt;&lt;br /&gt;
&lt;br /&gt;
:The following commands are available: New|Delete|Msg|On|Enabled|Off|Hidden. See below for details.&lt;br /&gt;
&lt;br /&gt;
;&amp;lt;var&amp;gt;args&amp;lt;/var&amp;gt;&lt;br /&gt;
&lt;br /&gt;
:See below for details.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div class=&amp;quot;sourcelabel&amp;quot;&amp;gt;Result:&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The ID of the current or new dialog item or an empty string.&lt;br /&gt;
&lt;br /&gt;
=====&amp;lt;code&amp;gt;New&amp;lt;/code&amp;gt;=====&lt;br /&gt;
&lt;br /&gt;
Creates a new dialog item (deleting the old one first).&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div class=&amp;quot;sourcelabel&amp;quot;&amp;gt;Usage:&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;&amp;lt;var&amp;gt;inst&amp;lt;/var&amp;gt; Dialog New ; &amp;lt;var&amp;gt;pos&amp;lt;/var&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
;&amp;lt;var&amp;gt;pos&amp;lt;/var&amp;gt;:Sets the position of the dialog within the display. The following values are supported:&lt;br /&gt;
&lt;br /&gt;
:&amp;lt;code&amp;gt;ABOVE&amp;lt;/code&amp;gt;|&amp;lt;code&amp;gt;BELOW&amp;lt;/code&amp;gt;|&amp;lt;code&amp;gt;LEFT&amp;lt;/code&amp;gt;|&amp;lt;code&amp;gt;RIGHT&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=====&amp;lt;code&amp;gt;Delete&amp;lt;/code&amp;gt;=====&lt;br /&gt;
&lt;br /&gt;
Removes the dialog from the display and deletes the dialog item.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div class=&amp;quot;sourcelabel&amp;quot;&amp;gt;Usage:&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;&amp;lt;var&amp;gt;inst&amp;lt;/var&amp;gt; Dialog Delete&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=====&amp;lt;code&amp;gt;Msg&amp;lt;/code&amp;gt;=====&lt;br /&gt;
&lt;br /&gt;
Posts a message to the macro message queue. The format of the message is:&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;code&amp;gt;MENU&amp;lt;/code&amp;gt; &amp;lt;var&amp;gt;dialogItem&amp;lt;/var&amp;gt; &amp;lt;var&amp;gt;msgId&amp;lt;/var&amp;gt; &amp;lt;var&amp;gt;msgPar&amp;lt;/var&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Note that when the display is closed, this function is called to post the message &amp;lt;code&amp;gt;MENU dialogItem CLOSE&amp;lt;/code&amp;gt; to the dialog item.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div class=&amp;quot;sourcelabel&amp;quot;&amp;gt;Usage:&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;&amp;lt;var&amp;gt;inst&amp;lt;/var&amp;gt; Dialog Msg ; &amp;lt;var&amp;gt;msgid&amp;lt;/var&amp;gt; &amp;lt;var&amp;gt;msgpar&amp;lt;/var&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div class=&amp;quot;sourcelabel&amp;quot;&amp;gt;Parameters:&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
;&amp;lt;var&amp;gt;msgid&amp;lt;/var&amp;gt;&lt;br /&gt;
&lt;br /&gt;
:The message ID.&lt;br /&gt;
&lt;br /&gt;
;&amp;lt;var&amp;gt;msgpar&amp;lt;/var&amp;gt;&lt;br /&gt;
&lt;br /&gt;
:The message parameters.&lt;br /&gt;
&lt;br /&gt;
=====&amp;lt;code&amp;gt;On|Off|Enabled|Disabled&amp;lt;/code&amp;gt;=====&lt;br /&gt;
&lt;br /&gt;
Show the dialog and set it&#039;s position.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div class=&amp;quot;sourcelabel&amp;quot;&amp;gt;Usage:&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;&amp;lt;var&amp;gt;inst&amp;lt;/var&amp;gt; Dialog &amp;lt;var&amp;gt;mode&amp;lt;/var&amp;gt;; &amp;lt;var&amp;gt;pos&amp;lt;/var&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div class=&amp;quot;sourcelabel&amp;quot;&amp;gt;Parameters:&amp;lt;/div&amp;gt;&lt;br /&gt;
;&amp;lt;var&amp;gt;mode&amp;lt;/var&amp;gt;:Turns the dialog on or off and enables or disables it if it is on. The following keywords are supported:&lt;br /&gt;
:&amp;lt;code&amp;gt;ON|OFF|ENABLED|DISABLED&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
;&amp;lt;var&amp;gt;pos&amp;lt;/var&amp;gt;:Sets the position of the dialog within the display. The following values are supported:&lt;br /&gt;
&lt;br /&gt;
:&amp;lt;code&amp;gt;ABOVE&amp;lt;/code&amp;gt;|&amp;lt;code&amp;gt;BELOW&amp;lt;/code&amp;gt;|&amp;lt;code&amp;gt;LEFT&amp;lt;/code&amp;gt;|&amp;lt;code&amp;gt;RIGHT&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====Display====&lt;br /&gt;
&lt;br /&gt;
Returns the ID of the display object associated with this &amp;lt;code&amp;gt;XPLOT&amp;lt;/code&amp;gt; instance.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div class=&amp;quot;sourcelabel&amp;quot;&amp;gt;Usage:&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;&amp;lt;var&amp;gt;inst&amp;lt;/var&amp;gt; display&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div class=&amp;quot;sourcelabel&amp;quot;&amp;gt;Result:&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Returns the display object of the &amp;lt;code&amp;gt;XPLOT&amp;lt;/code&amp;gt; instance.&lt;br /&gt;
&lt;br /&gt;
====End====&lt;br /&gt;
&lt;br /&gt;
Enters the message loop, waits until the user closes the plot display and then destroys itself.&lt;br /&gt;
&lt;br /&gt;
====Get====&lt;br /&gt;
&lt;br /&gt;
Retrieve an attribute from a specific graph.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div class=&amp;quot;sourcelabel&amp;quot;&amp;gt;Usage:&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;&amp;lt;var&amp;gt;xplot&amp;lt;/var&amp;gt; Get &amp;lt;var&amp;gt;adr&amp;lt;/var&amp;gt; ; &amp;lt;var&amp;gt;attribute&amp;lt;/var&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div class=&amp;quot;sourcelabel&amp;quot;&amp;gt;Parameters:&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
;&amp;lt;var&amp;gt;adr&amp;lt;/var&amp;gt;&lt;br /&gt;
&lt;br /&gt;
:The address of the display splitter (see member function &amp;lt;code&amp;gt;Graph&amp;lt;/code&amp;gt; for detail).&lt;br /&gt;
&lt;br /&gt;
;&amp;lt;var&amp;gt;attribute&amp;lt;/var&amp;gt;&lt;br /&gt;
&lt;br /&gt;
:The id of the requested attribute. The following values are supported:&lt;br /&gt;
&lt;br /&gt;
:&amp;lt;code&amp;gt;CURSORPOSITION&amp;lt;/code&amp;gt; - Returns the current cursor positions in the following format: &amp;lt;code&amp;gt;i1 x1 y1 i2 x2 y2&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
:Note that &amp;lt;code&amp;gt;x1 &amp;lt;= x2&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
:&amp;lt;code&amp;gt;YDATA&amp;lt;/code&amp;gt; - Returns the y data item.&lt;br /&gt;
&lt;br /&gt;
:&amp;lt;code&amp;gt;XDATA&amp;lt;/code&amp;gt; - Returns the x data item.&lt;br /&gt;
&lt;br /&gt;
:&amp;lt;code&amp;gt;RANGE&amp;lt;/code&amp;gt; - Returns the x axis and y axis range in the following format: &amp;lt;code&amp;gt;xmin xmax ymin ymax&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
:&amp;lt;code&amp;gt;TYPE&amp;lt;/code&amp;gt; - Returns the plot type (see &amp;lt;code&amp;gt;Plot&amp;lt;/code&amp;gt; for a list of available plot types).&lt;br /&gt;
&lt;br /&gt;
====GetFColors====&lt;br /&gt;
&lt;br /&gt;
The &amp;lt;code&amp;gt;GetFColors&amp;lt;/code&amp;gt; function returns a blank separated list of the function colors defined in the selected graphics profile.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div class=&amp;quot;sourcelabel&amp;quot;&amp;gt;Usage:&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;&amp;lt;var&amp;gt;xplot&amp;lt;/var&amp;gt; GetFColors&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div class=&amp;quot;sourcelabel&amp;quot;&amp;gt;Result:&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Returns a blank separated list of color keywords.&lt;br /&gt;
&lt;br /&gt;
====Graph====&lt;br /&gt;
&lt;br /&gt;
Returns the requested attribute &amp;lt;var&amp;gt;attr&amp;lt;/var&amp;gt; of the graph identified by &amp;lt;var&amp;gt;adr&amp;lt;/var&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div class=&amp;quot;sourcelabel&amp;quot;&amp;gt;Usage:&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;&amp;lt;var&amp;gt;xplot&amp;lt;/var&amp;gt; Graph &amp;lt;var&amp;gt;adr&amp;lt;/var&amp;gt; [; &amp;lt;var&amp;gt;attr&amp;lt;/var&amp;gt;=GRAPH ]&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div class=&amp;quot;sourcelabel&amp;quot;&amp;gt;Parameters:&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
;&amp;lt;var&amp;gt;adr&amp;lt;/var&amp;gt;&lt;br /&gt;
&lt;br /&gt;
:The id of a graph item, an &amp;lt;code&amp;gt;[[Programmer Guide/Class Library/XGraph : CObjEx|XGRAPH]]&amp;lt;/code&amp;gt; instance or the &#039;&amp;lt;code&amp;gt;row column&amp;lt;/code&amp;gt;&#039; address of a splitter in the display. Note that the &amp;lt;code&amp;gt;row&amp;lt;/code&amp;gt; and &amp;lt;code&amp;gt;column&amp;lt;/code&amp;gt; indices are zero-based.&lt;br /&gt;
&lt;br /&gt;
;&amp;lt;var&amp;gt;attr&amp;lt;/var&amp;gt;&lt;br /&gt;
&lt;br /&gt;
:The attribute to returned. The following values are allowed:&lt;br /&gt;
&lt;br /&gt;
:&amp;lt;code&amp;gt;INSTANCE&amp;lt;/code&amp;gt; - Return the id of the &amp;lt;code&amp;gt;XGRAPH&amp;lt;/code&amp;gt; instance associated with &amp;lt;var&amp;gt;adr&amp;lt;/var&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
:&amp;lt;code&amp;gt;GRAPH&amp;lt;/code&amp;gt; - Return the id of the graph object associated with &amp;lt;var&amp;gt;adr&amp;lt;/var&amp;gt;. This is the default attribute.&lt;br /&gt;
&lt;br /&gt;
:&amp;lt;code&amp;gt;ROW&amp;lt;/code&amp;gt; - Return the row index of the splitter associated with &amp;lt;var&amp;gt;adr&amp;lt;/var&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
:&amp;lt;code&amp;gt;COLUMN&amp;lt;/code&amp;gt; - Return the column index of the splitter associated with &amp;lt;var&amp;gt;adr&amp;lt;/var&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div class=&amp;quot;sourcelabel&amp;quot;&amp;gt;Result:&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Return values are selected by the argument &amp;lt;var&amp;gt;attr&amp;lt;/var&amp;gt;. See the description of &amp;lt;var&amp;gt;attr&amp;lt;/var&amp;gt; for details. If the address argument &amp;lt;var&amp;gt;adr&amp;lt;/var&amp;gt; do not refer to a graph, &amp;lt;code&amp;gt;XGRAPH&amp;lt;/code&amp;gt; or splitter of the display, an empty string is returned.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div class=&amp;quot;sourcelabel&amp;quot;&amp;gt;Examples:&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Get the graph item id for the top left graph.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
#graph := $#xplot graph 0 0&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
====Legend====&lt;br /&gt;
&lt;br /&gt;
Display a graph legend. Use &amp;lt;code&amp;gt;$#xplot LEGEND $#graph&amp;lt;/code&amp;gt; to clear the legend.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div class=&amp;quot;sourcelabel&amp;quot;&amp;gt;Usage:&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;&amp;lt;var&amp;gt;xplot&amp;lt;/var&amp;gt; Legend &amp;lt;var&amp;gt;graph&amp;lt;/var&amp;gt; ; &amp;lt;var&amp;gt;unit&amp;lt;/var&amp;gt; ; &amp;lt;var&amp;gt;x&amp;lt;/var&amp;gt; ; &amp;lt;var&amp;gt;y&amp;lt;/var&amp;gt; ; &amp;lt;var&amp;gt;w&amp;lt;/var&amp;gt; ; &amp;lt;var&amp;gt;h&amp;lt;/var&amp;gt; ; &amp;lt;var&amp;gt;color&amp;lt;/var&amp;gt; ; &amp;lt;var&amp;gt;info&amp;lt;/var&amp;gt; ; &amp;lt;var&amp;gt;text1&amp;lt;/var&amp;gt; ; &amp;lt;var&amp;gt;text2&amp;lt;/var&amp;gt; ; &amp;lt;var&amp;gt;textX&amp;lt;/var&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div class=&amp;quot;sourcelabel&amp;quot;&amp;gt;Parameters:&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
;&amp;lt;var&amp;gt;graph&amp;lt;/var&amp;gt;&lt;br /&gt;
&lt;br /&gt;
:The graph address (e.g. row and column index. See [[#Plot|PLOT]] for detail).&lt;br /&gt;
&lt;br /&gt;
;&amp;lt;var&amp;gt;unit&amp;lt;/var&amp;gt;&lt;br /&gt;
&lt;br /&gt;
:The unit for size and position values. The following values are supported:&lt;br /&gt;
&lt;br /&gt;
:&amp;lt;code&amp;gt;real&amp;lt;/code&amp;gt; - The real x/y values.&lt;br /&gt;
&lt;br /&gt;
:&amp;lt;code&amp;gt;%&amp;lt;/code&amp;gt; or &amp;lt;code&amp;gt;percent&amp;lt;/code&amp;gt; - The percent of the graph&#039;s plot area.&lt;br /&gt;
&lt;br /&gt;
;&amp;lt;var&amp;gt;x, y&amp;lt;/var&amp;gt;&lt;br /&gt;
&lt;br /&gt;
:The position of the upper right corner of the first legend line.&lt;br /&gt;
&lt;br /&gt;
;&amp;lt;var&amp;gt;w, h&amp;lt;/var&amp;gt;&lt;br /&gt;
&lt;br /&gt;
:The width and height of one legend line.&lt;br /&gt;
&lt;br /&gt;
;&amp;lt;var&amp;gt;color&amp;lt;/var&amp;gt;&lt;br /&gt;
&lt;br /&gt;
:The legend text color.&lt;br /&gt;
&lt;br /&gt;
;&amp;lt;var&amp;gt;info&amp;lt;/var&amp;gt;&lt;br /&gt;
&lt;br /&gt;
:This flag selects the line attributes to be displayed. The following values are supported:&lt;br /&gt;
&lt;br /&gt;
:&amp;lt;code&amp;gt;color&amp;lt;/code&amp;gt; - The color.&lt;br /&gt;
&lt;br /&gt;
:&amp;lt;code&amp;gt;all&amp;lt;/code&amp;gt; - The color, style, width and symbol.&lt;br /&gt;
&lt;br /&gt;
;&amp;lt;var&amp;gt;textX&amp;lt;/var&amp;gt;&lt;br /&gt;
&lt;br /&gt;
:The text for the legend for function X. If no text is supplied, the legend line is removed.This parameter can be either a string, or a simple table.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div class=&amp;quot;sourcelabel&amp;quot;&amp;gt;Result:&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
void&lt;br /&gt;
&lt;br /&gt;
====Plot====&lt;br /&gt;
&lt;br /&gt;
The &amp;lt;code&amp;gt;XPlot&amp;lt;/code&amp;gt; function &amp;lt;code&amp;gt;Plot&amp;lt;/code&amp;gt; can be used to plot a function in a graph. Currently, {{STX}} supports [[#XYPLOT|waveform]] , x/y (aka [[#FUNCTION|function]] and more specifically [[#PARAMETER|parameter]]), [[#SPECTROGRAM|spectrogram]] and [[#WATERFALL|waterfall]] plots.&lt;br /&gt;
&lt;br /&gt;
=====XYPLOT=====&lt;br /&gt;
&lt;br /&gt;
Plot an x/y function graph.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div class=&amp;quot;sourcelabel&amp;quot;&amp;gt;Usage:&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;&amp;lt;var&amp;gt;xplot&amp;lt;/var&amp;gt; Plot &amp;lt;var&amp;gt;adr&amp;lt;/var&amp;gt; ; XYPLOT ; &amp;lt;var&amp;gt;y&amp;lt;/var&amp;gt; ; &amp;lt;var&amp;gt;x&amp;lt;/var&amp;gt; ; &amp;lt;var&amp;gt;title&amp;lt;/var&amp;gt; ; &amp;lt;var&amp;gt;xr&amp;lt;/var&amp;gt; ; &amp;lt;var&amp;gt;xu&amp;lt;/var&amp;gt; ; &amp;lt;var&amp;gt;xt&amp;lt;/var&amp;gt; ; &amp;lt;var&amp;gt;yr&amp;lt;/var&amp;gt; ; &amp;lt;var&amp;gt;yu&amp;lt;/var&amp;gt; ; &amp;lt;var&amp;gt;yt&amp;lt;/var&amp;gt; ; &amp;lt;var&amp;gt;fstyles&amp;lt;/var&amp;gt; ; &amp;lt;var&amp;gt;xlabtab&amp;lt;/var&amp;gt; ; &amp;lt;var&amp;gt;ylabtab&amp;lt;/var&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div class=&amp;quot;sourcelabel&amp;quot;&amp;gt;Parameters:&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
;&amp;lt;var&amp;gt;adr&amp;lt;/var&amp;gt;&lt;br /&gt;
&lt;br /&gt;
:The address of the display splitter (see the member function [[#Graph|GRAPH]] for details).&lt;br /&gt;
&lt;br /&gt;
;&amp;lt;var&amp;gt;y&amp;lt;/var&amp;gt;&lt;br /&gt;
&lt;br /&gt;
:The y axis data (a vector or an array).&lt;br /&gt;
&lt;br /&gt;
;&amp;lt;var&amp;gt;x&amp;lt;/var&amp;gt;&lt;br /&gt;
&lt;br /&gt;
:The data to be used for the x axis. This can be one of the following:&lt;br /&gt;
&lt;br /&gt;
:A data vector with &amp;lt;code&amp;gt;y[!nrow]&amp;lt;/code&amp;gt; values and 1 column.&lt;br /&gt;
&lt;br /&gt;
:&amp;lt;code&amp;gt;*&amp;lt;/code&amp;gt; - An asterisk. This is the default and means that the x axis uses the values &amp;lt;code&amp;gt;0&amp;lt;/code&amp;gt; through to &amp;lt;code&amp;gt;y[!nrow]-1&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
:A blank separated list of values (&#039;x1 x2&#039; -&amp;gt; x[i] = x1+(x2-x1)/(y[!nrow]-1), i = 0..&amp;lt;code&amp;gt;y[!nrow]-1&amp;lt;/code&amp;gt;).&lt;br /&gt;
&lt;br /&gt;
;&amp;lt;var&amp;gt;title&amp;lt;/var&amp;gt;&lt;br /&gt;
&lt;br /&gt;
:The title to be displayed in this plot.&lt;br /&gt;
&lt;br /&gt;
;&amp;lt;var&amp;gt;xr&amp;lt;/var&amp;gt;&lt;br /&gt;
&lt;br /&gt;
:The x axis display range. This can be one of the following values:&lt;br /&gt;
&lt;br /&gt;
:&amp;lt;code&amp;gt;*&amp;lt;/code&amp;gt; - An asterisk - an automatic scale is generated.&lt;br /&gt;
&lt;br /&gt;
:&amp;lt;code&amp;gt;xmin xmax&amp;lt;/code&amp;gt; - Two numerical values - the minimum and maximum values.&lt;br /&gt;
&lt;br /&gt;
;&amp;lt;var&amp;gt;xu&amp;lt;/var&amp;gt;&lt;br /&gt;
&lt;br /&gt;
:The text describing the x axis unit (e.g. &amp;lt;code&amp;gt;seconds&amp;lt;/code&amp;gt;). The default is an empty string.&lt;br /&gt;
&lt;br /&gt;
:The &amp;lt;code&amp;gt;WAVEFORM&amp;lt;/code&amp;gt; plot only allows the following values: &amp;lt;code&amp;gt;SAMPLES&amp;lt;/code&amp;gt;|&amp;lt;code&amp;gt;MS&amp;lt;/code&amp;gt;|&amp;lt;code&amp;gt;S&amp;lt;/code&amp;gt;. The default is &amp;lt;code&amp;gt;S&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
;&amp;lt;var&amp;gt;xt&amp;lt;/var&amp;gt;&lt;br /&gt;
&lt;br /&gt;
:The title to be used for the x axis. The default is an empty string.&lt;br /&gt;
&lt;br /&gt;
;&amp;lt;var&amp;gt;yr&amp;lt;/var&amp;gt;&lt;br /&gt;
&lt;br /&gt;
:The y axis display range. This can be one of the following:&lt;br /&gt;
&lt;br /&gt;
:&amp;lt;code&amp;gt;*&amp;lt;/code&amp;gt; - An asterisk - an automatic scale is generated.&lt;br /&gt;
&lt;br /&gt;
:&amp;lt;code&amp;gt;ymin ymax&amp;lt;/code&amp;gt; - Two numerical values - the minimum and maximum values.&lt;br /&gt;
&lt;br /&gt;
;&amp;lt;var&amp;gt;yu&amp;lt;/var&amp;gt;&lt;br /&gt;
&lt;br /&gt;
:The text describing the y axis unit (e.g. &amp;lt;code&amp;gt;dB&amp;lt;/code&amp;gt;).&lt;br /&gt;
&lt;br /&gt;
;&amp;lt;var&amp;gt;yt&amp;lt;/var&amp;gt;&lt;br /&gt;
&lt;br /&gt;
:The title to be used for the y axis. The default is an empty string.&lt;br /&gt;
&lt;br /&gt;
;&amp;lt;var&amp;gt;fstyles&amp;lt;/var&amp;gt;&lt;br /&gt;
&lt;br /&gt;
:An &amp;lt;code&amp;gt;fstyle&amp;lt;/code&amp;gt; argument (see &amp;lt;code&amp;gt;fstyle&amp;lt;/code&amp;gt; for details) or a zero-based function line index as specified in a color scheme (see Color Schemes in the User Guide).&lt;br /&gt;
&lt;br /&gt;
;&amp;lt;var&amp;gt;xlabtab, ylabtab, zlabtab&amp;lt;/var&amp;gt;&lt;br /&gt;
&lt;br /&gt;
:Extended tables containing the scale, grid and label definitions. For a description of the table format, please see the scale definition table for details.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div class=&amp;quot;sourcelabel&amp;quot;&amp;gt;Result:&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Return &amp;lt;code&amp;gt;0&amp;lt;/code&amp;gt; if successful.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div class=&amp;quot;sourcelabel&amp;quot;&amp;gt;Examples:&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Plot a simple x/y function.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
#xplot := XPLOT 1 ; 1 ; XPLOT ; Default ; 0 0 400 400&lt;br /&gt;
$#xplot plot 0 ; XYPLOT; $(eval fill(10, 0, 1)) ; * ; xyplot ; * ; ; x-axis ; * ; ; y-axis&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
=====FUNCTION=====&lt;br /&gt;
&lt;br /&gt;
Plot a function graph. Note that this is identical to an &amp;lt;code&amp;gt;XYPLOT&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div class=&amp;quot;sourcelabel&amp;quot;&amp;gt;Usage:&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;&amp;lt;var&amp;gt;xplot&amp;lt;/var&amp;gt; Plot &amp;lt;var&amp;gt;adr&amp;lt;/var&amp;gt; ; FUNCTION ; &amp;lt;var&amp;gt;y ; x ; title ; xr ; xu ; xt ; yr ; yu ; yt ; fstyles&amp;lt;/var&amp;gt; ; &amp;lt;var&amp;gt;xlabtab&amp;lt;/var&amp;gt; ; &amp;lt;var&amp;gt;ylabtab&amp;lt;/var&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div class=&amp;quot;sourcelabel&amp;quot;&amp;gt;Parameters:&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
See &amp;lt;code&amp;gt;XYPLOT&amp;lt;/code&amp;gt; for parameter descriptions.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div class=&amp;quot;sourcelabel&amp;quot;&amp;gt;Result:&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Return &amp;lt;code&amp;gt;0&amp;lt;/code&amp;gt; if successful.&lt;br /&gt;
&lt;br /&gt;
=====PARAMETER=====&lt;br /&gt;
&lt;br /&gt;
Plot a parameter graph. A parameter graph differs from a function graph because a parameter plot can have missing values - it does not necessarily have values for every point on the x axis.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div class=&amp;quot;sourcelabel&amp;quot;&amp;gt;Usage:&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;&amp;lt;var&amp;gt;xplot&amp;lt;/var&amp;gt; Plot &amp;lt;var&amp;gt;adr&amp;lt;/var&amp;gt; ; parameter ; &amp;lt;var&amp;gt;y ; title ; xr ; xu ; xt ; yr ; yu ; yt ; fstyles&amp;lt;/var&amp;gt; ; &amp;lt;var&amp;gt;xlabtab&amp;lt;/var&amp;gt; ; &amp;lt;var&amp;gt;ylabtab&amp;lt;/var&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div class=&amp;quot;sourcelabel&amp;quot;&amp;gt;Parameters:&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
See the &amp;lt;code&amp;gt;xyplot&amp;lt;/code&amp;gt; for parameter details.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div class=&amp;quot;sourcelabel&amp;quot;&amp;gt;Result:&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Return &amp;lt;code&amp;gt;0&amp;lt;/code&amp;gt; if successful.&lt;br /&gt;
&lt;br /&gt;
=====SPECTROGRAM=====&lt;br /&gt;
&lt;br /&gt;
Plot a spectrogram graph.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div class=&amp;quot;sourcelabel&amp;quot;&amp;gt;Usage:&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;&amp;lt;var&amp;gt;xplot&amp;lt;/var&amp;gt; plot &amp;lt;var&amp;gt;adr&amp;lt;/var&amp;gt; ; spectrogram ; &amp;lt;var&amp;gt;d&amp;lt;/var&amp;gt; ; &amp;lt;var&amp;gt;y&amp;lt;/var&amp;gt; ; &amp;lt;var&amp;gt;title&amp;lt;/var&amp;gt; ; &amp;lt;var&amp;gt;xr&amp;lt;/var&amp;gt; ; &amp;lt;var&amp;gt;xu&amp;lt;/var&amp;gt; ; &amp;lt;var&amp;gt;xt&amp;lt;/var&amp;gt; ; &amp;lt;var&amp;gt;yr&amp;lt;/var&amp;gt; ; &amp;lt;var&amp;gt;yu&amp;lt;/var&amp;gt; ; &amp;lt;var&amp;gt;yt&amp;lt;/var&amp;gt; ; &amp;lt;var&amp;gt;zr&amp;lt;/var&amp;gt; ; &amp;lt;var&amp;gt;xlabtab&amp;lt;/var&amp;gt; ; &amp;lt;var&amp;gt;ylabtab&amp;lt;/var&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div class=&amp;quot;sourcelabel&amp;quot;&amp;gt;Parameters:&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
;&amp;lt;var&amp;gt;d&amp;lt;/var&amp;gt;&lt;br /&gt;
&lt;br /&gt;
:A data array containing one spectrum or function line per &amp;lt;var&amp;gt;y&amp;lt;/var&amp;gt; row. Note that this parameter is specific to the &amp;lt;code&amp;gt;SPECTROGRAM&amp;lt;/code&amp;gt; and &amp;lt;code&amp;gt;WATERFALL&amp;lt;/code&amp;gt; plots.&lt;br /&gt;
&lt;br /&gt;
;&amp;lt;var&amp;gt;y&amp;lt;/var&amp;gt;&lt;br /&gt;
&lt;br /&gt;
:The y-scale data (frequency). This can be one of the following:&lt;br /&gt;
&lt;br /&gt;
:1) &amp;lt;code&amp;gt;vData&amp;lt;/code&amp;gt; - A data vector with &amp;lt;code&amp;gt;y[!ncol]&amp;lt;/code&amp;gt; values and 1 column.&lt;br /&gt;
&lt;br /&gt;
:2) * - An asterisk: &amp;lt;code&amp;gt;y[i] = i&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;i = 0..d[!ncol]-1&amp;lt;/code&amp;gt;. This is the default.&lt;br /&gt;
&lt;br /&gt;
:3) &amp;lt;code&amp;gt;y1 y2&amp;lt;/code&amp;gt; - Two blank separated values: &amp;lt;code&amp;gt;y[i] = y1+i*(y2-y1)/(d[!ncol]-1)&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;i = 0..d[!ncol]-1&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
;&amp;lt;var&amp;gt;zr&amp;lt;/var&amp;gt;&lt;br /&gt;
&lt;br /&gt;
:The z scale is a color scale. The following values are supported:&lt;br /&gt;
&lt;br /&gt;
:&amp;lt;code&amp;gt;*&amp;lt;/code&amp;gt; - An asterisk. The range is automatically generated.&lt;br /&gt;
&lt;br /&gt;
:&amp;lt;code&amp;gt;zmin zmax&amp;lt;/code&amp;gt; - Two numerical values specifying the minimum and maximum z axis values.&lt;br /&gt;
&lt;br /&gt;
:&amp;lt;code&amp;gt;zdown&amp;lt;/code&amp;gt; - A numerical value. The maximum z value is chosen automatically and the minimum value is calculated as follows: &amp;lt;code&amp;gt;zmax-zdown&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
For all other parameters, see &amp;lt;code&amp;gt;xyplot&amp;lt;/code&amp;gt; for descriptions.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=====WATERFALL=====&lt;br /&gt;
&lt;br /&gt;
Plot a waterfall graph.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div class=&amp;quot;sourcelabel&amp;quot;&amp;gt;Usage:&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;&amp;lt;var&amp;gt;xplot&amp;lt;/var&amp;gt; PLOT &amp;lt;var&amp;gt;adr&amp;lt;/var&amp;gt; ; WATERFALL ; &amp;lt;var&amp;gt;d&amp;lt;/var&amp;gt; ; &amp;lt;var&amp;gt;x&amp;lt;/var&amp;gt; ; &amp;lt;var&amp;gt;title&amp;lt;/var&amp;gt; ; &amp;lt;var&amp;gt;xr&amp;lt;/var&amp;gt; ; &amp;lt;var&amp;gt;xu&amp;lt;/var&amp;gt; ; &amp;lt;var&amp;gt;xt&amp;lt;/var&amp;gt; ; &amp;lt;var&amp;gt;yr&amp;lt;/var&amp;gt; ; &amp;lt;var&amp;gt;yu&amp;lt;/var&amp;gt; ; &amp;lt;var&amp;gt;yt&amp;lt;/var&amp;gt; ; &amp;lt;var&amp;gt;zr&amp;lt;/var&amp;gt; ; &amp;lt;var&amp;gt;zu&amp;lt;/var&amp;gt; ; &amp;lt;var&amp;gt;zt&amp;lt;/var&amp;gt; ; &amp;lt;var&amp;gt;xw&amp;lt;/var&amp;gt; ; &amp;lt;var&amp;gt;yw&amp;lt;/var&amp;gt; ; &amp;lt;var&amp;gt;n&amp;lt;/var&amp;gt; ; &amp;lt;var&amp;gt;xlabtab&amp;lt;/var&amp;gt; ; &amp;lt;var&amp;gt;ylabtab&amp;lt;/var&amp;gt; ; &amp;lt;var&amp;gt;zlabtab&amp;lt;/var&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div class=&amp;quot;sourcelabel&amp;quot;&amp;gt;Parameters:&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
;&amp;lt;var&amp;gt;d&amp;lt;/var&amp;gt;&lt;br /&gt;
&lt;br /&gt;
:The data array (one spectrum or function-line / row).&lt;br /&gt;
&lt;br /&gt;
;&amp;lt;var&amp;gt;zr&amp;lt;/var&amp;gt;&lt;br /&gt;
&lt;br /&gt;
:The z axis display range. The following values are supported:&lt;br /&gt;
&lt;br /&gt;
:&amp;lt;code&amp;gt;*&amp;lt;/code&amp;gt; - An asterisk. The range is automatically generated.&lt;br /&gt;
&lt;br /&gt;
:&amp;lt;code&amp;gt;zmin zmax&amp;lt;/code&amp;gt; - Two numerical values specifying the minimum and maximum z axis values.&lt;br /&gt;
&lt;br /&gt;
;&amp;lt;var&amp;gt;zu&amp;lt;/var&amp;gt;&lt;br /&gt;
&lt;br /&gt;
:The text describing the z axis unit (e.g. &amp;lt;code&amp;gt;s&amp;lt;/code&amp;gt;).&lt;br /&gt;
&lt;br /&gt;
;&amp;lt;var&amp;gt;zt&amp;lt;/var&amp;gt;&lt;br /&gt;
&lt;br /&gt;
:The title to be used for the z axis. The default is an empty string.&lt;br /&gt;
&lt;br /&gt;
;&amp;lt;var&amp;gt;xw&amp;lt;/var&amp;gt;&lt;br /&gt;
&lt;br /&gt;
:The relative width of the x scale. A value between &amp;lt;code&amp;gt;-1&amp;lt;/code&amp;gt; and &amp;lt;code&amp;gt;1&amp;lt;/code&amp;gt;. The default is &amp;lt;code&amp;gt;0.8&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
;&amp;lt;var&amp;gt;yw&amp;lt;/var&amp;gt;&lt;br /&gt;
&lt;br /&gt;
:The relative width of the y scale. A value between &amp;lt;code&amp;gt;-1&amp;lt;/code&amp;gt; and &amp;lt;code&amp;gt;1&amp;lt;/code&amp;gt;. The default is &amp;lt;code&amp;gt;0.8&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
;&amp;lt;var&amp;gt;n&amp;lt;/var&amp;gt;&lt;br /&gt;
&lt;br /&gt;
:The number of lines to be plotted. The default is &amp;lt;code&amp;gt;150&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
For all other parameters, see &amp;lt;code&amp;gt;XYPLOT&amp;lt;/code&amp;gt; for descriptions.&lt;br /&gt;
&lt;br /&gt;
=====WAVEFORM=====&lt;br /&gt;
&lt;br /&gt;
Plot a waveform graph. Note that the displayed wave item is automatically attached to the graph. This means, no explicit call to &amp;lt;code&amp;gt;SetWave&amp;lt;/code&amp;gt; is necessary.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div class=&amp;quot;sourcelabel&amp;quot;&amp;gt;Usage:&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;&amp;lt;var&amp;gt;xplot&amp;lt;/var&amp;gt; PLOT &amp;lt;var&amp;gt;adr&amp;lt;/var&amp;gt; ; WAVEFORM ; &amp;lt;var&amp;gt;wave&amp;lt;/var&amp;gt; ; &amp;lt;var&amp;gt;title&amp;lt;/var&amp;gt; ; &amp;lt;var&amp;gt;xu&amp;lt;/var&amp;gt; ; &amp;lt;var&amp;gt;xt&amp;lt;/var&amp;gt; ; &amp;lt;var&amp;gt;ymax&amp;lt;/var&amp;gt; ; &amp;lt;var&amp;gt;yr&amp;lt;/var&amp;gt; ; &amp;lt;var&amp;gt;yt&amp;lt;/var&amp;gt; ; &amp;lt;var&amp;gt;fill&amp;lt;/var&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div class=&amp;quot;sourcelabel&amp;quot;&amp;gt;Parameters:&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
;&amp;lt;var&amp;gt;wave&amp;lt;/var&amp;gt;&lt;br /&gt;
&lt;br /&gt;
:A wave item id or an &amp;lt;code&amp;gt;XWAVE&amp;lt;/code&amp;gt; instance&lt;br /&gt;
&lt;br /&gt;
;&amp;lt;var&amp;gt;xu&amp;lt;/var&amp;gt;&lt;br /&gt;
&lt;br /&gt;
:The unit to use on the x axis. The following values: &amp;lt;code&amp;gt;SAMPLES&amp;lt;/code&amp;gt;|&amp;lt;code&amp;gt;MS&amp;lt;/code&amp;gt;|&amp;lt;code&amp;gt;S&amp;lt;/code&amp;gt;. The default is &amp;lt;code&amp;gt;S&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
;&amp;lt;var&amp;gt;ymax&amp;lt;/var&amp;gt;&lt;br /&gt;
&lt;br /&gt;
:The maximum waveform amplitude. This can be a value between 0 and ...&lt;br /&gt;
&lt;br /&gt;
;&amp;lt;var&amp;gt;yr&amp;lt;/var&amp;gt;&lt;br /&gt;
&lt;br /&gt;
:The y axis display range. This can be any positive number. The default is &amp;lt;code&amp;gt;1&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
;&amp;lt;var&amp;gt;fill&amp;lt;/var&amp;gt;&lt;br /&gt;
&lt;br /&gt;
:&amp;lt;code&amp;gt;1&amp;lt;/code&amp;gt; if the waveform envelope should be filled or &amp;lt;code&amp;gt;0&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
For all other parameters, see &amp;lt;code&amp;gt;XYPLOT&amp;lt;/code&amp;gt; for descriptions.&lt;br /&gt;
&lt;br /&gt;
======TEXTBOX======&lt;br /&gt;
&lt;br /&gt;
Plot a graph containing text.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div class=&amp;quot;sourcelabel&amp;quot;&amp;gt;Usage:&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;&amp;lt;var&amp;gt;xplot&amp;lt;/var&amp;gt; PLOT &amp;lt;var&amp;gt;adr&amp;lt;/var&amp;gt; ; TEXTBOX ; &amp;lt;var&amp;gt;title&amp;lt;/var&amp;gt; ; &amp;lt;var&amp;gt;color&amp;lt;/var&amp;gt; ; &amp;lt;var&amp;gt;halign&amp;lt;/var&amp;gt; ; &amp;lt;var&amp;gt;valign&amp;lt;/var&amp;gt; ; &amp;lt;var&amp;gt;text&amp;lt;/var&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div class=&amp;quot;sourcelabel&amp;quot;&amp;gt;Parameters:&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
;&amp;lt;var&amp;gt;title&amp;lt;/var&amp;gt;&lt;br /&gt;
&lt;br /&gt;
:The graph title.&lt;br /&gt;
&lt;br /&gt;
;&amp;lt;var&amp;gt;color&amp;lt;/var&amp;gt;&lt;br /&gt;
&lt;br /&gt;
:The text color. This can be an of the {{STX}} color arguments.&lt;br /&gt;
&lt;br /&gt;
;&amp;lt;var&amp;gt;halign&amp;lt;/var&amp;gt;&lt;br /&gt;
&lt;br /&gt;
:The horizontal text alignment. This can be one of the following values: &amp;lt;code&amp;gt;CENTER&amp;lt;/code&amp;gt;|&amp;lt;code&amp;gt;LEFT&amp;lt;/code&amp;gt;|&amp;lt;code&amp;gt;RIGHT&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
;&amp;lt;var&amp;gt;valign&amp;lt;/var&amp;gt;&lt;br /&gt;
&lt;br /&gt;
:The vertical text alignment. This can be one of the following values: &amp;lt;code&amp;gt;CENTER&amp;lt;/code&amp;gt;|&amp;lt;code&amp;gt;TOP&amp;lt;/code&amp;gt;|&amp;lt;code&amp;gt;BOTTOM&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
;&amp;lt;var&amp;gt;text&amp;lt;/var&amp;gt;&lt;br /&gt;
&lt;br /&gt;
:The text to be displayed. This can be a simple table with an entry per line of text or a semi-colon separated list of text lines.&lt;br /&gt;
&lt;br /&gt;
For all other parameters, see &amp;lt;code&amp;gt;XYPLOT&amp;lt;/code&amp;gt; for descriptions.&lt;br /&gt;
&lt;br /&gt;
======fstyle======&lt;br /&gt;
&lt;br /&gt;
The &amp;lt;var&amp;gt;fstyle&amp;lt;/var&amp;gt; argument passed to the &amp;lt;code&amp;gt;XPlot&amp;lt;/code&amp;gt; functions &amp;lt;code&amp;gt;Plot&amp;lt;/code&amp;gt; and &amp;lt;code&amp;gt;AddPlot&amp;lt;/code&amp;gt; has the following syntax and components:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;&amp;lt;var&amp;gt;linestyle&amp;lt;/var&amp;gt;:&amp;lt;/code&amp;gt;&amp;lt;var&amp;gt;linecol&amp;lt;/var&amp;gt;&amp;lt;code&amp;gt;:&amp;lt;/code&amp;gt;&amp;lt;var&amp;gt;printcol&amp;lt;/var&amp;gt;&amp;lt;code&amp;gt;:&amp;lt;/code&amp;gt;&amp;lt;var&amp;gt;linewidth&amp;lt;/var&amp;gt;&amp;lt;code&amp;gt;:&amp;lt;/code&amp;gt;&amp;lt;var&amp;gt;drawstyle&amp;lt;/var&amp;gt;&amp;lt;code&amp;gt;:&amp;lt;/code&amp;gt;&amp;lt;var&amp;gt;drawsym&amp;lt;/var&amp;gt;&amp;lt;code&amp;gt;:&amp;lt;/code&amp;gt;&amp;lt;var&amp;gt;ymiss&amp;lt;/var&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
;&amp;lt;var&amp;gt;linestyle&amp;lt;/var&amp;gt;&lt;br /&gt;
&lt;br /&gt;
:Determines whether the function line is solid (&amp;lt;code&amp;gt;SOLID&amp;lt;/code&amp;gt;), dotted (&amp;lt;code&amp;gt;DOT&amp;lt;/code&amp;gt;) or dashed (&amp;lt;code&amp;gt;DASH&amp;lt;/code&amp;gt;). The default value is taken from the &amp;lt;code&amp;gt;XPLOT&amp;lt;/code&amp;gt; color profile.&lt;br /&gt;
&lt;br /&gt;
;&amp;lt;var&amp;gt;linecol&amp;lt;/var&amp;gt;&lt;br /&gt;
&lt;br /&gt;
:The colour to use for the function line on screen. This can be any {{STX}} colour keyword or RGB value. The default value is taken from the &amp;lt;code&amp;gt;XPLOT&amp;lt;/code&amp;gt; color profile.&lt;br /&gt;
&lt;br /&gt;
;&amp;lt;var&amp;gt;printcol&amp;lt;/var&amp;gt;&lt;br /&gt;
&lt;br /&gt;
:The colour to use for the function line when printing. See &amp;lt;var&amp;gt;linecol&amp;lt;/var&amp;gt; for details. The default value is taken from the &amp;lt;code&amp;gt;XPLOT&amp;lt;/code&amp;gt; color profile.&lt;br /&gt;
&lt;br /&gt;
;&amp;lt;var&amp;gt;linewidth&amp;lt;/var&amp;gt;&lt;br /&gt;
&lt;br /&gt;
:The width of the function line. Possible values are &amp;lt;code&amp;gt;0&amp;lt;/code&amp;gt; through to &amp;lt;code&amp;gt;4&amp;lt;/code&amp;gt; for lines with the &amp;lt;code&amp;gt;SOLID&amp;lt;/code&amp;gt; &amp;lt;var&amp;gt;linestyle&amp;lt;/var&amp;gt; and &amp;lt;code&amp;gt;0&amp;lt;/code&amp;gt; or &amp;lt;code&amp;gt;1&amp;lt;/code&amp;gt; for lines with the &amp;lt;code&amp;gt;DOT&amp;lt;/code&amp;gt; or &amp;lt;code&amp;gt;DASH&amp;lt;/code&amp;gt; &amp;lt;var&amp;gt;linestyle&amp;lt;/var&amp;gt;. The default value is taken from the &amp;lt;code&amp;gt;XPLOT&amp;lt;/code&amp;gt; color profile.&lt;br /&gt;
&lt;br /&gt;
;&amp;lt;var&amp;gt;drawstyle&amp;lt;/var&amp;gt;&lt;br /&gt;
&lt;br /&gt;
:The style to use to draw the function. Each function point can be plotted separately (&amp;lt;code&amp;gt;POINTS&amp;lt;/code&amp;gt;), a line can be drawn between each function point (&amp;lt;code&amp;gt;LINES&amp;lt;/code&amp;gt;), the area below the function can be filled with the &amp;lt;var&amp;gt;linecol&amp;lt;/var&amp;gt; (&amp;lt;code&amp;gt;AREA&amp;lt;/code&amp;gt;), the function points can be joined by steps (&amp;lt;code&amp;gt;STEPS&amp;lt;/code&amp;gt; - note that this is only available for the &amp;lt;code&amp;gt;PARAMETER&amp;lt;/code&amp;gt; plot) or no points are plotted (&amp;lt;code&amp;gt;NONE&amp;lt;/code&amp;gt; - this is best used when a drawing symbol (&amp;lt;var&amp;gt;drawsym&amp;lt;/var&amp;gt;) is defined). The default style is &amp;lt;code&amp;gt;LINES&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
;&amp;lt;var&amp;gt;drawsym&amp;lt;/var&amp;gt;&lt;br /&gt;
&lt;br /&gt;
:The symbol to draw at each point. This can be used in conjunction with a drawing style (see &amp;lt;var&amp;gt;drawstyle&amp;lt;/var&amp;gt;). The following keywords are supported:&lt;br /&gt;
&lt;br /&gt;
:&amp;lt;code&amp;gt;NONE&amp;lt;/code&amp;gt;|&amp;lt;code&amp;gt;SQUARE&amp;lt;/code&amp;gt;|&amp;lt;code&amp;gt;TRIANGLE|CIRCLE|CROSS|DIAMOND&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
:The default style is &amp;lt;code&amp;gt;NONE&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
;&amp;lt;var&amp;gt;ymiss&amp;lt;/var&amp;gt;&lt;br /&gt;
&lt;br /&gt;
:The value to use for missing y values. If &amp;lt;var&amp;gt;ymiss&amp;lt;/var&amp;gt; is not specified (empty) all values are displayed, otherwise all points where &amp;lt;code&amp;gt;y=&amp;lt;/code&amp;gt;&amp;lt;var&amp;gt;ymiss&amp;lt;/var&amp;gt; are not displayed. If &amp;lt;var&amp;gt;ymiss&amp;lt;/var&amp;gt; is not empty and is not a number then &amp;lt;var&amp;gt;ymiss&amp;lt;/var&amp;gt; is set to &amp;lt;code&amp;gt;0&amp;lt;/code&amp;gt;. If no &amp;lt;var&amp;gt;ymiss&amp;lt;/var&amp;gt; is defined, no &amp;lt;var&amp;gt;ymiss&amp;lt;/var&amp;gt; is used (this is the default).&lt;br /&gt;
&lt;br /&gt;
====Redraw====&lt;br /&gt;
&lt;br /&gt;
Redraw the selected graph. This is currently only implemented for the &amp;lt;code&amp;gt;FUNCTION&amp;lt;/code&amp;gt; (&amp;lt;code&amp;gt;XYPLOT&amp;lt;/code&amp;gt;) and &amp;lt;code&amp;gt;PARAMETER&amp;lt;/code&amp;gt; plots.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div class=&amp;quot;sourcelabel&amp;quot;&amp;gt;Usage:&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;&amp;lt;var&amp;gt;xplot&amp;lt;/var&amp;gt; REDRAW &amp;lt;var&amp;gt;adr&amp;lt;/var&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div class=&amp;quot;sourcelabel&amp;quot;&amp;gt;Parameters:&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
;&amp;lt;var&amp;gt;adr&amp;lt;/var&amp;gt;&lt;br /&gt;
&lt;br /&gt;
:The address of the display splitter (see member function &amp;lt;code&amp;gt;Graph&amp;lt;/code&amp;gt; for details).&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div class=&amp;quot;sourcelabel&amp;quot;&amp;gt;Result:&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Return 0 if successful.&lt;br /&gt;
&lt;br /&gt;
====ScaleOctave====&lt;br /&gt;
&lt;br /&gt;
Generate a logarithmic scale table for use with the &amp;lt;code&amp;gt;Plot&amp;lt;/code&amp;gt; or &amp;lt;code&amp;gt;AddPlot&amp;lt;/code&amp;gt; functions. This function can also be called statically.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div class=&amp;quot;sourcelabel&amp;quot;&amp;gt;Usage:&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;&amp;lt;var&amp;gt;xplot&amp;lt;/var&amp;gt; ScaleOctave &amp;lt;var&amp;gt;df&amp;lt;/var&amp;gt; &amp;lt;var&amp;gt;count&amp;lt;/var&amp;gt; ; &amp;lt;var&amp;gt;fmax&amp;lt;/var&amp;gt; ; &amp;lt;var&amp;gt;fmin&amp;lt;/var&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;xplot ScaleOctave &amp;lt;var&amp;gt;df&amp;lt;/var&amp;gt; &amp;lt;var&amp;gt;count&amp;lt;/var&amp;gt; ; &amp;lt;var&amp;gt;fmax&amp;lt;/var&amp;gt; ; &amp;lt;var&amp;gt;fmin&amp;lt;/var&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;&amp;lt;var&amp;gt;xplot&amp;lt;/var&amp;gt; ScaleOctave &amp;lt;var&amp;gt;vector&amp;lt;/var&amp;gt; ; &amp;lt;var&amp;gt;fmax&amp;lt;/var&amp;gt; ; &amp;lt;var&amp;gt;fmin&amp;lt;/var&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;xplot ScaleOctave &amp;lt;var&amp;gt;vector&amp;lt;/var&amp;gt; ; &amp;lt;var&amp;gt;fmax&amp;lt;/var&amp;gt; ; &amp;lt;var&amp;gt;fmin&amp;lt;/var&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div class=&amp;quot;sourcelabel&amp;quot;&amp;gt;Parameters:&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
;&amp;lt;var&amp;gt;df&amp;lt;/var&amp;gt;&lt;br /&gt;
&lt;br /&gt;
:The frequency resolution in Hz.&lt;br /&gt;
&lt;br /&gt;
;&amp;lt;var&amp;gt;count&amp;lt;/var&amp;gt;&lt;br /&gt;
&lt;br /&gt;
:The number of frequency points.&lt;br /&gt;
&lt;br /&gt;
;&amp;lt;var&amp;gt;fmax&amp;lt;/var&amp;gt;&lt;br /&gt;
&lt;br /&gt;
:The maximum frequency to be displayed.&lt;br /&gt;
&lt;br /&gt;
;&amp;lt;var&amp;gt;fmin&amp;lt;/var&amp;gt;&lt;br /&gt;
&lt;br /&gt;
:The minimum frequency to be displayed.&lt;br /&gt;
&lt;br /&gt;
;&amp;lt;var&amp;gt;vector&amp;lt;/var&amp;gt;&lt;br /&gt;
&lt;br /&gt;
:The scale range as a data vector.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div class=&amp;quot;sourcelabel&amp;quot;&amp;gt;Result:&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The following string is returned:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;xmin xmax xlabTab xdata&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Where &amp;lt;code&amp;gt;xmin&amp;lt;/code&amp;gt; and &amp;lt;code&amp;gt;xmax&amp;lt;/code&amp;gt; are is the minimum and maximum of the logarithmic scale, &amp;lt;code&amp;gt;xlabTab&amp;lt;/code&amp;gt; is the scale definition table which you can then pass to a &amp;lt;code&amp;gt;Plot&amp;lt;/code&amp;gt; function and &amp;lt;code&amp;gt;xdata&amp;lt;/code&amp;gt; is the logarithmic frequency values vector. See the scale definition table description in the Command Reference for details of the table syntax.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div class=&amp;quot;sourcelabel&amp;quot;&amp;gt;Examples:&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Create a scale definition table for a logarithmic frequency axis with 2000 points at 10 Hz intervals and a maximum frequency of 10000 Hz.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
readstr &#039;$(xplot scaleOctave 10 2000; 10000)&#039; #xmin #xmax #xlab #x&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&amp;lt;div class=&amp;quot;sourcelabel&amp;quot;&amp;gt;Notes:&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
See also ScaleSteps.&lt;br /&gt;
&lt;br /&gt;
====ScaleLog10====&lt;br /&gt;
&lt;br /&gt;
Generate a logarithmic scale table for use with the &amp;lt;code&amp;gt;Plot&amp;lt;/code&amp;gt; or &amp;lt;code&amp;gt;AddPlot&amp;lt;/code&amp;gt; functions. This function can also be called statically.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div class=&amp;quot;sourcelabel&amp;quot;&amp;gt;Usage:&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;&amp;lt;var&amp;gt;xplot&amp;lt;/var&amp;gt; ScaleLog10 &amp;lt;var&amp;gt;df&amp;lt;/var&amp;gt; &amp;lt;var&amp;gt;count&amp;lt;/var&amp;gt; ; &amp;lt;var&amp;gt;fmax&amp;lt;/var&amp;gt; ; &amp;lt;var&amp;gt;fmin&amp;lt;/var&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;xplot ScaleLog10 &amp;lt;var&amp;gt;df&amp;lt;/var&amp;gt; &amp;lt;var&amp;gt;count&amp;lt;/var&amp;gt; ; &amp;lt;var&amp;gt;fmax&amp;lt;/var&amp;gt; ; &amp;lt;var&amp;gt;fmin&amp;lt;/var&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;&amp;lt;var&amp;gt;xplot&amp;lt;/var&amp;gt; ScaleLog10 &amp;lt;var&amp;gt;vector&amp;lt;/var&amp;gt; ; &amp;lt;var&amp;gt;fmax&amp;lt;/var&amp;gt; ; &amp;lt;var&amp;gt;fmin&amp;lt;/var&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;xplot ScaleLog10 &amp;lt;var&amp;gt;vector&amp;lt;/var&amp;gt; ; &amp;lt;var&amp;gt;fmax&amp;lt;/var&amp;gt; ; &amp;lt;var&amp;gt;fmin&amp;lt;/var&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div class=&amp;quot;sourcelabel&amp;quot;&amp;gt;Parameters:&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
;&amp;lt;var&amp;gt;df&amp;lt;/var&amp;gt;&lt;br /&gt;
&lt;br /&gt;
:The frequency resolution in Hz.&lt;br /&gt;
&lt;br /&gt;
;&amp;lt;var&amp;gt;count&amp;lt;/var&amp;gt;&lt;br /&gt;
&lt;br /&gt;
:The number of frequency points.&lt;br /&gt;
&lt;br /&gt;
;&amp;lt;var&amp;gt;fmax&amp;lt;/var&amp;gt;&lt;br /&gt;
&lt;br /&gt;
:The maximum frequency to be displayed.&lt;br /&gt;
&lt;br /&gt;
;&amp;lt;var&amp;gt;fmin&amp;lt;/var&amp;gt;&lt;br /&gt;
&lt;br /&gt;
:The minimum frequency to be displayed.&lt;br /&gt;
&lt;br /&gt;
;&amp;lt;var&amp;gt;vector&amp;lt;/var&amp;gt;&lt;br /&gt;
&lt;br /&gt;
:The scale range as a data vector.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div class=&amp;quot;sourcelabel&amp;quot;&amp;gt;Result:&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The following string is returned:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;xmin xmax xlabTab xdata&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Where &amp;lt;code&amp;gt;xmin&amp;lt;/code&amp;gt; and &amp;lt;code&amp;gt;xmax&amp;lt;/code&amp;gt; are is the minimum and maximum of the logarithmic scale, &amp;lt;code&amp;gt;xlabTab&amp;lt;/code&amp;gt; is the scale definition table which you can then pass to a &amp;lt;code&amp;gt;Plot&amp;lt;/code&amp;gt; function and &amp;lt;code&amp;gt;xdata&amp;lt;/code&amp;gt; is the logarithmic frequency values vector. See the scale definition table description in the Command Reference for details of the table syntax.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div class=&amp;quot;sourcelabel&amp;quot;&amp;gt;Notes:&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
See also &amp;lt;code&amp;gt;ScaleSteps&amp;lt;/code&amp;gt; and &amp;lt;code&amp;gt;ScaleOctave&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
====ScaleSteps====&lt;br /&gt;
&lt;br /&gt;
Generate a linear scale table for use with the &amp;lt;code&amp;gt;Plot&amp;lt;/code&amp;gt; or &amp;lt;code&amp;gt;AddPlot&amp;lt;/code&amp;gt; functions. This function can also be called statically, e.g. &#039;&amp;lt;code&amp;gt;xplot ScaleSteps -70 -10 ; 10 ; 5 ; 5 ; 1 ; 1&amp;lt;/code&amp;gt;&#039;.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div class=&amp;quot;sourcelabel&amp;quot;&amp;gt;Usage:&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;&amp;lt;var&amp;gt;inst&amp;lt;/var&amp;gt; ScaleSteps &amp;lt;var&amp;gt;min&amp;lt;/var&amp;gt; &amp;lt;var&amp;gt;max&amp;lt;/var&amp;gt; ; &amp;lt;var&amp;gt;labelDist&amp;lt;/var&amp;gt; ; &amp;lt;var&amp;gt;majorGridDist&amp;lt;/var&amp;gt; ; &amp;lt;var&amp;gt;majorTickDist&amp;lt;/var&amp;gt; ; &amp;lt;var&amp;gt;minorGridDist&amp;lt;/var&amp;gt; ; &amp;lt;var&amp;gt;minorTickDist&amp;lt;/var&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;xplot ScaleSteps &amp;lt;var&amp;gt;min&amp;lt;/var&amp;gt; &amp;lt;var&amp;gt;max&amp;lt;/var&amp;gt; ; &amp;lt;var&amp;gt;labelDist&amp;lt;/var&amp;gt;; &amp;lt;var&amp;gt;majorGridDist&amp;lt;/var&amp;gt;; &amp;lt;var&amp;gt;majorTickDist&amp;lt;/var&amp;gt; ; &amp;lt;var&amp;gt;minorGridDist&amp;lt;/var&amp;gt; ; &amp;lt;var&amp;gt;minorTickDist&amp;lt;/var&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;&amp;lt;var&amp;gt;inst&amp;lt;/var&amp;gt; ScaleSteps &amp;lt;var&amp;gt;vector&amp;lt;/var&amp;gt; ; &amp;lt;var&amp;gt;labelDist&amp;lt;/var&amp;gt;; &amp;lt;var&amp;gt;majorGridDist&amp;lt;/var&amp;gt;; &amp;lt;var&amp;gt;majorTickDist&amp;lt;/var&amp;gt; ; &amp;lt;var&amp;gt;minorGridDist&amp;lt;/var&amp;gt; ; &amp;lt;var&amp;gt;minorTickDist&amp;lt;/var&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;xplot ScaleSteps &amp;lt;var&amp;gt;vector&amp;lt;/var&amp;gt; ; &amp;lt;var&amp;gt;labelDist&amp;lt;/var&amp;gt;; &amp;lt;var&amp;gt;majorGridDist&amp;lt;/var&amp;gt;; &amp;lt;var&amp;gt;majorTickDist&amp;lt;/var&amp;gt; ; &amp;lt;var&amp;gt;minorGridDist&amp;lt;/var&amp;gt; ; &amp;lt;var&amp;gt;minorTickDist&amp;lt;/var&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div class=&amp;quot;sourcelabel&amp;quot;&amp;gt;Parameters:&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
;&amp;lt;var&amp;gt;min, max&amp;lt;/var&amp;gt;&lt;br /&gt;
&lt;br /&gt;
:The scale range.&lt;br /&gt;
&lt;br /&gt;
;&amp;lt;var&amp;gt;vector&amp;lt;/var&amp;gt;&lt;br /&gt;
&lt;br /&gt;
:The scale range as a data vector.&lt;br /&gt;
&lt;br /&gt;
;&amp;lt;var&amp;gt;labelDist&amp;lt;/var&amp;gt;&lt;br /&gt;
&lt;br /&gt;
:The label distance in scale units.&lt;br /&gt;
&lt;br /&gt;
;&amp;lt;var&amp;gt;majorGridDist&amp;lt;/var&amp;gt;&lt;br /&gt;
&lt;br /&gt;
:The distance of the major grid lines in scale units.&lt;br /&gt;
&lt;br /&gt;
;&amp;lt;var&amp;gt;majorTickDist&amp;lt;/var&amp;gt;&lt;br /&gt;
&lt;br /&gt;
:The distance between major ticks in scale units.&lt;br /&gt;
&lt;br /&gt;
;&amp;lt;var&amp;gt;minorGridDist&amp;lt;/var&amp;gt;&lt;br /&gt;
&lt;br /&gt;
:The distance of the minor grid lines in scale units.&lt;br /&gt;
&lt;br /&gt;
;&amp;lt;var&amp;gt;minorTickDist&amp;lt;/var&amp;gt;&lt;br /&gt;
&lt;br /&gt;
:The distance between minor ticks in scale units.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div class=&amp;quot;sourcelabel&amp;quot;&amp;gt;Result:&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The following string is returned:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;min max labTab&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Where &amp;lt;code&amp;gt;min&amp;lt;/code&amp;gt; and &amp;lt;code&amp;gt;max&amp;lt;/code&amp;gt; are is the computed or corrected scale range and &amp;lt;code&amp;gt;labTab&amp;lt;/code&amp;gt; is the scale definition table which you can then pass to a &amp;lt;code&amp;gt;Plot&amp;lt;/code&amp;gt; function. See the scale definition table description in the Command Reference for details of the table syntax.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div class=&amp;quot;sourcelabel&amp;quot;&amp;gt;Examples:&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Calculate the linear scale, grid and labels for an amplitude axis between -70 and -10 dB with labels every 10 dB, major grid lines and ticks every 5dB and minor grid lines and ticks every dB.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
readstr &#039;$($#xplot ScaleSteps -70 -10 ; 10 ; 5 ; 5 ; 1 ; 1)&#039; #ymin #ymax #ylab&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&amp;lt;div class=&amp;quot;sourcelabel&amp;quot;&amp;gt;Notes:&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
See also &amp;lt;code&amp;gt;ScaleOctave&amp;lt;/code&amp;gt; and &amp;lt;code&amp;gt;ScaleLog10&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
====Set====&lt;br /&gt;
&lt;br /&gt;
The &amp;lt;code&amp;gt;Set&amp;lt;/code&amp;gt; function sets the cursor mode and text attributes.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div class=&amp;quot;sourcelabel&amp;quot;&amp;gt;Usage:&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;&amp;lt;var&amp;gt;xplot&amp;lt;/var&amp;gt; Set [ &amp;lt;var&amp;gt;graph&amp;lt;/var&amp;gt;|* ; ] &amp;lt;var&amp;gt;attr&amp;lt;/var&amp;gt; &amp;lt;var&amp;gt;args&amp;lt;/var&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div class=&amp;quot;sourcelabel&amp;quot;&amp;gt;Parameters:&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
;&amp;lt;var&amp;gt;xgraph&amp;lt;/var&amp;gt;&lt;br /&gt;
&lt;br /&gt;
:An xgraph instance on which to call the &amp;lt;code&amp;gt;Set&amp;lt;/code&amp;gt; command. If no graph is specified or an asterisk, then the &amp;lt;code&amp;gt;Set&amp;lt;/code&amp;gt; command is carried out on all graphs.&lt;br /&gt;
&lt;br /&gt;
;&amp;lt;var&amp;gt;attr&amp;lt;/var&amp;gt;&lt;br /&gt;
&lt;br /&gt;
:One of the following values:&lt;br /&gt;
&lt;br /&gt;
:&amp;lt;code&amp;gt;cursormode&amp;lt;/code&amp;gt; - turn cursors on and off and change the way they look.&lt;br /&gt;
&lt;br /&gt;
:&amp;lt;code&amp;gt;xunit&amp;lt;/code&amp;gt; - the name of the x-axis unit&lt;br /&gt;
&lt;br /&gt;
:&amp;lt;code&amp;gt;yunit&amp;lt;/code&amp;gt; - the name of the y-axis unit&lt;br /&gt;
&lt;br /&gt;
:&amp;lt;code&amp;gt;xtext&amp;lt;/code&amp;gt; - the description of the x-axis&lt;br /&gt;
&lt;br /&gt;
:&amp;lt;code&amp;gt;ytext&amp;lt;/code&amp;gt; - the description of the y-axis&lt;br /&gt;
&lt;br /&gt;
:&amp;lt;code&amp;gt;title&amp;lt;/code&amp;gt; - the graph&#039;s title&lt;br /&gt;
&lt;br /&gt;
;&amp;lt;var&amp;gt;args&amp;lt;/var&amp;gt;&lt;br /&gt;
&lt;br /&gt;
:The value of &amp;lt;var&amp;gt;args&amp;lt;/var&amp;gt; depends on &amp;lt;var&amp;gt;attr&amp;lt;/var&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
:If &amp;lt;var&amp;gt;attr&amp;lt;/var&amp;gt; is &amp;lt;code&amp;gt;cursormode&amp;lt;/code&amp;gt;, then &amp;lt;var&amp;gt;args&amp;lt;/var&amp;gt; is as follows:&lt;br /&gt;
&lt;br /&gt;
:&amp;lt;code&amp;gt;mode|* type|* line|*&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
:Where mode is one of the following values:&lt;br /&gt;
&lt;br /&gt;
:&amp;lt;code&amp;gt;on&amp;lt;/code&amp;gt; - show the cursor&lt;br /&gt;
&lt;br /&gt;
:&amp;lt;code&amp;gt;off&amp;lt;/code&amp;gt; - hide the cursor&lt;br /&gt;
&lt;br /&gt;
:Where &amp;lt;var&amp;gt;type&amp;lt;/var&amp;gt; is one of the following values:&lt;br /&gt;
&lt;br /&gt;
:&amp;lt;code&amp;gt;cross&amp;lt;/code&amp;gt;|&amp;lt;code&amp;gt;crosshair&amp;lt;/code&amp;gt;|&amp;lt;code&amp;gt;vbarcross&amp;lt;/code&amp;gt;|&amp;lt;code&amp;gt;harmonic&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
:And &amp;lt;code&amp;gt;line&amp;lt;/code&amp;gt; is one of the following values:&lt;br /&gt;
&lt;br /&gt;
:&amp;lt;code&amp;gt;off&amp;lt;/code&amp;gt; |&amp;lt;code&amp;gt;on&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
:If &amp;lt;var&amp;gt;attr&amp;lt;/var&amp;gt; is not &amp;lt;code&amp;gt;cursormode&amp;lt;/code&amp;gt;, then &amp;lt;var&amp;gt;args&amp;lt;/var&amp;gt; is used as the text, unit or title.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div class=&amp;quot;sourcelabel&amp;quot;&amp;gt;Result:&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
No return value.&lt;br /&gt;
&lt;br /&gt;
====SetCallback====&lt;br /&gt;
&lt;br /&gt;
The callback function is called by the message handlers to process popup and context menu messages and hotkeys which are not used by &amp;lt;code&amp;gt;XPLOT&amp;lt;/code&amp;gt; or &amp;lt;code&amp;gt;XGRAPH&amp;lt;/code&amp;gt;. The following commands are used to call the callback function:&lt;br /&gt;
&lt;br /&gt;
If called from an &amp;lt;code&amp;gt;XGRAPH&amp;lt;/code&amp;gt; message handler:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;cbfunction xgraphinstance irow icol msgid msgpar&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
If called from the &amp;lt;code&amp;gt;XPLOT&amp;lt;/code&amp;gt; message handler:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;cbfunction xplotinstance * * msgid msgpar&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div class=&amp;quot;sourcelabel&amp;quot;&amp;gt;Usage:&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;&amp;lt;var&amp;gt;xplot&amp;lt;/var&amp;gt; SetCallback [ &amp;lt;var&amp;gt;cbfunction&amp;lt;/var&amp;gt; ]&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div class=&amp;quot;sourcelabel&amp;quot;&amp;gt;Parameters:&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
;&amp;lt;var&amp;gt;cbfunction&amp;lt;/var&amp;gt;&lt;br /&gt;
&lt;br /&gt;
:The name of the callback function or an empty string to remove a previous association.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div class=&amp;quot;sourcelabel&amp;quot;&amp;gt;Result:&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
No return value.&lt;br /&gt;
&lt;br /&gt;
====SetWave====&lt;br /&gt;
&lt;br /&gt;
Attach a signal to one graph or all graphs (see &amp;lt;var&amp;gt;adr&amp;lt;/var&amp;gt;). If a wave item is attached to a graph, it can not be deleted before it is detached or the graph or &amp;lt;code&amp;gt;XPLOT&amp;lt;/code&amp;gt; instance is deleted.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div class=&amp;quot;sourcelabel&amp;quot;&amp;gt;Usage:&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;&amp;lt;var&amp;gt;xplot&amp;lt;/var&amp;gt; SetWave [ &amp;lt;var&amp;gt;waveitem&amp;lt;/var&amp;gt; ]&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;&amp;lt;var&amp;gt;xplot&amp;lt;/var&amp;gt; SetWave &amp;lt;var&amp;gt;adr&amp;lt;/var&amp;gt; ; [ &amp;lt;var&amp;gt;waveitem&amp;lt;/var&amp;gt; ]&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div class=&amp;quot;sourcelabel&amp;quot;&amp;gt;Parameters:&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
;&amp;lt;var&amp;gt;adr&amp;lt;/var&amp;gt;&lt;br /&gt;
&lt;br /&gt;
:The address of the display splitter (see member function Graph for details). If this parameter is omitted, then the wave item is set for all graphs.&lt;br /&gt;
&lt;br /&gt;
;&amp;lt;var&amp;gt;waveitem&amp;lt;/var&amp;gt;&lt;br /&gt;
&lt;br /&gt;
:A wave item id or an &amp;lt;code&amp;gt;[[Programmer Guide/Class Library/XWave : CObjEx|XWAVE]]&amp;lt;/code&amp;gt; instance (or empty to remove attachment).&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div class=&amp;quot;sourcelabel&amp;quot;&amp;gt;Result:&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Return &amp;lt;code&amp;gt;0&amp;lt;/code&amp;gt; if successful.&lt;br /&gt;
&lt;br /&gt;
Note that wave items can only be attached to graphs of type &amp;lt;code&amp;gt;FUNCTION&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;XYPLOT&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;PARAMETER&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;SPECTROGRAM&amp;lt;/code&amp;gt; and &amp;lt;code&amp;gt;WAVEFORM&amp;lt;/code&amp;gt;.====XPlot Hotkeys====&lt;br /&gt;
&lt;br /&gt;
The following hotkeys are implemented in the &amp;lt;code&amp;gt;XPLOT&amp;lt;/code&amp;gt; class:&lt;br /&gt;
&lt;br /&gt;
{|&lt;br /&gt;
|-&lt;br /&gt;
|C&lt;br /&gt;
|Turn the cursors on and off.&lt;br /&gt;
|-&lt;br /&gt;
|S&lt;br /&gt;
|Change to the next cursor style.&lt;br /&gt;
|-&lt;br /&gt;
|B&lt;br /&gt;
|Turn cursor binding on and off.&lt;br /&gt;
|-&lt;br /&gt;
|Ctrl+N&lt;br /&gt;
|Bind the cursor to the next function.&lt;br /&gt;
|-&lt;br /&gt;
|Ctrl+P&lt;br /&gt;
|Bind the cursor to the previous function.&lt;br /&gt;
|-&lt;br /&gt;
|R&lt;br /&gt;
|Turn the cursor rubberline on and off.&lt;br /&gt;
|-&lt;br /&gt;
|T&lt;br /&gt;
|Turn the title on and off.&lt;br /&gt;
|-&lt;br /&gt;
|X&lt;br /&gt;
|Change to the next x&amp;lt;nowiki&amp;gt;-&amp;lt;/nowiki&amp;gt;scale mode.&lt;br /&gt;
|-&lt;br /&gt;
|Y&lt;br /&gt;
|Change to the next y&amp;lt;nowiki&amp;gt;-&amp;lt;/nowiki&amp;gt;scale mode.&lt;br /&gt;
|-&lt;br /&gt;
|Z&lt;br /&gt;
|Change to the next z&amp;lt;nowiki&amp;gt;-&amp;lt;/nowiki&amp;gt;scale mode.&lt;br /&gt;
|-&lt;br /&gt;
|Space&lt;br /&gt;
|Open the setup dialog.&lt;br /&gt;
|-&lt;br /&gt;
|P&lt;br /&gt;
|Play the attached wave (between the cursors).&lt;br /&gt;
|-&lt;br /&gt;
|Q&lt;br /&gt;
|Play the attached wave (the whole signal).&lt;br /&gt;
|-&lt;br /&gt;
|ESC&lt;br /&gt;
|Stop playback.&lt;br /&gt;
|-&lt;br /&gt;
|Ins&lt;br /&gt;
|Show the selected metasegment&#039;s settings in a dialog or, if no metasegment is selected, show a dialog to create a new metasegment.&lt;br /&gt;
|-&lt;br /&gt;
|Del&lt;br /&gt;
|Delete the selected metasegments.&lt;br /&gt;
|-&lt;br /&gt;
|Ctrl+Left Click&lt;br /&gt;
|Move the legend to the clicked position.&lt;br /&gt;
|-&lt;br /&gt;
|Shift+Left Click&lt;br /&gt;
|Create a metasegment at the clicked position (show the &#039;Insert Metasegment&#039; dialog).&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===XPlot Examples===&lt;br /&gt;
&lt;br /&gt;
=====Simple XPLOT Example=====&lt;br /&gt;
&lt;br /&gt;
The following example demonstrates simple &amp;lt;code&amp;gt;[[Programmer Guide/Class Library/XPlot : CObjEx|XPLOT]]&amp;lt;/code&amp;gt; usage.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
[macro xplot_example_1]&lt;br /&gt;
    //&lt;br /&gt;
    // create display (and graph)&lt;br /&gt;
    //&lt;br /&gt;
    #xplot := xplot 2 ; 1 ; xplot ; default ; 100 100 800 800&lt;br /&gt;
    if &#039;$#xplot[?]&#039; != &#039;instance&#039; em -1 ; xplot creation failed ($emsg)&lt;br /&gt;
    //&lt;br /&gt;
    // plot graphs (including data generation)&lt;br /&gt;
    //&lt;br /&gt;
    #nValues := 100&lt;br /&gt;
    $#xplot Plot 0 0 ; XYPLOT ; $(eval fill($#nValues,1,1)) ; * ; Graph Title ; * ; x unit ; x title ; * ; y unit ; y title ; solid:green::1&lt;br /&gt;
    $#xplot Plot 1 0 ; SPECTROGRAM ; $(eval rand(1,100,100)) ; * ; Graph Title ; * ; x unit ; x title ; * ; y unit ; y title ; solid:green::1&lt;br /&gt;
    //&lt;br /&gt;
    // clean up&lt;br /&gt;
    //&lt;br /&gt;
    // the clean up takes place automatically&lt;br /&gt;
    // when the plot window is closed&lt;br /&gt;
exit&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
=====Plot rows of a matrix using XPLOT=====&lt;br /&gt;
&lt;br /&gt;
The following example demonstrates how to plot the rows of a matrix using the &amp;lt;code&amp;gt;[[Programmer Guide/Class Library/XPlot : CObjEx|XPLOT]]&amp;lt;/code&amp;gt; class.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
//{{3.9 6473}{2009.01.29  16.44.04} - automatically created version information - do not change or delete this line}&lt;br /&gt;
&lt;br /&gt;
[macro xplot_example_2]&lt;br /&gt;
&lt;br /&gt;
//&lt;br /&gt;
//      This row demonstrates how to plot each row of a matrix&lt;br /&gt;
//&lt;br /&gt;
//      C.G. 29.1.2009&lt;br /&gt;
//&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
//&lt;br /&gt;
// create display (and graph)&lt;br /&gt;
//&lt;br /&gt;
&lt;br /&gt;
#xplot := xplot 1 ; 1 ; xplot ; default ; 100 100 800 800&lt;br /&gt;
if &#039;$#xplot[?]&#039; != &#039;instance&#039; em -1 ; xplot creation failed ($emsg)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
//&lt;br /&gt;
// create a matrix and fill it with some meaningless data&lt;br /&gt;
//&lt;br /&gt;
&lt;br /&gt;
#mat := new table * /Parameter * number:X:100&lt;br /&gt;
if &#039;$#mat[?]&#039; != table em -1 ; cannot create table ($emsg)&lt;br /&gt;
&lt;br /&gt;
for #i := 0 to $#i &amp;lt; 10 step #i := int $#i + 1&lt;br /&gt;
        $#mat[$#i,*] := eval fill( 100, $#i+1, $#i+1 )&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
//&lt;br /&gt;
// plot each row of the matrix&lt;br /&gt;
//&lt;br /&gt;
&lt;br /&gt;
for #i := int 0 to $#i &amp;lt; $#mat[!nrow] step #i := int $#i + 1&lt;br /&gt;
        #x := eval $#mat[$#i,*]&lt;br /&gt;
        $#xplot AddPlot 0 0 ; XYPLOT ; $#x ; * ; row-by-row plot ; * ; x unit ; x title ; * ; y unit ; y title ; solid:green::1&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
exit 1 int 0&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=====Advanced XPLOT Example=====&lt;br /&gt;
&lt;br /&gt;
This example not only demonstrates the use of the &amp;lt;code&amp;gt;XPLOT&amp;lt;/code&amp;gt; class, but also signal processing using the &amp;lt;code&amp;gt;EVAL&amp;lt;/code&amp;gt; function.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
//=================================================================================================&lt;br /&gt;
//      &lt;br /&gt;
//      DSP Examples&lt;br /&gt;
//      &lt;br /&gt;
//      last update:    Nov 17, 2007 (AN)&lt;br /&gt;
//      {{STX}} version:    {{STX}} 3.8 Beta&lt;br /&gt;
//&lt;br /&gt;
//      The examples in this file demonstrates how to ...&lt;br /&gt;
//              ...     use the EVAL command for signal processing&lt;br /&gt;
//              ...     use the class XWAVE     to read a signal frame by frame&lt;br /&gt;
//              ...     display spectrograms, waveforms and functions in XPLOT graphs&lt;br /&gt;
//              ...     enable XPLOT to play signals&lt;br /&gt;
//              ...     use the XPLOT callback function to implement simple user controls&lt;br /&gt;
//              ...     set and get cursor attritbutes and positions of XPLOT graphs&lt;br /&gt;
//              ...     add a legend to a XPLOT graph&lt;br /&gt;
//              ... use BUTIL MSGBOX for simple dialogs&lt;br /&gt;
//              ...     use the CON object (class BScript) to display log. messages&lt;br /&gt;
//              ...     use the CON object to save numeric tables to textfiles&lt;br /&gt;
//              ...     simulate item messages using the message queue macro MSGQUEUE&lt;br /&gt;
//              ...     implement and call local subroutines&lt;br /&gt;
//&lt;br /&gt;
//=================================================================================================&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
//-------------------------------------------------------------------------------------------------&lt;br /&gt;
//&lt;br /&gt;
//      DSPExAvrSpectrum                Create a plot containing the average spectra of all segments selected&lt;br /&gt;
//                                                      in the DataSet view.&lt;br /&gt;
//&lt;br /&gt;
//-------------------------------------------------------------------------------------------------&lt;br /&gt;
[Macro DSPExAvrSpectrum #lfrm=100ms&#039;;&#039;#sfrm=50%&#039;;&#039;#wtyp=hamming&#039;;&#039;#ascale=dB&#039;;&#039;#fscale=Hz&#039;;&#039;#amax=1&#039;;&#039;#aref=1&#039;;&#039;#]&lt;br /&gt;
//      arguments:      #lfrm           frame length,   absolute time expression&lt;br /&gt;
//                              #sfrm           frame shift,    relative time expression&lt;br /&gt;
//                              #wtyp           window type,    {Hanning, Hamming, ...)&lt;br /&gt;
//                              #fscale         spectrogram frequency scale unit (Hz, kHz, Bark, Mel, ERB)&lt;br /&gt;
//                              #amax           calibration factor or CALSET to use a calibration set&lt;br /&gt;
//                              #aref           reference amplitude, ignored if #amax equals CALSET&lt;br /&gt;
&lt;br /&gt;
//      set mode to macro name (see macro DSPExCallback)&lt;br /&gt;
DSPExMode := set &#039;$#mac&#039;&lt;br /&gt;
&lt;br /&gt;
//      get segments selected in the DataSet view&lt;br /&gt;
#segments := dspexlib getsegments&lt;br /&gt;
&lt;br /&gt;
//      create the result table (one spectrum per row)&lt;br /&gt;
#asp := new table * * num:x:$#segments[] /p&lt;br /&gt;
&lt;br /&gt;
//      segment analysis loop&lt;br /&gt;
#nok := 0       //      number of computed average spectra&lt;br /&gt;
for #i := 0 to $#i &amp;lt; $#segments[] step #i := int $#i+1&lt;br /&gt;
&lt;br /&gt;
        //      get next segment from segment list&lt;br /&gt;
        readtab $#segments $#i #aset&#039;;&#039;#aseg&#039;;&#039;#ach&#039;;&#039;#&lt;br /&gt;
        con log process segment &amp;quot;set=$#aset, id=$#aseg, ch=$#ach&amp;quot; ($(int $#i+1) of $#segments[])&lt;br /&gt;
&lt;br /&gt;
        //      create the wave object and initialize frame settings (mode &amp;quot;centered&amp;quot;)&lt;br /&gt;
        //      usage: XWAVE setref ; segmentid ; channel ; mode ; framelength ; frameshift ; ampmax ; ampref&lt;br /&gt;
        if $(#wave := xwave &#039;$#aset;$#aseg;$#ach;1;$#lfrm;$#sfrm;$#amax;$#aref&#039;)[?] != instance then&lt;br /&gt;
                butil &#039;msgbox msg; create wave object for segment &amp;quot;$#aset/$#aseg,$#ach&amp;quot; failed; Error!&#039;&lt;br /&gt;
                continue&lt;br /&gt;
        //      set / check sampling rate&lt;br /&gt;
        else if &#039;$#srate&#039; == &#039;&#039; then&lt;br /&gt;
                #srate := $($#wave srate)       &lt;br /&gt;
        else if $($#wave srate) != $#srate then&lt;br /&gt;
                butil &#039;msgbox msg; segment &amp;quot;$#aset/$#aseg,$#ach&amp;quot; - sampling rate mismatch; Error!&#039;&lt;br /&gt;
                $#wave destroy  //      delete wave object&lt;br /&gt;
                continue&lt;br /&gt;
        end&lt;br /&gt;
        &lt;br /&gt;
        //      compute the average spectrum&lt;br /&gt;
        if $(#tmp := dspexlib averagespectrum $#wave ; $#wtyp ; $#ascale)[?] != table then&lt;br /&gt;
                butil &#039;msgbox msg; compute average spectrum of segment &amp;quot;$#aset/$#aseg,$#ach&amp;quot; failed; Error!&#039;&lt;br /&gt;
                $#wave destroy  //      delete wave object&lt;br /&gt;
                continue&lt;br /&gt;
        end&lt;br /&gt;
                &lt;br /&gt;
        $#asp[*,$#nok] := $#tmp                                 //      save the spectrum&lt;br /&gt;
        delete $#tmp                                                    //      delete temp. buffer&lt;br /&gt;
        #legend := &#039;$#legend $($#wave title);&#039;  //      add segment to legend string&lt;br /&gt;
        $#wave destroy                                                  //      delete wave object&lt;br /&gt;
        #nok := int $#nok+1                                             //      increment result vector counter&lt;br /&gt;
&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
//      exit if no results are computed&lt;br /&gt;
if $#nok &amp;lt; 1 exit &lt;br /&gt;
&lt;br /&gt;
//      compute frequency scale vector, unit and frequency resolution&lt;br /&gt;
readstr &#039;$(dspexlib frequencyscale $#srate ; $#asp[!nrow] ; $#fscale)&#039; #frq #funit #df&lt;br /&gt;
&lt;br /&gt;
//      create and configure the plot object&lt;br /&gt;
//      usage: XPLOT rows ; cols0 cols1 .. ; windowtitle ; graphicprofile ; wx wy wwidth wheight&lt;br /&gt;
#plot := xplot 1; 1; Average Spectrum; Rainbow; 0 0 1024 800&lt;br /&gt;
&lt;br /&gt;
//      plot all spectra and display the legend&lt;br /&gt;
#title := format &#039;lfrm=%s, sfrm=%s, wtyp=%s, df=%.3fHz&#039; &#039;$#lfrm&#039; &#039;$#sfrm&#039; &#039;$#wtyp&#039; $#df&lt;br /&gt;
readstr &#039;$(dspexlib amplitudescale $#ascale)&#039; #ytext #yunit&lt;br /&gt;
//      usage: xplot PLOT row col; FUNCTION; ydata; xdata; title; xrange; xunit; xtext; yrange; yunit; yrange&lt;br /&gt;
$#plot plot 0; function; $#asp; $#frq; $#title; ; $#funit; frequency; ; $#yunit ; $#ytext&lt;br /&gt;
$#plot legend 0; %; 50; 95; 45; 5; black; color; $#legend&lt;br /&gt;
$#plot set cursormode on crosshair      //      set cursor mode and style       &lt;br /&gt;
$#plot setcallback dspexcallback        //      assign callback function&lt;br /&gt;
&lt;br /&gt;
//      wait until plot window is closed &lt;br /&gt;
$#plot end      //      the xplot object is destroyed automatically when the window is closed&lt;br /&gt;
  &lt;br /&gt;
//      finished - cleanup and and exit&lt;br /&gt;
delete $#asp $#frq $#segments   //      delete data items&lt;br /&gt;
showLogOnExit := 0      //      close the bscript log-window automatically &lt;br /&gt;
exit&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
//-------------------------------------------------------------------------------------------------&lt;br /&gt;
//&lt;br /&gt;
//      DSPExSpectrogram                Plot a spectrogram of all segments selected in the DataSet view.&lt;br /&gt;
//                                                      For each segment one spectrogram window is displayed. The window&lt;br /&gt;
//                                                      must be closed before the next segment is analysed.&lt;br /&gt;
//&lt;br /&gt;
//-------------------------------------------------------------------------------------------------&lt;br /&gt;
[Macro DSPExSpectrogram #lfrm=40ms&#039;;&#039;#sfrm=10%&#039;;&#039;#wtyp=hamming&#039;;&#039;#arange=50&#039;;&#039;#fscale=Hz&#039;;&#039;#amax=1&#039;;&#039;#aref=1&#039;;&#039;#]&lt;br /&gt;
//      arguments:      #lfrm           frame length,   absolute time expression&lt;br /&gt;
//                              #sfrm           frame shift,    relative time expression&lt;br /&gt;
//                              #wtyp           window type,    {Hanning, Hamming)&lt;br /&gt;
//                              #arange         spectrogram display range in dB (max .. max-range)&lt;br /&gt;
//                              #fscale         spectrogram frequency scale unit (Hz, kHz, Bark, Mel, ERB)&lt;br /&gt;
//                              #amax           calibration factor or CALSET to use a calibration set&lt;br /&gt;
//                              #aref           reference amplitude, ignored if #amax equals CALSET&lt;br /&gt;
&lt;br /&gt;
//      set mode variable to macro name (see macro DSPExCallback)&lt;br /&gt;
DSPExMode := set &#039;$#mac&#039;&lt;br /&gt;
&lt;br /&gt;
//      get segments selected in the DataSet view&lt;br /&gt;
#segments := dspexlib getsegments&lt;br /&gt;
&lt;br /&gt;
//      segment analysis loop&lt;br /&gt;
for #i := 0 to $#i &amp;lt; $#segments[] &amp;amp;&amp;amp; &#039;$DSPExMode&#039; != &#039;&#039; step #i := int $#i+1&lt;br /&gt;
&lt;br /&gt;
        //      get next segment from segment list&lt;br /&gt;
        readtab $#segments $#i #aset&#039;;&#039;#aseg&#039;;&#039;#ach&#039;;&#039;#&lt;br /&gt;
&lt;br /&gt;
        //      create the wave object and initialize frame settings (mode &amp;quot;centered&amp;quot;)&lt;br /&gt;
        if $(#wave := xwave &#039;$#aset;$#aseg;$#ach;1;$#lfrm;$#sfrm;$#amax;$#aref&#039;)[?] != instance then&lt;br /&gt;
                butil &#039;msgbox msg; create wave object for segment &amp;quot;$#aset ; $#aseg ; $#ach&amp;quot; failed; Error!&#039;&lt;br /&gt;
                continue&lt;br /&gt;
        end &lt;br /&gt;
&lt;br /&gt;
        //      compute the spectrogram&lt;br /&gt;
        if $(#asp := dspexlib spectrogram $#wave ; $#wtyp ; log)[?] != table then&lt;br /&gt;
                butil &#039;msgbox msg; compute spectrogram of segment &amp;quot;$#aset ; $#aseg ; $#ach&amp;quot; failed; Error!&#039;&lt;br /&gt;
                $#wave destroy&lt;br /&gt;
                continue&lt;br /&gt;
        end &lt;br /&gt;
&lt;br /&gt;
        //      compute frequency scale vector, unit and frequency resolution&lt;br /&gt;
        readstr &#039;$(dspexlib frequencyscale $($#wave srate) ; $#asp[!ncol] ; $#fscale)&#039; #frq #funit #df&lt;br /&gt;
&lt;br /&gt;
        //      create and configure the plot object&lt;br /&gt;
        #plot := xplot 2; 1 1; $($#wave title)   quit = c-q, next = c-n; Rainbow; 0 0 1024 800&lt;br /&gt;
        $($#plot display) height 3 1 /apply             //      set height of graphs&lt;br /&gt;
&lt;br /&gt;
        //      plot spectrogram and waveform&lt;br /&gt;
        #title := format &#039;lfrm=%s, sfrm=%s, wtyp=%s, arange=%s, amax=%.1fdB, df=%.3fHz&#039; &#039;$#lfrm&#039; &#039;$#sfrm&#039; &#039;$#wtyp&#039; &#039;$#arange&#039; $(eval max($#asp)) $#df&lt;br /&gt;
        $#plot plot 0; spectrogram; $#asp; $#frq; $#title; $($#wave tbegin) $($#wave tend); s; time; ; $#funit; frequency; $#arange&lt;br /&gt;
        $#plot plot 1; waveform; $#wave; ; s; time; $($#wave amax); $($#wave amax); amplitude; 1&lt;br /&gt;
        $#plot set cursormode on crosshair      //      set cursor mode and style       &lt;br /&gt;
        $#plot setcallback dspexcallback        //      assign callback function&lt;br /&gt;
&lt;br /&gt;
        //      assign wave object to xplot graphs (for playback)&lt;br /&gt;
        $#plot setwave $#wave &lt;br /&gt;
&lt;br /&gt;
        //      wait until plot window is closed &lt;br /&gt;
        $#plot end      //      the xplot object is destroyed automatically when the window is closed&lt;br /&gt;
  &lt;br /&gt;
        //      cleanup&lt;br /&gt;
        delete $#asp $#frq              //      delete data items&lt;br /&gt;
        $#wave destroy                  //      delete wave object&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
//      finished - cleanup and exit&lt;br /&gt;
delete $#segments       //      delete segment table&lt;br /&gt;
showLogOnExit := 0      //      close the bscript log-window automatically &lt;br /&gt;
exit&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
//-------------------------------------------------------------------------------------------------&lt;br /&gt;
//&lt;br /&gt;
//      DSPExCallback                   Callback function for XPLOT.&lt;br /&gt;
//&lt;br /&gt;
//      arguments:&lt;br /&gt;
//              if called from xplotobject message handler      -&amp;gt;   &#039;CALLBACK xplotobject * * msgid msgpar&#039;                   &lt;br /&gt;
//              if called from xgraphobject message handler     -&amp;gt;   &#039;CALLBACK xgraphobject row col msgid msgpar&#039;&lt;br /&gt;
//&lt;br /&gt;
//      Note: This macro uses the shell variable DSPEXMODE to check which macro has installed the &lt;br /&gt;
//      callback and to set return values.&lt;br /&gt;
//&lt;br /&gt;
//-------------------------------------------------------------------------------------------------&lt;br /&gt;
[Macro DSPExCallback #obj #row #col #msgid #msgpar]&lt;br /&gt;
&lt;br /&gt;
//      get xplot-object if called from a xgraph-object&lt;br /&gt;
if &#039;$#obj[!class]&#039; == xgraph #obj := $#obj get xplot&lt;br /&gt;
&lt;br /&gt;
//      message filter for keystroke messages&lt;br /&gt;
&lt;br /&gt;
//      process Control-Q (QUIT) key&lt;br /&gt;
if &#039;$#msgid$#msgpar&#039; == keyCQ then&lt;br /&gt;
&lt;br /&gt;
        if $(butil msgbox yesno; Quit ?; $DSPExMode) == yes then&lt;br /&gt;
                //      place the display-close message in the message queue to end the xplot message loop&lt;br /&gt;
                msgqueue &#039;display $($#obj display) close&#039;&lt;br /&gt;
                //      set mode variable to empty-string if C-Q key was pressed&lt;br /&gt;
                DSPExMode := &#039;&#039;&lt;br /&gt;
        end&lt;br /&gt;
&lt;br /&gt;
//      process Control-C (COPY) and Control-S (SAVE) keys&lt;br /&gt;
else if $(#i := keyword &#039;$#msgid$#msgpar&#039; keyCC keyCS) &amp;gt;= 0  then&lt;br /&gt;
&lt;br /&gt;
        //      get xgraph-object displayed in row 0 (later used to retrieve data)&lt;br /&gt;
        #obj := $#obj graph 0; instance&lt;br /&gt;
&lt;br /&gt;
        //      select the data to be saved and the save format&lt;br /&gt;
        #todo := butil msgbox userdefined Amp Frq+Amp Cancel;; $DSPExMode - $(word $#i &#039;Copy to Clipboard&#039; &#039;Save to CSV-File&#039;) &lt;br /&gt;
        if $#todo == Amp then&lt;br /&gt;
                #table := eval $($#obj get ydata)       //      use eval to get a copy of y-data&lt;br /&gt;
        else if $#todo == Frq+Amp then&lt;br /&gt;
                if &#039;$DSPExMode&#039; == DSPExAvrSpectrum then&lt;br /&gt;
                        #table := eval vmcol( $($#obj get xdata) , $($#obj get ydata) ) // merge x- and y-data into one table&lt;br /&gt;
                else&lt;br /&gt;
                        #table := eval vmcol( $($#obj get xdata) , trn($($#obj get ydata)) ) // merge x- and transposed y-data into one table&lt;br /&gt;
                end&lt;br /&gt;
        end&lt;br /&gt;
&lt;br /&gt;
        //      copy / save if table exists&lt;br /&gt;
        if $#table[?] == table then&lt;br /&gt;
                //      select target&lt;br /&gt;
                if $#i == 0 then&lt;br /&gt;
                        #file := set clipboard  // set target to &amp;quot;clipboard&amp;quot; for all copy_xxx functions&lt;br /&gt;
                else&lt;br /&gt;
                        #file := butil filedialog save; Select Output File; ; CSV=CSV-File; TXT=Textfile        //      use filedialog to select the output file&lt;br /&gt;
                end&lt;br /&gt;
&lt;br /&gt;
                //      use the CON-object to copy/save table&lt;br /&gt;
                if &#039;$#file&#039; != &#039;&#039; con savedata text; $#table; $#file; 0; comma; dot&lt;br /&gt;
                delete $#table&lt;br /&gt;
        end&lt;br /&gt;
&lt;br /&gt;
//      process Control-I (INFO) || Control-M (MAX-MEAN) keys&lt;br /&gt;
else if $(#i := keyword &#039;$#msgid$#msgpar&#039; keyCI keyCM) &amp;gt;= 0  then&lt;br /&gt;
&lt;br /&gt;
        //      get xgraph-object displayed in row 0&lt;br /&gt;
        #obj := $#obj graph 0;inst&lt;br /&gt;
&lt;br /&gt;
        //      save original graph title&lt;br /&gt;
        if &#039;$GraphTitle&#039; == &#039;&#039; GraphTitle := $#obj get title&lt;br /&gt;
&lt;br /&gt;
        if $#i == 0 then&lt;br /&gt;
                //      get and display cursor positions&lt;br /&gt;
                readstr &#039;$($#obj get cursorposition)&#039; #i1 #x1 #y1 #i2 #x2 #y2 #&lt;br /&gt;
                #text := format &#039;Index = %d .. %d,  X = %g ... %g (%g),  Y = %g ... %g (%g)&#039; $#i1 $#i2 $#x1 $#x2 abs($#x1-$#x2) $#y1 $#y2 abs($#y1-$#y2)&lt;br /&gt;
        else&lt;br /&gt;
                //      set cursor mode (on), style (crosshair), rubberline (off), bind-mode (off), bind-functionindex (0)&lt;br /&gt;
                $#obj set cursormode on crosshair off off 0&lt;br /&gt;
                //      get x- and y-data&lt;br /&gt;
                #x := $#obj get xdata&lt;br /&gt;
                #y := $#obj get ydata&lt;br /&gt;
                //      find index of maximum y value &lt;br /&gt;
                #imax := eval imax($#y[*,0])&lt;br /&gt;
                //      compute mean of x and y&lt;br /&gt;
                #xavr := eval avr($#x)&lt;br /&gt;
                #yavr := eval avr($#y)&lt;br /&gt;
                //      set cursor 1 to maximum and cursor 2 to mean&lt;br /&gt;
                $#obj set cursorpos 1 $#x[$#imax] $#y[$#imax] deselect&lt;br /&gt;
                $#obj set cursorpos 2 $#xavr $#yavr deselect&lt;br /&gt;
                //      show maximum and mean in xgraph title&lt;br /&gt;
                #text := format &#039;Maximum( %g , %g ), Average( %g , %g )&#039; $#x[$#imax] $#y[$#imax] $#xavr $#yavr&lt;br /&gt;
        end&lt;br /&gt;
        //      show info in graph title&lt;br /&gt;
        $#obj set title $GraphTitle -- $#text&lt;br /&gt;
&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
//      note: the return value of the callback function is not used by the xplot/xgraph message handler&lt;br /&gt;
exit&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
//-------------------------------------------------------------------------------------------------&lt;br /&gt;
//&lt;br /&gt;
//      DSPExLib                        Implements a set of signal processing functions which can be called with&lt;br /&gt;
//                                              &amp;quot;DSPLIBEXAMPLE functionname functionarguments&amp;quot;. This call style is often&lt;br /&gt;
//                                              used to reduce the number of macros of a script or application.&lt;br /&gt;
//&lt;br /&gt;
//      Functions:&lt;br /&gt;
//&lt;br /&gt;
//              DSPEXLIB GETSEGMENTS&lt;br /&gt;
//                      result: a list of all segments selected in the DataSet view stored in a simple&lt;br /&gt;
//                                      table (per line: &#039;setReference ; segmentId ; channelIndex&#039;)&lt;br /&gt;
//                      note:   this function shows an error message and terminates the caller if no segments&lt;br /&gt;
//                                      are selected&lt;br /&gt;
//&lt;br /&gt;
//              DSPEXLIB AVERAGESPECTRUM wave ; wtyp ; atyp&lt;br /&gt;
//                      wave            prepared xwave object&lt;br /&gt;
//                      wtyp            type of window function:        HANNING, HAMMING, KAISER, ...&lt;br /&gt;
//                      atyp            type of output spectrum:        LOGARITHMIC (=DB), POWER, LINEAR (=AMPLITUDE)&lt;br /&gt;
//                      result: an averaged fft spectrum in the selected format&lt;br /&gt;
//&lt;br /&gt;
//              DSPEXLIB SPECTROGRAM wave ; wtyp ; atyp&lt;br /&gt;
//                      wave            prepared xwave object&lt;br /&gt;
//                      wtyp            type of window function:        HANNING, HAMMING, KAISER, ...&lt;br /&gt;
//                      atyp            type of output spectrum:        LOGARITHMIC (=DB), POWER, LINEAR (=AMPLITUDE)&lt;br /&gt;
//                                                                                                      or COMPLEX&lt;br /&gt;
//                      result: a matrix of fft spectra in the selected format, one spectrum per line&lt;br /&gt;
//&lt;br /&gt;
//              DSPEXLIB FREQUENCYSCALE sr ; n ; type&lt;br /&gt;
//                      sr                      sampling rate in Hz&lt;br /&gt;
//                      n                       number of spectrum bins (equally spaced in the Hz domain)&lt;br /&gt;
//                      type            type of frequency scale:        HZ, KHZ, BARK, MEL, ERB&lt;br /&gt;
//                      result: &#039;frq unit df&#039;; frq is the frequency scale vector, unit is the frequency unit&lt;br /&gt;
//                                      name and df is the frequency scale step in Hz&lt;br /&gt;
//&lt;br /&gt;
//              DSPEXLIB AMPLITUDESCALE type&lt;br /&gt;
//                      type            type of amplitude scale:        LOGARITHMIC (=DB), POWER, LINEAR (=AMPLITUDE)&lt;br /&gt;
//                      result: &#039;name unit df&#039;; name and unit of amplitude scale&lt;br /&gt;
//&lt;br /&gt;
//-------------------------------------------------------------------------------------------------&lt;br /&gt;
[Macro DSPExLib]&lt;br /&gt;
&lt;br /&gt;
//      function call dispatching&lt;br /&gt;
readvar #argv #fun #argv /d&lt;br /&gt;
goto fun$#fun noFun&lt;br /&gt;
&lt;br /&gt;
noFun:&lt;br /&gt;
//      function not implemented&lt;br /&gt;
//      result: empty string&lt;br /&gt;
&lt;br /&gt;
        //      show an error message and exit&lt;br /&gt;
        con log &#039;$#mac function &amp;quot;$#fun&amp;quot; not implemented&#039; &lt;br /&gt;
        exit 1 set &#039;&#039;&lt;br /&gt;
&lt;br /&gt;
//-------------------------------------------------------------------------------------------------&lt;br /&gt;
funGetSegments: //      in:&lt;br /&gt;
                                //      out:    segment_list_table&lt;br /&gt;
//-------------------------------------------------------------------------------------------------&lt;br /&gt;
        //      retrieve list of selected segments from the DataSet application&lt;br /&gt;
        #segments := datasetcmd getselected segments&lt;br /&gt;
        if &#039;$#segments[?]&#039; == table &amp;amp;&amp;amp; &#039;$#segments[]&#039; &amp;gt; 0 exit 1 set $#segments&lt;br /&gt;
        butil msgbox msg ; no segments selected - select and try again; Error!&lt;br /&gt;
        if &#039;$#segments[?]&#039; == table delete $#segments&lt;br /&gt;
        exit 2 set &#039;&#039;   //      terminate this and the calling macro!&lt;br /&gt;
&lt;br /&gt;
//-------------------------------------------------------------------------------------------------&lt;br /&gt;
funAverageSpectrum:     //      in:             xwaveobject ; windowtype ; amplitudescale &lt;br /&gt;
                                        //      out:    averagespectrum_vector&lt;br /&gt;
//-------------------------------------------------------------------------------------------------&lt;br /&gt;
        //      parse arguments&lt;br /&gt;
        readvar #argv #wave&#039;;&#039;#wtyp&#039;;&#039;#atyp&#039;;&#039;#&lt;br /&gt;
&lt;br /&gt;
        //      show init message&lt;br /&gt;
        con log $#mac $(upper &#039;$#fun&#039;) - initializing&lt;br /&gt;
&lt;br /&gt;
        //      create window&lt;br /&gt;
        #w := gosub makewindow $($#wave framelength) $#wtyp&lt;br /&gt;
&lt;br /&gt;
        //      create result table &lt;br /&gt;
        #spg := new table * &lt;br /&gt;
&lt;br /&gt;
        //      compute averaged amplitude spectrum&lt;br /&gt;
        #n := $($#wave framecount)&lt;br /&gt;
        $#spg := eval cr2len ( fft ( $($#wave read) ?* $#w ) )&lt;br /&gt;
        for #i := 1 to $#i &amp;lt; $#n step #i := int $#i+1&lt;br /&gt;
                if $#i%10 == 0 con logext 0; $#mac $(upper &#039;$#fun&#039;) - $#i of $#n frames processed&lt;br /&gt;
                $#spg := eval cr2len ( fft ( $($#wave read) ?* $#w ) ) + $#spg&lt;br /&gt;
        end&lt;br /&gt;
        $#spg := eval $#spg / $#n&lt;br /&gt;
&lt;br /&gt;
        //      convert to selected output spectrum type&lt;br /&gt;
        if $(#atyp := keyword &#039;$#atyp&#039; dB logarithmic power amplitude linear) &amp;lt; 2 then&lt;br /&gt;
                $#spg := eval lin2log($#spg , $($#wave aref), 20)&lt;br /&gt;
        else if $#atyp == 2 then &lt;br /&gt;
                $#spg := eval $#spg ?^ 2&lt;br /&gt;
        end&lt;br /&gt;
&lt;br /&gt;
        //      show end message&lt;br /&gt;
        con logext 0; $#mac $(upper &#039;$#fun&#039;) - finished ($#n spectra computed)&lt;br /&gt;
&lt;br /&gt;
        //      return averaged spectrum&lt;br /&gt;
        exit 1 set $#spg&lt;br /&gt;
&lt;br /&gt;
//-------------------------------------------------------------------------------------------------&lt;br /&gt;
funSpectrogram: //      in:             xwaveobject ; windowtype ; amplitudescale &lt;br /&gt;
                                //      out:    spectrogram_matrix&lt;br /&gt;
//-------------------------------------------------------------------------------------------------&lt;br /&gt;
        //      parse arguments&lt;br /&gt;
        readvar #argv #wave&#039;;&#039;#wtyp&#039;;&#039;#atyp&#039;;&#039;#&lt;br /&gt;
&lt;br /&gt;
        //      show init message&lt;br /&gt;
        con log $#mac $(upper &#039;$#fun&#039;) - initializing&lt;br /&gt;
&lt;br /&gt;
        //      create window&lt;br /&gt;
        #w := gosub makewindow $($#wave framelength) $#wtyp&lt;br /&gt;
&lt;br /&gt;
        //      check selected output spectrum type&lt;br /&gt;
        if $(#atyp := keyword &#039;$#wtyp&#039; dB logarithmic power amplitude linear complex) &amp;lt; 5 then&lt;br /&gt;
                //      compute amplitude or power spectra&lt;br /&gt;
        &lt;br /&gt;
                //      create result table (one spectrum per line)&lt;br /&gt;
                #spg := new table * * num:x:$(int $($#wave fftlength)/2 + 1) /p&lt;br /&gt;
                //      compute amplitude spectra&lt;br /&gt;
                #n := $($#wave framecount)&lt;br /&gt;
                for #i := 0 to $#i &amp;lt; $#n step #i := int $#i+1&lt;br /&gt;
                        if $#i%10 == 0 con logext 0; $#mac $(upper &#039;$#fun&#039;) - $#i of $#n frames processed&lt;br /&gt;
                        $#spg[$#i,*] := eval cr2len ( fft ( $($#wave read) ?* $#w ) )&lt;br /&gt;
                end&lt;br /&gt;
                //      convert to selected output spectrum type&lt;br /&gt;
                if $(#atyp := keyword &#039;$#atyp&#039; dB logarithmic power amplitude linear) &amp;lt; 2 then&lt;br /&gt;
                        $#spg := eval lin2log($#spg , $($#wave aref), 20)&lt;br /&gt;
                else if $#atyp == 2 then &lt;br /&gt;
                        $#spg := eval $#spg ?^ 2&lt;br /&gt;
                end&lt;br /&gt;
&lt;br /&gt;
        else&lt;br /&gt;
                //      compute complex spectra&lt;br /&gt;
&lt;br /&gt;
                //      create result table (one spectrum per line)&lt;br /&gt;
                #spg := new table * * num:x:$(int $($#wave fftlength) + 2) /p&lt;br /&gt;
                //      compute complex spectra&lt;br /&gt;
                for #i := int $($#wave framecount) to $#i &amp;gt; 0 step #i := int $#i-1&lt;br /&gt;
                        if $#i%50 == 0 con logext 0; $#mac $(upper &#039;$#fun&#039;) - $#i of $#n frames processed&lt;br /&gt;
                        $#spg[$#i,*] := eval fft ( $($#wave read) ?* $#w )&lt;br /&gt;
                end&lt;br /&gt;
&lt;br /&gt;
        end&lt;br /&gt;
&lt;br /&gt;
        //      show end message&lt;br /&gt;
        con logext 0; $#mac $(upper &#039;$#fun&#039;) - finished ($#n spectra computed)&lt;br /&gt;
&lt;br /&gt;
        //      return spectrogram matrix&lt;br /&gt;
        exit 1 set $#spg&lt;br /&gt;
&lt;br /&gt;
//-------------------------------------------------------------------------------------------------&lt;br /&gt;
funFrequencyScale:      //      in:             samplingrate ; spectrumbins ; frequencyscale &lt;br /&gt;
                                        //      out:    frequencyscale_vector frequencyscale_unit frequency_resolution_Hz&lt;br /&gt;
//-------------------------------------------------------------------------------------------------&lt;br /&gt;
        //      parse arguments&lt;br /&gt;
        readvar #argv #sr&#039;;&#039;#n&#039;;&#039;#unit&#039;;&#039;#&lt;br /&gt;
        //      generate frequency scale equally spaced in Hz&lt;br /&gt;
        #frq := new table * // dummy table to make frq-scale permanent&lt;br /&gt;
        $#frq := eval fill($#n, 0, $(#df := eval $#sr / 2 / ($#n - 1)) )&lt;br /&gt;
        //      convert to selected scale&lt;br /&gt;
        if $(#unit := keyword &#039;$#unit&#039; Hz kHz Bark Mel ERB) &amp;lt; 0 #unit := 0&lt;br /&gt;
        if $(#unit := word $#unit Hz kHz Bark Mel ERB) == kHz then&lt;br /&gt;
                $#frq := eval $#frq / 1000&lt;br /&gt;
        else if $#unit != Hz then&lt;br /&gt;
                $#frq := eval hz2$#unit($#frq)&lt;br /&gt;
        end&lt;br /&gt;
        //      return scale settings&lt;br /&gt;
        exit 1 set &#039;$#frq $#unit $#df&#039;&lt;br /&gt;
&lt;br /&gt;
//-------------------------------------------------------------------------------------------------&lt;br /&gt;
funAmplitudeScale:      //      in:             amplitudescale &lt;br /&gt;
                                        //      out:    amplitudescale_text amplitudescale_unit&lt;br /&gt;
//-------------------------------------------------------------------------------------------------&lt;br /&gt;
        //      parse arguments&lt;br /&gt;
        readvar #argv #unit&#039;;&#039;#&lt;br /&gt;
        //      get text and unit of amplitude scale&lt;br /&gt;
        if $(#i := keyword &#039;$#unit&#039; dB logarithmic power amplitude linear) &amp;lt; 2 #i := 0&lt;br /&gt;
        #unit := word $#i dB dB - - -&lt;br /&gt;
        #text := word $#i amplitude amplitude power amplitude amplitude&lt;br /&gt;
        exit 1 set &#039;$#text $#unit&#039;&lt;br /&gt;
&lt;br /&gt;
//&lt;br /&gt;
//      local subroutines&lt;br /&gt;
//&lt;br /&gt;
&lt;br /&gt;
makeWindow:&lt;br /&gt;
        //      GOSUB MAKEWINDOW windowlength windowtype -&amp;gt; windowvector&lt;br /&gt;
        readvar #argv #wlen #wtyp # &lt;br /&gt;
        #list := hanning hamming blackman kaiser bartlett taprect nuttall flattop gauss&lt;br /&gt;
        if $(#wtyp := keyword &#039;$#wtyp&#039; $#list) &amp;lt; 0 #wtyp := 0 &lt;br /&gt;
        exit 1 eval window($#wtyp, $#wlen, 1) * 2 / $#wlen&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;/div&gt;</summary>
		<author><name>Jw</name></author>
	</entry>
	<entry>
		<id>https://mediawiki.kfs.oeaw.ac.at/stx/docs/wiki/index.php?title=Main_Page&amp;diff=10677</id>
		<title>Main Page</title>
		<link rel="alternate" type="text/html" href="https://mediawiki.kfs.oeaw.ac.at/stx/docs/wiki/index.php?title=Main_Page&amp;diff=10677"/>
		<updated>2019-11-12T08:33:11Z</updated>

		<summary type="html">&lt;p&gt;Jw: /* Download */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== {{STx}} {{VERSION}}==&lt;br /&gt;
&lt;br /&gt;
{{STX}} is a software tool for the analysis, signal processing and annotation of Wave sound files. {{STX}} runs on the Windows operating system. It was originally a port of the S_TOOLS application for dedicated DSP hardware developed at the [https://www.kfs.oeaw.ac.at Acoustics Research Institute] in the 1980s. This documentation is work in progress and by no means complete. If you fail to find something you need, please [[Contact|get in touch]] with the development team.&lt;br /&gt;
&lt;br /&gt;
=== Using {{STx}} ===&lt;br /&gt;
&lt;br /&gt;
* [[User_Guide|User Guide]]&lt;br /&gt;
* Introductory Video: [https://kfsmail.kfs.oeaw.ac.at/owncloud/index.php/s/cbMjVjgQLZGjYk8 The Compact Workspace]&lt;br /&gt;
&lt;br /&gt;
=== {{STx}} Programming ===&lt;br /&gt;
&lt;br /&gt;
* [[Programmer_Guide/STx_Guru|Starting with {{STx}} Programming]]&lt;br /&gt;
* [[Programmer_Guide|Programmer Guide]]&lt;br /&gt;
* [[Programmer_Guide/Quick_Reference|Quick Reference]]&lt;br /&gt;
&lt;br /&gt;
=== About {{STx}} {{VERSION}} ===&lt;br /&gt;
&lt;br /&gt;
* Platform: runs on Windows Vista and higher&lt;br /&gt;
* [[History of Changes]]&lt;br /&gt;
* [[Known Bugs]]&lt;br /&gt;
* [[Feature Requests]]&lt;br /&gt;
* [[Contact]]&lt;br /&gt;
* [[Running STx under Linux or macOS]]&lt;br /&gt;
&lt;br /&gt;
=== Download ===&lt;br /&gt;
&lt;br /&gt;
[https://www.kfs.oeaw.ac.at/pub/stx/stx-5.0.4.10016-freeware.exe STx 5.0.4]&lt;br /&gt;
&lt;br /&gt;
[https://www.kfs.oeaw.ac.at/pub/stx/ older releases]&lt;br /&gt;
&lt;br /&gt;
==MediaWiki Links==&lt;br /&gt;
* [[STx Documentation Style Guide|Style guide]] for documenting {{STx}} in this wiki.&lt;br /&gt;
* Consult the [http://meta.wikimedia.org/wiki/Help:Contents User&#039;s Guide] for information on using the wiki software.&lt;br /&gt;
* [http://www.mediawiki.org/wiki/Manual:Configuration_settings Configuration settings list]&lt;br /&gt;
* [http://www.mediawiki.org/wiki/Manual:FAQ MediaWiki FAQ]&lt;br /&gt;
* [https://lists.wikimedia.org/mailman/listinfo/mediawiki-announce MediaWiki release mailing list]&lt;br /&gt;
__NOTOC__&lt;/div&gt;</summary>
		<author><name>Jw</name></author>
	</entry>
	<entry>
		<id>https://mediawiki.kfs.oeaw.ac.at/stx/docs/wiki/index.php?title=Template:VERSION&amp;diff=10676</id>
		<title>Template:VERSION</title>
		<link rel="alternate" type="text/html" href="https://mediawiki.kfs.oeaw.ac.at/stx/docs/wiki/index.php?title=Template:VERSION&amp;diff=10676"/>
		<updated>2019-11-12T08:32:53Z</updated>

		<summary type="html">&lt;p&gt;Jw: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;5.0.4&lt;/div&gt;</summary>
		<author><name>Jw</name></author>
	</entry>
	<entry>
		<id>https://mediawiki.kfs.oeaw.ac.at/stx/docs/wiki/index.php?title=History_of_Changes&amp;diff=10675</id>
		<title>History of Changes</title>
		<link rel="alternate" type="text/html" href="https://mediawiki.kfs.oeaw.ac.at/stx/docs/wiki/index.php?title=History_of_Changes&amp;diff=10675"/>
		<updated>2019-11-12T08:32:18Z</updated>

		<summary type="html">&lt;p&gt;Jw: /* 5.0.3 */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;div class=&amp;quot;noautonum&amp;quot;&amp;gt;{{TOC limit|3}}&amp;lt;/div&amp;gt;&lt;br /&gt;
=5.0=&lt;br /&gt;
&lt;br /&gt;
==Features==&lt;br /&gt;
&lt;br /&gt;
===Compact Workspace Mode===&lt;br /&gt;
The Workspace now has a [[User_Guide/Workspace#Modes|compact mode]]. The compact mode is a simplified interface for new users. Although it was designed with linguists in mind, it can be used by anyone.&lt;br /&gt;
&lt;br /&gt;
===webMAUS===&lt;br /&gt;
Automatic segmentation using the [https://clarin.phonetik.uni-muenchen.de/BASWebServices/interface webMAUS] REST API. This has been implemented in the toolbox [[User_Guide/Toolbox/runMAUSBasicDlg|&amp;lt;samp&amp;gt;runMAUSBasicDlg&amp;lt;/samp&amp;gt;]].&lt;br /&gt;
&lt;br /&gt;
==Bugfixes==&lt;br /&gt;
&lt;br /&gt;
* Correctly handle corrupt Workspace file (generate new one, rather than silently exiting)&lt;br /&gt;
&lt;br /&gt;
==5.0.4==&lt;br /&gt;
&lt;br /&gt;
Released: 12th November 2019&lt;br /&gt;
&lt;br /&gt;
Revision: 10016&lt;br /&gt;
&lt;br /&gt;
* bugfix: SPExL V1.1.11. Adding new segments respects vertical drawing order. &lt;br /&gt;
* bugfix: SPExL V1.1.11. Faster deselection of segments. &lt;br /&gt;
* bugfix: Real-time waterfall axis drawing correctly&lt;br /&gt;
* bugfix: show/hide sectioner setting now respected.&lt;br /&gt;
* bugfix: sectioner height setting now respected.&lt;br /&gt;
&lt;br /&gt;
==5.0.3==&lt;br /&gt;
&lt;br /&gt;
Released: 1st October 2019&lt;br /&gt;
&lt;br /&gt;
Revision: 9967&lt;br /&gt;
&lt;br /&gt;
* feature: Signal.All is now selected by default, if no other segment is selected.&lt;br /&gt;
* feature: When exporting profiles, the present working directory is used, rather than always selecting the &#039;profiles&#039; directory. The profiles directory is only used if the present working directory is the root directory.&lt;br /&gt;
* feature: The first sound file in the project is selected by default in the compact mode.&lt;br /&gt;
* bugfix: When adding a file per drag and drop, the file is now selected.&lt;br /&gt;
* bugfix: enabling a disabled edit box now sets the background color correctly (back to white).&lt;br /&gt;
* bugfix: debugger trace window now visible in release version too&lt;br /&gt;
* bugfix: [[Programmer_Guide/Command_Reference/SYSINFO|SYSINFO]] command now supports Windows 8.1 and Windows 10 (was returning Windows 8)&lt;br /&gt;
* bugfix: SPExL V1.1.10. Playlist listview now processes listsorted message and displays sort order set by clicking a column heading. The sort order was first being displayed when clicking in the control after clicking the column heading.&lt;br /&gt;
* bugfix: The &#039;Start&#039; button should now be activated correctly in the Compact Mode.&lt;br /&gt;
&lt;br /&gt;
==5.0.2==&lt;br /&gt;
&lt;br /&gt;
Released: 19th September 2019&lt;br /&gt;
&lt;br /&gt;
Revision: 9946&lt;br /&gt;
&lt;br /&gt;
* bugfix:  The context menu Add Sound File now working from the Audio File list in the Compact Mode.&lt;br /&gt;
* feature: The possible number of plots in XPlot was increased from 64 to 128&lt;br /&gt;
&lt;br /&gt;
==5.0.0==&lt;br /&gt;
&lt;br /&gt;
Released: 12th September 2019&lt;br /&gt;
&lt;br /&gt;
Revision: 9935&lt;br /&gt;
&lt;br /&gt;
Initial release.&lt;br /&gt;
&lt;br /&gt;
=4.4=&lt;br /&gt;
&lt;br /&gt;
==Features==&lt;br /&gt;
===Transcription Script SPExL 1.1.6===&lt;br /&gt;
The transcription script SPExL has been simplified and improved.&lt;br /&gt;
* Hotkeys can be defined by the user in the SPExL_SegTrans.hotkeys file&lt;br /&gt;
* The number of available &#039;views&#039; has been reduced to 3:&lt;br /&gt;
** wave overview &amp;amp; spg. section (a waveform of the whole file in the top graph, with a section of the file as spectrogram below)&lt;br /&gt;
** wave only (a waveform of a section of the file with scrollbar functionality)&lt;br /&gt;
** wave and spg. section (a synced waveform and spectrogram of a section of the file with scrollbar functionality)&lt;br /&gt;
* Segment selection between graphs and the list are now synchronised. If you select a segment in the graph, it is selected in the list and vice versa.&lt;br /&gt;
* Changes made to the project (new segments, edited attributes) are now made directly in the project rather than the user having to explicitly press the &#039;save segments to project file&#039; button to copy them from SPExL to the Workspace. Note that they are only written to disk, however, if the project is saved (press the &#039;Save&#039; button).&lt;br /&gt;
===Visible Segment Attributes Saved per Project File===&lt;br /&gt;
If you choose to display other attributes other than the default attributes in the Workspace Detail View, these settings are now saved in the open project file. When a project file is then opened, the relevant attribute list is loaded and used, rather than the user having to [[User_Guide/Workspace/Detail/Search_for_Element_Attributes|search for them]] again. You can still modify which attributes are displayed using the General Settings [[User_Guide/Workspace/Application_and_Setup_Tree/Options/General_Settings#.22Set.22_Attributes_.26_.22Segment.22_Attributes|&#039;Select &amp;quot;Segment&amp;quot; Attributes&#039; dialog]].&lt;br /&gt;
===Global / Profile Sectioner Settings===&lt;br /&gt;
The sectioner settings in the {{Viewer2}} analysis application were always global to STx. As of STx 4.4.0, you can choose to save your sectioner settings with your profile. The default is still the &#039;global&#039; variant. To switch to profile sectioner settings, uncheck the &#039;&#039;&#039;use global sectioner settings&#039;&#039;&#039; checkbox in the {{Viewer2}} [[User_Guide/Spectrogram_and_Parameter_Viewer/Settings_Dialog|settings dialog]].&lt;br /&gt;
&lt;br /&gt;
==4.4.10==&lt;br /&gt;
&lt;br /&gt;
Released: 17th January 2019&lt;br /&gt;
&lt;br /&gt;
Revision: 9712&lt;br /&gt;
&lt;br /&gt;
* bugfix: playback gain factor - the playback gain is now working also for asio devices (see CSTXASIOEngine::Transfer())&lt;br /&gt;
* bugfix: renumbering command did not update detail as expected.&lt;br /&gt;
* bugfix: the update version dialogs now display the correct workspace path&lt;br /&gt;
&lt;br /&gt;
==4.4.9==&lt;br /&gt;
&lt;br /&gt;
Released: 25th September 2018&lt;br /&gt;
&lt;br /&gt;
Revision:&lt;br /&gt;
&lt;br /&gt;
* feature: don&#039;t ask user where to put sound file if there are no sets in the project.&lt;br /&gt;
* feature: dragging and dropping a template onto {{ST}X} copies it to the templates folder.&lt;br /&gt;
* feature: added &#039;Open Containing Folder&#039; context menu for sound files and links. Improved contextualisation of context menu in detail (overview==root/set)&lt;br /&gt;
* feature: &#039;txt2wav&#039; script: Adding decimal symbol and field delimiter to parameters, as well as the ability to specify which extension to use to filter files (was hard-coded to &#039;txt&#039;). Now this macro can be used to&lt;br /&gt;
* feature: bdataset createwave and createwwaveex now take an openmode keyword: auto|create|read|write, which is passed on to bsf open. This means that we can now open files in modes other than &#039;auto&#039;.&lt;br /&gt;
process CSV files.&lt;br /&gt;
* bugfix: very long capture text for edit controls with &#039;text above&#039; could lead to capture static being longer than the edit control and unintentionally overlapping with other controls (e.g. in Transcription Setup dialog).&lt;br /&gt;
* bugfix: closing con log window no longer resets PARENT shell variable, unless it is set the the con log window itself.&lt;br /&gt;
* bugfix: sound files now opened using the FILE_SHARE_READ dwShareMode. This should mean, that STx no longer prevents other processes from reading the sound files. &lt;br /&gt;
* bugfix: viewer opens sound file in read mode, rather than read/write.&lt;br /&gt;
* bugfix: the !PATH attribute (MakePath()) now returns the correct path for files in the root of a drive. Bug was introduced in r8998 (STx 4.2.19). This was, for example, was causing sound files in the root directory not to be unloaded, and hence was causing sharing violations.&lt;br /&gt;
&lt;br /&gt;
==4.4.8==&lt;br /&gt;
&lt;br /&gt;
Released: 25th July 2018&lt;br /&gt;
&lt;br /&gt;
Revision: 9500&lt;br /&gt;
&lt;br /&gt;
* feature: Spectrogram &amp;amp; Parameters viewer sectioner window now remembers which function cursor is bound to when being replotted.&lt;br /&gt;
* feature: The &amp;lt;samp&amp;gt;downsampling.sts&amp;lt;/samp&amp;gt; script now has a &amp;lt;samp&amp;gt;ResampleCLI&amp;lt;/samp&amp;gt; macro for automatic resampling of one or more files (see source). The old &amp;lt;samp&amp;gt;ResampleDialog&amp;lt;/samp&amp;gt; was renamed to &amp;lt;samp&amp;gt;ResampleDLG&amp;lt;/samp&amp;gt;.&lt;br /&gt;
* feature: Adding help for &amp;quot;Import_PRAAT_TextGrid&amp;quot; toolbox.&lt;br /&gt;
* feature: Adding ability to edit &#039;Sectioner Settings&#039; from the profile dialog. &lt;br /&gt;
* feature: Transcription 1.1.8 - removed segment &#039;refresh&#039; button, since segments always reflect current project state.&lt;br /&gt;
* bugfix: a window that was maximised will now be maximised to the correct monitor. It was always being maximised to monitor 1 on display creation.&lt;br /&gt;
* bugfix: the profile version number is now imported with the profile. This means that, for example, the use global profile settings flag is now also set correctly on import.&lt;br /&gt;
* bugfix: minor fix of position of two controls which were overlapping with controls beneath&lt;br /&gt;
* bugfix: stop playback cursor if wave is stopped by starting playback in another graph. Beforehand, the playback cursor was stopped if it got to the end, or the ESC key was pressed.&lt;br /&gt;
* bugfix: Y coordinate vector conversion was inaccurate by 1 pixel (bug introduced in r2536) This affects the XY, parameter, scatter, wave and waterfall functions.&lt;br /&gt;
&lt;br /&gt;
==4.4.6==&lt;br /&gt;
&lt;br /&gt;
Released: 21. March 2018&lt;br /&gt;
&lt;br /&gt;
Revision: 9441&lt;br /&gt;
&lt;br /&gt;
* bugfix: some bugfixes and minor changes in BSeq &lt;br /&gt;
* bugfix: BScript: logging of unhandled messages in msg-loop disabled // Conlog: /ton and /toff options implemented (timer on/off + show elapsed time) &lt;br /&gt;
* bugfix: Viewer3 settings now being saved (bug introduced in r9318 - STx 4.4.0)&lt;br /&gt;
* bugfix CShellFile::Status() - catch CTime exception if file time is illegal (avoid program crash)&lt;br /&gt;
&lt;br /&gt;
==4.4.5==&lt;br /&gt;
&lt;br /&gt;
Released: 19. February 2018&lt;br /&gt;
&lt;br /&gt;
Revision: 9416&lt;br /&gt;
&lt;br /&gt;
* bugfix: in Viewer2 large asegtemplates (with many fields) are now displayed correctly - note: the same problem exists in Viewer1 if the segment dialog part (created by the macro call &amp;quot;&amp;quot;metasegment msdialog&amp;quot;) needs more than 90 controls (around 40 segment attributes)&lt;br /&gt;
* feature: the bscript.stx function loaddata (con loaddata) can now also load string tables (extenden tables) from csv-files. The file types TEXT/TEXTCONTINUATION (numeric parameter table), STRING/STRINCONTINUATION (extended string table) and BINARY (binary stx-data files) are available. Type ASCII/ASCIICONTINUATION has been removed.&lt;br /&gt;
* feature: new feature (bugfix?): CShellTable::Read() - handling of field-separator tab has been changed - empty fields are now possible - warning: may have an effect on existing script/macro code!&lt;br /&gt;
&lt;br /&gt;
==4.4.4==&lt;br /&gt;
&lt;br /&gt;
Released: 26. January 2018&lt;br /&gt;
&lt;br /&gt;
Revision: 9404&lt;br /&gt;
&lt;br /&gt;
* bugfix: combobox entries with underliners retain their underliners now in the workspace detail (reported by Anton Baotic), and in Spexl.&lt;br /&gt;
&lt;br /&gt;
==4.4.3==&lt;br /&gt;
&lt;br /&gt;
Released: 18. December 2017&lt;br /&gt;
&lt;br /&gt;
Revision: 9391&lt;br /&gt;
&lt;br /&gt;
* bugfix: adding missing Transcription hotkey file and retisimo scripts&lt;br /&gt;
&lt;br /&gt;
==4.4.2==&lt;br /&gt;
&lt;br /&gt;
Released: 30. November 2017&lt;br /&gt;
&lt;br /&gt;
Revision: 9377&lt;br /&gt;
&lt;br /&gt;
* bugfix: SPExL Transcription script V1.1.7: the /U ASegTemplate flag is now respected, and, if used, the last entered value for a segment attribute is used as the default for the next new segment.&lt;br /&gt;
* bugfix: default profile names no longer have the invalid blank character in them. A check was also added, so new profiles cannot be created with blanks.&lt;br /&gt;
&lt;br /&gt;
==4.4.1==&lt;br /&gt;
&lt;br /&gt;
Released: 23. November 2017&lt;br /&gt;
&lt;br /&gt;
Revision: 9369&lt;br /&gt;
&lt;br /&gt;
* bugfix: if zooming is turned off in {{Viewer2}}, segments are now correctly visible on the Y axis. This bug has existed since at least STx 4.2.&lt;br /&gt;
&lt;br /&gt;
==4.4.0==&lt;br /&gt;
&lt;br /&gt;
Released: 14 November 2017&lt;br /&gt;
&lt;br /&gt;
Revision: 9350&lt;br /&gt;
&lt;br /&gt;
Initial release.&lt;br /&gt;
&lt;br /&gt;
=4.3=&lt;br /&gt;
&lt;br /&gt;
==Features==&lt;br /&gt;
====Load or export parameters from super or sub segments====&lt;br /&gt;
Parameters from super segments or from sub segments can now be loaded into the selected segment. For example, if you have analysed a word and corrected the parameters, you can use these corrected parameters when viewing phoneme segments within the word. This is achieved by selecting &#039;super segment data only&#039; setting in the Viewer settings [[User_Guide/Spectrogram_and_Parameter_Viewer/Settings_Dialog#Parameter_IO_Configuration|Parameter IO Configuration]] dialog.&lt;br /&gt;
&lt;br /&gt;
It is possible to select which super/sub segment parameters should be used, filtering by time, attribute or ID.&lt;br /&gt;
&lt;br /&gt;
This feature is also available in the parameter export dialog.&lt;br /&gt;
&lt;br /&gt;
====Parameter setting summary====&lt;br /&gt;
A summary of the settings used for parameter analysis is now saved with the parameter in the project file. This information is displayed in the [[User_Guide/Workspace/Detail/Views/Parameter_View|Parameter View]].&lt;br /&gt;
&lt;br /&gt;
====Exact sample positioning in {{Viewer2}}====&lt;br /&gt;
&lt;br /&gt;
You can now select a position in the [[User_Guide/Spectrogram_and_Parameter_Viewer#Waveform_zoom_window|Waveform Zoom window]] in {{Viewer2}} and move the active time cursor to that position using the hotkey &#039;1&#039;. This is useful for exact positioning of the time cursors when segmenting, for example, words.&lt;br /&gt;
&lt;br /&gt;
==4.3.10==&lt;br /&gt;
&lt;br /&gt;
Released: 26. January 2018&lt;br /&gt;
&lt;br /&gt;
Revision: 9407&lt;br /&gt;
*bugfix: do not allow user to give a profile a name including blanks.&lt;br /&gt;
*bugfix: renaming spectrum profiles (removing blanks)&lt;br /&gt;
*bugfix: the correct most recently entered value in a listctrl is now saved (not the last in the list).&lt;br /&gt;
*bugfix: passing delete, insert and back keys to static control.&lt;br /&gt;
*bugfix: &#039;spexl*.hotkeys.default&#039; &#039;retisimo.sts&#039; &#039;retisimo_*.sts&#039; &#039;HRTF_II_new.txt&#039; &#039;downsample.sts&#039; files are now being copied too (bug introduced in r8789)&lt;br /&gt;
*bugfix: removing extraneous / from Editing segments help URL&lt;br /&gt;
*bugfix: combobox entries with underliners retain their underliners now in the workspace detail (reported by Anton Baotic), and in Spexl.&lt;br /&gt;
&lt;br /&gt;
==4.3.9==&lt;br /&gt;
&lt;br /&gt;
Released: 23. November 2017&lt;br /&gt;
&lt;br /&gt;
Revision: 9363&lt;br /&gt;
&lt;br /&gt;
* bugfix: if zooming is turned off in {{Viewer2}}, segments are now correctly visible on the Y axis. This bug has existed since at least STx 4.2.&lt;br /&gt;
&lt;br /&gt;
==4.3.8==&lt;br /&gt;
&lt;br /&gt;
Released: 14. November 2017&lt;br /&gt;
&lt;br /&gt;
Revision: 9347&lt;br /&gt;
&lt;br /&gt;
* bugfix: zooming and replotting in the xplot class now working&lt;br /&gt;
* feature: user is now informed about bugfixes in current release, and/or new major/minor releases. This means that you will be informed of bug fixes for your version of STx, not just for the newest STx.&lt;br /&gt;
&lt;br /&gt;
==4.3.7==&lt;br /&gt;
&lt;br /&gt;
Released: 19. October 2017&lt;br /&gt;
&lt;br /&gt;
Revision: 9328&lt;br /&gt;
&lt;br /&gt;
* bugfix: stx no longer crashing on y zoom (bug introduced in r9293 - STx 4.3.6)&lt;br /&gt;
* bugfix: binary_file_example.sts now working&lt;br /&gt;
* bugfix: if navigating in file dialog using the keyboard, the edit box is now updated with the selected file.&lt;br /&gt;
&lt;br /&gt;
==4.3.6==&lt;br /&gt;
&lt;br /&gt;
Released 25. September 2017&lt;br /&gt;
&lt;br /&gt;
Revision: 9297&lt;br /&gt;
&lt;br /&gt;
* bugfix: the spectrogram dataset now frees up memory once dataset is drawn&lt;br /&gt;
* bugfix: adding specials folder to installer&lt;br /&gt;
&lt;br /&gt;
==4.3.5==&lt;br /&gt;
&lt;br /&gt;
Released: 6. September 2017&lt;br /&gt;
&lt;br /&gt;
Revision: 9286&lt;br /&gt;
&lt;br /&gt;
* bugfix: auto-saving the project file no longer leaks memory&lt;br /&gt;
* bugfix: editing segments in the workspace now uses the segment template by default&lt;br /&gt;
* bugfix: a backup copy of the project file is now made when saving&lt;br /&gt;
* bugfix: lists with one item are now selectable with the keyboard&lt;br /&gt;
* bugfix: listview column width now calculated with correct font&lt;br /&gt;
* bugfix: default values from aseg templates now written to new segment before editing&lt;br /&gt;
* bugfix: correct default value written to segment, even if attribute value starts with a number&lt;br /&gt;
* bugfix: combobox entries no longer replacing underlines&lt;br /&gt;
&lt;br /&gt;
==4.3.4==&lt;br /&gt;
&lt;br /&gt;
Released: 3. July 2017&lt;br /&gt;
&lt;br /&gt;
Revision: 9214&lt;br /&gt;
&lt;br /&gt;
====Features====&lt;br /&gt;
* feature: the [[Programmer_Guide/Macro_Library/CONLOG|conlog]] command can now log to a file.&lt;br /&gt;
====Bug Fixes====&lt;br /&gt;
* bugfix: the conlog savedata command no longer fails silently if the file cannot be created.&lt;br /&gt;
&lt;br /&gt;
==4.3.3==&lt;br /&gt;
&lt;br /&gt;
Released: 19. June 2017&lt;br /&gt;
&lt;br /&gt;
Revision: 9185&lt;br /&gt;
&lt;br /&gt;
====Bug Fixes====&lt;br /&gt;
* bugfix: segment address in the Transcription script is now rounded to 10th of a millisecond (4 decimal places) rather than 1 millisecond.&lt;br /&gt;
* bugfix: saving the project file now resets the automatic save timer.&lt;br /&gt;
* bugfix: the Transcription, Import Word List and Reorder Word List should now be working correctly again.&lt;br /&gt;
====Features====&lt;br /&gt;
* feature: new script: [[User_Guide/Scripts/Anonymize.sts|Anonymize.sts]] - anonymize segments (attributes and signal) - requested by the ARI phonetics group&lt;br /&gt;
* feature: adding option to automatically save every minute.&lt;br /&gt;
&lt;br /&gt;
==4.3.2==&lt;br /&gt;
&lt;br /&gt;
Released: 13. June 2017&lt;br /&gt;
&lt;br /&gt;
Revision: 9170&lt;br /&gt;
&lt;br /&gt;
====Bug Fixes====&lt;br /&gt;
* bugfix: The segment &#039;Signal.All&#039; is now created when a new sound file is imported. This bug was introduced in version 4.3.1.&lt;br /&gt;
* bugfix: the &#039;wave-only&#039; view in the Transcription script is now available again.&lt;br /&gt;
&lt;br /&gt;
==4.3.1==&lt;br /&gt;
&lt;br /&gt;
Released: 8. June 2017&lt;br /&gt;
&lt;br /&gt;
Revision: 9165&lt;br /&gt;
&lt;br /&gt;
====Bug Fixes====&lt;br /&gt;
&lt;br /&gt;
* bugfix: clicking SPExL graph whilst editing segment in the segment list now draws the segment in the graph (previously needed an explicit refresh to draw the segment).&lt;br /&gt;
* bugfix: the workspace is now saved even if the path contains spaces (bug introduced in r8843)&lt;br /&gt;
* bugfix: searching using keyboard in listctrl now working in correct order (not backwards). Bug introduced in r9002.&lt;br /&gt;
* bugfix: zooming out in SPExL on the y axis with Ctrl+Subtract is now working correctly. This appears to have been around since at least r4442 (STx 3.9)&lt;br /&gt;
* bugfix: y position of cursors is now retained when zooming&lt;br /&gt;
* bugfix: Viewers/SPEXL create segments at selected address and not with P=0 and L=0&lt;br /&gt;
* bugfix: maximising whilst spectrogram is drawing no longer leaves the spectrogram in unfinished version on screen (set new &#039;m_bRecalculate&#039; flag to force recalculation/redraw when dataset sync has finished).&lt;br /&gt;
&lt;br /&gt;
==4.3.0==&lt;br /&gt;
&lt;br /&gt;
Released: April 2017&lt;br /&gt;
&lt;br /&gt;
Revision: 9149&lt;br /&gt;
&lt;br /&gt;
=Older Versions=&lt;br /&gt;
&lt;br /&gt;
==4.2==&lt;br /&gt;
====4.2.23====&lt;br /&gt;
Released: 24 August 2017&lt;br /&gt;
Revision: 9264&lt;br /&gt;
* BUGFIX: correct font used for calculation of formant dialog column size in {{Viewer2}}&lt;br /&gt;
&lt;br /&gt;
====4.2.22====&lt;br /&gt;
Released: 25 January 2017&lt;br /&gt;
Revision: 9064&lt;br /&gt;
* BUGFIX: The following wildcard string comparison will now match:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
if &#039;*ha&#039; =SI &#039;haha&#039; then&lt;br /&gt;
   // it&#039;s a match :-)&lt;br /&gt;
end&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
* BUGFIX: Changed behavior of comparisons in FIND-TABLE/XML: if a field/attribute is not defined all &amp;quot;notequal&amp;quot; and &amp;quot;notmatching&amp;quot; operators evaluates to &amp;quot;true&amp;quot; and all others to &amp;quot;false&amp;quot;&lt;br /&gt;
&lt;br /&gt;
====4.2.21====&lt;br /&gt;
Released: 9 January 2017&lt;br /&gt;
Revision: 9023&lt;br /&gt;
* BUGFIX: Edit segment dialog now referencing correct segment attributes (bug introduced in r8852 - STx 4.2.15)&lt;br /&gt;
&lt;br /&gt;
====4.2.20====&lt;br /&gt;
Released: 23 December 2016&lt;br /&gt;
* FEATURE: STx now informs the user of available update via the About dialog.&lt;br /&gt;
* BUGFIX: Removing non-existent files from STX.INI when loading&lt;br /&gt;
* BUGFIX: About dialog no long blocking workspace file.&lt;br /&gt;
&lt;br /&gt;
====4.2.19====&lt;br /&gt;
Released: 12th December 2016&lt;br /&gt;
* BUGFIX: Ctrl+U no longer the same as Ctrl+Shift+U in, e.g., signal view.&lt;br /&gt;
* BUGFIX: Generating correct hotkey string for Ctrl+Shift+&amp;lt;key&amp;gt;&lt;br /&gt;
* BUGFIX: Switching from long to short list of segments in the workspace should no longer lead to a blank detail.&lt;br /&gt;
* BUGFIX: Transcription left cursor right bitmap now correct image&lt;br /&gt;
* BUGFIX: Fixed bug in Viewer2 where setting the range did not work under all circumstances.&lt;br /&gt;
* BUGFIX: Focus moving with selection for listview key navigation and single selection.&lt;br /&gt;
* BUGFIX: Copy attributes in the Workspace overview now includes first value (bug introduced in r8297)&lt;br /&gt;
* BUGFIX: Checkbox size increased because some strings were being cut off.&lt;br /&gt;
* BUGFIX: Show Find Dialog menu now checked if Show Find Dialog is visible&lt;br /&gt;
* BUGFIX: Occasional crash in {{Viewer2}} fixed by removing use of static with CString (r9010,r9012).&lt;br /&gt;
&lt;br /&gt;
====4.2.18====&lt;br /&gt;
Released: 27 October 2016&lt;br /&gt;
&lt;br /&gt;
* FEATURE: adding PCM info to edit sound file dialog for editing existing project files too.&lt;br /&gt;
* FEATURE/BUGFIX: Improved listview keyboard handling (up/down, page up, page down). Disabled scrolling of listview whilst editing.&lt;br /&gt;
* BUGFIX: viewer2 no longer hangs if saved rmsb-data are loaded and displayed with autoscale-option&lt;br /&gt;
* BUGFIX: detail sequence view now using Ctrl+Shift+U to move selected entry up and Ctrl+Shift+D to move selected entry down (rather than Ctrl+UP and Ctrl+Down - which conflict with internal listview keyboard handling).&lt;br /&gt;
* BUGFIX: bscript log window no longer jumps in front of SPExL window when a dialog is opened.&lt;br /&gt;
* FEATURE: releases are now digitally signed by the Österreichische Akademie der Wissenschaften&lt;br /&gt;
* NOTE: the pole-zero sectioner in the {{Viewer2}} application is extremely slow for high frame rates. We are working on improving it.&lt;br /&gt;
&lt;br /&gt;
====4.2.17====&lt;br /&gt;
Released: 26 September 2016&lt;br /&gt;
* BUGFIX: Transcription (SPExL) segment list handling working correctly again (bug introduced in 4.2.16)&lt;br /&gt;
* BUGFIX: Moving selected sequence entry up/down with keyboard now uses the hotkeys Ctrl+Shift+U and Ctrl+Shift+D (rather than Ctrl+Up and Ctrl+Down) and now works as expected.&lt;br /&gt;
&lt;br /&gt;
====4.2.16====&lt;br /&gt;
Released: 30 August 2016&lt;br /&gt;
* Support for Windows XP has been removed.&lt;br /&gt;
* FEATURE: the XPLOT member &amp;quot;FORALLGRAPHS&amp;quot; is now a public function.&lt;br /&gt;
* FEATURE: the XGRAPH function Zoom -&amp;gt; X-Sync was aded to apply the x-zoom of the current graph across all other graphs.&lt;br /&gt;
* BUGFIX: the Automatic Segment Names dialog no longer allows invalid segment names.&lt;br /&gt;
* BUGFIX: The palette import/export are working again.&lt;br /&gt;
* BUGFIX: The Application and Setup tree now correctly stores it&#039;s state.&lt;br /&gt;
* BUGFIX: Keyboard focus no longer disappears after pressing enter in the Workspace Detail.&lt;br /&gt;
* BUGFIX: The selected entry no longer centers itself after editing.&lt;br /&gt;
* BUGFIX: The Transcription script SPExL now plays single selections every time (not every second time).&lt;br /&gt;
* BUGFIX: Tabbing through the entries in the Workspace Detail no longer goes backwards instead of forwards.&lt;br /&gt;
&lt;br /&gt;
====4.2.15====&lt;br /&gt;
Released: unreleased&lt;br /&gt;
* FEATURE: Improved sound file export performance&lt;br /&gt;
* BUGFIX: The File-&amp;gt;Workspace-&amp;gt;Save As workspace menu command is now working (bug introduced in r4092)&lt;br /&gt;
* BUGFIX: parameter and function now drawing (invalidating) correctly if being set whilst zoomed in.&lt;br /&gt;
* BUGFIX: parameter export dialog no longer needs manual refresh (group box is now transparent - uses WS_EX_TRANSPARENT)&lt;br /&gt;
&lt;br /&gt;
====4.2.14====&lt;br /&gt;
Released: 18 January 2016&lt;br /&gt;
* Minimising GDI use&lt;br /&gt;
* Projects files are now associated with {{STX}}&lt;br /&gt;
* BUGFIX: one memory leak fixed&lt;br /&gt;
* BUGFIX: all help menus associated with mediawiki online help&lt;br /&gt;
====4.2.13====&lt;br /&gt;
Released: 22 December 2015&lt;br /&gt;
* Default help file now the STx Wiki ([https://www.kfs.oeaw.ac.at/stx/docs/wiki/ https://www.kfs.oeaw.ac.at/stx/docs/wiki/]).&lt;br /&gt;
* BUGFIX: Find Segments dialog no longer uses ASet search criteria for ASeg search criteria when ASeg criteria is empty&lt;br /&gt;
* BUGFIX: Find Segments dialog can now search for segments within a time range.&lt;br /&gt;
* BUGFIX: assigning number values to an integer field using table[,field] := eval $#num1 + $#num2 syntax now works&lt;br /&gt;
* BUGFIX: growing table by assigning no longer corrupts heap.&lt;br /&gt;
*BUGFIX: force context menu to display within dialog window, even if called directly from shell with 0,0 coordinates.&lt;br /&gt;
*BUGFIX: edit segment dialog is now initialised with the segment channel&lt;br /&gt;
*BUGFIX: context menu now rebuilt before being displayed to ensure that it reflects current state.&lt;br /&gt;
&lt;br /&gt;
====4.2.12====&lt;br /&gt;
Released: 4 December 2015&lt;br /&gt;
* Improved spectrogram &#039;overview&#039; visualisation.&lt;br /&gt;
&lt;br /&gt;
====4.2.11====&lt;br /&gt;
&lt;br /&gt;
Released: 16 November 2015&lt;br /&gt;
&lt;br /&gt;
* Added pole-zero to {{Viewer2}} Sectioner&lt;br /&gt;
* Bugfix: pane sizes are no longer reset in {{V2}} when sectioner settings dialog is closed.&lt;br /&gt;
* Bugfix: list view control header now correct size and clickable, and entries now selectable with one, rather than two clicks.&lt;br /&gt;
* Bugfix: copied attributes are no longer preceded by blank line&lt;br /&gt;
&lt;br /&gt;
====4.2.9====&lt;br /&gt;
&lt;br /&gt;
Released: 16 October 2015&lt;br /&gt;
&lt;br /&gt;
* Bugfix: saving to PNG working again&lt;br /&gt;
&lt;br /&gt;
====4.2.8====&lt;br /&gt;
&lt;br /&gt;
Released: 5 October 2015&lt;br /&gt;
&lt;br /&gt;
* Bugfix: the pole-zero method spectrogram overlay is now working correctly.&lt;br /&gt;
&lt;br /&gt;
====4.2.5====&lt;br /&gt;
&lt;br /&gt;
Released: 30 September 2015&lt;br /&gt;
&lt;br /&gt;
* Feature: the pole-zero method is now available as an overlay in the spectrogram and parameter viewer&#039;s spectrogram graph. Note however, that this is not bug free, so please wait for 4.2.6 if you&#039;re interested in this feature.&lt;br /&gt;
&lt;br /&gt;
====4.2.4====&lt;br /&gt;
&lt;br /&gt;
Released: 10 September 2015&lt;br /&gt;
&lt;br /&gt;
* Bugfix: added missing Visual C++ 2013 Redistributable Package&lt;br /&gt;
&lt;br /&gt;
====4.2.3====&lt;br /&gt;
&lt;br /&gt;
Released: 26 August 2015&lt;br /&gt;
&lt;br /&gt;
* Metasegment size modification now locks modification mode&lt;br /&gt;
&lt;br /&gt;
====4.2.2====&lt;br /&gt;
&lt;br /&gt;
Released: 15 June 2015&lt;br /&gt;
&lt;br /&gt;
* Viewer print font now legible&lt;br /&gt;
&lt;br /&gt;
====4.2.0====&lt;br /&gt;
&lt;br /&gt;
Released: February 2015&lt;br /&gt;
&lt;br /&gt;
=====Features=====&lt;br /&gt;
&lt;br /&gt;
* The speed of audio playback can now be set in the project interface&lt;br /&gt;
* The menu shell item has been given the alias &#039;DIALOG&#039; and will now be refered to as such in the documentation (r8578)&lt;br /&gt;
* Pole-Zero [[Programmer_Guide/SPU_Reference/PZTF|SPAtom]] and [[Programmer Guide/Command Reference/EVAL/pztf|EVAL]] methods are now available and are integrated into the [[User_Guide/Spectrogram_and_Parameter_Viewer/Methods/Polezero|Spectrogram and Parameter viewer]].&lt;br /&gt;
* Support for Windows 2000/XP has been removed&lt;br /&gt;
* Pole-Zero SPU and EVAL methods&lt;br /&gt;
* Multiple bug fixes&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==4.0==&lt;br /&gt;
&lt;br /&gt;
===4.0.0===&lt;br /&gt;
&lt;br /&gt;
Released: 2012&lt;br /&gt;
&lt;br /&gt;
==3.9==&lt;br /&gt;
&lt;br /&gt;
3.9.4&lt;br /&gt;
&lt;br /&gt;
Released: 15th October 2009&lt;br /&gt;
&lt;br /&gt;
* BUGFIX: real-time analyser drawing more smoothly&lt;br /&gt;
&lt;br /&gt;
3.9.3&lt;br /&gt;
&lt;br /&gt;
Released: 16th September 2009&lt;br /&gt;
&lt;br /&gt;
* BUGFIX: sequences now being saved.&lt;br /&gt;
&lt;br /&gt;
3.9.2&lt;br /&gt;
&lt;br /&gt;
Released: 30th July 2009&lt;br /&gt;
&lt;br /&gt;
* BUGFIX: segments no longer duplicated in un-linked datasets when importing metadata.&lt;br /&gt;
* BUGFIX: user-defined amplitude range working in waveform viewer&lt;br /&gt;
* BUGFIX: spectrogram amplitude floor now correct after using settings dialog&lt;br /&gt;
* BUGFIX: recorder application now recording&lt;br /&gt;
&lt;br /&gt;
3.9.1&lt;br /&gt;
&lt;br /&gt;
Released: 3rd July 2009&lt;br /&gt;
&lt;br /&gt;
* BUGFIX: cmenu check/uncheck working for consecutive items&lt;br /&gt;
* BUGFIX: text files items and the load command can now read files encoded with an &amp;quot;FE FF&amp;quot; byte order mark (encoded in UTF-16BE). The error message &amp;quot;unsupported byte order mark&amp;quot; is returned if a UTF-32BE or UTF-32LE byte order mark is found.Supported encodings specified using a byte order mark: UTF-8, UTF-16LE, UTF-16BE&amp;lt;br /&amp;gt; Other supported encodings:windows-1252&lt;br /&gt;
* BUGFIX: wave files with chunks defined after the data chunk now have the correct length.&lt;br /&gt;
* BUGFIX: saving dataset faster&lt;br /&gt;
* BUGFIX: &amp;quot;load soundfile&amp;quot; options should no longer conflict with each other&lt;br /&gt;
* BUGFIX: prevent stack overflow in XML files with many siblings (~ 20000)&lt;br /&gt;
* BUGFXI: closing rtanalyser whilst it is running now exits shell correctly (without leaving ghost process).&lt;br /&gt;
&lt;br /&gt;
3.9.0&lt;br /&gt;
&lt;br /&gt;
Released: 15th April 2009&lt;br /&gt;
&lt;br /&gt;
Graphical User Interface&lt;br /&gt;
&lt;br /&gt;
General&lt;br /&gt;
&lt;br /&gt;
S_TOOLS-STx now supports all fonts available on the host system.&lt;br /&gt;
&lt;br /&gt;
Comboboxes in ASegTemplates can now be made editable using the flag &amp;lt;span class=&amp;quot;stxmacrocommandoption-character&amp;quot;&amp;gt;/E&amp;lt;/span&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
You can enable/disable runtime error reporting in the Log Control dialog. It is disabled by default, and should only be enabled if you are having problems with S_TOOLS-STx.&lt;br /&gt;
&lt;br /&gt;
Workspace&lt;br /&gt;
&lt;br /&gt;
The segment list can now be edited in the Workspace.&lt;br /&gt;
&lt;br /&gt;
A summary of existing parameters can now be displayed in the segment list (see the Display and Layout Settings dialog).&lt;br /&gt;
&lt;br /&gt;
The Workspace Detail cells can now display text in multiple lines (see the Display and Layout Settings dialog).&lt;br /&gt;
&lt;br /&gt;
Spectrogram &amp;amp;amp; Parameters Viewer&lt;br /&gt;
&lt;br /&gt;
The Spectrogram &amp;amp;amp; Parameters Viewer can now display a harmonic cursor in the spectrogram graph.&lt;br /&gt;
&lt;br /&gt;
The Spectrogram &amp;amp;amp; Parameters Viewer spectrogram method Wavelet has been extended, and a new Cohen&#039;s class distribution method has been implemented.&lt;br /&gt;
&lt;br /&gt;
An amplitude legend is now available in spectrogram plots (via the context menu).&lt;br /&gt;
&lt;br /&gt;
DSP&lt;br /&gt;
&lt;br /&gt;
The band-pass filters now have a window parameter.&lt;br /&gt;
&lt;br /&gt;
Toolbox&lt;br /&gt;
&lt;br /&gt;
The toolbox AutoSeg is available in Spectrogram &amp;amp;amp; Parameters Viewer (if loaded) to automatically segment using peaks, clicks or pauses.&lt;br /&gt;
&lt;br /&gt;
A range of Klatt speech synthesis and resynthesis toolbox functions are available.&lt;br /&gt;
&lt;br /&gt;
The toolbox file &#039;SegmentImEx.sts&#039; implements toolbox functions to import and export segments in the [http://www.fon.hum.uva.nl/praat/ PRAAT] file format. These functions are available in the Workspace.&lt;br /&gt;
&lt;br /&gt;
Scripts&lt;br /&gt;
&lt;br /&gt;
A script specifically designed for transcription and annotation has been developed and included in the default installation of S_TOOLS-STx. The script can be found in the script directory in the file SPExL.sts. There is also a new entry called transcription in the Workspace script tree, which calls the default segmentation routine. The SPExL macro documentation is still being written.&lt;br /&gt;
&lt;br /&gt;
Macro Language&lt;br /&gt;
&lt;br /&gt;
General&lt;br /&gt;
&lt;br /&gt;
Modal window handling has now been moved to the NEW DISPLAY command. Use the option &amp;lt;span class=&amp;quot;stxmacrocommandoption-character&amp;quot;&amp;gt;/O=$#ownerDisplay&amp;lt;/span&amp;gt; to set the owner (which is behind the new display in the z-order. You may also use the option &amp;lt;span class=&amp;quot;stxmacrocommandoption-character&amp;quot;&amp;gt;/Modal&amp;lt;/span&amp;gt; to specify that the owner should be disabled whilst the new display exists.&lt;br /&gt;
&lt;br /&gt;
The NEW command can create objects which are protected from deletion (option &amp;lt;span class=&amp;quot;stxmacrocommandoption-character&amp;quot;&amp;gt;/U|u&amp;lt;/span&amp;gt;).&lt;br /&gt;
&lt;br /&gt;
The command STXCONSTANTS now supports the keywords BITMAPS and BUTTONS.&lt;br /&gt;
&lt;br /&gt;
The command TRANSLATE can now translate the contents of a variable or table.&lt;br /&gt;
&lt;br /&gt;
The command EXIT -xLevel now returns to the first macro defining the label label &amp;quot;OnExitAll&amp;quot; or to the toplevel macro (1st called macro) (rather than to the first macro where the variable #EXITLEVEL = xLevel).&lt;br /&gt;
&lt;br /&gt;
The new command TOKEN, an extended form of the command WORD, can tokenise a string using the specified delimiter.&lt;br /&gt;
&lt;br /&gt;
The new command TRIM can be used to trim characters from the beginning and end of a string.&lt;br /&gt;
&lt;br /&gt;
The new command QUOTE can quote all special characters in a string.&lt;br /&gt;
&lt;br /&gt;
The new command LINELENGTH, although similar to LENGTH, returns the length of a line including delimiters.&lt;br /&gt;
&lt;br /&gt;
The NAME command can now check XML attributes and S_TOOLS-STx XML IDs for syntactical validity. The NAME command can also return a UNC file name for a file on a mapped drive. This is useful, for example, for making DataSets portable in a network environment.&lt;br /&gt;
&lt;br /&gt;
The new command ARG can be used to retrieve macro arguments.&lt;br /&gt;
&lt;br /&gt;
The IREF command supports the option &amp;lt;span class=&amp;quot;stxmacrocommandoption-character&amp;quot;&amp;gt;/I&amp;lt;/span&amp;gt; to simplify and suppress certain error messages.&lt;br /&gt;
&lt;br /&gt;
The global variable @REPORTRUNTIMEERRORS can be set to 1 to display a dialog every time a error occurs when processing a command. Many commands can now take an option specifying that warnings should be generated, rather than errors (DRIVE, LOAD, UNLOAD, SET file LOAD|SAVE|STATUS|DELETE|RENAME|COPY|POSITION), READ, SEGMENT). If set to specify warnings, they will not cause a runtime error.&lt;br /&gt;
&lt;br /&gt;
The READ command (and its variants READSTR, READTAB and READVAR) have a new option &amp;lt;span class=&amp;quot;stxmacrocommandoption-character&amp;quot;&amp;gt;/E&amp;lt;/span&amp;gt; which can be used to escape characters in the input from being used as separators.&lt;br /&gt;
&lt;br /&gt;
Format strings can now add a new line character (\n), using the tag %n. The standard C format tags %x and %X are now supported.&lt;br /&gt;
&lt;br /&gt;
The KEYWORD command now supports the option &amp;lt;span class=&amp;quot;stxmacrocommandoption-character&amp;quot;&amp;gt;/F&amp;lt;/span&amp;gt; which prevents abbreviations from being found and &amp;lt;span class=&amp;quot;stxmacrocommandoption-character&amp;quot;&amp;gt;/C&amp;lt;/span&amp;gt; to make the comparison case sensitive.&lt;br /&gt;
&lt;br /&gt;
The new commands SYSTEMCALL and SYSTEMCALLX are variants of SYSTEM and SYSTEMX which return warnings rather than errors on failure.&lt;br /&gt;
&lt;br /&gt;
The command TGET can now return elapsed milliseconds, when the new option &amp;lt;span class=&amp;quot;stxmacrocommandoption-character&amp;quot;&amp;gt;/ms&amp;lt;/span&amp;gt; is used.&lt;br /&gt;
&lt;br /&gt;
The NAME command, when used with the new UNC subcommand can convert a file path on a mapped drive to its UNC equivalent. This help keep project files portable when accessed from multiple computers (E.g. when the z drive is mapped to \\server\data, the command &amp;quot;name &#039;z:\ds.xml&#039; unc&amp;quot; will return &amp;quot;\\server\data\ds.xml&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
The READ commands have a new option &amp;lt;span class=&amp;quot;stxmacrocommandoption-character&amp;quot;&amp;gt;/T&amp;lt;/span&amp;gt; which prevents arguments from being trimmed.&lt;br /&gt;
&lt;br /&gt;
The macro WINDOWSIZEDLG can be used to allow a user to set a window&#039;s size (width and height in pixels).&lt;br /&gt;
&lt;br /&gt;
SPAtoms&lt;br /&gt;
&lt;br /&gt;
The new SPAtom MIXALL mixes up to eight input arrays/vectors into an output array/vector with gain scaling.&lt;br /&gt;
&lt;br /&gt;
The new SPAtom WLANA performs a general wavelet analysis, and the SPAtom CCANA implement a Cohen Class distribution.&lt;br /&gt;
&lt;br /&gt;
The SPAtoms PVANA and PVSYN no accept a windowing function parameter.&lt;br /&gt;
&lt;br /&gt;
The new SPAtom KLATTSYN can be used to generate synthesised speech.&lt;br /&gt;
&lt;br /&gt;
EVAL command&lt;br /&gt;
&lt;br /&gt;
The EVAL command has the following new subcommands:&amp;lt;br /&amp;gt; formants - a new formant tracking algorithm.&amp;lt;br /&amp;gt; limit, limitlow, limithigh - limits values to within a range of values.&amp;lt;br /&amp;gt; min, max - can receive more than one parameter.&amp;lt;br /&amp;gt; cdot, ctrn, conj - complex dot product, matrix transposition and conjugation.&amp;lt;br /&amp;gt; f0ac - F0 detection using autocorrelation.&amp;lt;br /&amp;gt; The EVAL command now supports numerical (e.g. &amp;amp;gt;=), logical (e.g. &amp;amp;amp;&amp;amp;amp;) and ternary (e.g. eval $#a &amp;amp;gt; $#b ? $#a : $#b).&lt;br /&gt;
&lt;br /&gt;
The Macro Library&lt;br /&gt;
&lt;br /&gt;
The DATASETCMD has a new subcommand AUTOSAVE with which you can turn the DataSet autosave feature on and off.&lt;br /&gt;
&lt;br /&gt;
The GRAPHSETUP macro.&lt;br /&gt;
&lt;br /&gt;
The new CGRAPHSETUP command GRAPHLEGEND displays an amplitude legend in a spectrogram plot.&lt;br /&gt;
&lt;br /&gt;
The new CGRAPHSETUP command GETCOLORPALETTE retrieves the print or screen palette in an extended table.&lt;br /&gt;
&lt;br /&gt;
The new CGRAPHSETUP command GETPROFILELIST returns a simple table with a list of color profiles defined in the settings file (S_TOOLS-STx INI).&lt;br /&gt;
&lt;br /&gt;
===== Classes =====&lt;br /&gt;
&lt;br /&gt;
BXMLDoc class&lt;br /&gt;
&lt;br /&gt;
The SETELEMENT function can now take a table containing attribute/value pairs.&lt;br /&gt;
&lt;br /&gt;
CMenu class&lt;br /&gt;
&lt;br /&gt;
The new CMenu function AddToolBoxMenu adds the standard toolbox menu items to the menu.&lt;br /&gt;
&lt;br /&gt;
XPlot class&lt;br /&gt;
&lt;br /&gt;
When constructing an XPlot instance, an owner window may now be specified.&lt;br /&gt;
&lt;br /&gt;
===== Shell Items =====&lt;br /&gt;
&lt;br /&gt;
Dialog Item&lt;br /&gt;
&lt;br /&gt;
The dialog edit control has a new option &#039;&amp;lt;span class=&amp;quot;stxmacrocommandoption-character&amp;quot;&amp;gt;/F&amp;lt;/span&amp;gt;&#039; which forwards KEY messages to the shell.&lt;br /&gt;
&lt;br /&gt;
There are now four &#039;types&#039; of edit control and a host of new parameters, which means it can display syntax highlighting, be used as a command line interface, etc.&lt;br /&gt;
&lt;br /&gt;
A listview&#039;s cells can now be editable. The option &amp;lt;span class=&amp;quot;stxmacrocommandoption-character&amp;quot;&amp;gt;/E&amp;lt;/span&amp;gt; which must be set for a ListView to be editable. The message CELLEDITED is sent if it is editable and its contents has been changed. If the user cancels editing, the message CELLCANCELLED is sent to the shell. If editing is ended because the user presses &amp;lt;span class=&amp;quot;stxhotkey&amp;quot;&amp;gt;TAB&amp;lt;/span&amp;gt; or &amp;lt;span class=&amp;quot;stxhotkey&amp;quot;&amp;gt;Shift TAB&amp;lt;/span&amp;gt;, the CELLEDITEDTAB or CELLEDITEDBACKTAB messages are sent. You can set the focus to a specific cell and enter editing mode using the new command SET dialogItem listviewIndex STARTEDIT.&lt;br /&gt;
&lt;br /&gt;
The listview now supports the &amp;lt;span class=&amp;quot;stxmacrocommandoption-character&amp;quot;&amp;gt;/F&amp;lt;/span&amp;gt; flag which forwards specific key types to the shell.&lt;br /&gt;
&lt;br /&gt;
The listview supports a new option /R=n, which determines the maximum number of lines of text which can be displayed in the listview.&lt;br /&gt;
&lt;br /&gt;
The new attribute !FOREGROUND returns 1 if the dialog window is in the foreground, 0 if it is not and -1 if the command fails in some way.&lt;br /&gt;
&lt;br /&gt;
The new dialog attribute !EDITING can be used to ascertain if a listview is currently being edited or not.&lt;br /&gt;
&lt;br /&gt;
File Item&lt;br /&gt;
&lt;br /&gt;
The NEW FILE command can now take the option &amp;lt;span class=&amp;quot;stxmacrocommandoption-character&amp;quot;&amp;gt;/S&amp;lt;/span&amp;gt;, to suppress error messages on creation failure.&lt;br /&gt;
&lt;br /&gt;
The new file item command COPY &amp;lt;span class=&amp;quot;stxmacrocommandoption-character&amp;quot;&amp;gt;/Z&amp;lt;/span&amp;gt; can be used to encrypt/decrypt a file, including optional password protection.&lt;br /&gt;
&lt;br /&gt;
The new command TRYLOCK will try to get a lock on the file but will not block the script.&lt;br /&gt;
&lt;br /&gt;
The !CHANGED attribute can now be explicitly set or reset. This functionality is new, in as much as versions previous to 3.9.0 could only reset the attribute. The meaning of assigning &#039;1&#039; to the attribute has changed, since assigning &#039;1&#039; now *sets* the attribute, whilst assigning &#039;0&#039; resets the attribute.&lt;br /&gt;
&lt;br /&gt;
A new file item type - the GDX file item - has been developed, which can be used to create files containing graphic data which are passed directly to a graph item. GDX stands for &amp;quot;graphical data exchange&amp;quot;. Currently, the spectrogram is the only plot which supports the GDX file type.&lt;br /&gt;
&lt;br /&gt;
Graph Item&lt;br /&gt;
&lt;br /&gt;
The command ADDMARKER can now be used to add a &#039;Box and Whiskers&#039; metasegment.&lt;br /&gt;
&lt;br /&gt;
The metasegment font can be specified on an individual basis using the ADDMARKER command.&lt;br /&gt;
&lt;br /&gt;
A metasegment may be told not to change color on selection. This is only available using the &amp;quot;SET graph ADDMARKER table&amp;quot; command with the parameter &amp;quot;invertSelected&amp;quot; set to &amp;quot;true&amp;quot; if the metasegment color should be inverted whilst selected or &amp;quot;false&amp;quot; if not. The default is &amp;quot;true&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
The key used to make a metasegment moveable can now be set using a &#039;modifyKeys&#039; entry in the ADDMARKER table parameter.&lt;br /&gt;
&lt;br /&gt;
A simple marker can now be displayed as a single vertical line (option &amp;lt;span class=&amp;quot;stxmacrocommandoption-character&amp;quot;&amp;gt;/M&amp;lt;/span&amp;gt;).&lt;br /&gt;
&lt;br /&gt;
The command OVERVIEW, which toggles between the &#039;view&#039; and &#039;overview&#039; modes, has been documented.&lt;br /&gt;
&lt;br /&gt;
The graph supports a new attribute !CURSORMODE which returns the currently visible cursors, as set using the last CURSORMODE command.&lt;br /&gt;
&lt;br /&gt;
The width of a graph&#039;s border can now be set using new AXIS command parameters. The default border width is 1 pixel.&lt;br /&gt;
&lt;br /&gt;
The spectrogram palette can be changed at any time using the &amp;quot;SET graph Y * * SPECTROGRAM&amp;quot; function.&lt;br /&gt;
&lt;br /&gt;
The DATASETLOADED message is now sent when a graph finishes loading data for a particular input.&lt;br /&gt;
&lt;br /&gt;
Instance Item&lt;br /&gt;
&lt;br /&gt;
The new command TRYLOCK will try to get a lock on the instance but will not block the script.&lt;br /&gt;
&lt;br /&gt;
Table Item&lt;br /&gt;
&lt;br /&gt;
A table item connected to a ListView must be configured to be editable using the CONFIG command or the !EDITABLE attribute. The CONFIG command has also been extended to allow for a restrictive set of values to be specified for a table field. If specified, the ListView will display a combobox in this column for each entry. All parameters set using the CONFIG command can now be queried via table field attributes.&lt;br /&gt;
&lt;br /&gt;
The new command TRYLOCK will try to get a lock on the table but will not block the script.&lt;br /&gt;
&lt;br /&gt;
The command NEW TABLE supports a silent error flag.&lt;br /&gt;
&lt;br /&gt;
A table field can now display multirow entries, if the !MULTIROW attribute is set to 1, or the CONFIG command multirow parameter is set to ON.&lt;br /&gt;
&lt;br /&gt;
The last user input for a particular column can now be used as the default for that column using the CONFIG command&#039;s setuserdefault parameter.&lt;br /&gt;
&lt;br /&gt;
The DEFINE command can now be used to rename an existing field.&lt;br /&gt;
&lt;br /&gt;
Wave Item&lt;br /&gt;
&lt;br /&gt;
The wave item now supports the new attribute !PLAYSRATE which can be used to return the sampling rate currently used to for playback or set a new sampling rate for playback.&lt;br /&gt;
&lt;br /&gt;
=== Changes ===&lt;br /&gt;
&lt;br /&gt;
Changes in S_TOOLS-STx &amp;amp;lt;CURRENT_VERSION&amp;amp;gt;:&lt;br /&gt;
&lt;br /&gt;
Graphical User Interface&lt;br /&gt;
&lt;br /&gt;
F0 Test, F0Lookup, Amplitude Spectrum Statistics&lt;br /&gt;
&lt;br /&gt;
The F0 Test, F0 Lookup and Amplitude Spectrum Statistics functions in the Spectrogram &amp;amp;amp; Parameters Viewer sectioner have been moved to the toolbox file SpectrumTB.sts.&lt;br /&gt;
&lt;br /&gt;
Macro Language&lt;br /&gt;
&lt;br /&gt;
UNLOAD command&lt;br /&gt;
&lt;br /&gt;
The command UNLOAD MACROCODE, UNLOAD SPUCODE and UNLOAD SOURCECODE take one parameter - the name of a sourcecode file (relative or absolute). The MACROCODE variant used to take a blank separated list of macro names and the SPUCODE version used to take a blank separated list of SPU names.&lt;br /&gt;
&lt;br /&gt;
Display and Dialog DROPFILE message&lt;br /&gt;
&lt;br /&gt;
The DROPFILE message sent to displays and dialogs when files are dropped onto them has been changed. The &amp;lt;span class=&amp;quot;stxmacrocommandparameter-character&amp;quot;&amp;gt;filePath&amp;lt;/span&amp;gt; parameter is not longer a string, but rather the id of a simple table with one absolute path per entry.&lt;br /&gt;
&lt;br /&gt;
Syntax&lt;br /&gt;
&lt;br /&gt;
The string &amp;quot;123 456&amp;quot; is no longer a valid number.&lt;br /&gt;
&lt;br /&gt;
=== Bug Fixes ===&lt;br /&gt;
&lt;br /&gt;
Bug fixes&lt;br /&gt;
&lt;br /&gt;
The waterfall graph now prints correctly.&lt;br /&gt;
&lt;br /&gt;
The BDataSet member function AddASet now selects the new audio set if adding the set succeeds (r5534).&lt;br /&gt;
&lt;br /&gt;
Shell commands using the return value RC now assign the value even if return code equals 0 (indicating success) (r5609).&lt;br /&gt;
&lt;br /&gt;
Spectrogram &amp;amp;amp; Parameters Viewer Sectioner copy to clipboard working again (r5625).&lt;br /&gt;
&lt;br /&gt;
The &#039;view&#039; graph mode now displays correctly when first drawn (r5643).&lt;br /&gt;
&lt;br /&gt;
The asterisk character * is now officially an invalid hotkey, rather than being one which doesn&#039;t work correctly (r5500).&lt;br /&gt;
&lt;br /&gt;
Loading an XML file which an unsupported character encoding now fails rather than asserting (r5614).&lt;br /&gt;
&lt;br /&gt;
The Spectrum viewer can now saving CEPST parameters (r6470).&lt;br /&gt;
&lt;br /&gt;
The color &#039;GRAY&#039; is now defined as the RGB value 96:96:96, which fixes the bug where cursors were invisible on a &#039;GRAY&#039; background (r6148).&lt;br /&gt;
&lt;br /&gt;
The &amp;quot;SET graph XSCALE&amp;quot; flag &amp;quot;/I&amp;quot; is now working (r6187).&lt;br /&gt;
&lt;br /&gt;
Using the correct normal/dual/tight phase vocoder pv filters (r5874).&lt;br /&gt;
&lt;br /&gt;
All valid number formats (including mmmE /-eee) can now be used in time-expressions (r5746).&lt;br /&gt;
&lt;br /&gt;
=== Corrections ===&lt;br /&gt;
&lt;br /&gt;
S_TOOLS-STx Version: 3.9&lt;br /&gt;
&lt;br /&gt;
A list of documentation corrections since the last release (3.7).&lt;br /&gt;
&lt;br /&gt;
The macro COBJ has been superseded by the COBJ class and no longer exists.&lt;br /&gt;
&lt;br /&gt;
The command SYSTEM MKDIR and SYSTEM RMDIR were undocumented.&lt;br /&gt;
&lt;br /&gt;
The SPAtom ASEG1 parameters are now in the correct order (&amp;lt;span class=&amp;quot;stxmacrocommandparameter-character&amp;quot;&amp;gt;TABS&amp;lt;/span&amp;gt; and &amp;lt;span class=&amp;quot;stxmacrocommandparameter-character&amp;quot;&amp;gt;TABM&amp;lt;/span&amp;gt; were swapped).&lt;br /&gt;
&lt;br /&gt;
The SPAtom VSPLIT was mistakenly documented as VSPLIT1.&lt;br /&gt;
&lt;br /&gt;
The macro DEBUGTB no longer exists.&lt;br /&gt;
&lt;br /&gt;
The descriptions of the different formulas used by the SPAtom MORLET have been corrected.&lt;br /&gt;
&lt;br /&gt;
The section FILE item command LOAD parameters were not documented as mandatory.&lt;br /&gt;
&lt;br /&gt;
Added description of shell variables SCRIPTFILEPATH, SCRIPTDIRECTORY AND SCRIPTMAINNAME.&lt;br /&gt;
&lt;br /&gt;
The AWEIGHT SPAtom has now been documented.&lt;br /&gt;
&lt;br /&gt;
The WAVEOUT SPAtom has now been documented.&lt;br /&gt;
&lt;br /&gt;
A list of documentation corrections since the last release (3.6.2).&lt;br /&gt;
&lt;br /&gt;
The BUTIL FILEDIALOG no longer has a &amp;lt;span class=&amp;quot;stxmacrocommandparameter-character&amp;quot;&amp;gt;path&amp;lt;/span&amp;gt; parameter.&lt;br /&gt;
&lt;br /&gt;
A list of documentation corrections since the last release (3.6.1).&lt;br /&gt;
&lt;br /&gt;
The SET table FIND &amp;lt;span class=&amp;quot;stxmacrocommandparameter-character&amp;quot;&amp;gt;cexpr&amp;lt;/span&amp;gt; format uses colons, not commas as delimiters.&lt;br /&gt;
&lt;br /&gt;
The SET value OUTPUT commands can take &amp;lt;span class=&amp;quot;stxmacrocommandoption-character&amp;quot;&amp;gt;/Double&amp;lt;/span&amp;gt; options.&lt;br /&gt;
&lt;br /&gt;
The description of the parameters for the NEW TABLE command where field definitions are possible has been corrected.&lt;br /&gt;
&lt;br /&gt;
The SET graph CURSORMODE command now describes the bound and locked parameters correctly.&lt;br /&gt;
&lt;br /&gt;
The VAR arithmetic operators DIV, MUL and SUB are actually called DIVIDE, MULTIPLY and SUBTRACT&lt;br /&gt;
&lt;br /&gt;
The SET graph ZSCALE command parameters were incorrect.&lt;br /&gt;
&lt;br /&gt;
=== Known Bugs ===&lt;br /&gt;
&lt;br /&gt;
S_TOOLS-STx Version: 3.9&lt;br /&gt;
&lt;br /&gt;
These bugs were known to exist at the time of the release and are proving difficult, if not impossible to fix.&lt;br /&gt;
&lt;br /&gt;
Interface&lt;br /&gt;
&lt;br /&gt;
Sometimes 44KB soundfiles are created, which are invalid. This bug has not proved easy to replicate, so if you can replicate it, please contact us ( \n  This e-mail address is being protected from spam bots, you need JavaScript enabled to view it  ).&lt;br /&gt;
&lt;br /&gt;
Can&#039;t delete an entry in the DataSet if it has no ID. It is highly unlikely that you will ever have a DataSet entry with no ID. If this is the case however, you must currently delete it by hand (Close S_TOOLS-STx, open the DataSet in a text editor and either give the offending entry an ID, or remove it). Should you be able to reproduce any action which creates an entry without an ID, please contact us ( \n  This e-mail address is being protected from spam bots, you need JavaScript enabled to view it  ).&lt;br /&gt;
&lt;br /&gt;
Spectrogram &amp;amp;amp; Parameters Viewer&lt;br /&gt;
&lt;br /&gt;
Interpolation of very short signals is incorrect (Deutsch - 2004-11-10 - since 1.0).&lt;br /&gt;
&lt;br /&gt;
Graphics&lt;br /&gt;
&lt;br /&gt;
Copying a display graphic to the clipboard and pasting into a graphics program does not always achieve the desired results. This bug will not be fixed in the foreseeable future. Some graphics programs paste it properly (IrfanView, Microsoft Word), others don&#039;t (PaintShop Pro) - (Jonnie White - 2004-07-14).&lt;br /&gt;
&lt;br /&gt;
Selected cursors is not visible if background is set to GRAY (White - 2004-07-12 - since 1.0).&lt;br /&gt;
&lt;br /&gt;
Macro&lt;br /&gt;
&lt;br /&gt;
The dialog control listbox does not handle displaying huge strings properly. This seems to be a problem with the underlying CListBox control (Becker/White - 2004-12 - since 1.0).&lt;br /&gt;
&lt;br /&gt;
The DCOM command INVOKEMETHOD Evaluate always returns an error when communicating with the R DCOM server even if the command was actually successful (Deutsch/White - 2004 - since 3.6.0).&lt;br /&gt;
&lt;br /&gt;
==3.8==&lt;br /&gt;
&lt;br /&gt;
3.8.3&lt;br /&gt;
&lt;br /&gt;
* BUGFIX: zoom in in viewer3 now working when zooming around active cursor&lt;br /&gt;
* BUGFIX: spectragram title display corrected (amin/amax)&lt;br /&gt;
* BUGFIX: CDLGMAP now deletes window only if it has created the window during construction&lt;br /&gt;
&lt;br /&gt;
3.8.2&lt;br /&gt;
&lt;br /&gt;
* BUGFIX: dataset path now displayed, even if it has spaces in it.&lt;br /&gt;
* BUGFIX: Parameter plot explicitly redrawn when new data is sent. This fixes the bug (reported by Julia Brandstaetter) where Set Zero and Undo were not working properly in Spectrogram and Parameter plot.&lt;br /&gt;
&lt;br /&gt;
3.8.1&lt;br /&gt;
&lt;br /&gt;
* BUGFIX: Warn user that more waveform samples are being sent than expected and refrain from crashing.&lt;br /&gt;
* BUGFIX: CDlgMap now always uses the next free dialog index for a new entry. This means that multiple maps can reference the same dialog and still work. The functions fci and nc were removed since they are never used. Display now using second event to synchronise creation and variable initialisation. This fixes the mysterious bug where the window class was only sometimes used.&lt;br /&gt;
* BUGFIX: If the polyline function is called with less than two points it no longer asserts, but rather ends gracefully.&lt;br /&gt;
* BUGFIX: send keys not processed by dialog on to graph hotkey handlers&lt;br /&gt;
* BUGFIX: spectrogram is now being initialised with the correct context menu when formants are displayed in it.&lt;br /&gt;
* BUGFIX: giving dialog focus if there are no graphs&lt;br /&gt;
* BUGFIX: buttons in dialogs in a graph no longer process normal mneumonics. This means that the graph can process them (for Moosmueller). Buttons can still be activated with return and the space bar and tabbed/arrowed to.&lt;br /&gt;
* BUGFIX: preventing race conditions in Attach/Detach. This removes one possible cause of autosave crashing. It does not guarantee, though, there to be no other reasons for autosave to crash.&lt;br /&gt;
&lt;br /&gt;
=Downloads=&lt;br /&gt;
The {{STX}} downloads are available here: https://www.kfs.oeaw.ac.at/pub/stx&lt;/div&gt;</summary>
		<author><name>Jw</name></author>
	</entry>
	<entry>
		<id>https://mediawiki.kfs.oeaw.ac.at/stx/docs/wiki/index.php?title=User_Guide/Spectrogram_and_Parameter_Viewer/Settings_Dialog&amp;diff=10674</id>
		<title>User Guide/Spectrogram and Parameter Viewer/Settings Dialog</title>
		<link rel="alternate" type="text/html" href="https://mediawiki.kfs.oeaw.ac.at/stx/docs/wiki/index.php?title=User_Guide/Spectrogram_and_Parameter_Viewer/Settings_Dialog&amp;diff=10674"/>
		<updated>2019-11-11T13:32:44Z</updated>

		<summary type="html">&lt;p&gt;Jw: /* use global sectioner settings */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{DISPLAYTITLE:{{SUBPAGENAME}}}}&lt;br /&gt;
{{V2}}&lt;br /&gt;
This is the setup and start dialog for the [[User Guide/Spectrogram and Parameter Viewer|Spectrogram &amp;amp; Parameters Viewer]], also known as &#039;&#039;Analysis&#039;&#039; in the &#039;&#039;Compact&#039;&#039; mode. This application shows a selected set of transformations and parameters of the source signals. It also implements a spectrum sectioner and some segmentation tools.&lt;br /&gt;
&lt;br /&gt;
[[File:v2_settings_dialog.png|thumb]]&lt;br /&gt;
&lt;br /&gt;
==Dialog Layout==&lt;br /&gt;
&lt;br /&gt;
At the top of the dialog window the control buttons and the controls for the source signal selection are located. Below the source signal controls the controls for the application settings are displayed in two groups. On the left side are the settings for the three plot regions zoom, segment lines and overview and on the right side are the general settings and some buttons for sub-dialogs.&lt;br /&gt;
&lt;br /&gt;
==Control Buttons==&lt;br /&gt;
&lt;br /&gt;
[[File:v_dialog_start_cancel_etc.png]]&lt;br /&gt;
&lt;br /&gt;
;Start:Save settings into the profile displayed in the dialog caption, close the dialog and start the application. This button is only displayed if one or more signals are selected in the Overview or Detail window of the Workspace. If multiple signals are selected, for each signal a separate application is started.&lt;br /&gt;
;OK:Save settings into the profile displayed in the dialog caption and close the dialog, but do not start the application.&lt;br /&gt;
;Cancel:Close the dialog without saving the changes.&lt;br /&gt;
&lt;br /&gt;
Note: The Start button is only displayed if a valid object is selected in the Workspace (e.g. a segment or sound file).====Source Signal====&lt;br /&gt;
&lt;br /&gt;
==Source Signal==&lt;br /&gt;
&lt;br /&gt;
[[File:v_dialog_source_signal_selection.png]]&lt;br /&gt;
&lt;br /&gt;
;Set:Shows the XML-reference (IRef) of the audio-set containing the source signal&lt;br /&gt;
;Seg:Contains the ID of the selected segment or the address (task-expression) of the source signal. This field can be edited.&lt;br /&gt;
;Chn.:Source signal channel (All, 1, 2, ...). The contents of the combobox depend on the number of channels of the audio-set.&lt;br /&gt;
&lt;br /&gt;
Note: If multiple source signals are selected, only the number of selected signals (on the left side) and the Chn.-selection is displayed, the Set- and Seg-controls are hidden.&lt;br /&gt;
&lt;br /&gt;
==Analysis==&lt;br /&gt;
&lt;br /&gt;
{{DISPLAYTITLE:{{SUBPAGENAME}}}}&lt;br /&gt;
The following Spectrogram &amp;amp; Parameters Viewer settings are specific to the signal analysis.&lt;br /&gt;
&lt;br /&gt;
[[File:Stx ug v2 settings analysis.PNG]]&lt;br /&gt;
&lt;br /&gt;
===spectrogram frame===&lt;br /&gt;
&lt;br /&gt;
This group of controls below this text is used to define the frame parameters for the spectrogram analysis.&lt;br /&gt;
&lt;br /&gt;
=====bandwidth/length=====&lt;br /&gt;
&lt;br /&gt;
This button selects the unit of the frame length. To change the unit, press the button. The available settings are length[smpl] (framelength in samples), length[ms] (framelength in milliseconds) and bandw[Hz] (bandwidth in Hertz). The edit field on the right side contains the value of the framelength which must be greater than zero.&lt;br /&gt;
&lt;br /&gt;
=====overlap/shift=====&lt;br /&gt;
&lt;br /&gt;
This button selects the type and unit of the frame shift or overlap. Press the button to change it. The available settings are shift[smpl] (shift in sampled), shift[ms] (shift in milliseconds) and overlap[%] (overlap in percent of the framelength). The edit field on the right side contains the shift/overlap value. Shift values must be greater than zero and lower or equal to the framelength and the overlap value must be in the range 0 to 99 percent.&lt;br /&gt;
&lt;br /&gt;
=====diff. factor=====&lt;br /&gt;
&lt;br /&gt;
Differentiation factor. If greater than zero (and lower or equal 1) differentiation is applied to the signal before analysis.&lt;br /&gt;
&lt;br /&gt;
=====kaiser-bessel(8)=====&lt;br /&gt;
&lt;br /&gt;
This button selects the windowing function which should be applied to the signal. Press the button to change the window function type. The available windows are rectangle, Hanning, Hamming, Blackman-Harris, Kaiser-Bessel (with to different factors) and Bartlett.&lt;br /&gt;
&lt;br /&gt;
===parameter frame===&lt;br /&gt;
&lt;br /&gt;
If checked, separate frame settings for the parameter analysis methods can be defined. Otherwise the same settings as for the spectrogram frame are used. See spectrogram frame (above) for the meaning of frame settings.&lt;br /&gt;
&lt;br /&gt;
====waveform range / 0db====&lt;br /&gt;
&lt;br /&gt;
Waveform amplitude value for full attenuation (range) and zero dB (0dB=). Both values must be greater than zero.&lt;br /&gt;
&lt;br /&gt;
===show in spectrogram: formants / pole-zero ===&lt;br /&gt;
&lt;br /&gt;
If checked, the formant tracks (method: formants) and/or pole-zero tracks (method: pole-zero) are plotted over the spectrogram, rather than in their own graph. The scale and unit settings of the spectrogram are used instead of the formant/pole-zero scale and unit.&lt;br /&gt;
&lt;br /&gt;
==Calibration==&lt;br /&gt;
&lt;br /&gt;
You can set the profile&#039;s calibration settings using the [[User_Guide/Spectrogram_and_Parameter_Viewer/Settings/Calibration_parameters|calibration parameters dialog]].&lt;br /&gt;
&lt;br /&gt;
==General==&lt;br /&gt;
&lt;br /&gt;
The following general settings are available:&lt;br /&gt;
&lt;br /&gt;
===batch mode===&lt;br /&gt;
&lt;br /&gt;
If checked, the analysis application is closed automatically when finished. This option can only be used if automatic printout and/or automatic parameter save is enabled.&lt;br /&gt;
&lt;br /&gt;
===Automatic Printout===&lt;br /&gt;
&lt;br /&gt;
If checked, the printout of the waveform plot is started automatically and the application is closed when the printout is finished. The button starts the print settings dialog.&lt;br /&gt;
&lt;br /&gt;
===do not print cursors===&lt;br /&gt;
&lt;br /&gt;
If checked, the cursors are not printed. This option works only for the automatic printout.&lt;br /&gt;
&lt;br /&gt;
===automatic parameter save===&lt;br /&gt;
&lt;br /&gt;
If checked, the computed parameters (but not the spectrogram) are automatically saved. Older versions of same parameter methods computed for the analysed segment are replaced. This checkbox is only enabled if the Parameter Data Management is set to &#039;COMPUTE always&#039;.&lt;br /&gt;
&lt;br /&gt;
===Automatic Segment Names===&lt;br /&gt;
&lt;br /&gt;
If checked, the id of new segments is assigned automatically. The format of the automatic name depends on the settings of the Automatic Segment Names dialog, which can be opened with this button.&lt;br /&gt;
&lt;br /&gt;
===show sectioner windows===&lt;br /&gt;
&lt;br /&gt;
Enable / disable the sectioner windows. If enabled, the sectioner windows are shown on top of the analysis display.&lt;br /&gt;
&lt;br /&gt;
===automatic sectioner plot===&lt;br /&gt;
&lt;br /&gt;
Enable / disable automatic sectioner update. If enabled, the sectioner windows are updated every time a time scale cursor is selected or moved. Otherwise the user must press the function key F8 to update the sectioner.&lt;br /&gt;
&lt;br /&gt;
===show x grid, show y grid===&lt;br /&gt;
&lt;br /&gt;
Enable/disable the grid on the x/y-scales of the all graphs. This setting is not applied to the sectioner windows, which have their own grid settings.&lt;br /&gt;
&lt;br /&gt;
===x scale position and window===&lt;br /&gt;
&lt;br /&gt;
Selects the position (below or above graph) and window (none, lowest, highest or all) where the x-scale (time) should be displayed.&lt;br /&gt;
&lt;br /&gt;
===title window===&lt;br /&gt;
&lt;br /&gt;
Selects the graph (none, lowest, highest or all), where the analysis title (audio-set, segment and channel) should be displayed.&lt;br /&gt;
&lt;br /&gt;
===show dialog===&lt;br /&gt;
&lt;br /&gt;
Show / hide the analysis application control dialog and select the dialog position (below or above graph windows)&lt;br /&gt;
&lt;br /&gt;
===timescale===&lt;br /&gt;
&lt;br /&gt;
Choose the timescale to use on the x-axis. The clock setting displays the time in hours, minutes, seconds and milliseconds from the beginning of the displayed segment (E.g. 0:01:00.000 which means 1 minute from the beginning of the displayed segment). If layout-defaults is specified, the timescale set in the Display Layout and Format dialog is used.&lt;br /&gt;
&lt;br /&gt;
===enable zoom and autoscale===&lt;br /&gt;
&lt;br /&gt;
If checked, then the [[User Guide/Spectrogram and Parameters/Zooming|zoom and autoscale features]] are turned on.&lt;br /&gt;
&lt;br /&gt;
===enable one-click range selection===&lt;br /&gt;
&lt;br /&gt;
If checked, you can set a new cursor range by clicking anywhere in the graph, dragging and letting go. This can make selecting a cursor range very easy. However, if you prefer to be able to change the cursor range only by selecting a cursor and dragging it, please disable this check box.&lt;br /&gt;
&lt;br /&gt;
===play window===&lt;br /&gt;
&lt;br /&gt;
The size of the window to be played when the [[User_Guide/Spectrogram_and_Parameter_Viewer/Spectrogram_and_Parameter_Viewer_Hotkeys|&#039;play window&#039; hotkey]] is pressed. The signal before, around or after the active cursor is played.&lt;br /&gt;
&lt;br /&gt;
===Color Scheme===&lt;br /&gt;
&lt;br /&gt;
With this button the Color Scheme and Settings dialog is opened to select and/or configure the plot colors, line styles and general graphics settings. The selected color scheme is displayed in the button caption.&lt;br /&gt;
&lt;br /&gt;
===global===&lt;br /&gt;
If checked, then the [[User_Guide/Spectrogram_and_Parameter_Viewer/Sectioner/Sectioner_Settings_Dialog|sectioner settings]] are global to STx. If unchecked, then these settings are saved with this profile. This can be specified per profile. Note that if you export a profile, the sectioner settings are only exported if global settings are unchecked.&lt;br /&gt;
&lt;br /&gt;
==Method list==&lt;br /&gt;
&lt;br /&gt;
[[File:v2_settings_method_list.png]]&lt;br /&gt;
&lt;br /&gt;
The method list is where you specify which analysis methods to use in the profile and modify their settings. The Spectrogram &amp;amp; Parameters Viewer currently supports these [[User Guide/Spectrogram and Parameter Viewer/Methods|methods]].&lt;br /&gt;
&lt;br /&gt;
===Methods===&lt;br /&gt;
&lt;br /&gt;
You can analyse the signal with a variety of methods. More details [[User Guide/Spectrogram and Parameter Viewer/Methods|here]].&lt;br /&gt;
&lt;br /&gt;
===Up/Down===&lt;br /&gt;
&lt;br /&gt;
Reposition the graph within the display by moving it up or down.&lt;br /&gt;
&lt;br /&gt;
===Settings===&lt;br /&gt;
&lt;br /&gt;
Open a settings dialog for the selected method (click on the method name in the method list to select it).&lt;br /&gt;
&lt;br /&gt;
===Mode===&lt;br /&gt;
&lt;br /&gt;
Whether a method is used in a profile is determined by its mode: &amp;lt;code&amp;gt;ON&amp;lt;/code&amp;gt; or &amp;lt;code&amp;gt;OFF&amp;lt;/code&amp;gt;. Double-click a method to toggle its mode.&lt;br /&gt;
&lt;br /&gt;
===Size===&lt;br /&gt;
&lt;br /&gt;
The Size column specifies the size of the method. The size is the method&#039;s graph size in relation to the other method graphs. If all methods have a size of 1, then they will all be the same height. If one method has a size of &amp;lt;code&amp;gt;2&amp;lt;/code&amp;gt;, it will be double the height of the methods with a size of &amp;lt;code&amp;gt;1&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
===Line===&lt;br /&gt;
&lt;br /&gt;
The value in the Line column specifies which function line color (see Color Schemes) to use to draw the method&#039;s function. You can change the line value by right-clicking on the method and selecting the context menu item line.&lt;br /&gt;
&lt;br /&gt;
===Segs===&lt;br /&gt;
&lt;br /&gt;
The Segs column indicates if segments will be displayed in the graphs or not. You can turn segments on and off via the context menu item Segments -&amp;gt; On / Off. You can modify how and where segments are drawn by pressing the &#039;&#039;Segs&#039;&#039; button, which opens the [[User Guide/Segment Markers Dialog|Segment Markers Dialog]].&lt;br /&gt;
&lt;br /&gt;
==Parameter Data Management==&lt;br /&gt;
&lt;br /&gt;
Choose whether parameters are computed or loaded on analysis.&lt;br /&gt;
&lt;br /&gt;
*COMPUTE always - computes the parameters on analysis, even if parameters already exist (i.e. old parameters are overwritten).&lt;br /&gt;
*LOAD available / COMPUTE missing - loads the parameters if they exist and computes those which are missing.&lt;br /&gt;
*LOAD available / DISABLE missing - loads the parameters which exist, and does not draw those parameters which are missing. This setting does not work well with super segments and sub segments, since they will not be loaded if the segment itself has no parameter data.&lt;br /&gt;
&lt;br /&gt;
===Parameter IO Configuration===&lt;br /&gt;
&lt;br /&gt;
If you choose to load existing parameters, you have the choice of loading super or sub segment parameters in addition or instead. A &#039;&#039;&#039;super segment&#039;&#039;&#039; is a segment which starts before and ends after another segment. A &#039;&#039;&#039;sub segment&#039;&#039;&#039; is a segment which starts after and ends before another segment. This feature was introduced in {{STX}} 4.3. &lt;br /&gt;
&lt;br /&gt;
====Load====&lt;br /&gt;
You can choose to load parameter data from super or sub segments as well as from the segment itself. This is done by selecting one of the following:&lt;br /&gt;
{|&lt;br /&gt;
|own data only&lt;br /&gt;
|parameter data is loaded from the selected segment.&lt;br /&gt;
|-&lt;br /&gt;
|super segment data only&lt;br /&gt;
|parameter data is loaded from the super segment if one is found, otherwise no parameter data is loaded.&lt;br /&gt;
|-&lt;br /&gt;
|super segment data (preferred) or own data&lt;br /&gt;
|parameter data is loaded from the super segment if one is found, otherwise parameter data is loaded from the selected segment.&lt;br /&gt;
|-&lt;br /&gt;
|sub segment data only&lt;br /&gt;
|parameter data is loaded from sub segments, if found, otherwise no parameter data is loaded.&lt;br /&gt;
|-&lt;br /&gt;
|sub segment data (preferred) or own data&lt;br /&gt;
|parameter data is loaded from sub segments if any are found. If no sub segments are found, then the selected segments parameter data is loaded.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
====Save====&lt;br /&gt;
If you have loaded sub or super parameters, and you choose to save the parameter, you can choose one of the following for saving the loaded super/sub data:&lt;br /&gt;
{|&lt;br /&gt;
|always overwrite origin data&lt;br /&gt;
|the parameter data loaded will always be overwritten, if the user chooses to save the selected parameter (or has automatic parameter saving turned on).&lt;br /&gt;
|-&lt;br /&gt;
|prompt user&lt;br /&gt;
|the user will be prompted to choose whether they wish to save the loaded sub/super parameter data.&lt;br /&gt;
|-&lt;br /&gt;
|never overwrite origin data&lt;br /&gt;
|the loaded super/sub parameter data will never be overwritten.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
TODO: allow user to specify if selected segment parameters are saved. Currently it is &#039;&#039;&#039;always&#039;&#039;&#039; overwritten.&lt;br /&gt;
&lt;br /&gt;
====Select====&lt;br /&gt;
Here you can define how super or sub segments get selected.&lt;br /&gt;
{|&lt;br /&gt;
|timebased (shortest super / longest sub)&lt;br /&gt;
|The shortest segment enclosing the selected segment will be chosen as the super segment or the longest sub segment within the selected segment will be chosen as the sub segment.&lt;br /&gt;
|-&lt;br /&gt;
|timebased + wildcard ID&lt;br /&gt;
|In addition to finding either the shortest super segment, or the longest sub segment, the ID of the segment must match the wildcard ID. [[Programmer_Guide/Introduction#Conditional_Expressions|Simple wildcard matching]] using an asterisk for any number of characters and a question mark for on character.&lt;br /&gt;
|-&lt;br /&gt;
|timebased + find expression&lt;br /&gt;
|In addition to finding either the shortest super segment or the longest sub segment, a find expression can be specified, filtering the segments according to their attributes. E.g. you could only consider segments with the attribute &amp;lt;code&amp;gt;Spk:==:m1&amp;lt;/code&amp;gt;.&lt;br /&gt;
|}&lt;/div&gt;</summary>
		<author><name>Jw</name></author>
	</entry>
	<entry>
		<id>https://mediawiki.kfs.oeaw.ac.at/stx/docs/wiki/index.php?title=File:V2_settings_dialog.png&amp;diff=10673</id>
		<title>File:V2 settings dialog.png</title>
		<link rel="alternate" type="text/html" href="https://mediawiki.kfs.oeaw.ac.at/stx/docs/wiki/index.php?title=File:V2_settings_dialog.png&amp;diff=10673"/>
		<updated>2019-11-11T13:11:45Z</updated>

		<summary type="html">&lt;p&gt;Jw: Jw uploaded a new version of File:V2 settings dialog.png&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Importing PNGs&lt;/div&gt;</summary>
		<author><name>Jw</name></author>
	</entry>
	<entry>
		<id>https://mediawiki.kfs.oeaw.ac.at/stx/docs/wiki/index.php?title=User_Guide/Spectrogram_and_Parameter_Viewer/Sectioner&amp;diff=10672</id>
		<title>User Guide/Spectrogram and Parameter Viewer/Sectioner</title>
		<link rel="alternate" type="text/html" href="https://mediawiki.kfs.oeaw.ac.at/stx/docs/wiki/index.php?title=User_Guide/Spectrogram_and_Parameter_Viewer/Sectioner&amp;diff=10672"/>
		<updated>2019-11-11T13:03:50Z</updated>

		<summary type="html">&lt;p&gt;Jw: /* Hiding and showing the Sectioner windows */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{DISPLAYTITLE:{{SUBPAGENAME}}}}&lt;br /&gt;
{{V2}}&lt;br /&gt;
The Sectioner windows are always displayed above all other graphs in the [[User_Guide/Spectrogram_and_Parameter_Viewer|Spectrogram &amp;amp; Parameters Viewer]]. They contain the waveform zoom and the spectrum of the signal around the active time scale cursor. The Sectioner implements a number of different analysis methods, which can be configured in the [[User Guide/Spectrogram and Parameter Viewer/Sectioner Settings Dialog|Settings Dialog]], reached from the Sectioner context menu or the Sectioner menu.&lt;br /&gt;
&lt;br /&gt;
[[File:v2_sectioner_windows.png]]&lt;br /&gt;
&lt;br /&gt;
Sectioner settings may be global to {{STX}} or [[User_Guide/Spectrogram_and_Parameter_Viewer/Settings_Dialog#use_global_sectioner_settings|saved per profile]].&lt;br /&gt;
&lt;br /&gt;
==Automatic Plotting==&lt;br /&gt;
&lt;br /&gt;
By default, the Sectioner is plotted for the signal at the active cursor position in the active method graph. You can turn of automatic plotting in the Sectioner menu. If automatic plotting is turned off, you can explicitly plot a spectrum of the signal at the current cursor position by pressing the hotkey associated with the [[User_Guide/Spectrogram_and_Parameter_Viewer/Spectrogram_and_Parameter_Viewer_Hotkeys|&amp;lt;samp&amp;gt;sectionerPlot&amp;lt;/samp&amp;gt;]] command.&lt;br /&gt;
&lt;br /&gt;
==Calibration Data==&lt;br /&gt;
&lt;br /&gt;
You can use the spectrum in the Sectioner to set the calibration data for the current sound file using the context menu entry &#039;[[/Set Calibration Data/]]&#039;.&lt;br /&gt;
&lt;br /&gt;
==Hiding and showing the Sectioner windows==&lt;br /&gt;
&lt;br /&gt;
You can hide or show the Sectioner windows using the hotkey &amp;lt;kbd&amp;gt;Ctrl+Shift+W&amp;lt;/kbd&amp;gt; or the &#039;Toggle Sectioner&#039; command in the Sectioner menu. There are also three different layouts for the Sectioner windows, which you can toggle through using the hotkey &amp;lt;kbd&amp;gt;Ctrl+Shift+N&amp;lt;/kbd&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
==Settings==&lt;br /&gt;
&lt;br /&gt;
The sectioner settings are available in the [[/Sectioner Settings Dialog/]].&lt;/div&gt;</summary>
		<author><name>Jw</name></author>
	</entry>
	<entry>
		<id>https://mediawiki.kfs.oeaw.ac.at/stx/docs/wiki/index.php?title=Programmer_Guide/General_Descriptions/Shell_Environment&amp;diff=10671</id>
		<title>Programmer Guide/General Descriptions/Shell Environment</title>
		<link rel="alternate" type="text/html" href="https://mediawiki.kfs.oeaw.ac.at/stx/docs/wiki/index.php?title=Programmer_Guide/General_Descriptions/Shell_Environment&amp;diff=10671"/>
		<updated>2019-10-24T11:18:01Z</updated>

		<summary type="html">&lt;p&gt;Jw: /* STXREVISION, the executing {{STx}} version */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{DISPLAYTITLE:{{SUBPAGENAME}}}}&lt;br /&gt;
{{Shell}}&lt;br /&gt;
Variables which do not begin with &amp;lt;code&amp;gt;@&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;#&amp;lt;/code&amp;gt; or &amp;lt;code&amp;gt;&amp;amp;amp;&amp;lt;/code&amp;gt; (i.e. all variables beginning with an alphanumeric character) are so-called &#039;&#039;shell environment&#039;&#039; variables. You can use shell variables yourself when programming. The following shell variables have predefined uses:&lt;br /&gt;
&lt;br /&gt;
== &amp;lt;var&amp;gt;APPMODE&amp;lt;/var&amp;gt;, the application run-mode ==&lt;br /&gt;
&lt;br /&gt;
The shell variable &amp;lt;code&amp;gt;APPMODE&amp;lt;/code&amp;gt; indicates the current mode the application &amp;lt;code&amp;gt;APPMAIN&amp;lt;/code&amp;gt; is in. A value of &amp;lt;code&amp;gt;0&amp;lt;/code&amp;gt; indicates that &amp;lt;code&amp;gt;APPNAME&amp;lt;/code&amp;gt; is inactive or finished; a value of &amp;lt;code&amp;gt;1&amp;lt;/code&amp;gt; indicates that &amp;lt;code&amp;gt;APPNAME&amp;lt;/code&amp;gt; is currently active..&lt;br /&gt;
&lt;br /&gt;
== &amp;lt;var&amp;gt;APPNAME&amp;lt;/var&amp;gt;, the application name ==&lt;br /&gt;
&lt;br /&gt;
The shell variable &amp;lt;code&amp;gt;APPNAME&amp;lt;/code&amp;gt; is defined in the registration entry in the configuration files. To start the shell application defined and registered in the configuration files, the macro &amp;lt;code&amp;gt;APPMAIN&amp;lt;/code&amp;gt; is used. Before calling the application&#039;s main macro (called: RUNappname), &amp;lt;code&amp;gt;APPMAIN&amp;lt;/code&amp;gt; assigns the application name to the variable &amp;lt;code&amp;gt;APPNAME&amp;lt;/code&amp;gt; and sets the application mode &amp;lt;code&amp;gt;APPMODE&amp;lt;/code&amp;gt; to active (&amp;lt;code&amp;gt;1&amp;lt;/code&amp;gt;). The variable &amp;lt;code&amp;gt;APPMODE&amp;lt;/code&amp;gt; is used by the macro &amp;lt;code&amp;gt;GETMESSAGE&amp;lt;/code&amp;gt; to check the application mode. If &amp;lt;code&amp;gt;APPMODE&amp;lt;/code&amp;gt; is set to &amp;lt;code&amp;gt;0&amp;lt;/code&amp;gt; (e.g. in a message handler) &amp;lt;code&amp;gt;GETMESSAGE&amp;lt;/code&amp;gt; stops receiving messages and returns the value &amp;lt;code&amp;gt;* * * *&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Applications started via &amp;lt;code&amp;gt;APPMAIN&amp;lt;/code&amp;gt; must never use &amp;lt;code&amp;gt;EXIT 0&amp;lt;/code&amp;gt; to terminate the shell. They must return to &amp;lt;code&amp;gt;APPMAIN&amp;lt;/code&amp;gt; (using a normal &amp;lt;code&amp;gt;EXIT 1&amp;lt;/code&amp;gt; command from the main macro) which performs some clean-up functions before the shell is terminated.&lt;br /&gt;
&lt;br /&gt;
== &amp;lt;var&amp;gt;CSF&amp;lt;/var&amp;gt;, the name of the current sound file ==&lt;br /&gt;
&lt;br /&gt;
The name (full path) of the current, i.e. active sound file is assigned to the variable &amp;lt;var&amp;gt;CSF&amp;lt;/var&amp;gt; when a &amp;lt;code&amp;gt;LOAD&amp;lt;/code&amp;gt; (open) or &amp;lt;code&amp;gt;UNLOAD&amp;lt;/code&amp;gt; (close) command is executed. If &amp;lt;var&amp;gt;CSF&amp;lt;/var&amp;gt; is not set (i.e. empty), no sound file is active.&lt;br /&gt;
&lt;br /&gt;
== &amp;lt;var&amp;gt;CSFH&amp;lt;/var&amp;gt;, properties of the current sound file ==&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;var&amp;gt;CSFH&amp;lt;/var&amp;gt; = &amp;lt;var&amp;gt;srate&amp;lt;/var&amp;gt; &amp;lt;var&amp;gt;channels&amp;lt;/var&amp;gt; &amp;lt;var&amp;gt;samples&amp;lt;/var&amp;gt; &amp;lt;var&amp;gt;code&amp;lt;/var&amp;gt; &amp;lt;var&amp;gt;type&amp;lt;/var&amp;gt; &amp;lt;var&amp;gt;mode&amp;lt;/var&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The parameters of the current/active sound file are assigned to the variable &amp;lt;code&amp;gt;CSFH&amp;lt;/code&amp;gt; when a &amp;lt;code&amp;gt;LOAD&amp;lt;/code&amp;gt; (open) or &amp;lt;code&amp;gt;UNLOAD&amp;lt;/code&amp;gt; (close) command is executed.&lt;br /&gt;
&lt;br /&gt;
== &amp;lt;var&amp;gt;EMSG&amp;lt;/var&amp;gt;, the current error message string ==&lt;br /&gt;
&lt;br /&gt;
If an error occurs, the textual description corresponding to the return code &amp;lt;var&amp;gt;RC&amp;lt;/var&amp;gt; is stored in &amp;lt;var&amp;gt;EMSG&amp;lt;/var&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Note that you can use the command [[Programmer_Guide/Command_Reference/EMSG|&amp;lt;code&amp;gt;EMSG&amp;lt;/code&amp;gt;]] to retrieve a description of an error code.&lt;br /&gt;
&lt;br /&gt;
== &amp;lt;var&amp;gt;PARENT&amp;lt;/var&amp;gt;, the parent window ==&lt;br /&gt;
&lt;br /&gt;
 PARENT = windowitemname&lt;br /&gt;
&lt;br /&gt;
The variable &amp;lt;code&amp;gt;PARENT&amp;lt;/code&amp;gt; is used by the window-management functions (e.g. in &amp;lt;code&amp;gt;GETMESSAGE&amp;lt;/code&amp;gt; or by &amp;lt;code&amp;gt;DOMODALDIALOG&amp;lt;/code&amp;gt;) to identify the parent (main) window of an application. In each application the name of the item (of type display or dialog) used as main window should be assigned to this variable (directly after creation). If &amp;lt;var&amp;gt;PARENT&amp;lt;/var&amp;gt; is not set, some functions or user interactions will not work correctly (e.g. minimize/restore).&lt;br /&gt;
&lt;br /&gt;
Special processing applied to the main window:&lt;br /&gt;
&lt;br /&gt;
*The main-window item&#039;s close message is translated by &amp;lt;code&amp;gt;GETMESSAGE&amp;lt;/code&amp;gt; into the message &amp;lt;code&amp;gt;SHELL thisshell EXIT&amp;lt;/code&amp;gt;.&lt;br /&gt;
*If the application is minimized, the main window is displayed in the taskbar while all other window are set to invisible. On restore, all windows are restored to their last status/position.&lt;br /&gt;
&lt;br /&gt;
== &amp;lt;var&amp;gt;RC&amp;lt;/var&amp;gt;, the return code ==&lt;br /&gt;
&lt;br /&gt;
The return code of the last executed command. See [[Programmer_Guide/General_Descriptions/Return_Codes#RC|Command Return Codes]] for details.&lt;br /&gt;
&lt;br /&gt;
== &amp;lt;var&amp;gt;RESULT&amp;lt;/var&amp;gt;, the macro result ==&lt;br /&gt;
&lt;br /&gt;
The value returned by the previous macro. See [[Programmer_Guide/General_Descriptions/Return_Codes#RESULT|Macro Results]] for details.&lt;br /&gt;
&lt;br /&gt;
== &amp;lt;var&amp;gt;SCRIPTDIRECTORY&amp;lt;/var&amp;gt;, the directory of the running script ==&lt;br /&gt;
&lt;br /&gt;
The shell variable &amp;lt;var&amp;gt;SCRIPTDIRECTORY&amp;lt;/var&amp;gt; is available when an {{STX}} script (*.sts) is running. It contains the directory path where the running script file is stored.&lt;br /&gt;
&lt;br /&gt;
== &amp;lt;var&amp;gt;SCRIPTFILEPATH&amp;lt;/var&amp;gt;, the filename of the running script ==&lt;br /&gt;
&lt;br /&gt;
The shell variable &amp;lt;var&amp;gt;SCRIPTFILEPATH&amp;lt;/var&amp;gt; is available when an {{STX}} script (*.sts) is running. It contains the name of the running script file including the path.&lt;br /&gt;
&lt;br /&gt;
==&amp;lt;var&amp;gt;SCRIPTMAINNAME&amp;lt;/var&amp;gt;, the running macro ==&lt;br /&gt;
&lt;br /&gt;
The shell variable &amp;lt;var&amp;gt;SCRIPTMAINNAME&amp;lt;/var&amp;gt; is available when an {{STX}} script (*.sts) is running. It contains the name of the running macro.&lt;br /&gt;
&lt;br /&gt;
== &amp;lt;var&amp;gt;SCRIPTREVISION&amp;lt;/var&amp;gt;, the creating {{STX}} version number ==&lt;br /&gt;
&lt;br /&gt;
The shell variable &amp;lt;var&amp;gt;SCRIPTREVISION&amp;lt;/var&amp;gt; contains the Subversion repository revision number of the {{STX}} version used to create the current script. For scripts created before r751, this variable is set to 0.&lt;br /&gt;
&lt;br /&gt;
== &amp;lt;var&amp;gt;SHELL&amp;lt;/var&amp;gt;, the executing and the calling shell ==&lt;br /&gt;
&lt;br /&gt;
The variable &amp;lt;var&amp;gt;SHELL&amp;lt;/var&amp;gt; is generated during the startup code execution of the shell called via the command [[Programmer_Guide/Command_Reference/SHELL|&amp;lt;code&amp;gt;SHELL&amp;lt;/code&amp;gt;]]. Its format is&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;var&amp;gt;thisshellid&amp;lt;/var&amp;gt; &amp;lt;var&amp;gt;callershellid&amp;lt;/var&amp;gt;&lt;br /&gt;
&lt;br /&gt;
with &amp;lt;var&amp;gt;callershellid&amp;lt;/var&amp;gt; being the ID of the calling shell, and &amp;lt;var&amp;gt;thisshellid&amp;lt;/var&amp;gt; being the ID of the new shell. The one exception is the master shell (the first one to be started (automatically) during program initialization) which only stores its own id in &amp;lt;var&amp;gt;SHELL&amp;lt;/var&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
== &amp;lt;var&amp;gt;STXREVISION&amp;lt;/var&amp;gt;, the executing {{STx}} version ==&lt;br /&gt;
&lt;br /&gt;
The shell variable &amp;lt;var&amp;gt;STXREVISION&amp;lt;/var&amp;gt; contains the Subversion repository revision number of the running {{STX}} version. This variable is only available in scripts.&lt;br /&gt;
&lt;br /&gt;
== &amp;lt;var&amp;gt;XRC&amp;lt;/var&amp;gt;, the system return code ==&lt;br /&gt;
&lt;br /&gt;
The value returned by the operating system when the command [[Programmer_Guide/Command_Reference/SYSTEM|&amp;lt;code&amp;gt;SYSTEM&amp;lt;/code&amp;gt;]] has been called.&lt;br /&gt;
&lt;br /&gt;
[[Category:Programmer Guide]][[Category:General Descriptions]]&lt;/div&gt;</summary>
		<author><name>Jw</name></author>
	</entry>
	<entry>
		<id>https://mediawiki.kfs.oeaw.ac.at/stx/docs/wiki/index.php?title=Programmer_Guide/Macro_Library/CDlgMap&amp;diff=10670</id>
		<title>Programmer Guide/Macro Library/CDlgMap</title>
		<link rel="alternate" type="text/html" href="https://mediawiki.kfs.oeaw.ac.at/stx/docs/wiki/index.php?title=Programmer_Guide/Macro_Library/CDlgMap&amp;diff=10670"/>
		<updated>2019-10-23T08:21:34Z</updated>

		<summary type="html">&lt;p&gt;Jw: /* Parameters: */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{DISPLAYTITLE:{{SUBPAGENAME}}}}&lt;br /&gt;
{{TOC limit|3}}&lt;br /&gt;
==CDlgMap : CObj==&lt;br /&gt;
&lt;br /&gt;
A class to help map [[Programmer_Guide/Shell_Items/Dialog|dialog]] control indices to meaningful keywords. If you use lots of controls in your dialogs, then associating them to keywords makes programming and maintenance a lot easier.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Constructor&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Create a new dialog map instance for the dialog-item &amp;lt;var&amp;gt;dlg&amp;lt;/var&amp;gt;. Note that this is the same as &amp;lt;code&amp;gt;CObj NEW CDlgMap&amp;lt;/code&amp;gt; &amp;lt;var&amp;gt;dlg&amp;lt;/var&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
=====Usage:=====&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;CDlgMap &amp;lt;var&amp;gt;dlg&amp;lt;/var&amp;gt;|* [ &amp;lt;var&amp;gt;type&amp;lt;/var&amp;gt; &amp;lt;var&amp;gt;icon&amp;lt;/var&amp;gt; &amp;lt;var&amp;gt;title&amp;lt;/var&amp;gt; ]&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=====Parameters:=====&lt;br /&gt;
&lt;br /&gt;
;&amp;lt;var&amp;gt;dlg&amp;lt;/var&amp;gt;&lt;br /&gt;
&lt;br /&gt;
:The id of a dialog item or an asterisk if the dialog should be created on construction. If the dialog map creates it&#039;s own dialog, it also destroys it on destruction.&lt;br /&gt;
&lt;br /&gt;
See the macro &amp;lt;code&amp;gt;[[Programmer_Guide/Macro_Library/CREATEMENU|CREATEMENU]]&amp;lt;/code&amp;gt; for details of the other parameters.&lt;br /&gt;
&lt;br /&gt;
=====Result:=====&lt;br /&gt;
&lt;br /&gt;
Always returns 0.&lt;br /&gt;
&lt;br /&gt;
=====Examples:=====&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;#map := CDlgMap $#dlg&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====CDlgMap Member Variables====&lt;br /&gt;
&lt;br /&gt;
The &amp;lt;code&amp;gt;CDlgMap&amp;lt;/code&amp;gt; class has the following member variables:&lt;br /&gt;
&lt;br /&gt;
;&amp;lt;var&amp;gt;&amp;amp;dlg&amp;lt;/var&amp;gt;:The dialog this class is mapping control ids to names.&lt;br /&gt;
;&amp;lt;var&amp;gt;&amp;amp;map&amp;lt;/var&amp;gt;:The extended table mapping indices to names.&lt;br /&gt;
;&amp;lt;var&amp;gt;&amp;amp;owned&amp;lt;/var&amp;gt;: True if the dialog was created by CDlgMap in the constructor.&lt;br /&gt;
;&amp;lt;var&amp;gt;&amp;amp;modal&amp;lt;/var&amp;gt;: Flag used for begin/end modal dialog&lt;br /&gt;
&lt;br /&gt;
====Member Functions====&lt;br /&gt;
&lt;br /&gt;
The &amp;lt;code&amp;gt;CDlgMap&amp;lt;/code&amp;gt; class has the following member functions. See CObj Member Functions for a list of functions implemented in the parent class.&lt;br /&gt;
&lt;br /&gt;
===BEGIN===&lt;br /&gt;
&lt;br /&gt;
Displays the dialog as a modal dialog.&lt;br /&gt;
&lt;br /&gt;
=====Usage:=====&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;&amp;lt;var&amp;gt;mapinst&amp;lt;/var&amp;gt; BEGIN [ &amp;lt;var&amp;gt;focuscontrol&amp;lt;/var&amp;gt; ; &amp;lt;var&amp;gt;windowpos&amp;lt;/var&amp;gt; ]&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=====Parameters:=====&lt;br /&gt;
&lt;br /&gt;
;&amp;lt;var&amp;gt;focusControl&amp;lt;/var&amp;gt;&lt;br /&gt;
&lt;br /&gt;
:The control name assigned to the control which should receive keyboard focus.&lt;br /&gt;
&lt;br /&gt;
;&amp;lt;var&amp;gt;windowPos&amp;lt;/var&amp;gt;&lt;br /&gt;
&lt;br /&gt;
:The position to display the dialog window. See [[Programmer_Guide/Macro_Library/DOMODALDIALOG#BEGIN|DoModalDialog Begin]] for a description of this parameter.&lt;br /&gt;
&lt;br /&gt;
=====Notes:=====&lt;br /&gt;
&lt;br /&gt;
This function uses the macro &amp;lt;code&amp;gt;DoModalDialog&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
===CI===&lt;br /&gt;
&lt;br /&gt;
Get the control index mapped to the string &amp;lt;var&amp;gt;controlName&amp;lt;/var&amp;gt;. If the name does not exist in the mapping table, then the next free index is mapped to the string &amp;lt;var&amp;gt;controlName&amp;lt;/var&amp;gt; and the index is returned. The first index returned by &amp;lt;code&amp;gt;CI&amp;lt;/code&amp;gt; is the same as the number of dialog controls (0 for a new dialog).&lt;br /&gt;
&lt;br /&gt;
=====Usage:=====&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;&amp;lt;var&amp;gt;dlgmap&amp;lt;/var&amp;gt; CI &amp;lt;var&amp;gt;controlName&amp;lt;/var&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=====Parameters:=====&lt;br /&gt;
&lt;br /&gt;
;&amp;lt;var&amp;gt;controlName&amp;lt;/var&amp;gt;&lt;br /&gt;
&lt;br /&gt;
:The name to map to the control or an empty string to use the control index as the name.&lt;br /&gt;
&lt;br /&gt;
=====Result:=====&lt;br /&gt;
&lt;br /&gt;
The control index mapped to the string &amp;lt;var&amp;gt;controlName&amp;lt;/var&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
===CN===&lt;br /&gt;
&lt;br /&gt;
Get the name mapped to the control index &amp;lt;var&amp;gt;cindex&amp;lt;/var&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
=====Usage:=====&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;&amp;lt;var&amp;gt;dlgmap&amp;lt;/var&amp;gt; CN &amp;lt;var&amp;gt;cindex&amp;lt;/var&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=====Parameters:=====&lt;br /&gt;
&lt;br /&gt;
;&amp;lt;var&amp;gt;cindex&amp;lt;/var&amp;gt;&lt;br /&gt;
&lt;br /&gt;
:The index of the control.&lt;br /&gt;
&lt;br /&gt;
=====Result:=====&lt;br /&gt;
&lt;br /&gt;
The name mapped to the control index &amp;lt;var&amp;gt;cindex&amp;lt;/var&amp;gt; or an empty string if the index is not mapped.&lt;br /&gt;
&lt;br /&gt;
===DESTROY===&lt;br /&gt;
&lt;br /&gt;
=====Usage:=====&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;&amp;lt;var&amp;gt;dlgmap&amp;lt;/var&amp;gt; DESTROY&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=====Description:=====&lt;br /&gt;
&lt;br /&gt;
Delete the dialog map object &amp;lt;var&amp;gt;dlgmap&amp;lt;/var&amp;gt;. Note that this is the same as calling &amp;lt;code&amp;gt;COBJ DELETE&amp;lt;/code&amp;gt; &amp;lt;var&amp;gt;dlgmap&amp;lt;/var&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
===DLG===&lt;br /&gt;
&lt;br /&gt;
Returns the dialog map&#039;s dialog item.&lt;br /&gt;
&lt;br /&gt;
=====Usage:=====&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;&amp;lt;var&amp;gt;mapinst&amp;lt;/var&amp;gt; Dlg&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=====Result:=====&lt;br /&gt;
&lt;br /&gt;
The dialog map&#039;s dialog item.&lt;br /&gt;
&lt;br /&gt;
===END===&lt;br /&gt;
&lt;br /&gt;
End the modal dialog and destroy map. This is the same as &amp;lt;var&amp;gt;mapinst&amp;lt;/var&amp;gt; &amp;lt;code&amp;gt;DESTROY&amp;lt;/code&amp;gt;. If the dialog item was created in the constructer or a modal dialog loop has been started, the dialog item is also deleted.&lt;br /&gt;
&lt;br /&gt;
=====Usage:=====&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;&amp;lt;var&amp;gt;mapinst&amp;lt;/var&amp;gt; END&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===FCI===&lt;br /&gt;
&lt;br /&gt;
=====Usage:=====&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;&amp;lt;var&amp;gt;dlgmap&amp;lt;/var&amp;gt; FCI&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=====Result:=====&lt;br /&gt;
&lt;br /&gt;
The index of the first (lowest) mapped control.&lt;br /&gt;
&lt;br /&gt;
=====Description:=====&lt;br /&gt;
&lt;br /&gt;
Get the index of the first mapped control. This is actually the next free dialog index at the time of construction and therefore can be greater than 1 even if there are no mapped controls.&lt;br /&gt;
&lt;br /&gt;
===ISCI===&lt;br /&gt;
&lt;br /&gt;
Query whether a control with a specified name or index exists.&lt;br /&gt;
&lt;br /&gt;
=====Usage:=====&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;&amp;lt;var&amp;gt;dlgmap&amp;lt;/var&amp;gt; ISCI &amp;lt;var&amp;gt;controlName&amp;lt;/var&amp;gt;|&amp;lt;var&amp;gt;controlIndex&amp;lt;/var&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=====Parameters:=====&lt;br /&gt;
&lt;br /&gt;
;&amp;lt;var&amp;gt;controlName&amp;lt;/var&amp;gt;&lt;br /&gt;
&lt;br /&gt;
:The name used to map a control index in a previous &amp;lt;code&amp;gt;ci&amp;lt;/code&amp;gt; function call.&lt;br /&gt;
&lt;br /&gt;
;&amp;lt;var&amp;gt;controlIndex&amp;lt;/var&amp;gt;&lt;br /&gt;
&lt;br /&gt;
:An index greater or equal to &amp;lt;code&amp;gt;0&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
=====Result:=====&lt;br /&gt;
&lt;br /&gt;
The name of the control (&amp;lt;var&amp;gt;controlName&amp;lt;/var&amp;gt;) if the control is defined, or an empty string.&lt;br /&gt;
&lt;br /&gt;
===LOOP===&lt;br /&gt;
&lt;br /&gt;
Executes the modal dialog message loop (via DoModalDialog Loop).&lt;br /&gt;
&lt;br /&gt;
=====Usage:=====&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;&amp;lt;var&amp;gt;mapinst&amp;lt;/var&amp;gt; LOOP &amp;lt;var&amp;gt;okayControl&amp;lt;/var&amp;gt; &amp;lt;var&amp;gt;cancelControl&amp;lt;/var&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=====Parameters:=====&lt;br /&gt;
&lt;br /&gt;
;&amp;lt;var&amp;gt;okayControl&amp;lt;/var&amp;gt;&lt;br /&gt;
&lt;br /&gt;
:Either the index or control name of the dialog control to use as the OK button (when it is pressed, the dialog closes).&lt;br /&gt;
&lt;br /&gt;
;&amp;lt;var&amp;gt;cancelControl&amp;lt;/var&amp;gt;&lt;br /&gt;
&lt;br /&gt;
:Either the index or control name of the dialog control to use as the cancel button (when it is pressed, the dialog closes).&lt;br /&gt;
&lt;br /&gt;
=====Result:=====&lt;br /&gt;
&lt;br /&gt;
A message id and parameters :&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;msgId msgPar&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
For &amp;lt;code&amp;gt;COMMAND&amp;lt;/code&amp;gt; and &amp;lt;code&amp;gt;UPDATE&amp;lt;/code&amp;gt; messages, the original &amp;lt;code&amp;gt;msgPar&amp;lt;/code&amp;gt; is converted to a control name string if possible (if it has an associated name in the map).&lt;br /&gt;
&lt;br /&gt;
===NC===&lt;br /&gt;
&lt;br /&gt;
=====Usage:=====&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;&amp;lt;var&amp;gt;dlgmap&amp;lt;/var&amp;gt; NC&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=====Result:=====&lt;br /&gt;
&lt;br /&gt;
The number of controls that have been mapped.&lt;br /&gt;
&lt;br /&gt;
=====Description:=====&lt;br /&gt;
&lt;br /&gt;
Get the total number of controls which are mapped.&lt;br /&gt;
&lt;br /&gt;
===SETCI===&lt;br /&gt;
&lt;br /&gt;
Like the CI member function, this function creates a map between a string and an integer id. The result returned, however, can be used directly as the first part of a &amp;lt;code&amp;gt;SET dialog controlIndex&amp;lt;/code&amp;gt; command.&lt;br /&gt;
&lt;br /&gt;
=====Usage:=====&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;&amp;lt;var&amp;gt;dlgmap&amp;lt;/var&amp;gt; SETCI &amp;lt;var&amp;gt;controlName&amp;lt;/var&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=====Parameters:=====&lt;br /&gt;
&lt;br /&gt;
;&amp;lt;var&amp;gt;controlName&amp;lt;/var&amp;gt;&lt;br /&gt;
&lt;br /&gt;
:The name to map to the control or an empty string to use the control index as the name.&lt;br /&gt;
&lt;br /&gt;
=====Result:=====&lt;br /&gt;
&lt;br /&gt;
Returns the dialog item and control index mapped to the string &amp;lt;var&amp;gt;controlName&amp;lt;/var&amp;gt;:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;dialogItem controlIndex&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===SETHELP===&lt;br /&gt;
&lt;br /&gt;
The &amp;lt;code&amp;gt;CDlgMap&amp;lt;/code&amp;gt; function &amp;lt;code&amp;gt;SETHELP&amp;lt;/code&amp;gt; associates the dialog with a help topic referenced by an &amp;lt;code&amp;gt;IREF&amp;lt;/code&amp;gt;. When used in conjunction with the &amp;lt;code&amp;gt;CDlgMap&amp;lt;/code&amp;gt; functions &amp;lt;code&amp;gt;BEGIN&amp;lt;/code&amp;gt; and &amp;lt;code&amp;gt;END&amp;lt;/code&amp;gt;, the F1 key will call the relevant help topic if pressed whilst the associated dialog is being displayed.&lt;br /&gt;
&lt;br /&gt;
=====Usage:=====&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;&amp;lt;var&amp;gt;dlgmap&amp;lt;/var&amp;gt; SETHELP &amp;lt;var&amp;gt;iref&amp;lt;/var&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=====Parameters:=====&lt;br /&gt;
&lt;br /&gt;
;&amp;lt;var&amp;gt;iref&amp;lt;/var&amp;gt;&lt;br /&gt;
&lt;br /&gt;
:The IREF to the relevant help topic. Note that the IREF must be present in the stxconfig.xml file.&lt;br /&gt;
&lt;br /&gt;
=====Result:=====&lt;br /&gt;
&lt;br /&gt;
Returns the dialog item and control index mapped to the string &amp;lt;var&amp;gt;controlName&amp;lt;/var&amp;gt;:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;dialogItem controlIndex&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=====Examples:=====&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;$#dmap sethelp &#039;Toolbox/AutoSeg/ASeg_Short_Clicks_Segmentation&#039;&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====Examples====&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
[Macro cdlgmap_example]&lt;br /&gt;
// create map and dialog&lt;br /&gt;
#dmap := cdlgmap * dialog * &#039;CDlgMap Test&#039;&lt;br /&gt;
// create controls&lt;br /&gt;
$($#dmap setci ok) button 0 0 &#039;&amp;amp;OK&#039; * 8&lt;br /&gt;
$($#dmap setci cancel) button 1 0 &#039;&amp;amp;Cancel&#039; * 8&lt;br /&gt;
// display dialog and react to user input&lt;br /&gt;
$#dmap begin&lt;br /&gt;
do forever&lt;br /&gt;
        $($#dmap dlg) /W&lt;br /&gt;
        // use the CDlgMap LOOP command, which translates dialog ids&lt;br /&gt;
        // into control names&lt;br /&gt;
        readstr &#039;$($#dmap loop ok cancel)&#039; #msgId #ctrlName&lt;br /&gt;
        $($#dmap dlg) /R        &lt;br /&gt;
        if &#039;$#msgId&#039; == &#039;command&#039; then&lt;br /&gt;
                if &#039;$#ctrlName&#039; == &#039;ok&#039; then&lt;br /&gt;
                        // save settings&lt;br /&gt;
                        break&lt;br /&gt;
                else if &#039;$#ctrlName&#039; == &#039;cancel&#039; then&lt;br /&gt;
                        break&lt;br /&gt;
                end&lt;br /&gt;
        else if &#039;$#msgId&#039; == &#039;update&#039; then&lt;br /&gt;
                // react to update&lt;br /&gt;
        end&lt;br /&gt;
end&lt;br /&gt;
// destroy dialog and map&lt;br /&gt;
$#dmap end&lt;br /&gt;
exit 1 int 0&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;/div&gt;</summary>
		<author><name>Jw</name></author>
	</entry>
	<entry>
		<id>https://mediawiki.kfs.oeaw.ac.at/stx/docs/wiki/index.php?title=Programmer_Guide/Shell_Items/Graph/SET_GRAPH&amp;diff=10669</id>
		<title>Programmer Guide/Shell Items/Graph/SET GRAPH</title>
		<link rel="alternate" type="text/html" href="https://mediawiki.kfs.oeaw.ac.at/stx/docs/wiki/index.php?title=Programmer_Guide/Shell_Items/Graph/SET_GRAPH&amp;diff=10669"/>
		<updated>2019-10-18T07:37:20Z</updated>

		<summary type="html">&lt;p&gt;Jw: /* Add or update a metasegment */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{DISPLAYTITLE:{{SUBPAGENAME}}}}&lt;br /&gt;
{{Graph Item}}&lt;br /&gt;
A [[Programmer_Guide/Shell_Items/Graph|graph]] consists of eight splitters. It has one &amp;lt;code&amp;gt;X&amp;lt;/code&amp;gt; input (which is not always used), a user-defined number of &amp;lt;code&amp;gt;Y&amp;lt;/code&amp;gt; inputs and a &amp;lt;code&amp;gt;CURSOR&amp;lt;/code&amp;gt; output. Each &amp;lt;code&amp;gt;Y&amp;lt;/code&amp;gt; input can be used to display a function (for some functions, in combination with the &amp;lt;code&amp;gt;X&amp;lt;/code&amp;gt; input). All splitters in a graph and all functions displayed in a graph use the same &amp;lt;code&amp;gt;X&amp;lt;/code&amp;gt; and &amp;lt;code&amp;gt;Y&amp;lt;/code&amp;gt; scale settings. Each function is assigned to one splitter in which it should be displayed. More than one function can be displayed in one splitter. The functions displayed in a splitter can even be different but they should be compatible (e.g. it makes no sense to assign a &amp;lt;code&amp;gt;SPECTROGRAM&amp;lt;/code&amp;gt; and a &amp;lt;code&amp;gt;WAVEFORM&amp;lt;/code&amp;gt; to the same splitter). Each splitter can be set to be visible or hidden.&lt;br /&gt;
&lt;br /&gt;
For all color settings (and palettes) used by a graph, one color can be assigned for the screen and one for the printer. To assign screen colors use the commands as described above. For printer color setup use the same commands a second time with the option &amp;lt;code&amp;gt;/Print&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
To minimize screen updates, most setup commands do not directly affect the display. The setup parameters are stored and must be explicitly transferred to the display. For this purpose the option &amp;lt;code&amp;gt;/Apply&amp;lt;/code&amp;gt; can be used with any graph-item command.&lt;br /&gt;
&lt;br /&gt;
The formats and values for color and font arguments used in the graph commands are described in detail in the Colors and Color Arguments topic in the General section.&lt;br /&gt;
&lt;br /&gt;
==Inputs and plots==&lt;br /&gt;
&lt;br /&gt;
Graphs items can display different types of function plots. The function data is passed to the graph via the graph&#039;s X and Y inputs. You set up the relationship between the data (a value item, SPU, or [[Programmer_Guide/Shell_Items/File/NEW_FILE#GDX_Files|GDX]] file) and the graph&#039;s inputs using the following &amp;lt;code&amp;gt;SET graph X&amp;lt;/code&amp;gt; and &amp;lt;code&amp;gt;SET graph Y&amp;lt;/code&amp;gt; commands.&lt;br /&gt;
&lt;br /&gt;
===Connecting graph inputs===&lt;br /&gt;
&lt;br /&gt;
Configure a graph&#039;s x and y axis for data input.&lt;br /&gt;
&lt;br /&gt;
 SET &amp;lt;var&amp;gt;graph&amp;lt;/var&amp;gt; X &amp;lt;var&amp;gt;data&amp;lt;/var&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The graph item&#039;s &amp;lt;code&amp;gt;X&amp;lt;/code&amp;gt; command configures a graph&#039;s x-axis data input. The exact configuration necessary depends on the type of plot which will be drawn.&lt;br /&gt;
&lt;br /&gt;
 SET &amp;lt;var&amp;gt;graph&amp;lt;/var&amp;gt; Y &amp;lt;var&amp;gt;index&amp;lt;/var&amp;gt; &amp;lt;var&amp;gt;data&amp;lt;/var&amp;gt; &amp;lt;var&amp;gt;function&amp;lt;/var&amp;gt; &amp;lt;var&amp;gt;splitter&amp;lt;/var&amp;gt; &amp;lt;var&amp;gt;params&amp;lt;/var&amp;gt; /Realtime&lt;br /&gt;
&lt;br /&gt;
The graph item&#039;s &amp;lt;code&amp;gt;Y&amp;lt;/code&amp;gt; command configures the graph&#039;s y-axis data input. The &amp;lt;var&amp;gt;function&amp;lt;/var&amp;gt; parameter specifies which type of plot will be drawn. These plots are described individually in more detail below.&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;einrahmen&amp;quot;&lt;br /&gt;
!option!!description&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;var&amp;gt;index&amp;lt;/var&amp;gt;&lt;br /&gt;
| The zero-based input index (0&amp;amp;hellip;inputs–1)&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;var&amp;gt;data&amp;lt;/var&amp;gt;&lt;br /&gt;
|  data parameter. This can be the output of an SPU (spuitem.output) or of a value item (valueitem).&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;var&amp;gt;function&amp;lt;/var&amp;gt;&lt;br /&gt;
| One out of &amp;lt;code&amp;gt;XYPLOT&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;PARAMETER&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;WATERFALL&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;SPECTROGRAM&amp;lt;/code&amp;gt; and &amp;lt;code&amp;gt;WAVEFORM&amp;lt;/code&amp;gt;.&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;var&amp;gt;splitter&amp;lt;/var&amp;gt;&lt;br /&gt;
| The number of the graph splitter index (1&amp;amp;hellip;8) where the function should be displayed. Note that splitter visibility is set using the &amp;lt;code&amp;gt;SPLITTERS&amp;lt;/code&amp;gt; command.&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;var&amp;gt;params&amp;lt;/var&amp;gt;&lt;br /&gt;
| The function plot configuration parameters (see the specific plot below).&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;/Realtime&amp;lt;/code&amp;gt;&lt;br /&gt;
| The real-time option &amp;lt;code&amp;gt;/R&amp;lt;/code&amp;gt; causes the function to be re-displayed each time an input is updated. If this option is used, zooming is not possible.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
The Y input &#039;&#039;&#039;MUST&#039;&#039;&#039; be defined before the X input on the first call (redefining the Y axis once both x and y inputs have been defined is not a problem). Orienting a graph (e.g. rotating 90 degrees) is achieved with the command [[Shell_Items/Graph/SET_GRAPH#ORIENTATION|&amp;lt;code&amp;gt;SET graph ORIENTATION&amp;lt;/code&amp;gt;]]. Use of the options &amp;lt;code&amp;gt;/Horizontal&amp;lt;/code&amp;gt; and &amp;lt;code&amp;gt;/Vertical&amp;lt;/code&amp;gt; is no longer supported.&lt;br /&gt;
&lt;br /&gt;
=== Disconnecting graph inputs ===&lt;br /&gt;
&lt;br /&gt;
 SET &amp;lt;var&amp;gt;graph&amp;lt;/var&amp;gt; Y &amp;lt;var&amp;gt;index&amp;lt;/var&amp;gt;&lt;br /&gt;
 SET &amp;lt;var&amp;gt;graph&amp;lt;/var&amp;gt; X&lt;br /&gt;
&lt;br /&gt;
Disconnect any inputs previously assigned to the graph&#039;s input &amp;lt;var&amp;gt;index&amp;lt;/var&amp;gt;.&lt;br /&gt;
{|class=&amp;quot;einrahmen&amp;quot;&lt;br /&gt;
!option!!description&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;var&amp;gt;index&amp;lt;/var&amp;gt;&lt;br /&gt;
| The index of the input (0&amp;amp;hellip;nInputs-1).&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Outputs are automatically disconnected if the item owning the output or the graph item itself is deleted.If the connection is synchronized (e.g. the connected SPU item is still running) disconnection is not possible.&lt;br /&gt;
&lt;br /&gt;
===Plots===&lt;br /&gt;
&lt;br /&gt;
The {{STX}} graph item can draw a number of different plot types.&lt;br /&gt;
&lt;br /&gt;
====XYPLOT / FUNCTION====&lt;br /&gt;
&lt;br /&gt;
 SET &amp;lt;var&amp;gt;graph&amp;lt;/var&amp;gt; Y &amp;lt;var&amp;gt;index&amp;lt;/var&amp;gt; &amp;lt;var&amp;gt;yout&amp;lt;/var&amp;gt; XYPLOT &amp;lt;var&amp;gt;splitter&amp;lt;/var&amp;gt; &amp;lt;var&amp;gt;color&amp;lt;/var&amp;gt; &amp;lt;var&amp;gt;style&amp;lt;/var&amp;gt; &amp;lt;var&amp;gt;line&amp;lt;/var&amp;gt; &amp;lt;var&amp;gt;width&amp;lt;/var&amp;gt; &amp;lt;var&amp;gt;sym&amp;lt;/var&amp;gt; [/F=noPlotValue] [/Realtime]&lt;br /&gt;
&lt;br /&gt;
Display a two-dimensional function plot: Y&amp;lt;sub&amp;gt;i&amp;lt;/sub&amp;gt; = f(X&amp;lt;sub&amp;gt;i&amp;lt;/sub&amp;gt;). The outputs assigned to the X and Y inputs must be vectors of the same length. The option &amp;lt;code&amp;gt;/F=&amp;lt;var&amp;gt;noplot&amp;lt;/var&amp;gt;&amp;lt;/code&amp;gt; can be used to suppress plotting all the points where Y&amp;lt;sub&amp;gt;i&amp;lt;/sub&amp;gt; equals &amp;lt;var&amp;gt;noplot&amp;lt;/var&amp;gt; (useful for f0-tracks). If the option &amp;lt;code&amp;gt;/Realtime&amp;lt;/code&amp;gt; is used, the function is redisplayed each time an input is updated. Note that zooming is &#039;&#039;&#039;not possible&#039;&#039;&#039; in conjunction with the &amp;lt;code&amp;gt;/Realtime&amp;lt;/code&amp;gt; flag. Otherwise, the function is displayed on synchronisation (when the SPU stops). The &amp;lt;code&amp;gt;DASH&amp;lt;/code&amp;gt; and &amp;lt;code&amp;gt;DOT&amp;lt;/code&amp;gt; line styles only support widths of &amp;lt;code&amp;gt;0&amp;lt;/code&amp;gt;. The keywords &#039;&#039;&#039;XYPLOT&#039;&#039;&#039; and &#039;&#039;&#039;FUNCTION&#039;&#039;&#039; are interchangeable.&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;einrahmen&amp;quot;&lt;br /&gt;
!option!!description&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;var&amp;gt;xout&amp;lt;/var&amp;gt;&lt;br /&gt;
| The x data vector (an output of an &amp;lt;code&amp;gt;SPU&amp;lt;/code&amp;gt;). This must be the same length as &amp;lt;var&amp;gt;yout&amp;lt;/var&amp;gt;.&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;var&amp;gt;yout&amp;lt;/var&amp;gt;&lt;br /&gt;
| The y data vector (an output of an &amp;lt;code&amp;gt;SPU&amp;lt;/code&amp;gt;). This must be the same length as &amp;lt;var&amp;gt;xout&amp;lt;/var&amp;gt;.&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;var&amp;gt;colour&amp;lt;/var&amp;gt;&lt;br /&gt;
| The color of the function line (either a color name or an RGB code).&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;var&amp;gt;style&amp;lt;/var&amp;gt;&lt;br /&gt;
| The plot style. Either dotted (&amp;lt;code&amp;gt;POINTS&amp;lt;/code&amp;gt;), a line (&amp;lt;code&amp;gt;LINES&amp;lt;/code&amp;gt;), a solid area (&amp;lt;code&amp;gt;AREA&amp;lt;/code&amp;gt;) or no line (&amp;lt;code&amp;gt;NONE&amp;lt;/code&amp;gt;). If &#039;&#039;POINTS&#039;&#039; is set, then one point is drawn per Y data point. If &#039;&#039;LINES&#039;&#039; is set, then a line is drawn between all Y data points. If &#039;&#039;AREA&#039;&#039; is set, then the area below the Y data points is filled.&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;var&amp;gt;line&amp;lt;/var&amp;gt;&lt;br /&gt;
| The line style (&amp;lt;code&amp;gt;SOLID&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;DASH&amp;lt;/code&amp;gt; or &amp;lt;code&amp;gt;DOT&amp;lt;/code&amp;gt;).&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;var&amp;gt;width&amp;lt;/var&amp;gt;&lt;br /&gt;
| The width of the function line (&amp;lt;code&amp;gt;0&amp;lt;/code&amp;gt;-&amp;lt;code&amp;gt;4&amp;lt;/code&amp;gt; if line is &amp;lt;code&amp;gt;SOLID&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;0&amp;lt;/code&amp;gt; if &amp;lt;var&amp;gt;line&amp;lt;/var&amp;gt; is &amp;lt;code&amp;gt;DOT&amp;lt;/code&amp;gt; or &amp;lt;code&amp;gt;DASH&amp;lt;/code&amp;gt;).&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;var&amp;gt;sym&amp;lt;/var&amp;gt;&lt;br /&gt;
| The symbol to use at each parameter (&amp;lt;code&amp;gt;NONE&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;SQUARE&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;TRIANGLE&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;CIRCLE&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;CROSS&amp;lt;/code&amp;gt; or &amp;lt;code&amp;gt;DIAMOND&amp;lt;/code&amp;gt;).&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;/F=&amp;lt;var&amp;gt;noPlotValue&amp;lt;/var&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
| Use this option to suppress a particular value (&amp;lt;var&amp;gt;noPlotValue&amp;lt;/var&amp;gt;) from the plot&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
 SET &amp;lt;var&amp;gt;graph&amp;lt;/var&amp;gt; X &amp;lt;var&amp;gt;xout&amp;lt;/var&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Assign the X input vector. The X input vector must be the same length as the Y input vector. The Y input vector must be set before calling this command.&lt;br /&gt;
&lt;br /&gt;
====PARAMETER====&lt;br /&gt;
&lt;br /&gt;
 SET &amp;lt;var&amp;gt;graph&amp;lt;/var&amp;gt; Y &amp;lt;var&amp;gt;index&amp;lt;/var&amp;gt; &amp;lt;var&amp;gt;yout&amp;lt;/var&amp;gt; PARAMETER &amp;lt;var&amp;gt;splitter&amp;lt;/var&amp;gt; &amp;lt;var&amp;gt;nfrm&amp;lt;/var&amp;gt; &amp;lt;var&amp;gt;color&amp;lt;/var&amp;gt; &amp;lt;var&amp;gt;style&amp;lt;/var&amp;gt; &amp;lt;var&amp;gt;line&amp;lt;/var&amp;gt; &amp;lt;var&amp;gt;width&amp;lt;/var&amp;gt;  &amp;lt;var&amp;gt;sym&amp;lt;/var&amp;gt; [/F=noplot /Realtime]&lt;br /&gt;
&lt;br /&gt;
Display the Y data as a function of time (frame index). The connected output can be a numeric value or a vector. Each value written to Y is appended to the time track. The options &amp;lt;code&amp;gt;/F&amp;lt;/code&amp;gt; and &amp;lt;code&amp;gt;/Realtime&amp;lt;/code&amp;gt; have the same meaning as for &amp;lt;code&amp;gt;[[#XYPLOT / FUNCTION|XYPLOT]]&amp;lt;/code&amp;gt;. Note, however, that zooming does not work for the parameter plot when the real-time flag is used. This function is used to display parameter time tracks in (frame-by-frame) analysis applications. The &amp;lt;code&amp;gt;DASH&amp;lt;/code&amp;gt; and &amp;lt;code&amp;gt;DOT&amp;lt;/code&amp;gt; line styles only support widths of &amp;lt;code&amp;gt;0&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;einrahmen&amp;quot;&lt;br /&gt;
!option!!description&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;var&amp;gt;yout&amp;lt;/var&amp;gt;&lt;br /&gt;
| The parameter values (one number per frame).&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;var&amp;gt;nfrm&amp;lt;/var&amp;gt;&lt;br /&gt;
| The number of frames (parameter values). If real-time mode is specified (/R), this is the number of frames per screen.&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;var&amp;gt;color&amp;lt;/var&amp;gt;&lt;br /&gt;
| The line color (color name or rgb code).&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;var&amp;gt;style&amp;lt;/var&amp;gt;&lt;br /&gt;
| The plot style (&amp;lt;code&amp;gt;POINTS&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;LINES&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;AREA,STEPS&amp;lt;/code&amp;gt;).&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;var&amp;gt;line&amp;lt;/var&amp;gt;&lt;br /&gt;
| The line style (&amp;lt;code&amp;gt;SOLID&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;DASH&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;DOT&amp;lt;/code&amp;gt;).&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;var&amp;gt;width&amp;lt;/var&amp;gt;&lt;br /&gt;
| The line width (&amp;lt;code&amp;gt;0&amp;lt;/code&amp;gt;&amp;amp;hellip;&amp;lt;code&amp;gt;4&amp;lt;/code&amp;gt; – &amp;lt;code&amp;gt;SOLID&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;0&amp;lt;/code&amp;gt; – &amp;lt;code&amp;gt;DASH&amp;lt;/code&amp;gt; and &amp;lt;code&amp;gt;DOT&amp;lt;/code&amp;gt;)&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;var&amp;gt;sym&amp;lt;/var&amp;gt;&lt;br /&gt;
| The symbol to use at each parameter (&amp;lt;code&amp;gt;NONE&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;SQUARE&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;TRIANGLE&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;CIRCLE&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;CROSS&amp;lt;/code&amp;gt; or &amp;lt;code&amp;gt;DIAMOND&amp;lt;/code&amp;gt;).&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
See [[#Connecting_graph_inputs|Connecting graph inputs]] for parameters not described here.&lt;br /&gt;
&lt;br /&gt;
No X input connection is necessary. The X (time) scale is defined by the number of frames &amp;lt;var&amp;gt;nfrm&amp;lt;/var&amp;gt; specified for the Y data.&lt;br /&gt;
&lt;br /&gt;
====WATERFALL====&lt;br /&gt;
&lt;br /&gt;
 SET &amp;lt;var&amp;gt;graph&amp;lt;/var&amp;gt; Y &amp;lt;var&amp;gt;index&amp;lt;/var&amp;gt; &amp;lt;var&amp;gt;yout&amp;lt;/var&amp;gt; WATERFALL &amp;lt;var&amp;gt;splitter&amp;lt;/var&amp;gt; &amp;lt;var&amp;gt;nfrm&amp;lt;/var&amp;gt; &amp;lt;var&amp;gt;nspectra&amp;lt;/var&amp;gt; &amp;lt;var&amp;gt;lcolor&amp;lt;/var&amp;gt; &amp;lt;var&amp;gt;fcolor&amp;lt;/var&amp;gt; &amp;lt;var&amp;gt;style&amp;lt;/var&amp;gt; &amp;lt;var&amp;gt;width&amp;lt;/var&amp;gt; [/Realtime] &lt;br /&gt;
 SET &amp;lt;var&amp;gt;graph&amp;lt;/var&amp;gt; X &amp;lt;var&amp;gt;xout&amp;lt;/var&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The output connected to X contains the frequency values, and the output connected to Ynum contains the magnitude values. Both must be vectors of the same length. The X scale is written only once.&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;einrahmen&amp;quot;&lt;br /&gt;
!option!!description&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;var&amp;gt;yout&amp;lt;/var&amp;gt;&lt;br /&gt;
| The waveform samples (a vector or a number).&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;var&amp;gt;splitter&amp;lt;/var&amp;gt;&lt;br /&gt;
| The splitter to show the function in.&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;var&amp;gt;nfrm&amp;lt;/var&amp;gt;&lt;br /&gt;
| The number of frames.&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;var&amp;gt;nspectra&amp;lt;/var&amp;gt;&lt;br /&gt;
| The number of spectra to display.&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;var&amp;gt;lcolor&amp;lt;/var&amp;gt;&lt;br /&gt;
| The line color (color name or rgb code).&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;var&amp;gt;fcolor&amp;lt;/var&amp;gt;&lt;br /&gt;
| The fill color (color name or rgb code).&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;var&amp;gt;style&amp;lt;/var&amp;gt;&lt;br /&gt;
| The line style (&amp;lt;code&amp;gt;SOLID&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;DASH&amp;lt;/code&amp;gt; or &amp;lt;code&amp;gt;DOT&amp;lt;/code&amp;gt;).&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;var&amp;gt;width&amp;lt;/var&amp;gt;&lt;br /&gt;
| The width of the function line (&amp;lt;code&amp;gt;0&amp;lt;/code&amp;gt;-&amp;lt;code&amp;gt;4&amp;lt;/code&amp;gt;).&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
See [[#Connecting_graph_inputs|Connecting graph inputs]] for parameters not described here.&lt;br /&gt;
&lt;br /&gt;
====SPECTROGRAM====&lt;br /&gt;
&lt;br /&gt;
===== &amp;lt;code&amp;gt;SET graph Y&amp;lt;/code&amp;gt; =====&lt;br /&gt;
&lt;br /&gt;
 SET &amp;lt;var&amp;gt;graph&amp;lt;/var&amp;gt; Y &amp;lt;var&amp;gt;index&amp;lt;/var&amp;gt; &amp;lt;var&amp;gt;ydata&amp;lt;/var&amp;gt; SPECTROGRAM &amp;lt;var&amp;gt;splitter&amp;lt;/var&amp;gt; &amp;lt;var&amp;gt;nframes&amp;lt;/var&amp;gt; &amp;lt;var&amp;gt;amin&amp;lt;/var&amp;gt; &amp;lt;var&amp;gt;amax&amp;lt;/var&amp;gt; &amp;lt;var&amp;gt;palette&amp;lt;/var&amp;gt; [ /R ]&lt;br /&gt;
&lt;br /&gt;
The output connected to Y&amp;lt;sub&amp;gt;num&amp;lt;/sub&amp;gt; contains the values (magnitude, phase,&amp;amp;hellip;) to be displayed in colors. The Y vector must be the same length as the X vector. The Y values are converted to colors and either displayed each time the input is updated (if the real-time option &amp;lt;code&amp;gt;/R&amp;lt;/code&amp;gt; is specified), or on synchronization (when the SPU stops). The whole spectrogram consists of &amp;lt;var&amp;gt;nfrm&amp;lt;/var&amp;gt; spectra. The colours used to display the different amplitudes are defined using the &amp;lt;var&amp;gt;palette&amp;lt;/var&amp;gt; parameter.&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;einrahmen&amp;quot;&lt;br /&gt;
!option!!description&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;var&amp;gt;ydata&amp;lt;/var&amp;gt;&lt;br /&gt;
| Either an SPU output or a [[Programmer_Guide/Shell_Items/File/NEW_FILE#GDX_Files|GDX]] file item providing the magnitude vectors (one spectrum per frame).&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;var&amp;gt;nframes&amp;lt;/var&amp;gt;&lt;br /&gt;
| The number of frames (spectra). If the &amp;lt;code&amp;gt;/R&amp;lt;/code&amp;gt; option is specified, this parameter determines the number of frames displayed at any one time on screen.&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;var&amp;gt;amin&amp;lt;/var&amp;gt;, &amp;lt;var&amp;gt;amax&amp;lt;/var&amp;gt;&lt;br /&gt;
| The minimum and maximum magnitudes.&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;var&amp;gt;palette&amp;lt;/var&amp;gt;&lt;br /&gt;
| The extended table containing the RGB color values (the color palette). The table must have three integer or number fields &#039;&#039;R&#039;&#039;, &#039;&#039;G&#039;&#039; and &#039;&#039;B&#039;&#039; where each row defines one RGB value (each field entry may be a value from 0 to 255). The maximum number of palette table entries is 256. You can change the palette at any time by calling this function with a new palette table.&lt;br /&gt;
&lt;br /&gt;
Mapping of y values to colors, with: i = 0 &amp;amp;hellip; nrgb-1; da = (&amp;lt;var&amp;gt;amax&amp;lt;/var&amp;gt; – &amp;lt;var&amp;gt;amin&amp;lt;/var&amp;gt;) / nrgb&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;keinrahmen&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
|y &amp;amp;lt; amin&lt;br /&gt;
|rgb-value[0]&lt;br /&gt;
|-&lt;br /&gt;
|y &amp;amp;gt; amax&lt;br /&gt;
|rgb-value[nrgb-1]&lt;br /&gt;
|-&lt;br /&gt;
|amin+i.da &amp;amp;lt; y &amp;amp;le; &amp;lt;var&amp;gt;amin&amp;lt;/var&amp;gt;+(i+1).da&lt;br /&gt;
|rgb-value[i]&lt;br /&gt;
|}&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
See [[#Connecting_graph_inputs|Connecting graph inputs]] for parameters not described here.&lt;br /&gt;
&lt;br /&gt;
===== &amp;lt;code&amp;gt;SET graph X&amp;lt;/code&amp;gt; =====&lt;br /&gt;
&lt;br /&gt;
 SET &amp;lt;var&amp;gt;graph&amp;lt;/var&amp;gt; X &amp;lt;var&amp;gt;xdata&amp;lt;/var&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The data output connected to X supplies the frequency values. The X vector must be the same length as the Y vector. The X scale is written only once. Note that the frequency scale is displayed on the y axis (time is displayed on the x axis).&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;einrahmen&amp;quot;&lt;br /&gt;
!option!!description&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;var&amp;gt;xdata&amp;lt;/var&amp;gt;&lt;br /&gt;
| The frequency vector (only set once).&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
===== Zooming in a spectrogram =====&lt;br /&gt;
&lt;br /&gt;
You can zoom into a spectrogram graph on three axes: time (x), frequency (y) and amplitude (z). Zooming is done using the scale commands &amp;lt;code&amp;gt;XSCALE&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;YSCALE&amp;lt;/code&amp;gt; and &amp;lt;code&amp;gt;ZSCALE&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
====WAVEFORM====&lt;br /&gt;
&lt;br /&gt;
 SET &amp;lt;var&amp;gt;graph&amp;lt;/var&amp;gt; Y &amp;lt;var&amp;gt;index&amp;lt;/var&amp;gt; &amp;lt;var&amp;gt;yout&amp;lt;/var&amp;gt; WAVEFORM &amp;lt;var&amp;gt;splitter&amp;lt;/var&amp;gt; &amp;lt;var&amp;gt;nsmp&amp;lt;/var&amp;gt; &amp;lt;var&amp;gt;color&amp;lt;/var&amp;gt; &amp;lt;var&amp;gt;style&amp;lt;/var&amp;gt; &amp;lt;var&amp;gt;scroll&amp;lt;/var&amp;gt; [ /R ]&lt;br /&gt;
&lt;br /&gt;
The waveform envelope is drawn using a min/max plot and optionally filled (&amp;lt;var&amp;gt;style&amp;lt;/var&amp;gt;&amp;lt;code&amp;gt;=AREA&amp;lt;/code&amp;gt;). Each screen contains &amp;lt;var&amp;gt;nsmp&amp;lt;/var&amp;gt; samples of the waveform, and the waveform is scrolled if more than &amp;lt;var&amp;gt;nsmp&amp;lt;/var&amp;gt; samples are sent via the input Ynum. The argument &amp;lt;var&amp;gt;scroll&amp;lt;/var&amp;gt; can set to &amp;lt;code&amp;gt;OFF&amp;lt;/code&amp;gt; (or &amp;lt;code&amp;gt;0&amp;lt;/code&amp;gt;) if scrolling should be avoided. The output connected to Ynum can be a vector (of any length) or a number. If the option /R is used, the function is redisplayed each time an input is updated. Otherwise, the function is displayed on synchronisation (when the SPU stops).&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;einrahmen&amp;quot;&lt;br /&gt;
!option!!description&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;var&amp;gt;yout&amp;lt;/var&amp;gt;&lt;br /&gt;
| The waveform samples (a vector or a number).&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;var&amp;gt;nsmp&amp;lt;/var&amp;gt;&lt;br /&gt;
| The number of samples per screen.&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;var&amp;gt;color&amp;lt;/var&amp;gt;&lt;br /&gt;
| The line color (color name or rgb code).&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;var&amp;gt;style&amp;lt;/var&amp;gt;&lt;br /&gt;
| The plot style (&amp;lt;code&amp;gt;LINES&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;AREA&amp;lt;/code&amp;gt;).&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;var&amp;gt;scroll&amp;lt;/var&amp;gt;&lt;br /&gt;
| Enable scrolling (&amp;lt;code&amp;gt;ON&amp;lt;/code&amp;gt;|&amp;lt;code&amp;gt;1&amp;lt;/code&amp;gt;) or disable scrolling (&amp;lt;code&amp;gt;OFF&amp;lt;/code&amp;gt;|&amp;lt;code&amp;gt;0&amp;lt;/code&amp;gt;).&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
See [[#Connecting_graph_inputs|Connecting graph inputs]] for parameters not described here.&lt;br /&gt;
&lt;br /&gt;
Note that you must apply the settings to the graph (option &amp;lt;code&amp;gt;/A&amp;lt;/code&amp;gt;) before synchronizing the inputs if the input data is to be correctly interpreted.&lt;br /&gt;
&lt;br /&gt;
== Configuration &amp;amp; Control ==&lt;br /&gt;
&lt;br /&gt;
Configure the colours and layout of the graph.&lt;br /&gt;
&lt;br /&gt;
===AXIS===&lt;br /&gt;
&lt;br /&gt;
 SET graph AXIS &amp;lt;var&amp;gt;xLabel&amp;lt;/var&amp;gt; &amp;lt;var&amp;gt;yLabel&amp;lt;/var&amp;gt; &amp;lt;var&amp;gt;labelFont&amp;lt;/var&amp;gt; &amp;lt;var&amp;gt;labelColor&amp;lt;/var&amp;gt; &amp;lt;var&amp;gt;xTitle&amp;lt;/var&amp;gt; &amp;lt;var&amp;gt;yTitle&amp;lt;/var&amp;gt; &amp;lt;var&amp;gt;titleFont&amp;lt;/var&amp;gt; &amp;lt;var&amp;gt;titleColor&amp;lt;/var&amp;gt; &amp;lt;var&amp;gt;xUnit&amp;lt;/var&amp;gt; &amp;lt;var&amp;gt;yUnit&amp;lt;/var&amp;gt; &amp;lt;var&amp;gt;xBorder&amp;lt;/var&amp;gt; &amp;lt;var&amp;gt;yBorder&amp;lt;/var&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Configure the X and Y axis. If you are using a &amp;lt;code&amp;gt;WATERFALL&amp;lt;/code&amp;gt; graph, you can configure the Z axis with the &amp;lt;code&amp;gt;ZSCALE&amp;lt;/code&amp;gt; command.&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;einrahmen&amp;quot;&lt;br /&gt;
!option!!description&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;var&amp;gt;xLabel&amp;lt;/var&amp;gt;&lt;br /&gt;
| The position of x labels (&amp;lt;code&amp;gt;OFF&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;ABOVE&amp;lt;/code&amp;gt;. &amp;lt;code&amp;gt;BELOW&amp;lt;/code&amp;gt; or &amp;lt;code&amp;gt;BOTH&amp;lt;/code&amp;gt;).&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;var&amp;gt;yLabel&amp;lt;/var&amp;gt;&lt;br /&gt;
| The position of y labels (&amp;lt;code&amp;gt;OFF&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;LEFT&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;RIGHT&amp;lt;/code&amp;gt; or &amp;lt;code&amp;gt;BOTH&amp;lt;/code&amp;gt;).&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;var&amp;gt;labelFont&amp;lt;/var&amp;gt;&lt;br /&gt;
| The label font.&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;var&amp;gt;labelColor&amp;lt;/var&amp;gt;&lt;br /&gt;
| The label color.&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;var&amp;gt;xTitle&amp;lt;/var&amp;gt;&lt;br /&gt;
| The position of x axis text (&amp;lt;code&amp;gt;OFF&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;ABOVE&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;BELOW&amp;lt;/code&amp;gt; or &amp;lt;code&amp;gt;BOTH&amp;lt;/code&amp;gt;).&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;var&amp;gt;yTitle&amp;lt;/var&amp;gt;&lt;br /&gt;
| The position of y axis text (&amp;lt;code&amp;gt;OFF&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;LEFT&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;RIGHT&amp;lt;/code&amp;gt; or &amp;lt;code&amp;gt;BOTH&amp;lt;/code&amp;gt;).&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;var&amp;gt;titleFont&amp;lt;/var&amp;gt;&lt;br /&gt;
| The title font.&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;var&amp;gt;titleColor&amp;lt;/var&amp;gt;&lt;br /&gt;
| The color for titles.&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;var&amp;gt;xUnit&amp;lt;/var&amp;gt;, &amp;lt;var&amp;gt;yUnit&amp;lt;/var&amp;gt;&lt;br /&gt;
| Display x and y axis units (&amp;lt;code&amp;gt;OFF&amp;lt;/code&amp;gt; or &amp;lt;code&amp;gt;ON&amp;lt;/code&amp;gt;) .&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;var&amp;gt;xBorder&amp;lt;/var&amp;gt;, &amp;lt;var&amp;gt;yBorder&amp;lt;/var&amp;gt;&lt;br /&gt;
| The width of the border at the edge of the window on the x axis and y axis (in pixels). The default is &amp;lt;code&amp;gt;1&amp;lt;/code&amp;gt;.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
===BGCOLOR===&lt;br /&gt;
&lt;br /&gt;
 SET &amp;lt;var&amp;gt;graph&amp;lt;/var&amp;gt; BGCOLOR &amp;lt;var&amp;gt;text&amp;lt;/var&amp;gt; &amp;lt;var&amp;gt;draw&amp;lt;/var&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Set background colors for the text and draw regions of a graph.&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;einrahmen&amp;quot;&lt;br /&gt;
!option!!description&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;var&amp;gt;text&amp;lt;/var&amp;gt;&lt;br /&gt;
|background color for text regions&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;var&amp;gt;draw&amp;lt;/var&amp;gt;&lt;br /&gt;
|background color for draw regions&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
===FRAME===&lt;br /&gt;
&lt;br /&gt;
 SET graph FRAME &amp;lt;var&amp;gt;xscale&amp;lt;/var&amp;gt; &amp;lt;var&amp;gt;yscale&amp;lt;/var&amp;gt; &amp;lt;var&amp;gt;scalecolor&amp;lt;/var&amp;gt; &amp;lt;var&amp;gt;grid&amp;lt;/var&amp;gt; &amp;lt;var&amp;gt;gridcolor&amp;lt;/var&amp;gt; &amp;lt;var&amp;gt;xsteps&amp;lt;/var&amp;gt; &amp;lt;var&amp;gt;ysteps&amp;lt;/var&amp;gt; &amp;lt;var&amp;gt;major&amp;lt;/var&amp;gt; &amp;lt;var&amp;gt;minor&amp;lt;/var&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Configure the graph&#039;s frame, scale and grid. Note if you can use the graph item commands &amp;lt;code&amp;gt;XSCALE&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;YSCALE&amp;lt;/code&amp;gt; and &amp;lt;code&amp;gt;ZSCALE&amp;lt;/code&amp;gt; to set the scale, grid and tick values.&lt;br /&gt;
&lt;br /&gt;
{|&lt;br /&gt;
|-&lt;br /&gt;
|xscale&lt;br /&gt;
|draw x scale (&amp;lt;code&amp;gt;OFF&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;ABOVE&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;BELOW&amp;lt;/code&amp;gt; or &amp;lt;code&amp;gt;BOTH&amp;lt;/code&amp;gt;)&lt;br /&gt;
|-&lt;br /&gt;
|yscale&lt;br /&gt;
|draw y scale (&amp;lt;code&amp;gt;OFF&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;LEFT&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;RIGHT&amp;lt;/code&amp;gt; or &amp;lt;code&amp;gt;BOTH&amp;lt;/code&amp;gt;)&lt;br /&gt;
|-&lt;br /&gt;
|scalecolor&lt;br /&gt;
|color for scales&lt;br /&gt;
|-&lt;br /&gt;
|grid&lt;br /&gt;
|draw grid (&amp;lt;code&amp;gt;OFF&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;X&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;Y&amp;lt;/code&amp;gt; or &amp;lt;code&amp;gt;BOTH&amp;lt;/code&amp;gt;)&lt;br /&gt;
|-&lt;br /&gt;
|gridcolor&lt;br /&gt;
|color for grid&lt;br /&gt;
|-&lt;br /&gt;
|xsteps, ysteps&lt;br /&gt;
|number of minor x&amp;lt;nowiki&amp;gt;/&amp;lt;/nowiki&amp;gt;y ticks between labels&lt;br /&gt;
|-&lt;br /&gt;
|major, minor&lt;br /&gt;
|size of major/minor ticks in pixels&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Note that the difference between a major and a minor grid is the line style: a major grid is solid, whilst a minor grid is dashed.&lt;br /&gt;
&lt;br /&gt;
===ORIENTATION===&lt;br /&gt;
&lt;br /&gt;
 SET &amp;lt;var&amp;gt;graph&amp;lt;/var&amp;gt; ORIENTATION &amp;lt;var&amp;gt;rotation&amp;lt;/var&amp;gt; &amp;lt;var&amp;gt;flip&amp;lt;/var&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Set the orientation of the graph. By default, the x axis is the horizontal axis and runs from left to right, whilst the y axis is the vertical axis and runs from bottom to top. You can use the &amp;lt;code&amp;gt;ORIENTATION&amp;lt;/code&amp;gt; command to rotate the graph and flip the direction in which the axes run. The &amp;lt;code&amp;gt;XSCALE&amp;lt;/code&amp;gt; and &amp;lt;code&amp;gt;YSCALE&amp;lt;/code&amp;gt; commands can also modify a graph&#039;s flip settings.&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;einrahmen&amp;quot;&lt;br /&gt;
!option!!description&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;var&amp;gt;rotation&amp;lt;/var&amp;gt;&lt;br /&gt;
| The angle in degrees by which to rotate the graph. Only the values &amp;lt;code&amp;gt;0&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;90&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;180&amp;lt;/code&amp;gt; and &amp;lt;code&amp;gt;270&amp;lt;/code&amp;gt; are supported. An asterisk (&amp;lt;code&amp;gt;*&amp;lt;/code&amp;gt;) can be passed to retain the current rotation setting. Rotation is anti-clockwise.&lt;br /&gt;
&lt;br /&gt;
The rotation can also be specified thus: &amp;lt;code&amp;gt;0&amp;lt;/code&amp;gt;|&amp;lt;code&amp;gt;1&amp;lt;/code&amp;gt;|&amp;lt;code&amp;gt;2&amp;lt;/code&amp;gt;|&amp;lt;code&amp;gt;3&amp;lt;/code&amp;gt; where &amp;lt;code&amp;gt;0&amp;lt;/code&amp;gt; means no rotation, &amp;lt;code&amp;gt;1&amp;lt;/code&amp;gt; means 90 degree rotation etc.&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;var&amp;gt;flip&amp;lt;/var&amp;gt;&lt;br /&gt;
| Determines whether the graph should be flipped on the x and y axis. The following values are supported:&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;keinrahmen&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;0&amp;lt;/code&amp;gt;&lt;br /&gt;
| do not flip at all (default orientation).&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;1&amp;lt;/code&amp;gt;&lt;br /&gt;
| flip on the x axis&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;2&amp;lt;/code&amp;gt;&lt;br /&gt;
| flip on the y axis&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;3&amp;lt;/code&amp;gt;&lt;br /&gt;
| flip on both the x and y axis.&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;*&amp;lt;/code&amp;gt;&lt;br /&gt;
| do not change the current flip setting&lt;br /&gt;
|}&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Note that you can retrieve the current orientation of a graph using the attribute &amp;lt;code&amp;gt;[[User Guide/Transcription/SPExL - Transcription Tool|!ORIENTATION]]&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
===OVERVIEW===&lt;br /&gt;
&lt;br /&gt;
 SET &amp;lt;var&amp;gt;graph&amp;lt;/var&amp;gt; OVERVIEW [ &amp;lt;var&amp;gt;mode&amp;lt;/var&amp;gt; ]&lt;br /&gt;
&lt;br /&gt;
Switch between &#039;&#039;overview&#039;&#039; and &#039;&#039;view&#039;&#039; modes. In the &#039;&#039;overview&#039;&#039; mode, the whole range of the graph is displayed with the current &#039;&#039;view&#039;&#039; displayed as a metasegment. In the &#039;&#039;view&#039;&#039; view, only the range of the current view is displayed. Moving the view metasegment whilst in the &#039;&#039;overview&#039;&#039; mode will result in a new view, once back in the &#039;&#039;view&#039;&#039; mode.&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;einrahmen&amp;quot;&lt;br /&gt;
!option!!description&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;var&amp;gt;mode&amp;lt;/var&amp;gt;&lt;br /&gt;
| One of the following values:&lt;br /&gt;
{|class=&amp;quot;keinrahmen&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;on&amp;lt;/code&amp;gt; or &amp;lt;code&amp;gt;1&amp;lt;/code&amp;gt;&lt;br /&gt;
| Switch to &#039;&#039;overview&#039;&#039; mode.&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;off&amp;lt;/code&amp;gt; or &amp;lt;code&amp;gt;0&amp;lt;/code&amp;gt;&lt;br /&gt;
| Switch to &#039;&#039;view&#039;&#039; mode.&lt;br /&gt;
|}&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
:If neither is specified, the mode is toggled.&lt;br /&gt;
&lt;br /&gt;
You can query which mode the graph is in using the &amp;lt;code&amp;gt;!MODE&amp;lt;/code&amp;gt; attribute.&lt;br /&gt;
&lt;br /&gt;
See also XSCALE and YSCALE.&lt;br /&gt;
&lt;br /&gt;
===SPLITTERS===&lt;br /&gt;
&lt;br /&gt;
 SET &amp;lt;var&amp;gt;graph&amp;lt;/var&amp;gt; SPLITTERS &amp;lt;var&amp;gt;splitter&amp;lt;sub&amp;gt;1&amp;lt;/sub&amp;gt;&amp;lt;/var&amp;gt; [&amp;lt;var&amp;gt;splitter&amp;lt;sub&amp;gt;2&amp;lt;/sub&amp;gt;&amp;lt;/var&amp;gt;&amp;amp;hellip;] [/Merge]&lt;br /&gt;
&lt;br /&gt;
Set splitters to be displayed. A graph can contain up to eight splitters. Usually only two are used for, e.g., displaying a stereo signal. If /Merge is specified, the currently displayed splitters remain active, otherwise only the specified splitters are displayed.&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;einrahmen&amp;quot;&lt;br /&gt;
!option!!description&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;var&amp;gt;splitter&amp;lt;sub&amp;gt;X&amp;lt;/sub&amp;gt;&amp;lt;/var&amp;gt;&lt;br /&gt;
| The index of the splitter to be displayed. This may be any integer from 1 to 8.&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;/Merge&amp;lt;/code&amp;gt;&lt;br /&gt;
| Use the OR operator when setting the splitters.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Example for displaying the first two splitters:&lt;br /&gt;
&lt;br /&gt;
 $#graph splitters 1 2&lt;br /&gt;
&lt;br /&gt;
===TITLE===&lt;br /&gt;
&lt;br /&gt;
 SET &amp;lt;var&amp;gt;graph&amp;lt;/var&amp;gt; TITLE &amp;lt;var&amp;gt;mode&amp;lt;/var&amp;gt; &amp;lt;var&amp;gt;font&amp;lt;/var&amp;gt; &amp;lt;var&amp;gt;color&amp;lt;/var&amp;gt; [&amp;lt;var&amp;gt;title&amp;lt;sub&amp;gt;1&amp;lt;/sub&amp;gt;&amp;lt;/var&amp;gt; &amp;lt;var&amp;gt;title&amp;lt;sub&amp;gt;2&amp;lt;/sub&amp;gt;&amp;lt;/var&amp;gt;] [/Settitle]&lt;br /&gt;
&lt;br /&gt;
Configure and/or set graph title. The option &amp;lt;code&amp;gt;/Settitle&amp;lt;/code&amp;gt; can be used to set a new graph title without applying other settings.&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;einrahmen&amp;quot;&lt;br /&gt;
!option!!description&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;var&amp;gt;mode&amp;lt;/var&amp;gt;&lt;br /&gt;
| Turn the graph&#039;s title on or off. The following values are supported: &amp;lt;code&amp;gt;ON&amp;lt;/code&amp;gt; and &amp;lt;code&amp;gt;OFF&amp;lt;/code&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;var&amp;gt;font&amp;lt;/var&amp;gt;&lt;br /&gt;
| A font argument as specified in Fonts and Font Argument Format.&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;var&amp;gt;color&amp;lt;/var&amp;gt;&lt;br /&gt;
| A color argument as specified in Colors and Color Arguments.&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;var&amp;gt;title&amp;lt;sub&amp;gt;1&amp;lt;/sub&amp;gt;&amp;lt;/var&amp;gt;, &amp;lt;var&amp;gt;title&amp;lt;sub&amp;gt;2&amp;lt;/sub&amp;gt;&amp;lt;/var&amp;gt;&lt;br /&gt;
| The text to be displayed (one or two lines).&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== XSCALE ===&lt;br /&gt;
&lt;br /&gt;
 SET &amp;lt;var&amp;gt;graph&amp;lt;/var&amp;gt; XSCALE &amp;lt;var&amp;gt;min&amp;lt;/var&amp;gt; &amp;lt;var&amp;gt;max&amp;lt;/var&amp;gt; &amp;lt;var&amp;gt;unit&amp;lt;/var&amp;gt; &amp;lt;var&amp;gt;text&amp;lt;/var&amp;gt; [&amp;lt;var&amp;gt;formatStr&amp;lt;/var&amp;gt;|&amp;lt;var&amp;gt;table&amp;lt;/var&amp;gt;] [/Invert] [/Log] [/View]&lt;br /&gt;
 SET &amp;lt;var&amp;gt;graph&amp;lt;/var&amp;gt; XSCALE [ &amp;lt;var&amp;gt;min&amp;lt;/var&amp;gt; &amp;lt;var&amp;gt;max&amp;lt;/var&amp;gt; ] /View&lt;br /&gt;
&lt;br /&gt;
Set the x scale range, title and unit string.&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;einrahmen&amp;quot;&lt;br /&gt;
!option!!description&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;var&amp;gt;min&amp;lt;/var&amp;gt;, &amp;lt;var&amp;gt;max&amp;lt;/var&amp;gt;&lt;br /&gt;
| The minimum and maximum range of values on this scale.&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;var&amp;gt;unit&amp;lt;/var&amp;gt;&lt;br /&gt;
| The text to be displayed as the unit on scale and in the cursor tooltip windows.&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;var&amp;gt;text&amp;lt;/var&amp;gt;&lt;br /&gt;
| The title or description. Note that even if this is set here, it must be enabled using the &amp;lt;code&amp;gt;AXIS&amp;lt;/code&amp;gt; command.&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;var&amp;gt;formatStr&amp;lt;/var&amp;gt;&lt;br /&gt;
| A format string which is used to format the range values. See Format Strings and Rules for details.&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;var&amp;gt;table&amp;lt;/var&amp;gt;&lt;br /&gt;
| An extended table containing alternative scale values. See scale definition table for a description of the table format.&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;/Invert&amp;lt;/code&amp;gt;&lt;br /&gt;
| Invert the scale (x-axis - right to left, y-axis, top to bottom). Note that this is the same as the ORIENTATION command &amp;lt;code&amp;gt;$#graph ORIENTATION * 1&amp;lt;/code&amp;gt;.&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;/Log&amp;lt;/code&amp;gt;&lt;br /&gt;
| The scale is logarithmic (base 10).&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;/View[=Reset]&amp;lt;/code&amp;gt;&lt;br /&gt;
| Set the view (section of whole range).&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
If the option &amp;lt;code&amp;gt;/View&amp;lt;/code&amp;gt; is specified, the &amp;lt;var&amp;gt;min&amp;lt;/var&amp;gt; and &amp;lt;var&amp;gt;max&amp;lt;/var&amp;gt; value are used to display a section of the whole range. If &amp;lt;code&amp;gt;Reset&amp;lt;/code&amp;gt; is specified (e.g. &amp;lt;code&amp;gt;/View=Reset&amp;lt;/code&amp;gt;), the &amp;lt;var&amp;gt;min&amp;lt;/var&amp;gt;/&amp;lt;var&amp;gt;max&amp;lt;/var&amp;gt; values are ignored (and can be left out) and the whole range is redisplayed.&lt;br /&gt;
&lt;br /&gt;
=== YSCALE ===&lt;br /&gt;
&lt;br /&gt;
 SET &amp;lt;var&amp;gt;graph&amp;lt;/var&amp;gt; YSCALE &amp;lt;var&amp;gt;min&amp;lt;/var&amp;gt; &amp;lt;var&amp;gt;max&amp;lt;/var&amp;gt; &amp;lt;var&amp;gt;unit&amp;lt;/var&amp;gt; &amp;lt;var&amp;gt;text&amp;lt;/var&amp;gt; [&amp;lt;var&amp;gt;formatStr&amp;lt;/var&amp;gt;|&amp;lt;var&amp;gt;table&amp;lt;/var&amp;gt;] [/Invert]&lt;br /&gt;
 SET &amp;lt;var&amp;gt;graph&amp;lt;/var&amp;gt; YSCALE [ &amp;lt;var&amp;gt;min&amp;lt;/var&amp;gt; &amp;lt;var&amp;gt;max&amp;lt;/var&amp;gt; ] /View=[Reset]&lt;br /&gt;
&lt;br /&gt;
Set the y scale range, title and unit string.&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;einrahmen&amp;quot;&lt;br /&gt;
!option!!description&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;var&amp;gt;min&amp;lt;/var&amp;gt;, &amp;lt;var&amp;gt;max&amp;lt;/var&amp;gt;&lt;br /&gt;
| The minimum and maximum of scale (range).&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;var&amp;gt;unit&amp;lt;/var&amp;gt;&lt;br /&gt;
| The text to be displayed as unit on scale and in cursor window.&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;var&amp;gt;text&amp;lt;/var&amp;gt;&lt;br /&gt;
| The title or description.&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;var&amp;gt;formatStr&amp;lt;/var&amp;gt;&lt;br /&gt;
| A format string which is used to format the range values. See Format Strings and Rules for details.&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;var&amp;gt;table&amp;lt;/var&amp;gt;&lt;br /&gt;
| An extended table containing alternative scale values. See scale definition table for a description of the table format.&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;/Invert&amp;lt;/code&amp;gt;&lt;br /&gt;
| Invert the scale (x-axis - right to left, y-axis, top to bottom). Note that this is the same as the ORIENTATION command &amp;lt;code&amp;gt;$#graph ORIENTATION * 2&amp;lt;/code&amp;gt;.&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;/View[=Reset]&amp;lt;/code&amp;gt;&lt;br /&gt;
| Set the view (section of whole range).&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
If the option &amp;lt;code&amp;gt;/View&amp;lt;/code&amp;gt; is specified, the &amp;lt;var&amp;gt;min&amp;lt;/var&amp;gt; and &amp;lt;var&amp;gt;max&amp;lt;/var&amp;gt; value are used to display a section of the whole range. If &amp;lt;code&amp;gt;Reset&amp;lt;/code&amp;gt; is specified (e.g. &amp;lt;code&amp;gt;/View=Reset&amp;lt;/code&amp;gt;), the &amp;lt;var&amp;gt;min&amp;lt;/var&amp;gt;/&amp;lt;var&amp;gt;max&amp;lt;/var&amp;gt; values are ignored and the whole range is redisplayed.&lt;br /&gt;
&lt;br /&gt;
=== ZSCALE ===&lt;br /&gt;
&lt;br /&gt;
 SET &amp;lt;var&amp;gt;graph&amp;lt;/var&amp;gt; ZSCALE &amp;lt;var&amp;gt;showScale&amp;lt;/var&amp;gt; &amp;lt;var&amp;gt;min&amp;lt;/var&amp;gt; &amp;lt;var&amp;gt;max&amp;lt;/var&amp;gt; &amp;lt;var&amp;gt;nMinorStep&amp;lt;/var&amp;gt; &amp;lt;var&amp;gt;showLabels&amp;lt;/var&amp;gt; &amp;lt;var&amp;gt;showUnit&amp;lt;/var&amp;gt; &amp;lt;var&amp;gt;unitText&amp;lt;/var&amp;gt; &amp;lt;var&amp;gt;showTitle&amp;lt;/var&amp;gt; &amp;lt;var&amp;gt;titleText&amp;lt;/var&amp;gt; &amp;lt;var&amp;gt;xShrink&amp;lt;/var&amp;gt; &amp;lt;var&amp;gt;yShrink&amp;lt;/var&amp;gt; [&amp;lt;var&amp;gt;formatStr&amp;lt;/var&amp;gt;&amp;lt;nowiki&amp;gt;|&amp;lt;/nowiki&amp;gt;&amp;lt;var&amp;gt;table&amp;lt;/var&amp;gt;] [/Invert]&lt;br /&gt;
 SET &amp;lt;var&amp;gt;graph&amp;lt;/var&amp;gt; ZSCALE [ &amp;lt;var&amp;gt;min&amp;lt;/var&amp;gt; &amp;lt;var&amp;gt;max&amp;lt;/var&amp;gt; ] /View=[Reset]&lt;br /&gt;
&lt;br /&gt;
Set the z scale range, title  and unit string. Note that the z scale was introduced with the implementation of the Waterfall graph. The values &amp;lt;var&amp;gt;xShrink&amp;lt;/var&amp;gt; and &amp;lt;var&amp;gt;yShrink&amp;lt;/var&amp;gt; determine that amount of the available space for the graph is taken up with the x and y axis.&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;einrahmen&amp;quot;&lt;br /&gt;
!option!!description&lt;br /&gt;
|-&lt;br /&gt;
|showScale&lt;br /&gt;
|Set the zscale visiblity (&amp;lt;code&amp;gt;OFF&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;LEFT&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;RIGHT&amp;lt;/code&amp;gt; or &amp;lt;code&amp;gt;BOTH&amp;lt;/code&amp;gt;).&lt;br /&gt;
|-&lt;br /&gt;
|min&lt;br /&gt;
|The minimum zscale value&lt;br /&gt;
|-&lt;br /&gt;
|max&lt;br /&gt;
|The maximum zscale value&lt;br /&gt;
|-&lt;br /&gt;
|nMinorStep&lt;br /&gt;
|The number of minor tick steps&lt;br /&gt;
|-&lt;br /&gt;
|showLabels&lt;br /&gt;
|Set the label visibility (&amp;lt;code&amp;gt;OFF&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;LEFT&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;RIGHT&amp;lt;/code&amp;gt; or &amp;lt;code&amp;gt;BOTH&amp;lt;/code&amp;gt;)&lt;br /&gt;
|-&lt;br /&gt;
|showUnit&lt;br /&gt;
|Set the unit visibility (&amp;lt;code&amp;gt;ON&amp;lt;/code&amp;gt; or &amp;lt;code&amp;gt;OFF&amp;lt;/code&amp;gt;)&lt;br /&gt;
|-&lt;br /&gt;
|unitText&lt;br /&gt;
|The text to be displayed as unit on the scale and in the cursor window&lt;br /&gt;
|-&lt;br /&gt;
|showTitle&lt;br /&gt;
|Set the title visibility (&amp;lt;code&amp;gt;OFF&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;LEFT&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;RIGHT&amp;lt;/code&amp;gt; or &amp;lt;code&amp;gt;BOTH&amp;lt;/code&amp;gt;)&lt;br /&gt;
|-&lt;br /&gt;
|titleText&lt;br /&gt;
|The title text&lt;br /&gt;
|-&lt;br /&gt;
|xShrink, yShrink&lt;br /&gt;
|A value between &amp;lt;code&amp;gt;-1&amp;lt;/code&amp;gt; and &amp;lt;code&amp;gt;1&amp;lt;/code&amp;gt;. The shrink value determines how much of the space available for the x and y axis is used.&lt;br /&gt;
|-&lt;br /&gt;
|table&lt;br /&gt;
|An extended table containing alternative scale values and labels. See scale definition table for a description of the table format.&lt;br /&gt;
|-&lt;br /&gt;
|formatStr&lt;br /&gt;
|A format string which is used to format the range values. See Format Strings and Rules for details.&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;/Invert&amp;lt;/code&amp;gt;&lt;br /&gt;
| Use this option to invert the scale.&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;/View[=Reset]&amp;lt;/code&amp;gt;&lt;br /&gt;
| Set the view (section of whole range).&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
If the option &amp;lt;code&amp;gt;/View&amp;lt;/code&amp;gt; is specified, the &amp;lt;var&amp;gt;min&amp;lt;/var&amp;gt; and &amp;lt;var&amp;gt;max&amp;lt;/var&amp;gt; value are used to display a section of the whole range. If &amp;lt;code&amp;gt;Reset&amp;lt;/code&amp;gt; is specified (e.g. &amp;lt;code&amp;gt;/View=Reset&amp;lt;/code&amp;gt;), the &amp;lt;var&amp;gt;min&amp;lt;/var&amp;gt;/&amp;lt;var&amp;gt;max&amp;lt;/var&amp;gt; values are ignored and the whole range is redisplayed.&lt;br /&gt;
&lt;br /&gt;
=== Scale definition table===&lt;br /&gt;
&lt;br /&gt;
The graph item commands &amp;lt;code&amp;gt;[[#XSCALE|XSCALE]]&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;[[#YSCALE|YSCALE]]&amp;lt;/code&amp;gt; and &amp;lt;code&amp;gt;[[#ZSCALE|ZSCALE]]&amp;lt;/code&amp;gt; can use a scale definition table to define the scale, labels and grid lines. The scale definition table must be an extended table with the following three fields:&lt;br /&gt;
&lt;br /&gt;
{|&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;code&amp;gt;pos&amp;lt;/code&amp;gt;&lt;br /&gt;
|A numeric field for the position.&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;code&amp;gt;type&amp;lt;/code&amp;gt;&lt;br /&gt;
|A string field for the scale type (&amp;lt;code&amp;gt;LABEL&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;MINORTICK&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;MAJORTICK&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;MINORGRID&amp;lt;/code&amp;gt; or &amp;lt;code&amp;gt;MAJORGRID&amp;lt;/code&amp;gt;).&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;code&amp;gt;label&amp;lt;/code&amp;gt;&lt;br /&gt;
|A string field for the label text. This is only of used for entries of type &amp;lt;code&amp;gt;LABEL&amp;lt;/code&amp;gt;. If the label field is not empty, the label field text is displayed at &amp;lt;code&amp;gt;pos&amp;lt;/code&amp;gt;, otherwise the value of &amp;lt;code&amp;gt;pos&amp;lt;/code&amp;gt; is displayed at the position &amp;lt;code&amp;gt;pos&amp;lt;/code&amp;gt;.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==Cursors==&lt;br /&gt;
&lt;br /&gt;
{{STX}} graph items support two graphical cursors, which can be used to mark points on a graph. See [[Programmer_Guide/Shell_Items/Graph/Introducing_Graph_Items#Cursors|Cursors]] for an introduction to the concept of cursors.&lt;br /&gt;
&lt;br /&gt;
===CURSORMODE===&lt;br /&gt;
&lt;br /&gt;
{{/CURSORMODE}}&lt;br /&gt;
&lt;br /&gt;
===PLAYCURSOR===&lt;br /&gt;
&lt;br /&gt;
 SET &amp;lt;var&amp;gt;graph&amp;lt;/var&amp;gt; PLAYCURSOR &amp;lt;var&amp;gt;mode&amp;lt;/var&amp;gt; &amp;lt;var&amp;gt;x&amp;lt;/var&amp;gt; &amp;lt;var&amp;gt;y&amp;lt;/var&amp;gt; &amp;lt;var&amp;gt;style&amp;lt;/var&amp;gt; &amp;lt;var&amp;gt;useY&amp;lt;/var&amp;gt; &amp;lt;var&amp;gt;color&amp;lt;/var&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Set position and configuration of the play cursor. The play cursor is a cursor whose position is set by this command and cannot be changed interactively by the user. It is used, for instance, to display the running cursor during signal playback (in this case the position is controlled by a timer).&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;einrahmen&amp;quot;&lt;br /&gt;
!argument!!description&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;var&amp;gt;mode&amp;lt;/var&amp;gt;&lt;br /&gt;
| The play cursor mode (&amp;lt;code&amp;gt;ON&amp;lt;/code&amp;gt; or &amp;lt;code&amp;gt;OFF&amp;lt;/code&amp;gt;).&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;var&amp;gt;x&amp;lt;/var&amp;gt;, &amp;lt;var&amp;gt;y&amp;lt;/var&amp;gt;&lt;br /&gt;
| The cursor position.&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;var&amp;gt;style&amp;lt;/var&amp;gt;&lt;br /&gt;
| The cursor display style (&amp;lt;code&amp;gt;CROSS&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;CROSSHAIR&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;HBAR&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;VBAR&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;HBARCROSS&amp;lt;/code&amp;gt; or &amp;lt;code&amp;gt;VBARCROSS&amp;lt;/code&amp;gt;).&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;var&amp;gt;useY&amp;lt;/var&amp;gt;&lt;br /&gt;
| Selects if y value is used (&amp;lt;code&amp;gt;ON&amp;lt;/code&amp;gt;) or ignored (&amp;lt;code&amp;gt;OFF&amp;lt;/code&amp;gt;).&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;var&amp;gt;color&amp;lt;/var&amp;gt;&lt;br /&gt;
| The cursor color.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
===CURSORPOS===&lt;br /&gt;
&lt;br /&gt;
 SET &amp;lt;var&amp;gt;graph&amp;lt;/var&amp;gt; CURSORPOS &amp;lt;var&amp;gt;cursor x&amp;lt;/var&amp;gt; [&amp;lt;var&amp;gt;y&amp;lt;/var&amp;gt;] [/Select|Deselect]&lt;br /&gt;
&lt;br /&gt;
Set the position of a cursor and optionally select (/Select) or deselect it (/Deselect). The value &amp;lt;var&amp;gt;y&amp;lt;/var&amp;gt; is only needed if the cursor is not function bound. Note that if the cursor is not function bound, and you do not set the &amp;lt;var&amp;gt;y&amp;lt;/var&amp;gt; value, it will be set to 0.&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;einrahmen&amp;quot;&lt;br /&gt;
!argument!!description&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;var&amp;gt;cursor&amp;lt;/var&amp;gt;&lt;br /&gt;
| The cursor index (&amp;lt;code&amp;gt;1&amp;lt;/code&amp;gt; or &amp;lt;code&amp;gt;2&amp;lt;/code&amp;gt;).&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;var&amp;gt;x&amp;lt;/var&amp;gt;, &amp;lt;var&amp;gt;y&amp;lt;/var&amp;gt;&lt;br /&gt;
| The new cursor positions.&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;/Select&amp;lt;/code&amp;gt;&lt;br /&gt;
| Set the cursor to the selected state.&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;/Deselect&amp;lt;/code&amp;gt;&lt;br /&gt;
| Set the cursor to a deselected state.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==Context Menus==&lt;br /&gt;
&lt;br /&gt;
===ADDPOPUP===&lt;br /&gt;
&lt;br /&gt;
 SET &amp;lt;var&amp;gt;graph&amp;lt;/var&amp;gt; ADDPOPUP &amp;lt;var&amp;gt;item&amp;lt;sub&amp;gt;1&amp;lt;/sub&amp;gt;&amp;lt;/var&amp;gt; &amp;lt;var&amp;gt;item&amp;lt;sub&amp;gt;2&amp;lt;/sub&amp;gt;&amp;lt;/var&amp;gt; &amp;amp;hellip;&lt;br /&gt;
 SET &amp;lt;var&amp;gt;graph&amp;lt;/var&amp;gt; ADDPOPUP &amp;lt;var&amp;gt;tableitem&amp;lt;/var&amp;gt; /Table&lt;br /&gt;
&lt;br /&gt;
Define the context menu items of a graph. One context menu can be added to each graph. If a context menu is already defined, it may be replaced by calling &amp;lt;code&amp;gt;ADDPOPUP&amp;lt;/code&amp;gt; anew. The default entry &amp;amp;quot;Copy/Print&amp;amp;hellip;&amp;amp;quot; is automatically appended to the contextmenu. See the command command &amp;lt;code&amp;gt;[[Programmer_Guide/Shell_Items/Dialog/SET_DIALOG#ADDPOPUP|SET display ADDPOPUP]]&amp;lt;/code&amp;gt; for details.&lt;br /&gt;
&lt;br /&gt;
When a context menu item is selected by the user, a &amp;lt;code&amp;gt;[[Programmer_Guide/Shell_Items/Dialog/DISPLAY_and_DIALOG_Messages#CMITEM|CMITEM]]&amp;lt;/code&amp;gt; message is generated.&lt;br /&gt;
&lt;br /&gt;
===SETPOPUP===&lt;br /&gt;
&lt;br /&gt;
 SET &amp;lt;var&amp;gt;graph&amp;lt;/var&amp;gt; SETPOPUP &amp;lt;var&amp;gt;index1&amp;lt;/var&amp;gt; [&amp;amp;hellip;] [/Enable|Disable /Check|Uncheck]&lt;br /&gt;
&lt;br /&gt;
Active/deactivate and/or set or clear the check status of menu items.&lt;br /&gt;
&lt;br /&gt;
===DELETEPOPUP===&lt;br /&gt;
&lt;br /&gt;
 SET &amp;lt;var&amp;gt;graph&amp;lt;/var&amp;gt; DELPOPUP&lt;br /&gt;
 SET &amp;lt;var&amp;gt;graph&amp;lt;/var&amp;gt; DELETEPOPUP&lt;br /&gt;
&lt;br /&gt;
Removes the items defined by the user, leaving only the default context menu item &amp;amp;quot;Copy/Print&amp;amp;hellip;&amp;amp;quot;.&lt;br /&gt;
&lt;br /&gt;
==Print==&lt;br /&gt;
&lt;br /&gt;
 SET &amp;lt;var&amp;gt;graph&amp;lt;/var&amp;gt; PRINT CLIPBOARD&lt;br /&gt;
 SET &amp;lt;var&amp;gt;graph&amp;lt;/var&amp;gt; PRINT &amp;lt;var&amp;gt;filename&amp;lt;/var&amp;gt;&lt;br /&gt;
 SET &amp;lt;var&amp;gt;graph&amp;lt;/var&amp;gt; PRINT PRINTER&lt;br /&gt;
&lt;br /&gt;
Print or save the graph. Depending on the arguments, the graph will be copied to the clipboard (&amp;lt;code&amp;gt;CLIPBOARD&amp;lt;/code&amp;gt;), saved to an image file (when supplying a filename) or actually printed to an actual printing device (&amp;lt;code&amp;gt;PRINTER&amp;lt;/code&amp;gt;). In the letter case, the printing device must be capable of image output, meaning that daisywheel printers, teletypes, chain printers and the like are precluded.&lt;br /&gt;
&lt;br /&gt;
The options &amp;lt;code&amp;gt;/Print&amp;lt;/code&amp;gt; and &amp;lt;code&amp;gt;/Screen&amp;lt;/code&amp;gt; are used to select the color scheme (see the [[Notes below]]). For file output, the file format is selected by the options &amp;lt;code&amp;gt;/Enhancedmetafile&amp;lt;/code&amp;gt; (*.WMF), &amp;lt;code&amp;gt;/Bitmap&amp;lt;/code&amp;gt; (*.BMP) or &amp;lt;code&amp;gt;/Gnp&amp;lt;/code&amp;gt; (*.PNG). Once started, the operation is performed in the background and a &amp;lt;code&amp;gt;STOP&amp;lt;/code&amp;gt; message is sent when the operation is finished.&lt;br /&gt;
&lt;br /&gt;
==Metasegments &amp;amp; Markers==&lt;br /&gt;
&lt;br /&gt;
===DELETEMARKER===&lt;br /&gt;
&lt;br /&gt;
 SET &amp;lt;var&amp;gt;graph&amp;lt;/var&amp;gt; DELETEMARKER&lt;br /&gt;
 SET &amp;lt;var&amp;gt;graph&amp;lt;/var&amp;gt; DELMARKER&lt;br /&gt;
 SET &amp;lt;var&amp;gt;graph&amp;lt;/var&amp;gt; DELETEMARKER [&amp;lt;var&amp;gt;msid&amp;lt;/var&amp;gt;] /X&lt;br /&gt;
 SET &amp;lt;var&amp;gt;graph&amp;lt;/var&amp;gt; DELMARKER [&amp;lt;var&amp;gt;msid&amp;lt;/var&amp;gt;] /X&lt;br /&gt;
&lt;br /&gt;
Without &amp;lt;var&amp;gt;msid&amp;lt;/var&amp;gt; supplied, the command will delete &#039;&#039;all&#039;&#039; segement and label markers from the graph. With the ID of an existing meta segment supplied (&amp;lt;var&amp;gt;msid&amp;lt;/var&amp;gt;), only the respective metasegment will be annihilated.&lt;br /&gt;
&lt;br /&gt;
=== MARKERS ===&lt;br /&gt;
&lt;br /&gt;
 SET &amp;lt;var&amp;gt;graph&amp;lt;/var&amp;gt; MARKERS &amp;lt;var&amp;gt;mode&amp;lt;/var&amp;gt; &amp;lt;var&amp;gt;auto&amp;lt;/var&amp;gt; &amp;lt;var&amp;gt;font&amp;lt;/var&amp;gt; &amp;lt;var&amp;gt;color&amp;lt;/var&amp;gt; &amp;lt;var&amp;gt;msfont&amp;lt;/var&amp;gt; &amp;lt;var&amp;gt;mslincol&amp;lt;/var&amp;gt; &amp;lt;var&amp;gt;msfillcol&amp;lt;/var&amp;gt; &amp;lt;var&amp;gt;mstextcol&amp;lt;/var&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Assign settings for markers and metasegments. The settings for metasegments are just default values and can be overwritten when creating a metasegment.&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;einrahmen&amp;quot;&lt;br /&gt;
!argument!!description&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;var&amp;gt;mode&amp;lt;/var&amp;gt;&lt;br /&gt;
| Turn markers &amp;lt;code&amp;gt;ON&amp;lt;/code&amp;gt; or &amp;lt;code&amp;gt;OFF&amp;lt;/code&amp;gt;.&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;var&amp;gt;auto&amp;lt;/var&amp;gt;&lt;br /&gt;
| Turn automatic y positioning of markers &amp;lt;code&amp;gt;ON&amp;lt;/code&amp;gt; or &amp;lt;code&amp;gt;OFF&amp;lt;/code&amp;gt;.&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;var&amp;gt;font&amp;lt;/var&amp;gt;&lt;br /&gt;
| The marker caption font.&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;var&amp;gt;color&amp;lt;/var&amp;gt;&lt;br /&gt;
| The marker color.&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;var&amp;gt;msfont&amp;lt;/var&amp;gt;&lt;br /&gt;
| The metasegment caption font.&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;var&amp;gt;mslinecol&amp;lt;/var&amp;gt;&lt;br /&gt;
| The metasegment frame color.&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;var&amp;gt;msfillcol&amp;lt;/var&amp;gt;&lt;br /&gt;
| The background color for filled metasegments.&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;var&amp;gt;mstextcol&amp;lt;/var&amp;gt;&lt;br /&gt;
| The metasegment caption color.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== ADDMARKER ===&lt;br /&gt;
&lt;br /&gt;
The graph item&#039;s &amp;lt;code&amp;gt;ADDMARKER&amp;lt;/code&amp;gt; command adds a marker, segment and or metasegment to a graph.&lt;br /&gt;
&lt;br /&gt;
* A marker can display a string and point.&lt;br /&gt;
* A segment can display a line between two points and a string.&lt;br /&gt;
* A metasegment can display a line or box and a string, and can be clicked and moved.&lt;br /&gt;
&lt;br /&gt;
All of them support the silent option &amp;lt;code&amp;gt;/I&amp;lt;/code&amp;gt; causing error situations to generate warning messages rather than error messages (see [[Programmer_Guide/Command_Reference_Options/Silent#The Silent Flag|The Silent Flag]] for details).&lt;br /&gt;
&lt;br /&gt;
==== Add a marker ====&lt;br /&gt;
&lt;br /&gt;
 SET &amp;lt;var&amp;gt;graph&amp;lt;/var&amp;gt; ADDMARKER &amp;lt;var&amp;gt;text&amp;lt;/var&amp;gt; &amp;lt;var&amp;gt;x&amp;lt;/var&amp;gt; &amp;lt;var&amp;gt;y&amp;lt;/var&amp;gt; [ /U|D|M ] [ /L|R|B ] [ /I ]&lt;br /&gt;
&lt;br /&gt;
Parameters not described here are described further below for the other variants of the command.&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;einrahmen&amp;quot;&lt;br /&gt;
!option!!description&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;U&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;D&amp;lt;/code&amp;gt; or &amp;lt;code&amp;gt;M&amp;lt;/code&amp;gt;&lt;br /&gt;
| Specifies if the marker should have an arrow head pointing up (&amp;lt;code&amp;gt;U&amp;lt;/code&amp;gt;), or down (&amp;lt;code&amp;gt;D&amp;lt;/code&amp;gt;), or just be a vertical line (&amp;lt;code&amp;gt;M&amp;lt;/code&amp;gt;). If no option is specified, the marker is a cross.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==== Add a segment ====&lt;br /&gt;
&lt;br /&gt;
 SET &amp;lt;var&amp;gt;graph&amp;lt;/var&amp;gt; ADDMARKER &amp;lt;var&amp;gt;text&amp;lt;/var&amp;gt; &amp;lt;var&amp;gt;x&amp;lt;sub&amp;gt;1&amp;lt;/sub&amp;gt;&amp;lt;/var&amp;gt; &amp;lt;var&amp;gt;x&amp;lt;sub&amp;gt;2&amp;lt;/sub&amp;gt;&amp;lt;/var&amp;gt; &amp;lt;var&amp;gt;y&amp;lt;/var&amp;gt; [ /H|V ] [ /L|R ] [ /N ] [ /I ]&lt;br /&gt;
&lt;br /&gt;
If the &amp;lt;code&amp;gt;MARKERS&amp;lt;/code&amp;gt; option &amp;lt;code&amp;gt;auto&amp;lt;/code&amp;gt; has been enabled, the segment&#039;s &amp;lt;var&amp;gt;x&amp;lt;/var&amp;gt; position is chosen automatically (&amp;lt;var&amp;gt;y&amp;lt;/var&amp;gt; must be specified but is ignored).&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;einrahmen&amp;quot;&lt;br /&gt;
!argument!!description&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;var&amp;gt;text&amp;lt;/var&amp;gt;&lt;br /&gt;
| The marker/segment caption.&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;var&amp;gt;x&amp;lt;sub&amp;gt;1&amp;lt;/sub&amp;gt;&amp;lt;/var&amp;gt;, &amp;lt;var&amp;gt;x&amp;lt;sub&amp;gt;2&amp;lt;/sub&amp;gt;&amp;lt;/var&amp;gt;&lt;br /&gt;
| The x range of the segment.&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;var&amp;gt;x&amp;lt;/var&amp;gt;&lt;br /&gt;
| The x position of the marker.&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;var&amp;gt;y&amp;lt;/var&amp;gt;&lt;br /&gt;
| The y position of the segment-marker line.&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;H&amp;lt;/code&amp;gt; or &amp;lt;code&amp;gt;V&amp;lt;/code&amp;gt;&lt;br /&gt;
| Specifies the segment style, with &amp;lt;code&amp;gt;H&amp;lt;/code&amp;gt; indicating a horizontal bar and &amp;lt;code&amp;gt;V&amp;lt;/code&amp;gt; indicating a vertical bar.&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;L&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;R&amp;lt;/code&amp;gt; or &amp;lt;code&amp;gt;B&amp;lt;/code&amp;gt;&lt;br /&gt;
| If specified, the text is shown to the left (&amp;lt;code&amp;gt;L&amp;lt;/code&amp;gt;), right (&amp;lt;code&amp;gt;R&amp;lt;/code&amp;gt;) or below (&amp;lt;code&amp;gt;B&amp;lt;/code&amp;gt;) the marker. The default is showing the text above the marker.&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;L&amp;lt;/code&amp;gt; or &amp;lt;code&amp;gt;R&amp;lt;/code&amp;gt;&lt;br /&gt;
| Specifies the position of the text in relation to the segment, &amp;lt;code&amp;gt;L&amp;lt;/code&amp;gt; indicating left aligned text and &amp;lt;code&amp;gt;R&amp;lt;/code&amp;gt; indicating right aligned text. The default is centred.&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;N&amp;lt;/code&amp;gt;&lt;br /&gt;
| If specified, &#039;&#039;no&#039;&#039; text is displayed.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==== Add or update a metasegment ====&lt;br /&gt;
&lt;br /&gt;
Metasegments are a way to mark regions of graphs. Some of the advantages of metasegments are:&lt;br /&gt;
* metasegments be used as interactive &amp;amp;quot;controls&amp;amp;quot;: they can be clicked upon and moved, causing messages to be sent to the shell.&lt;br /&gt;
* metasegments have many configuration settings and display styles&lt;br /&gt;
* metasegments may contain multi-line text&lt;br /&gt;
&lt;br /&gt;
 SET &amp;lt;var&amp;gt;graph&amp;lt;/var&amp;gt; ADDMARKER /X &amp;lt;var&amp;gt;id&amp;lt;/var&amp;gt; &amp;lt;var&amp;gt;caption&amp;lt;/var&amp;gt; &amp;lt;var&amp;gt;xmin&amp;lt;/var&amp;gt; &amp;lt;var&amp;gt;xmax&amp;lt;/var&amp;gt; &amp;lt;var&amp;gt;ymin&amp;lt;/var&amp;gt; &amp;lt;var&amp;gt;ymax&amp;lt;/var&amp;gt; &amp;lt;var&amp;gt;mode&amp;lt;/var&amp;gt; &amp;lt;var&amp;gt;style&amp;lt;/var&amp;gt; &amp;lt;var&amp;gt;linewidth&amp;lt;/var&amp;gt; &amp;lt;var&amp;gt;linecolor&amp;lt;/var&amp;gt; &amp;lt;var&amp;gt;fillmode&amp;lt;/var&amp;gt; &amp;lt;var&amp;gt;fillcolor&amp;lt;/var&amp;gt; &amp;lt;var&amp;gt;halign&amp;lt;/var&amp;gt; &amp;lt;var&amp;gt;valign&amp;lt;/var&amp;gt; &amp;lt;var&amp;gt;textcolor&amp;lt;/var&amp;gt; [ &amp;lt;var&amp;gt;splitters&amp;lt;/var&amp;gt; ] [/Update] [/Redraw] [/Select|Deselect] [ /I ]&lt;br /&gt;
 SET &amp;lt;var&amp;gt;graph&amp;lt;/var&amp;gt; ADDMARKER /X &amp;lt;var&amp;gt;tSettings&amp;lt;/var&amp;gt; [ /I ]&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;einrahmen&amp;quot;&lt;br /&gt;
!argument!!description&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;var&amp;gt;id&amp;lt;/var&amp;gt;&lt;br /&gt;
| The id string identifying this metasegment. This should not be a number or numeric expression.&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;var&amp;gt;caption&amp;lt;/var&amp;gt;&lt;br /&gt;
| The text to be displayed in the metasegment. You can force a line break by including the text &#039;&amp;lt;code&amp;gt;\n&amp;lt;/code&amp;gt;&#039; in the string.&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;var&amp;gt;xmin&amp;lt;/var&amp;gt;, &amp;lt;var&amp;gt;xmax&amp;lt;/var&amp;gt;&lt;br /&gt;
| The x range.&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;var&amp;gt;ymin&amp;lt;/var&amp;gt;, &amp;lt;var&amp;gt;ymax&amp;lt;/var&amp;gt;&lt;br /&gt;
| The y range.&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;var&amp;gt;mode&amp;lt;/var&amp;gt;&lt;br /&gt;
| The mode defines whether a metasegment is only for display (&amp;lt;code&amp;gt;STATIC&amp;lt;/code&amp;gt;), can be used like a button (&amp;lt;code&amp;gt;BUTTON&amp;lt;/code&amp;gt;), or a button which can be moved (&amp;lt;code&amp;gt;MBUTTON&amp;lt;/code&amp;gt;,&amp;lt;code&amp;gt;MHBUTTON&amp;lt;/code&amp;gt; or &amp;lt;code&amp;gt;MVBUTTON&amp;lt;/code&amp;gt;), or can be moved and resized (&amp;lt;code&amp;gt;WINDOW&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;HWINDOW&amp;lt;/code&amp;gt; or &amp;lt;code&amp;gt;VWINDOW&amp;lt;/code&amp;gt;).&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;var&amp;gt;style&amp;lt;/var&amp;gt;&lt;br /&gt;
| The style specifies whether the metasegment can be displayed without a frame (&amp;lt;code&amp;gt;NONE&amp;lt;/code&amp;gt;), as rectangle (&amp;lt;code&amp;gt;BOX&amp;lt;/code&amp;gt;) or as two vertical lines connected by a horizontal line (&amp;lt;code&amp;gt;BAR&amp;lt;/code&amp;gt;, like: &amp;lt;nowiki&amp;gt;|-|&amp;lt;/nowiki&amp;gt;).&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;var&amp;gt;linewidth&amp;lt;/var&amp;gt;&lt;br /&gt;
| The width of the frame lines (0, 1, 2, 3, etc.).&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;var&amp;gt;linecolor&amp;lt;/var&amp;gt;&lt;br /&gt;
| The frame colour.&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;var&amp;gt;fillmode&amp;lt;/var&amp;gt;&lt;br /&gt;
| The metasegment is filled with a background color/picture (&amp;lt;code&amp;gt;FILLED&amp;lt;/code&amp;gt;) or not filled  (&amp;lt;code&amp;gt;TRANSPARENT&amp;lt;/code&amp;gt;).&lt;br /&gt;
|- &lt;br /&gt;
| &amp;lt;var&amp;gt;fillcolor&amp;lt;/var&amp;gt;&lt;br /&gt;
| The background color, the name of an image file (BMP,GIF,JPG or PNG) containing background picture, or the name of a bitmap (without option) or button resource (with option /Button) containing the background picture.&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;var&amp;gt;halign&amp;lt;/var&amp;gt;&lt;br /&gt;
| The horizontal text alignment (&amp;lt;code&amp;gt;CENTER&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;LEFT&amp;lt;/code&amp;gt; or &amp;lt;code&amp;gt;RIGHT&amp;lt;/code&amp;gt;).&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;var&amp;gt;valign&amp;lt;/var&amp;gt;&lt;br /&gt;
| The vertical text align (&amp;lt;code&amp;gt;CENTER&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;TOP&amp;lt;/code&amp;gt; or &amp;lt;code&amp;gt;BOTTOM&amp;lt;/code&amp;gt;).&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;var&amp;gt;textcolor&amp;lt;/var&amp;gt;&lt;br /&gt;
| The text caption color.&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;var&amp;gt;splitters&amp;lt;/var&amp;gt;&lt;br /&gt;
| The index of splitters where the metasegment should be visible (&amp;lt;code&amp;gt;ON&amp;lt;/code&amp;gt;) or invisible (&amp;lt;code&amp;gt;OFF&amp;lt;/code&amp;gt;); if not specified the metasegment is visible in all splitters.&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;var&amp;gt;tSettings&amp;lt;/var&amp;gt;&lt;br /&gt;
| An extended table with the following fields:&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;keinrahmen&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
| parameter || string field&lt;br /&gt;
|-&lt;br /&gt;
| string || string field&lt;br /&gt;
|-&lt;br /&gt;
| number || number field&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
E.g. you can create this table with the following macro command:&lt;br /&gt;
&lt;br /&gt;
 #t := new table * * /E string:parameter string:string number:number&lt;br /&gt;
 if $#t[?] != table em -1 ; $#mac::error - failed to create table&lt;br /&gt;
&lt;br /&gt;
The table has one entry per parameter. Adding a parameter to the table works like this:&lt;br /&gt;
&lt;br /&gt;
 $#t * parameter &#039;xmin&#039; number &#039;20&#039;&lt;br /&gt;
&lt;br /&gt;
The parameter &amp;lt;var&amp;gt;tSettings&amp;lt;/var&amp;gt; can contain any of the above parameters, but supports a number of newer ones too. With this version you can add a box and whiskers metasegment if you define the style as &#039;boxandwhiskers&#039;. The following extra parameters are supported:&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;einrahmen&amp;quot;&lt;br /&gt;
!parameter!!description&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;font&amp;lt;/code&amp;gt;&lt;br /&gt;
| the font to be used for this metasegment (overrides default font set using the &amp;lt;code&amp;gt;MARKERS&amp;lt;/code&amp;gt; command). The font must be specified using the {{STX}} font formatting string: e.g. &#039;arial:10:b&#039; for a ten point bold arial font. See Fonts and Font Arguments for details.&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;min&amp;lt;/code&amp;gt;&lt;br /&gt;
| the minimum value. Data type: number&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;max&amp;lt;/code&amp;gt;&lt;br /&gt;
| the maximum value. Data type: number&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;mean&amp;lt;/code&amp;gt;&lt;br /&gt;
| the mean value. Data type: number&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;median&amp;lt;/code&amp;gt;&lt;br /&gt;
| the median value. Data type: number&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;iqrmin&amp;lt;/code&amp;gt;&lt;br /&gt;
| the inter quantal range minimum. Data type: number&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;iqrmax&amp;lt;/code&amp;gt;&lt;br /&gt;
| the inter quantal range maximum. Data type: number&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;unit&amp;lt;/code&amp;gt;&lt;br /&gt;
| the unit. Data type: string&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;valueaxis&amp;lt;/code&amp;gt;&lt;br /&gt;
| the axis (&amp;lt;code&amp;gt;x&amp;lt;/code&amp;gt; or &amp;lt;code&amp;gt;y&amp;lt;/code&amp;gt;) which the boxandwhisker values are on. Data type: string&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;invertSelected&amp;lt;/code&amp;gt;&lt;br /&gt;
| &amp;lt;code&amp;gt;true&amp;lt;/code&amp;gt; if the metasegment should be inverted on selection, &amp;lt;code&amp;gt;false&amp;lt;/code&amp;gt; otherwise. The default is &amp;lt;code&amp;gt;true&amp;lt;/code&amp;gt;. Data type: string&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;modifyKeys&amp;lt;/code&amp;gt;&lt;br /&gt;
| defines which keys must be pressed to allow metasegment modification (i.e. allow user to move the metasegment). The strings &amp;lt;code&amp;gt;control&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;shift&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;controlshift&amp;lt;/code&amp;gt; and &amp;lt;code&amp;gt;none&amp;lt;/code&amp;gt; are supported. If this parameter is not specified, the default modify key (control) is used. Data type: string.&lt;br /&gt;
|}&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
The metasegment splitter setting are defined by the specified splitter arguments (&amp;lt;var&amp;gt;splitterX&amp;lt;/var&amp;gt;) and following options:&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;einrahmen&amp;quot;&lt;br /&gt;
!option!!description&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;/Clear&amp;lt;/code&amp;gt;&lt;br /&gt;
| The metasegment is only visible in the specified splitters.&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;/Merge&amp;lt;/code&amp;gt;&lt;br /&gt;
| The metasegment is made visible in the specified splitters in addition to those already displayed.&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;/Except&amp;lt;/code&amp;gt;&lt;br /&gt;
| The metasegment is made visible in all splitters except those specified.&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;/Toggle&amp;lt;/code&amp;gt;&lt;br /&gt;
| Toggle the visibility of the metasegment in every splitter.&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;/Update&amp;lt;/code&amp;gt;&lt;br /&gt;
| Change the settings of an existing metasegment. Otherwise create a new one, overwriting the old one if it already existed.&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;/Redraw&amp;lt;/code&amp;gt;&lt;br /&gt;
| Explicitly redraw the metasegment. If this is not specified, then use the command &amp;lt;code&amp;gt;SET graph ADDMARKER /X/R&amp;lt;/code&amp;gt; after all chanegs to redraw all metasegments.&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;/Select&amp;lt;/code&amp;gt; or &amp;lt;code&amp;gt;/Deselect&amp;lt;/code&amp;gt;&lt;br /&gt;
| Set the selection state of the metasegment.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Adding a normal metasegment to an existing graph:&lt;br /&gt;
&lt;br /&gt;
 #t := new table * * /E string:parameter string:string number:number integer:integer&lt;br /&gt;
 if $#t[?] != table em -1 ; $#mac::error - failed to create table&lt;br /&gt;
 &lt;br /&gt;
 $#t * parameter id string testid&lt;br /&gt;
 $#t * parameter xmin number 20&lt;br /&gt;
 $#t * parameter xmax number 80&lt;br /&gt;
 $#t * parameter ymin number 20&lt;br /&gt;
 $#t * parameter ymax number 80&lt;br /&gt;
 $#t * parameter caption string this is the text caption&lt;br /&gt;
 $#t * parameter mode string window&lt;br /&gt;
 $#t * parameter style string box&lt;br /&gt;
 $#t * parameter linewidth integer 1&lt;br /&gt;
 $#t * parameter linecol string red&lt;br /&gt;
 $#t * parameter fillmode string filled&lt;br /&gt;
 $#t * parameter fillcolor string green&lt;br /&gt;
 $#t * parameter halign string center&lt;br /&gt;
 $#t * parameter valign string center&lt;br /&gt;
 $#t * parameter splitters string 1 2&lt;br /&gt;
 &lt;br /&gt;
 $#g addmarker $#t /Redraw&lt;br /&gt;
&lt;br /&gt;
Here is an example of a box and whiskers metasegment to an existing graph.&lt;br /&gt;
&lt;br /&gt;
 #t := new table * * /E string:parameter string:string number:number&lt;br /&gt;
 if $#t[?] != table em -1 ; $#mac::error - failed to create table&lt;br /&gt;
 &lt;br /&gt;
 $#t * parameter id string testid&lt;br /&gt;
 $#t * parameter xmin number 20&lt;br /&gt;
 $#t * parameter xmax number 80&lt;br /&gt;
 $#t * parameter ymin number 20&lt;br /&gt;
 $#t * parameter ymax number 80&lt;br /&gt;
 $#t * parameter caption string this is the text caption&lt;br /&gt;
 $#t * parameter mode string window&lt;br /&gt;
 $#t * parameter linewidth integer 2&lt;br /&gt;
 $#t * parameter linecol string red&lt;br /&gt;
 $#t * parameter halign string center&lt;br /&gt;
 $#t * parameter valign string center&lt;br /&gt;
 $#t * parameter splitters string 1 2&lt;br /&gt;
 $#t * parameter valueaxis string x&lt;br /&gt;
 $#t * parameter style string boxandwhiskers&lt;br /&gt;
 $#t * parameter min number -20&lt;br /&gt;
 $#t * parameter max number 75&lt;br /&gt;
 $#t * parameter mean number 45&lt;br /&gt;
 $#t * parameter median number 55&lt;br /&gt;
 $#t * parameter iqrmin number 35&lt;br /&gt;
 $#t * parameter iqrmax number 65&lt;br /&gt;
 $#t * parameter unit string dB&lt;br /&gt;
 &lt;br /&gt;
 $#g addmarker $#t /Redraw&lt;br /&gt;
&lt;br /&gt;
== Selections ==&lt;br /&gt;
&lt;br /&gt;
&amp;amp;quot;Selections&amp;amp;quot; can be used to mark polygon areas of a graph. A selection can be moved and redrawn by the user using the mouse.&lt;br /&gt;
&lt;br /&gt;
Selections are created, modified and deleted using the graph command &amp;lt;code&amp;gt;SET graph SELECTION&amp;lt;/code&amp;gt;, first implemented in {{STX}} 3.10.&lt;br /&gt;
&lt;br /&gt;
===Activating and deactivating selections===&lt;br /&gt;
&lt;br /&gt;
==== &amp;lt;code&amp;gt;SELECTION ACTIVATE&amp;lt;/code&amp;gt; ====&lt;br /&gt;
&lt;br /&gt;
 SET &amp;lt;var&amp;gt;graph&amp;lt;/var&amp;gt; SELECTION ACTIVATE &amp;lt;var&amp;gt;id&amp;lt;/var&amp;gt; [ ON|OFF ]&lt;br /&gt;
&lt;br /&gt;
Activate the selection identified by &amp;lt;var&amp;gt;id&amp;lt;/var&amp;gt;. If &amp;lt;code&amp;gt;OFF&amp;lt;/code&amp;gt; is specified, then this command deactivates the selection.&lt;br /&gt;
&lt;br /&gt;
==== &amp;lt;code&amp;gt;SELECTION DEACTIVATE&amp;lt;/code&amp;gt; ====&lt;br /&gt;
&lt;br /&gt;
 SET &amp;lt;var&amp;gt;graph&amp;lt;/var&amp;gt; SELECTION DEACTIVATE &amp;lt;var&amp;gt;id&amp;lt;/var&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Deactivate the selection identified by &amp;lt;var&amp;gt;id&amp;lt;/var&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
=== Creating selections ===&lt;br /&gt;
&lt;br /&gt;
==== &amp;lt;code&amp;gt;SELECTION SET&amp;lt;/code&amp;gt; ====&lt;br /&gt;
&lt;br /&gt;
 SET &amp;lt;var&amp;gt;graph&amp;lt;/var&amp;gt; SELECTION SET &amp;lt;var&amp;gt;id&amp;lt;/var&amp;gt; &amp;lt;var&amp;gt;tSelection&amp;lt;/var&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Creates a new selection, or changes the polygon of an existing selection.&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;einrahmen&amp;quot;&lt;br /&gt;
!argument!!description&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;var&amp;gt;id&amp;lt;/var&amp;gt;&lt;br /&gt;
| The id of the selection. If the selection does not yet exist, it is created.&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;var&amp;gt;tSelection&amp;lt;/var&amp;gt;&lt;br /&gt;
| A two field parameter table describing the selection&#039;s boundary as a vector of x/y coordinates.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Deleting selections ===&lt;br /&gt;
&lt;br /&gt;
==== &amp;lt;code&amp;gt;SELECTION DELETE&amp;lt;/code&amp;gt; ====&lt;br /&gt;
&lt;br /&gt;
 SET &amp;lt;var&amp;gt;graph&amp;lt;/var&amp;gt; SELECTION DELETE &amp;lt;var&amp;gt;cmd&amp;lt;/var&amp;gt; [ &amp;lt;var&amp;gt;id&amp;lt;/var&amp;gt; ]&lt;br /&gt;
&lt;br /&gt;
The &amp;lt;code&amp;gt;DELETE&amp;lt;/code&amp;gt; subcommand can be used to delete one or more selections.&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;einrahmen&amp;quot;&lt;br /&gt;
!argument!!description&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;var&amp;gt;cmd&amp;lt;/var&amp;gt;&lt;br /&gt;
| One of the following keywords:&lt;br /&gt;
{| class=&amp;quot;keinrahmen&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;ALL&amp;lt;/code&amp;gt;&lt;br /&gt;
| delete all existing selections&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;ACTIVE&amp;lt;/code&amp;gt;&lt;br /&gt;
| delete the active selection.&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;ID&amp;lt;/code&amp;gt;&lt;br /&gt;
| delete the selection with the specified id.&lt;br /&gt;
|}&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;var&amp;gt;id&amp;lt;/var&amp;gt;&lt;br /&gt;
| The id of the selection to delete (only in conjunction with the &amp;lt;var&amp;gt;cmd&amp;lt;/var&amp;gt; &amp;lt;code&amp;gt;ID&amp;lt;/code&amp;gt;).&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Listing existing selections ===&lt;br /&gt;
&lt;br /&gt;
==== &amp;lt;code&amp;gt;SELECTION LIST&amp;lt;/code&amp;gt; ====&lt;br /&gt;
&lt;br /&gt;
 SET &amp;lt;var&amp;gt;graph&amp;lt;/var&amp;gt; SELECTION LIST &amp;lt;var&amp;gt;tList&amp;lt;/var&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The &amp;lt;code&amp;gt;LIST&amp;lt;/code&amp;gt; subcommand fills a table with a list of the existing selections in the graph. The exact details which are returned are determined by the table field names.&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;einrahmen&amp;quot;&lt;br /&gt;
!argument!!description&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;var&amp;gt;tList&amp;lt;/var&amp;gt;&lt;br /&gt;
| An extended table with fields specifying which attributes should be retrieved.&lt;br /&gt;
Currently the following field names are supported:&lt;br /&gt;
{| class=&amp;quot;keinrahmen&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;activated&amp;lt;/code&amp;gt;&lt;br /&gt;
| 1 if the selection is active. 0 otherwise.&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;boundrect&amp;lt;/code&amp;gt;&lt;br /&gt;
| returns the bounding rectangle in world coordinates (a space separated list: &amp;lt;code&amp;gt;xmin xmax ymin ymax&amp;lt;/code&amp;gt;)&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;id&amp;lt;/code&amp;gt;&lt;br /&gt;
| returns the id of the selection&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;modified&amp;lt;/code&amp;gt;&lt;br /&gt;
| 1 if the selection has been modified on screen by the user since the last SELECTION SET command. 0 otherwise.&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;splitters&amp;lt;/code&amp;gt;&lt;br /&gt;
| returns the splitters in which this selection is visible (a bit mask: e.g. 3 = 1st and 2nd splitter, 2 = just the second splitter)&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;text&amp;lt;/code&amp;gt;&lt;br /&gt;
| returns the selection&#039;s text&lt;br /&gt;
|}&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
 // example&lt;br /&gt;
 #tList := new table * * /e string:id string:splitters string:boundrect&lt;br /&gt;
 if &#039;$#tList[?]&#039; != &#039;table&#039; em -1 ; $#mac::ERROR - failed to create #tList table&lt;br /&gt;
 $#graph SELECTION LIST $#tList&lt;br /&gt;
 showitem $#tList ; contents of &#039;list&#039; table&lt;br /&gt;
&lt;br /&gt;
=== Modifying default and existing selection settings ===&lt;br /&gt;
&lt;br /&gt;
You can modify the way an existing selection looks and behaves using the &amp;lt;code&amp;gt;SET graph SETTINGS&amp;lt;/code&amp;gt; subcommand.&lt;br /&gt;
&lt;br /&gt;
==== &amp;lt;code&amp;gt;SELECTION SETTINGS&amp;lt;/code&amp;gt; ====&lt;br /&gt;
&lt;br /&gt;
 SET &amp;lt;var&amp;gt;graph&amp;lt;/var&amp;gt; SELECTION SETTINGS &amp;lt;var&amp;gt;tSettings&amp;lt;/var&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Set the default settings for all new selections, modify all selections in one go, or modify an existing selection&#039;s settings.&lt;br /&gt;
&lt;br /&gt;
The settings which can be modified include a selection&#039;s color, it&#039;s transparency, any text it should display, and which graph splitters it should be visible in.&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;einrahmen&amp;quot;&lt;br /&gt;
!argument!!description&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;var&amp;gt;tSettings&amp;lt;/var&amp;gt;&lt;br /&gt;
| An extended table with four fields (string:parameter string:string num:number int:integer). Currently the following parameters are supported:&lt;br /&gt;
{| class=&amp;quot;keinrahmen&amp;quot;&lt;br /&gt;
|&amp;lt;code&amp;gt;activecolor&amp;lt;/code&amp;gt;&lt;br /&gt;
| the color when active&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;id&amp;lt;/code&amp;gt;&lt;br /&gt;
| the id of the selection to set settings for. If no id is specified, all selections will be set.&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;inactivecolor&amp;lt;/code&amp;gt;&lt;br /&gt;
| the color when inactive&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;linecolor&amp;lt;/code&amp;gt;&lt;br /&gt;
| the color used to draw an inactive selection (and text).&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;splitters&amp;lt;/code&amp;gt;&lt;br /&gt;
| a bit mask, specifying in which splitters this selection should be visible (0 for none, 255 for all 8 splitters).&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;text&amp;lt;/code&amp;gt;&lt;br /&gt;
| a string to be displayed in the selection. The character sequence &#039;&amp;lt;code&amp;gt;\n&amp;lt;/code&amp;gt;&#039; will force a line break when the text is displayed.&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;transparency&amp;lt;/code&amp;gt;&lt;br /&gt;
| specify a selection&#039;s transparency with a value between 0 (opaque) and 100 (transparent).&lt;br /&gt;
|}&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Retrieving a selection ===&lt;br /&gt;
&lt;br /&gt;
==== &amp;lt;code&amp;gt;SELECTION GET&amp;lt;/code&amp;gt; ====&lt;br /&gt;
&lt;br /&gt;
 SET &amp;lt;var&amp;gt;graph&amp;lt;/var&amp;gt; SELECTION GET &amp;lt;var&amp;gt;id&amp;lt;/var&amp;gt; &amp;lt;var&amp;gt;tSelection&amp;lt;/var&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Retrieves the selection&#039;s current polygon.&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;einrahmen&amp;quot;&lt;br /&gt;
!argument!!description&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;var&amp;gt;id&amp;lt;/var&amp;gt;&lt;br /&gt;
| The id of the selection. If the selection does not yet exist, it is created.&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;var&amp;gt;tSelection&amp;lt;/var&amp;gt;&lt;br /&gt;
| A two field parameter table to receive a vector of x/y coordinates.&lt;br /&gt;
|}&lt;/div&gt;</summary>
		<author><name>Jw</name></author>
	</entry>
	<entry>
		<id>https://mediawiki.kfs.oeaw.ac.at/stx/docs/wiki/index.php?title=User_Guide/Waveform_and_Segmentation_Viewer/Waveform_and_Segmentation_Viewer_Hotkeys&amp;diff=10668</id>
		<title>User Guide/Waveform and Segmentation Viewer/Waveform and Segmentation Viewer Hotkeys</title>
		<link rel="alternate" type="text/html" href="https://mediawiki.kfs.oeaw.ac.at/stx/docs/wiki/index.php?title=User_Guide/Waveform_and_Segmentation_Viewer/Waveform_and_Segmentation_Viewer_Hotkeys&amp;diff=10668"/>
		<updated>2019-10-15T08:00:28Z</updated>

		<summary type="html">&lt;p&gt;Jw: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{DISPLAYTITLE:{{SUBPAGENAME}}}}&lt;br /&gt;
{{V1}}&lt;br /&gt;
{{Hotkeys}}&lt;br /&gt;
__TOC__&lt;br /&gt;
&lt;br /&gt;
=={{STX}} &amp;gt;= 5.0==&lt;br /&gt;
&lt;br /&gt;
Hotkeys are now defined in the text file &amp;lt;samp&amp;gt;viewer1.hotkeys&amp;lt;/samp&amp;gt; in the &amp;lt;samp&amp;gt;profiles&amp;lt;/samp&amp;gt; directory of your {{STX}} installation.&lt;br /&gt;
&lt;br /&gt;
=={{STX}} &amp;lt;= 4.4.10==&lt;br /&gt;
{|&lt;br /&gt;
|-&lt;br /&gt;
|Cursors&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
|Home&lt;br /&gt;
|Move active cursor to beginning of the x axis of the active graph&lt;br /&gt;
|-&lt;br /&gt;
|End&lt;br /&gt;
|Move active cursor to end of the x axis of the active graph&lt;br /&gt;
|-&lt;br /&gt;
|PgUp&lt;br /&gt;
|Segment Lines: Move active cursor to first line&lt;br /&gt;
|-&lt;br /&gt;
|Left, Right&lt;br /&gt;
|Move active cursor left / right&lt;br /&gt;
|-&lt;br /&gt;
|Shift+Left, Shift+Right&lt;br /&gt;
|Fast move active cursor left / right&lt;br /&gt;
|-&lt;br /&gt;
|Up, Down&lt;br /&gt;
|Zoom: Move active cursor up / down, only if cursor is not bound to function values. Segment lines: Move active cursor to previous / next line&lt;br /&gt;
|-&lt;br /&gt;
|Shift+Up, Shift+Down&lt;br /&gt;
|Zoom: Fast move active cursor up / down, only if cursor is not bound to function values&lt;br /&gt;
|-&lt;br /&gt;
|F2&lt;br /&gt;
|Activate next cursor of active graph (toggle)&lt;br /&gt;
|-&lt;br /&gt;
|F3&lt;br /&gt;
|Mirror inactive cursor around active cursor position (toggle)&lt;br /&gt;
|-&lt;br /&gt;
|Ctrl+F3&lt;br /&gt;
|Mirror active cursor around inactive cursor position (toggle)&lt;br /&gt;
|-&lt;br /&gt;
|Ctrl+M&lt;br /&gt;
|Move the selected segment marker to the cursor positions. The segment controls and the segment marker are updated, but the new position is not saved in the DataSet.&lt;br /&gt;
|-&lt;br /&gt;
|B&lt;br /&gt;
|Zoom: Bind / unbind zoom cursor (amplitudes) to / from waveform function.&lt;br /&gt;
|-&lt;br /&gt;
|C&lt;br /&gt;
|Change cursor style of active graph (cyclic)&lt;br /&gt;
|-&lt;br /&gt;
|1, 2&lt;br /&gt;
|Zoom: Move first / second segment lines cursor to the (exact) position of active zoom cursor.&lt;br /&gt;
|-&lt;br /&gt;
|Ctrl+C&lt;br /&gt;
|Set a cue&amp;lt;nowiki&amp;gt;-&amp;lt;/nowiki&amp;gt;point at the position of the active cursor. The cue-point is added to the cue-point list displayed in the dialog.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
{|&lt;br /&gt;
|-&lt;br /&gt;
|Segments&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
|Del&lt;br /&gt;
|Delete the selected segment marker from the graphics and from the DataSet!&lt;br /&gt;
|-&lt;br /&gt;
|Ins&lt;br /&gt;
|Create new segment over the signal bracketed by the cursors of the active graph.&lt;br /&gt;
|-&lt;br /&gt;
|M&lt;br /&gt;
|Move the cursors to selected segment marker.&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
|W&lt;br /&gt;
|Write (changed) position of segment marker to the DataSet&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
{|&lt;br /&gt;
|-&lt;br /&gt;
|Navigation&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
|Tab, Shift+TAB&lt;br /&gt;
|Active next/previous graph or dialog control.&lt;br /&gt;
|-&lt;br /&gt;
|Ctrl+TAB&lt;br /&gt;
|Toggle focus between dialog and last activated graph&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
{|&lt;br /&gt;
|-&lt;br /&gt;
|Playback&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
|P&lt;br /&gt;
|Play signal bracketed by cursors&lt;br /&gt;
|-&lt;br /&gt;
|Ctrl+P&lt;br /&gt;
|Play signal of selected segment marker in active graph&lt;br /&gt;
|-&lt;br /&gt;
|Q&lt;br /&gt;
|Play whole signal displayed in active graph&lt;br /&gt;
|-&lt;br /&gt;
|T&lt;br /&gt;
|Toggle play window alignment (before / after)&lt;br /&gt;
|-&lt;br /&gt;
|ESC&lt;br /&gt;
|Stop playback&lt;br /&gt;
|-&lt;br /&gt;
|SPACE&lt;br /&gt;
|Play the signal window. The window length and alignment is defined by the play window settings in the [[User Guide/Waveform Plot and Segmentation/General Settings Dialog|General Settings]] dialog.&lt;br /&gt;
|-&lt;br /&gt;
|F4&lt;br /&gt;
|Increase play window length (double)&lt;br /&gt;
|-&lt;br /&gt;
|Ctrl+F4&lt;br /&gt;
|Decrease play window length (half)&lt;br /&gt;
|-&lt;br /&gt;
|Ctrl+L&lt;br /&gt;
|Toggle audio loop on and off&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
{|&lt;br /&gt;
|-&lt;br /&gt;
|Zoom&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
|NUM+&lt;br /&gt;
|Zoom in to centering around the active cursor on the x axis&lt;br /&gt;
|-&lt;br /&gt;
|NUM-&lt;br /&gt;
|Zoom out of graph centering around the active cursor on the x axis&lt;br /&gt;
|-&lt;br /&gt;
|Ctrl+NUM+&lt;br /&gt;
|Zoom in to graph centering around the active cursor on the y axis&lt;br /&gt;
|-&lt;br /&gt;
|Ctrl+NUM-&lt;br /&gt;
|Zoom out of graph centering around the active cursor on the y axis&lt;br /&gt;
|-&lt;br /&gt;
|Ctrl+O&lt;br /&gt;
|Reset the zoom (zoom out completely)&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
{|&lt;br /&gt;
|-&lt;br /&gt;
|Layout/Update&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
|Ctrl+F&lt;br /&gt;
|Hide / show overview (file) window (toggle)&lt;br /&gt;
|-&lt;br /&gt;
|Ctrl+Z&lt;br /&gt;
|Hide / show zoom window (toggle)&lt;br /&gt;
|-&lt;br /&gt;
|V&lt;br /&gt;
|Overview: View bracketed signal in the segment lines Segment lines: View bracketed signal in the zoom. Only if zoom mode is set to &amp;quot;between cursors&amp;quot;.&lt;br /&gt;
|-&lt;br /&gt;
|Z&lt;br /&gt;
|Change zoom window layout (cyclic)&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
{|&lt;br /&gt;
|-&lt;br /&gt;
|Misc&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
|A&lt;br /&gt;
|Start a viewer / analyser application for the bracketed signal. A dialog to select the application and profile is displayed.&lt;br /&gt;
|}&lt;/div&gt;</summary>
		<author><name>Jw</name></author>
	</entry>
	<entry>
		<id>https://mediawiki.kfs.oeaw.ac.at/stx/docs/wiki/index.php?title=User_Guide/Segment_Markers_Dialog&amp;diff=10667</id>
		<title>User Guide/Segment Markers Dialog</title>
		<link rel="alternate" type="text/html" href="https://mediawiki.kfs.oeaw.ac.at/stx/docs/wiki/index.php?title=User_Guide/Segment_Markers_Dialog&amp;diff=10667"/>
		<updated>2019-10-08T10:09:19Z</updated>

		<summary type="html">&lt;p&gt;Jw: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{DISPLAYTITLE:{{SUBPAGENAME}}}}&lt;br /&gt;
{{V1}}&lt;br /&gt;
{{V2}}&lt;br /&gt;
The Segment Markers Dialog controls the way segments are displayed in a particular graph. You can specify the shape and color, as well as the text alignment. You can also split the graph into lines and specify the lines in which segments should be displayed. You can even filter the visible segments based on an attribute and value combination.&lt;br /&gt;
&lt;br /&gt;
Each profile method has its own segment marker settings.&lt;br /&gt;
&lt;br /&gt;
[[File:ws_dialog_segment_markers.png]]&lt;br /&gt;
&lt;br /&gt;
;style&lt;br /&gt;
:Selects the style of the graphics object used for the marker.&lt;br /&gt;
;line color&lt;br /&gt;
:Color used to draw and optional fill the marker object.&lt;br /&gt;
;text color, text alignment&lt;br /&gt;
:Color and alignment for text displayed in the marker.&lt;br /&gt;
;attributes&lt;br /&gt;
:List of blank separated segment attributes to be displayed in the marker. At least one attribute name must be entered. Attribute names are case sensitive! The attributes are displayed in the same order they are specified.&lt;br /&gt;
;use XML attribute format&lt;br /&gt;
:If checked, the attributes are displayed in the format name=&amp;quot;value&amp;quot;, otherwise only the attribute value is displayed.&lt;br /&gt;
;order mode&lt;br /&gt;
:Selects the method with which segment markers should be sorted.&lt;br /&gt;
;direction&lt;br /&gt;
:Selects the order in which segment markers are assigned to the segment lines.&lt;br /&gt;
;count: The number of segment lines in the graph. The higher the number, the smaller the segment height.&lt;br /&gt;
;first: The first line to use for drawing segments. Usually 1.&lt;br /&gt;
;last: The last line to draw segments on. If the same as &#039;count&#039;, then segments will use the full height of the graph. If, e.g., count/2, then only half of the graph&#039;s y axis will be used. The &#039;last&#039; value is only used if &#039;order mode&#039; is set to begin or ID.&lt;br /&gt;
;attr name, attr values&lt;br /&gt;
:The field attr name contains the name of the attribute to be used to assign segments to lines. The field attr values contains the list of values in the marker line order. Both fields are only used for the order mode attribute-value.&lt;br /&gt;
&lt;br /&gt;
==Examples==&lt;br /&gt;
If you are using the webMAUS interface, then you will receive segments with the attribute &#039;Tier&#039; and the attribute values &#039;ORT-MAU&#039;, &#039;KAN-MAU&#039; and &#039;MAU&#039;. If you would like to draw one Tier per line, then set the &#039;order mode&#039; to &#039;attribute-value&#039;, the &#039;attr name&#039; to &#039;Tier&#039; and the &#039;attr values&#039; to &#039;ORT-MAU KAN-MAU MAU&#039;.&lt;/div&gt;</summary>
		<author><name>Jw</name></author>
	</entry>
	<entry>
		<id>https://mediawiki.kfs.oeaw.ac.at/stx/docs/wiki/index.php?title=User_Guide/Segment_Markers_Dialog&amp;diff=10666</id>
		<title>User Guide/Segment Markers Dialog</title>
		<link rel="alternate" type="text/html" href="https://mediawiki.kfs.oeaw.ac.at/stx/docs/wiki/index.php?title=User_Guide/Segment_Markers_Dialog&amp;diff=10666"/>
		<updated>2019-10-08T09:55:24Z</updated>

		<summary type="html">&lt;p&gt;Jw: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{DISPLAYTITLE:{{SUBPAGENAME}}}}&lt;br /&gt;
{{V1}}&lt;br /&gt;
{{V2}}&lt;br /&gt;
The Segment Markers Dialog controls the way segments are displayed in a particular graph. You can specify the shape and color, as well as the text alignment. You can also split the graph into lines and specify the lines in which segments should be displayed. You can even filter the visible segments based on an attribute and value combination.&lt;br /&gt;
&lt;br /&gt;
Each profile method has its own segment marker settings.&lt;br /&gt;
&lt;br /&gt;
[[File:ws_dialog_segment_markers.png]]&lt;br /&gt;
&lt;br /&gt;
;style&lt;br /&gt;
:Selects the style of the graphics object used for the marker.&lt;br /&gt;
;line color&lt;br /&gt;
:Color used to draw and optional fill the marker object.&lt;br /&gt;
;text color, text alignment&lt;br /&gt;
:Color and alignment for text displayed in the marker.&lt;br /&gt;
;attributes&lt;br /&gt;
:List of blank separated segment attributes to be displayed in the marker. At least one attribute name must be entered. Attribute names are case sensitive! The attributes are displayed in the same order they are specified.&lt;br /&gt;
;use XML attribute format&lt;br /&gt;
:If checked, the attributes are displayed in the format name=&amp;quot;value&amp;quot;, otherwise only the attribute value is displayed.&lt;br /&gt;
;order mode&lt;br /&gt;
:Selects the method with which segment markers should be sorted.&lt;br /&gt;
;direction&lt;br /&gt;
:Selects the order in which segment markers are assigned to the segment lines.&lt;br /&gt;
;count: The number of segment lines in the graph. The higher the number, the smaller the segment height.&lt;br /&gt;
;first: The first line to use for drawing segments. Usually 1.&lt;br /&gt;
;last: The last line to draw segments on. If the same as &#039;count&#039;, then segments will use the full height of the graph. If, e.g., count/2, then only half of the graph&#039;s y axis will be used. The &#039;last&#039; value is only used if &#039;order mode&#039; is set to begin or ID.&lt;br /&gt;
;attr name, attr values&lt;br /&gt;
:The field attr name contains the name of the attribute to be used to assign segments to lines. The field attr values contains the list of values in the marker line order. Both fields are only used for the order mode attribute-value.&lt;/div&gt;</summary>
		<author><name>Jw</name></author>
	</entry>
	<entry>
		<id>https://mediawiki.kfs.oeaw.ac.at/stx/docs/wiki/index.php?title=Programmer_Guide/Macro_Library/METASEGMENT&amp;diff=10665</id>
		<title>Programmer Guide/Macro Library/METASEGMENT</title>
		<link rel="alternate" type="text/html" href="https://mediawiki.kfs.oeaw.ac.at/stx/docs/wiki/index.php?title=Programmer_Guide/Macro_Library/METASEGMENT&amp;diff=10665"/>
		<updated>2019-10-08T07:39:28Z</updated>

		<summary type="html">&lt;p&gt;Jw: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{DISPLAYTITLE:{{SUBPAGENAME}}}}&lt;br /&gt;
Viewer macro: Implements the segment dialog for viewers and some special metasegment functions.&lt;/div&gt;</summary>
		<author><name>Jw</name></author>
	</entry>
	<entry>
		<id>https://mediawiki.kfs.oeaw.ac.at/stx/docs/wiki/index.php?title=User_Guide&amp;diff=10664</id>
		<title>User Guide</title>
		<link rel="alternate" type="text/html" href="https://mediawiki.kfs.oeaw.ac.at/stx/docs/wiki/index.php?title=User_Guide&amp;diff=10664"/>
		<updated>2019-10-04T10:08:30Z</updated>

		<summary type="html">&lt;p&gt;Jw: /* Tutorials */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{DISPLAYTITLE:{{SUBPAGENAME}}}}&lt;br /&gt;
{{User Guide}}&lt;br /&gt;
==Organise your sound files==&lt;br /&gt;
&lt;br /&gt;
{{STX}} can play, analyse, annotate and modify wave files. The main application - the [[User_Guide/Workspace|Workspace]] - is where you load your sound files and start your analysis from. Your sound files are organised in a [[User_Guide/Project|project]] file. You can use the [[User_Guide/FindFile|FindFile]] application to search for wave files on disk and import them into {{STX}}.&lt;br /&gt;
&lt;br /&gt;
==Analyse a Signal==&lt;br /&gt;
&lt;br /&gt;
There are a number of applications for analysing signals in {{STX}}. &lt;br /&gt;
&lt;br /&gt;
* [[User_Guide/Real_Time_Analyser|Real-Time Analyser]] - analyse the current sound input as a spectrum, wave or spectrogram graph&lt;br /&gt;
* [[User Guide/Waveform and Segmentation Viewer|Waveform and Segmentation Viewer]] - useful for segmenting signals&lt;br /&gt;
* [[User Guide/Spectrogram and Parameter Viewer|Spectrogram and Parameter Viewer]] - calculate, edit and extract parameters from the signal. Segmentation is also easy here.&lt;br /&gt;
* [[User Guide/Spectrum Viewer|Spectrum Viewer]] - average the spectra of a signal segment.&lt;br /&gt;
* [[User Guide/Transcription Script|Transcription]] - an application specifically designed for segmentation and transcription.&lt;br /&gt;
&lt;br /&gt;
==Record a Signal==&lt;br /&gt;
&lt;br /&gt;
The [[User Guide/Recorder|Recorder]] can be used to save an input stream to disk and whilst segmenting it on the fly.&lt;br /&gt;
&lt;br /&gt;
==Command-Line Parameters==&lt;br /&gt;
&lt;br /&gt;
There is a minimal set of [[User Guide/Command-Line Parameters|command line parameters]] which can be passed to {{STX}}.&lt;br /&gt;
&lt;br /&gt;
==Concepts and Terminology==&lt;br /&gt;
&lt;br /&gt;
{{STX}} uses some concepts and terminology which might benefit from some explanation. See [[User Guide/Concepts and Terminology|Concepts and Terminology]].&lt;br /&gt;
&lt;br /&gt;
==Tutorials==&lt;br /&gt;
&lt;br /&gt;
There are a few [[User Guide/Tutorials|tutorials available]].&lt;br /&gt;
&lt;br /&gt;
* [[User_Guide/Tutorials/Analysing_a_sound_file|Analysing a sound file]]&lt;br /&gt;
* [[User_Guide/Tutorials/Opening_the_samples.stxpr_project|Opening the sample project]]&lt;br /&gt;
* [[User_Guide/Tutorials/Playing_a_sound_file|Play a sound file]]&lt;br /&gt;
* [[User_Guide/Tutorials/Running_an_application|Running an application]]&lt;br /&gt;
* [[User_Guide/Tutorials/Setting_the_default_application|Setting the default application]]&lt;br /&gt;
* [[User_Guide/Tutorials/Zooming_in_a_Viewer|Zooming in a viewer]]&lt;br /&gt;
&lt;br /&gt;
There is also the introductory video about [https://kfsmail.kfs.oeaw.ac.at/owncloud/index.php/s/cbMjVjgQLZGjYk8 the compact workspace].&lt;br /&gt;
&lt;br /&gt;
==Scripts, Toolboxes, Development, and Extending {{STX}}==&lt;br /&gt;
&lt;br /&gt;
{{STX}} comes with a number of [[User Guide/Pre-installed scripts|pre-installed scripts]] - applications written in the {{STX}} scripting language, and loaded and run from a text file. You can write your own {{STX}} scripts, [[User Guide/Toolbox|toolboxes]] and applications. All the functionality that you find in {{STX}} is available to you in the script language. The [[User Guide/The_Script_Controller|script controller]] dialog, the [[User Guide/STX_Console|command line console]], the integrated [[User Guide/Debugger|debugger]] and the [[Programmer Guide]] will help you.&lt;br /&gt;
&lt;br /&gt;
==The Log Window==&lt;br /&gt;
The little window up on the left hand corner of the screen is the {{STX}} [[/Log Window/]]. You can start a number of applications from here, change some general {{STX}} settings, and view the log messages.&lt;/div&gt;</summary>
		<author><name>Jw</name></author>
	</entry>
	<entry>
		<id>https://mediawiki.kfs.oeaw.ac.at/stx/docs/wiki/index.php?title=Main_Page&amp;diff=10663</id>
		<title>Main Page</title>
		<link rel="alternate" type="text/html" href="https://mediawiki.kfs.oeaw.ac.at/stx/docs/wiki/index.php?title=Main_Page&amp;diff=10663"/>
		<updated>2019-10-04T10:05:52Z</updated>

		<summary type="html">&lt;p&gt;Jw: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== {{STx}} {{VERSION}}==&lt;br /&gt;
&lt;br /&gt;
{{STX}} is a software tool for the analysis, signal processing and annotation of Wave sound files. {{STX}} runs on the Windows operating system. It was originally a port of the S_TOOLS application for dedicated DSP hardware developed at the [https://www.kfs.oeaw.ac.at Acoustics Research Institute] in the 1980s. This documentation is work in progress and by no means complete. If you fail to find something you need, please [[Contact|get in touch]] with the development team.&lt;br /&gt;
&lt;br /&gt;
=== Using {{STx}} ===&lt;br /&gt;
&lt;br /&gt;
* [[User_Guide|User Guide]]&lt;br /&gt;
* Introductory Video: [https://kfsmail.kfs.oeaw.ac.at/owncloud/index.php/s/cbMjVjgQLZGjYk8 The Compact Workspace]&lt;br /&gt;
&lt;br /&gt;
=== {{STx}} Programming ===&lt;br /&gt;
&lt;br /&gt;
* [[Programmer_Guide/STx_Guru|Starting with {{STx}} Programming]]&lt;br /&gt;
* [[Programmer_Guide|Programmer Guide]]&lt;br /&gt;
* [[Programmer_Guide/Quick_Reference|Quick Reference]]&lt;br /&gt;
&lt;br /&gt;
=== About {{STx}} {{VERSION}} ===&lt;br /&gt;
&lt;br /&gt;
* Platform: runs on Windows Vista and higher&lt;br /&gt;
* [[History of Changes]]&lt;br /&gt;
* [[Known Bugs]]&lt;br /&gt;
* [[Feature Requests]]&lt;br /&gt;
* [[Contact]]&lt;br /&gt;
* [[Running STx under Linux or macOS]]&lt;br /&gt;
&lt;br /&gt;
=== Download ===&lt;br /&gt;
&lt;br /&gt;
[https://www.kfs.oeaw.ac.at/pub/stx/stx-5.0.3.9967-freeware.exe STx 5.0.3]&lt;br /&gt;
&lt;br /&gt;
[https://www.kfs.oeaw.ac.at/pub/stx/ older releases]&lt;br /&gt;
&lt;br /&gt;
==MediaWiki Links==&lt;br /&gt;
* [[STx Documentation Style Guide|Style guide]] for documenting {{STx}} in this wiki.&lt;br /&gt;
* Consult the [http://meta.wikimedia.org/wiki/Help:Contents User&#039;s Guide] for information on using the wiki software.&lt;br /&gt;
* [http://www.mediawiki.org/wiki/Manual:Configuration_settings Configuration settings list]&lt;br /&gt;
* [http://www.mediawiki.org/wiki/Manual:FAQ MediaWiki FAQ]&lt;br /&gt;
* [https://lists.wikimedia.org/mailman/listinfo/mediawiki-announce MediaWiki release mailing list]&lt;br /&gt;
__NOTOC__&lt;/div&gt;</summary>
		<author><name>Jw</name></author>
	</entry>
	<entry>
		<id>https://mediawiki.kfs.oeaw.ac.at/stx/docs/wiki/index.php?title=User_Guide/SPExL/Transcription_Script&amp;diff=10662</id>
		<title>User Guide/SPExL/Transcription Script</title>
		<link rel="alternate" type="text/html" href="https://mediawiki.kfs.oeaw.ac.at/stx/docs/wiki/index.php?title=User_Guide/SPExL/Transcription_Script&amp;diff=10662"/>
		<updated>2019-10-01T12:20:56Z</updated>

		<summary type="html">&lt;p&gt;Jw: /* User Defined Hotkeys */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{DISPLAYTITLE:{{SUBPAGENAME}}}}&lt;br /&gt;
{{User Guide}}&lt;br /&gt;
{{SPExL}}&lt;br /&gt;
{{Hotkeys}}&lt;br /&gt;
[[File:stx_ug_spexl_transcription.png|thumb]]&lt;br /&gt;
&lt;br /&gt;
The &#039;Transcription&#039; script is a tool in {{STX}} specifically written for transcribing sound files. The idea is to make transcribing as simple and efficient as possible. In addition to using the mouse, you can do the transcribing with the keyboard alone. The hotkeys are user-definable.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div class=&amp;quot;noautonum&amp;quot;&amp;gt;&lt;br /&gt;
{{TOC limit|2}}&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
You will find it in the bottom left-hand corner of the [[User_Guide/Workspace|Workspace]] where it is called &amp;lt;code&amp;gt;Transcription&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
When starting the Transcription script, you must select the sound file in the Workspace you wish to transcribe. This is unlike the [[User_Guide/Workspace/Application_and_Setup_Tree/Signal_Analysis_and_Display/Profile|analysis profiles]], which analyse a segment. The following dialog will then appear.&lt;br /&gt;
&lt;br /&gt;
[[File:Stx_transcription_startup_dialog.png]]&lt;br /&gt;
&lt;br /&gt;
==Spectrogram / Waveform Views==&lt;br /&gt;
You can display either a spectrogram or a waveform of the sound file (or both). There three different combinations available:&lt;br /&gt;
===Whole file as waveform, with section as spectrogram===&lt;br /&gt;
This view displays a waveform of the whole file and a spectrogram of a section of that file. This means that you can see all the segments in the file in the waveform graph. Navigating around the file in the waveform, you can then view a section of it as a spectrogram (e.g. with the hotkey &amp;lt;kbd&amp;gt;S&amp;lt;/kbd&amp;gt;). When starting the transcription script, choose &#039;&#039;&#039;wave overview &amp;amp; spg. section&#039;&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
===Section of file as waveform===&lt;br /&gt;
This is the fastest view, displaying a section of the sound file as a waveform. The whole of the file is available to scroll through. When starting the transcription script, choose &#039;&#039;&#039;wave only&#039;&#039;&#039;. The length of signal displayed is specified by the scrollbar &#039;&#039;&#039;Length&#039;&#039;&#039; value in the start-up dialog. You can then scroll through the sound file using, for example, the hotkeys &amp;lt;kbd&amp;gt;M&amp;lt;/kbd&amp;gt; (forwards) and &amp;lt;kbd&amp;gt;N&amp;lt;/kbd&amp;gt; (backwards).&lt;br /&gt;
&lt;br /&gt;
===Section of file as synchronised waveform and spectrogram===&lt;br /&gt;
This view displays a section of the sound file as both a waveform and a spectrogram. The waveform and spectrogram are time-aligned. The initial length of analysed signal is determined by the &#039;&#039;&#039;Length&#039;&#039;&#039; value in the start-up dialog. You can zoom in and out of the signal as well as scroll through the whole sound file.&lt;br /&gt;
&lt;br /&gt;
Note that the &#039;&#039;&#039;Fixed&#039;&#039;&#039; checkbox will mean you can zoom into a signal, but cannot zoom out to display more of the signal than the length specified by &#039;Length&#039;.&lt;br /&gt;
&lt;br /&gt;
==Dialog Description==&lt;br /&gt;
&lt;br /&gt;
[[file: Spexl_dialog.png]]&lt;br /&gt;
&lt;br /&gt;
===timebar===&lt;br /&gt;
The timebar lets you scroll through the sound file. This is useful, if you have a large sound file, and therefore only load part of it at any one time.&lt;br /&gt;
* The &amp;lt;samp&amp;gt;|&amp;lt;&amp;lt;/samp&amp;gt; button scrolls back to the beginning of the file.&lt;br /&gt;
* The &amp;lt;samp&amp;gt;&amp;lt;&amp;lt;/samp&amp;gt; button scrolls back one step.&lt;br /&gt;
* The &amp;lt;samp&amp;gt;&amp;gt;&amp;lt;/samp&amp;gt; button scrolls forward one step.&lt;br /&gt;
* The &amp;lt;samp&amp;gt;&amp;gt;|&amp;lt;/samp&amp;gt; button scrolls to the end of the file.&lt;br /&gt;
* The &amp;lt;samp&amp;gt;Play&amp;lt;/samp&amp;gt; button plays the whole signal currently loaded from disk.&lt;br /&gt;
* The &amp;lt;samp&amp;gt;Draw&amp;lt;/samp&amp;gt; button redraws the section of the sound file specified by the scroll bar (if &amp;lt;samp&amp;gt;auto&amp;lt;/samp&amp;gt; is unchecked).&lt;br /&gt;
* The &amp;lt;samp&amp;gt;&amp;lt;Seg&amp;lt;/samp&amp;gt; and &amp;lt;samp&amp;gt;Seg&amp;gt;&amp;lt;/samp&amp;gt; buttons scrolls to the previous and next segments outside of the current loaded signal. This can be useful, if you have a long file with few segments in it.&lt;br /&gt;
* If the &amp;lt;samp&amp;gt;auto&amp;lt;/samp&amp;gt; setting is checked, then moving the scroll bar automatically redraws the graphs. This is the default. If unchecked, you must explicitly press the &amp;lt;samp&amp;gt;Draw&amp;lt;/samp&amp;gt; button.&lt;br /&gt;
&lt;br /&gt;
If you are already viewing the entire sound file, the time bar is not very useful. See [[#Scrolling|Scrolling]] for further details.&lt;br /&gt;
&lt;br /&gt;
===spec.===&lt;br /&gt;
The &amp;lt;samp&amp;gt;spec.&amp;lt;/samp&amp;gt; area of the dialog is only enabled if the spectrogram graph (&amp;lt;samp&amp;gt;wave &amp;amp; spg. section&amp;lt;/samp&amp;gt; or &amp;lt;samp&amp;gt;wave overview &amp;amp; spg. section&amp;lt;/samp&amp;gt; view) is being used. Choose the 1st or 2nd frame/overlap settings specified in the [[User_Guide/SPExL/Settings#Spectrogram_Display_and_Parameter_Setup|settings dialog]].&lt;br /&gt;
&lt;br /&gt;
===f0/for.===&lt;br /&gt;
&lt;br /&gt;
The F0 and formants can be calculated for the displayed spectrogram. This is not available in the &amp;lt;samp&amp;gt;wave only&amp;lt;/samp&amp;gt; view. See [[User_Guide/Transcription_Script#F0_.2F_Formant_Extraction|F0 and Formant Extraction]] for further details.&lt;br /&gt;
&lt;br /&gt;
===main===&lt;br /&gt;
&lt;br /&gt;
Here you can save changes you&#039;ve made to your segments ([[File:resource_dosave.png]]), revert any changes you have made since you last saved the project file (&#039;Revert&#039;), open the settings dialog ([[File: Resource setup.png]] or exit the transcription script.&lt;br /&gt;
&lt;br /&gt;
===playback===&lt;br /&gt;
&lt;br /&gt;
The playback section of the dialog can be used to play the sound file. The most interesting setting is the ability to repeat the signal when played, which can be useful when transcribing. Alternatively you can repeat the signal forever (or until the ESC key is pressed).&lt;br /&gt;
&lt;br /&gt;
===cursor control===&lt;br /&gt;
&lt;br /&gt;
In addition to moving the cursors around by clicking and dragging in the graph, you can also do it with these buttons. All buttons are also associated with [[#Hotkeys|hotkeys]].&lt;br /&gt;
&lt;br /&gt;
==Scrolling==&lt;br /&gt;
&lt;br /&gt;
Since displaying a long sound file can take a while, it can be useful to load only part of the sound file. This is achieved with scrolling in the &amp;lt;samp&amp;gt;wave only&amp;lt;/samp&amp;gt; and &amp;lt;samp&amp;gt;wave &amp;amp; spg. section&amp;lt;/samp&amp;gt; [[User_Guide/Transcription_Script#Spectrogram_.2F_Waveform_Views|views]]. The lowest graph displays the section of the sound file which is loaded (purple) and visible (brown). &lt;br /&gt;
&lt;br /&gt;
Note that the &amp;lt;samp&amp;gt;wave overview &amp;amp; spg. section&amp;lt;/samp&amp;gt; [[User_Guide/Transcription_Script#Spectrogram_.2F_Waveform_Views|view]] always loads the whole sound file.&lt;br /&gt;
&lt;br /&gt;
==F0 / Formant Extraction==&lt;br /&gt;
You can display the F0 and formants in the spectrogram by pressing the [[File: Resource run.png]] button. The settings for extraction are in the [[User Guide/SPExL/Transcription_Script/F0_Formant_Extraction_Settings|F0 / Formant Extraction Settings]] dialog reached by pressing the &#039;f0/for&#039; button [[File: Resource setup.png]].&lt;br /&gt;
&lt;br /&gt;
==Settings==&lt;br /&gt;
There are many settings you can change via the [[User Guide/SPExL/Transcription_Script/Settings|Settings]] dialog reached by the &#039;main&#039; [[File: Resource setup.png]] button, or the &#039;settings-&amp;gt;setup dialog&#039; context menu.&lt;br /&gt;
&lt;br /&gt;
==Hotkeys==&lt;br /&gt;
&lt;br /&gt;
Many operations are available using hotkeys. &lt;br /&gt;
&lt;br /&gt;
===User Defined Hotkeys===&lt;br /&gt;
&lt;br /&gt;
As of version 1.1, these hotkeys can be changed by the user by modifying the &amp;lt;samp&amp;gt;spexl_segtrans.hotkeys&amp;lt;/samp&amp;gt; file. The default hotkeys are defined in the file &amp;lt;samp&amp;gt;spexl_segtrans.hotkeys.default&amp;lt;/samp&amp;gt;. These files are in the &amp;lt;samp&amp;gt;profiles&amp;lt;/samp&amp;gt; directory in {{STX}} &amp;gt;= 5.0 and in the &amp;lt;samp&amp;gt;scripts&amp;lt;/samp&amp;gt; directory in {{STX}} &amp;lt;= 4.4.10.&lt;br /&gt;
&amp;lt;!--&lt;br /&gt;
&lt;br /&gt;
===Default Hotkeys===&lt;br /&gt;
&lt;br /&gt;
Note that unless otherwise specified (e.g. with &amp;lt;kbd&amp;gt;Shift&amp;lt;/kbd&amp;gt;), all hotkeys are lowercase.&lt;br /&gt;
&lt;br /&gt;
====Analyze Hotkeys====&lt;br /&gt;
&lt;br /&gt;
{|&lt;br /&gt;
|&amp;lt;kbd&amp;gt;Ctrl&amp;lt;/kbd&amp;gt;+&amp;lt;kbd&amp;gt;N&amp;lt;/kbd&amp;gt;&lt;br /&gt;
|Select a viewer and profile to analyze the signal between the cursors with (opens new window).&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;kbd&amp;gt;Ctrl&amp;lt;/kbd&amp;gt;+&amp;lt;kbd&amp;gt;A&amp;lt;/kbd&amp;gt;&lt;br /&gt;
|Analyze the signal between the cursors with the viewer/profile which was used last.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
====Cursor Hotkeys====&lt;br /&gt;
&lt;br /&gt;
{|&lt;br /&gt;
!Key&lt;br /&gt;
!Description&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;kbd&amp;gt;B&amp;lt;/kbd&amp;gt;&lt;br /&gt;
|Move the cursors to the selected segment.&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;kbd&amp;gt;D&amp;lt;/kbd&amp;gt;&lt;br /&gt;
|Move left cursor to the left.&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;kbd&amp;gt;F&amp;lt;/kbd&amp;gt;&lt;br /&gt;
|Move left cursor to the right.&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;kbd&amp;gt;E&amp;lt;/kbd&amp;gt;&lt;br /&gt;
|Move left cursor to the left in large steps.&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;kbd&amp;gt;R&amp;lt;/kbd&amp;gt;&lt;br /&gt;
|Move left cursor to the right in large steps.&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;kbd&amp;gt;J&amp;lt;/kbd&amp;gt;&lt;br /&gt;
|Move right cursor to the left.&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;kbd&amp;gt;K&amp;lt;/kbd&amp;gt;&lt;br /&gt;
|Move right cursor to the right.&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;kbd&amp;gt;U&amp;lt;/kbd&amp;gt;&lt;br /&gt;
|Move right cursor to left in large steps.&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;kbd&amp;gt;I&amp;lt;/kbd&amp;gt;&lt;br /&gt;
|Move right cursor to right in large steps.&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;kbd&amp;gt;L&amp;lt;/kbd&amp;gt;&lt;br /&gt;
|Flip left cursor around right cursor.&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;kbd&amp;gt;Shift&amp;lt;/kbd&amp;gt;+&amp;lt;kbd&amp;gt;L&amp;lt;/kbd&amp;gt;&lt;br /&gt;
|Flip right cursor around left cursor.&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;kbd&amp;gt;Ctrl&amp;lt;/kbd&amp;gt;+&amp;lt;kbd&amp;gt;Y&amp;lt;/kbd&amp;gt;&lt;br /&gt;
|Rotate through the available cursor styles.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
====Playback Hotkeys====&lt;br /&gt;
&lt;br /&gt;
{|&lt;br /&gt;
|&amp;lt;kbd&amp;gt;Escape&amp;lt;/kbd&amp;gt;&lt;br /&gt;
|Stops playback&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;kbd&amp;gt;Space&amp;lt;/kbd&amp;gt;&lt;br /&gt;
|Play between the cursors&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;kbd&amp;gt;A&amp;lt;/kbd&amp;gt;&lt;br /&gt;
|Play all of signal in waveform window&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;kbd&amp;gt;O&amp;lt;/kbd&amp;gt;&lt;br /&gt;
|Play all of the signal from the right-hand cursor to end of waveform window&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;kbd&amp;gt;P&amp;lt;/kbd&amp;gt;&lt;br /&gt;
|Play the selected segment&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;kbd&amp;gt;W&amp;lt;/kbd&amp;gt;&lt;br /&gt;
|Play all of signal up to the left-hand cursor&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
====Scrollbar Hotkeys====&lt;br /&gt;
The length scrolled is defined when the transcription script starts up (Scrollbar Step (%)).&lt;br /&gt;
{|&lt;br /&gt;
|&amp;lt;kbd&amp;gt;Ctrl&amp;lt;/kbd&amp;gt;+&amp;lt;kbd&amp;gt;G&amp;lt;/kbd&amp;gt;&lt;br /&gt;
|Jump top a position specified in seconds&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;kbd&amp;gt;M&amp;lt;/kbd&amp;gt;&lt;br /&gt;
|Scroll forward&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;kbd&amp;gt;N&amp;lt;/kbd&amp;gt;&lt;br /&gt;
|Scroll backwards&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
====Segment Hotkeys====&lt;br /&gt;
{|&lt;br /&gt;
|&amp;lt;kbd&amp;gt;Shift&amp;lt;/kbd&amp;gt;+&amp;lt;kbd&amp;gt;B&amp;lt;/kbd&amp;gt;&lt;br /&gt;
|Move the selected segment to the cursor positions.&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;kbd&amp;gt;Enter&amp;lt;/kbd&amp;gt;&lt;br /&gt;
|Create new segment between the cursors.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
====Segment List Hotkeys====&lt;br /&gt;
{|&lt;br /&gt;
|&amp;lt;kbd&amp;gt;Ctrl&amp;lt;/kbd&amp;gt;+&amp;lt;kbd&amp;gt;R&amp;lt;/kbd&amp;gt;&lt;br /&gt;
|Open the segment list sort order dialog.&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;kbd&amp;gt;Ctrl&amp;lt;/kbd&amp;gt;+&amp;lt;kbd&amp;gt;Numpad Plus&amp;lt;/kbd&amp;gt;&lt;br /&gt;
|Resize all columns to fit their content&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
====Spectrogram Hotkeys====&lt;br /&gt;
{|&lt;br /&gt;
|&amp;lt;kbd&amp;gt;Shift&amp;lt;/kbd&amp;gt;+&amp;lt;kbd&amp;gt;Add&amp;lt;/kbd&amp;gt;&lt;br /&gt;
|Increase amplitude floor.&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;kbd&amp;gt;Shift&amp;lt;/kbd&amp;gt;+&amp;lt;kbd&amp;gt;Subtract&amp;lt;/kbd&amp;gt;&lt;br /&gt;
|Decrease amplitude floor.&lt;br /&gt;
&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
====Zoom Hotkeys====&lt;br /&gt;
&lt;br /&gt;
{|&lt;br /&gt;
|&amp;lt;kbd&amp;gt;Y&amp;lt;/kbd&amp;gt;&lt;br /&gt;
|Zoom in on the x axis around the mid point between the cursors.&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;kbd&amp;gt;Q&amp;lt;/kbd&amp;gt;&lt;br /&gt;
|Zoom out on the x axis around the mid point between the cursors.&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;kbd&amp;gt;Ctrl&amp;lt;/kbd&amp;gt;+&amp;lt;kbd&amp;gt;Add&amp;lt;/kbd&amp;gt;&lt;br /&gt;
|Zoom in on the y axis around the active cursor&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;kbd&amp;gt;Ctrl&amp;lt;/kbd&amp;gt;+&amp;lt;kbd&amp;gt;Subtract&amp;lt;/kbd&amp;gt;&lt;br /&gt;
|Zoom out on the y axis around the active cursor&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;kbd&amp;gt;V&amp;lt;/kbd&amp;gt;&lt;br /&gt;
|Zoom between cursors on the x axis&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;kbd&amp;gt;Shift&amp;lt;/kbd&amp;gt;+&amp;lt;kbd&amp;gt;V&amp;lt;/kbd&amp;gt;&lt;br /&gt;
|Zoom between cursors on the y axis. Note that this only works if the cursor style allows y axis positioning.&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;kbd&amp;gt;G&amp;lt;/kbd&amp;gt;&lt;br /&gt;
|Zoom in around the left-hand cursor.&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;kbd&amp;gt;T&amp;lt;/kbd&amp;gt;&lt;br /&gt;
|Zoom out around the left-hand cursor.&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;kbd&amp;gt;H&amp;lt;/kbd&amp;gt;&lt;br /&gt;
|Zoom in around the right-hand cursor.&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;kbd&amp;gt;Z&amp;lt;/kbd&amp;gt;&lt;br /&gt;
|Zoom out around the right-hand cursor.&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;kbd&amp;gt;X&amp;lt;/kbd&amp;gt;&lt;br /&gt;
|Reset the zoom&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
====Misc Hotkeys====&lt;br /&gt;
{|&lt;br /&gt;
!Key&lt;br /&gt;
!Description&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;kbd&amp;gt;S&amp;lt;/kbd&amp;gt;&lt;br /&gt;
|Redraw the spectragraph graph showing the signal between the cursors in the waveform graph. This is only relevant for the [[#Spectrogram_.2F_Waveform_Views|waveform overview &amp;amp; spg. section view]].&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;kbd&amp;gt;TAB&amp;lt;/kbd&amp;gt;&lt;br /&gt;
|If a graph is currently active, move the focus to the next graph. If the dialog is active, move the focus to the next control.&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;kbd&amp;gt;Ctrl&amp;lt;/kbd&amp;gt;+&amp;lt;kbd&amp;gt;TAB&amp;lt;/kbd&amp;gt;&lt;br /&gt;
|Move the focus from the dialog to the graphs, or vica versa.&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;kbd&amp;gt;Ctrl&amp;lt;/kbd&amp;gt;+&amp;lt;kbd&amp;gt;F&amp;lt;/kbd&amp;gt;&lt;br /&gt;
|Toggle between spectrogram frame settings 1 and 2.&lt;br /&gt;
|}&lt;br /&gt;
--&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Versions==&lt;br /&gt;
Note that versions &amp;gt; 1.0 require {{STX}} &amp;gt;= 4.4&lt;br /&gt;
&lt;br /&gt;
===1.1.10===&lt;br /&gt;
* bugfix: Playlist listview now processes listsorted message and displays sort order set by clicking a column heading. The sort order was first being displayed when clicking in the control after clicking the column heading.&lt;br /&gt;
===1.1.9===&lt;br /&gt;
* feature: removed the now unnecessary &#039;autoDraw&#039; function.&lt;br /&gt;
* bugfix: use &#039;ID&#039; as default attribute for text in segments where no attribute is specified.&lt;br /&gt;
===1.1.8===&lt;br /&gt;
* feature: removed the now unnecessary &#039;Refresh&#039; button&lt;br /&gt;
===1.1.7===&lt;br /&gt;
* bugfix: the /U ASegTemplate flag is now respected, and, if used, the last entered value for a segment attribute is used as the default for the next new segment.&lt;br /&gt;
===1.1.5===&lt;br /&gt;
* bugfix: segment placement algorithm no longer drawing segments off screen.&lt;br /&gt;
* bugfix: moving scrollbar no longer generates an error message in the log window.&lt;br /&gt;
Download [https://www.kfs.oeaw.ac.at/pub/stx/spexl/ Transcription script downloads].&lt;/div&gt;</summary>
		<author><name>Jw</name></author>
	</entry>
	<entry>
		<id>https://mediawiki.kfs.oeaw.ac.at/stx/docs/wiki/index.php?title=User_Guide/Spectrogram_and_Parameter_Viewer/Spectrogram_and_Parameter_Viewer_Hotkeys&amp;diff=10661</id>
		<title>User Guide/Spectrogram and Parameter Viewer/Spectrogram and Parameter Viewer Hotkeys</title>
		<link rel="alternate" type="text/html" href="https://mediawiki.kfs.oeaw.ac.at/stx/docs/wiki/index.php?title=User_Guide/Spectrogram_and_Parameter_Viewer/Spectrogram_and_Parameter_Viewer_Hotkeys&amp;diff=10661"/>
		<updated>2019-10-01T12:19:37Z</updated>

		<summary type="html">&lt;p&gt;Jw: /* {{STX}} &amp;gt;= 5.0 */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{DISPLAYTITLE:{{SUBPAGENAME}}}}&lt;br /&gt;
{{V2}}&lt;br /&gt;
{{Hotkeys}}&lt;br /&gt;
__TOC__&lt;br /&gt;
&lt;br /&gt;
=={{STX}} &amp;gt;= 5.0==&lt;br /&gt;
&lt;br /&gt;
Hotkeys are now defined in the text file &amp;lt;samp&amp;gt;viewer2.hotkeys&amp;lt;/samp&amp;gt; in the &amp;lt;samp&amp;gt;profiles&amp;lt;/samp&amp;gt; directory of your {{STX}} installation.&lt;br /&gt;
&lt;br /&gt;
=={{STX}} &amp;lt;= 4.4.10==&lt;br /&gt;
&lt;br /&gt;
{|&lt;br /&gt;
|-&lt;br /&gt;
|colspan=2|&#039;&#039;&#039;Cursor&#039;&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|Home&lt;br /&gt;
|Move active cursor to beginning of the x axis of the active graph&lt;br /&gt;
|-&lt;br /&gt;
|End&lt;br /&gt;
|Move active cursor to end of the x axis of the active graph&lt;br /&gt;
|-&lt;br /&gt;
|PgUp, PgDn&lt;br /&gt;
|Sectioner Spectrum: Change cursor binding between 1st to 2nd spectrum&lt;br /&gt;
|-&lt;br /&gt;
|Left, Right&lt;br /&gt;
|Move active cursor left / right&lt;br /&gt;
|-&lt;br /&gt;
|Shift+Left, Shift+Right&lt;br /&gt;
|Fast move active cursor left / right&lt;br /&gt;
|-&lt;br /&gt;
|Up, Down&lt;br /&gt;
|Move active cursor up / down, only if cursor is not bound to function values.&lt;br /&gt;
|-&lt;br /&gt;
|Shift+Up, Shift+Down&lt;br /&gt;
|Fast move active cursor up / down, only if cursor is not bound to function values&lt;br /&gt;
|-&lt;br /&gt;
|F2&lt;br /&gt;
|Activate next cursor of active graph (toggle)&lt;br /&gt;
|-&lt;br /&gt;
|F3&lt;br /&gt;
|Mirror inactive cursor around active cursor position (toggle)&lt;br /&gt;
|-&lt;br /&gt;
|Ctrl+F3&lt;br /&gt;
|Mirror active cursor around inactive cursor position (toggle)&lt;br /&gt;
|-&lt;br /&gt;
|C&lt;br /&gt;
|Change cursor style of active graph (cyclic)&lt;br /&gt;
|-&lt;br /&gt;
|B&lt;br /&gt;
|Bind / unbind cursors (y&amp;lt;nowiki&amp;gt;-&amp;lt;/nowiki&amp;gt;scale) to / from function displayed in active graph&lt;br /&gt;
|-&lt;br /&gt;
|L&lt;br /&gt;
|Lock/unlock time cursors (toggle)&lt;br /&gt;
|-&lt;br /&gt;
|M&lt;br /&gt;
|Move the cursors to selected segment marker.&lt;br /&gt;
|-&lt;br /&gt;
|1&lt;br /&gt;
|In the [[User_Guide/Spectrogram_and_Parameter_Viewer#Waveform_zoom_window|Waveform zoom window]], pressing 1 will use the position of the selected cursor to adjust the position of the selected cursor in the spectrogram and parameter graphs. This is useful for fine-grained positioning. In all other graphs, 1 will set selected part of parameter function to the value entered in the input field.&lt;br /&gt;
|-&lt;br /&gt;
|colspan=2|&#039;&#039;&#039;Segments&#039;&#039;&#039;&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
|Del&lt;br /&gt;
|Delete the selected segment marker from the graphics and from the project!&lt;br /&gt;
|-&lt;br /&gt;
|Ins&lt;br /&gt;
|Create a new segment over the signal bracketed by the cursors of the active graph.&lt;br /&gt;
|-&lt;br /&gt;
|Ctrl+Ins&lt;br /&gt;
|Create a new segment over the signal bracketed by the cursors in the active graph and save the parameters in this segment.&lt;br /&gt;
|-&lt;br /&gt;
|Ctrl+Shift+Ins&lt;br /&gt;
|Create a new segment over the signal bracketed by the cursors in the active graph and then select profile to analyse new segment.&lt;br /&gt;
|-&lt;br /&gt;
|H&lt;br /&gt;
|Hide segment markers (if visible) or mark all segments in analysed range (if hidden, without name dialog)&lt;br /&gt;
|-&lt;br /&gt;
|W&lt;br /&gt;
|Write (changed) position of segment marker to the project. This calls the &amp;lt;samp&amp;gt;segmentSaveSelected&amp;lt;/samp&amp;gt; command.&lt;br /&gt;
|-&lt;br /&gt;
|Ctrl+M&lt;br /&gt;
|Move the selected segment marker to the cursor positions. The segment controls and the segment marker are updated, but the new position is not saved in the project.&lt;br /&gt;
|-&lt;br /&gt;
|Z&lt;br /&gt;
|Copy the position of the (running) play cursor into the Seg. field of the segment dialog&lt;br /&gt;
|-&lt;br /&gt;
|colspan=2|&#039;&#039;&#039;Navigation&#039;&#039;&#039;&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
|Tab, Shift+Tab&lt;br /&gt;
|Active next/previous graph or dialog control.&lt;br /&gt;
|-&lt;br /&gt;
|Ctrl+Tab&lt;br /&gt;
|Toggle focus between dialog and last activated graph&lt;br /&gt;
|-&lt;br /&gt;
|colspan=2|&#039;&#039;&#039;Parameters&#039;&#039;&#039;&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
|0&lt;br /&gt;
|Set selected part of parameter function to zero&lt;br /&gt;
|-&lt;br /&gt;
|1&lt;br /&gt;
|Set selected part of parameter function to the value entered in the input field. This hotkey is available in all graphs except for the [[User_Guide/Spectrogram_and_Parameter_Viewer/Sectioner|Waveform Zoom]]. In the Waveform Zoom window, pressing one will use the position of the selected cursor to adjust the position of the selected cursor in the spectrogram and parameter graphs. This is useful for fine-grained positioning.&lt;br /&gt;
|-&lt;br /&gt;
|Ctrl+0&lt;br /&gt;
|Mask out all parameters between the cursors which have no value in the selected parameter line.&lt;br /&gt;
|-&lt;br /&gt;
|Ctrl+C&lt;br /&gt;
|Copy selected part of parameter function to another compatible parameter function&lt;br /&gt;
|-&lt;br /&gt;
|D&lt;br /&gt;
|Replace selected part of parameter function with the line connecting the cursors (use rubber line for preview)&lt;br /&gt;
|-&lt;br /&gt;
|E&lt;br /&gt;
|Enable edit mode for parameter selected in the parameter list (dialog)&lt;br /&gt;
|-&lt;br /&gt;
|F&lt;br /&gt;
|Start f0&amp;lt;nowiki&amp;gt;-&amp;lt;/nowiki&amp;gt;test for the spectrum displayed in the sectioner window&lt;br /&gt;
|-&lt;br /&gt;
|Ctrl+G&lt;br /&gt;
|Exchange selected part of parameter function with an other compatible parameter function&lt;br /&gt;
|-&lt;br /&gt;
|J&lt;br /&gt;
|Join all broken parts inside the selected part of the frequency function to one track (replace gaps with interpolated lines)&lt;br /&gt;
|-&lt;br /&gt;
|Ctrl+Z&lt;br /&gt;
|Undo last parameter edit command, only one undo step is possible&lt;br /&gt;
|-&lt;br /&gt;
|S&lt;br /&gt;
|Show statistics of parameter selected in the parameter list (dialog)&lt;br /&gt;
|-&lt;br /&gt;
|Ctrl+S&lt;br /&gt;
|Save parameter functions in project.&lt;br /&gt;
|-&lt;br /&gt;
|X&lt;br /&gt;
|End parameter edit mode&lt;br /&gt;
|-&lt;br /&gt;
|Ctrl+X&lt;br /&gt;
|Move selected part of parameter function to an other compatible parameter function&lt;br /&gt;
|-&lt;br /&gt;
|Ctrl+ Num *&lt;br /&gt;
|Multiply selected part of parameter function with factor entered in input field&lt;br /&gt;
|-&lt;br /&gt;
|colspan=2|&#039;&#039;&#039;Layout&#039;&#039;&#039;&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
|Ctrl+N&lt;br /&gt;
|Switch to next sectioner layout (circle)&lt;br /&gt;
|-&lt;br /&gt;
|Ctrl+W&lt;br /&gt;
|Hide/show sectioner windows (toggle)&lt;br /&gt;
|-&lt;br /&gt;
|Ctrl+T&lt;br /&gt;
|Toggle between parameter and segment dialog&lt;br /&gt;
|-&lt;br /&gt;
|colspan=2|&#039;&#039;&#039;Playback&#039;&#039;&#039;&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
|Space&lt;br /&gt;
|Play signal bracketed by cursors&lt;br /&gt;
|-&lt;br /&gt;
|Ctrl+P&lt;br /&gt;
|Play signal of selected segment marker in active graph&lt;br /&gt;
|-&lt;br /&gt;
|Q&lt;br /&gt;
|Play whole signal displayed in active graph&lt;br /&gt;
|-&lt;br /&gt;
|P&lt;br /&gt;
|Play signal window before / after current cursor. The window length and alignment is defined by the [[../Settings_Dialog#play_window|play window settings]].&lt;br /&gt;
|-&lt;br /&gt;
|Esc&lt;br /&gt;
|Stop playback&lt;br /&gt;
|-&lt;br /&gt;
|F4&lt;br /&gt;
|Increase play window length (double)&lt;br /&gt;
|-&lt;br /&gt;
|Ctrl+F4&lt;br /&gt;
|Decrease play window length (half)&lt;br /&gt;
|-&lt;br /&gt;
|T&lt;br /&gt;
|Toggle play window alignment (before / after)&lt;br /&gt;
|-&lt;br /&gt;
|Ctrl+L&lt;br /&gt;
|Toggle audio loop on and off&lt;br /&gt;
|-&lt;br /&gt;
|colspan=2|&#039;&#039;&#039;Zoom&#039;&#039;&#039;&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
|NUM+&lt;br /&gt;
|Zoom in to graph centering around the active cursor on the x axis&lt;br /&gt;
|-&lt;br /&gt;
|NUM-&lt;br /&gt;
|Zoom out of graph centering around the active cursor on the x axis&lt;br /&gt;
|-&lt;br /&gt;
|Ctrl+NUM+&lt;br /&gt;
|Zoom in to graph centering around the active cursor on the y axis&lt;br /&gt;
|-&lt;br /&gt;
|Ctrl+NUM-&lt;br /&gt;
|Zoom out of graph centering around the active cursor on the y axis&lt;br /&gt;
|-&lt;br /&gt;
|V&lt;br /&gt;
|Zoom in to the area between the cursors on the x axis.&lt;br /&gt;
|-&lt;br /&gt;
|Ctrl+V&lt;br /&gt;
|Zoom in to the area between the cursors on the y axis.&lt;br /&gt;
|-&lt;br /&gt;
|Shift+V&lt;br /&gt;
|Zoom in to the area between the cursors on both the x and y axes.&lt;br /&gt;
|-&lt;br /&gt;
|Shift+NUM+&lt;br /&gt;
|Increase the floor (spectrogram)&lt;br /&gt;
|-&lt;br /&gt;
|Shift+NUM-&lt;br /&gt;
|Decrease the floor (spectrogram)&lt;br /&gt;
|-&lt;br /&gt;
|O&lt;br /&gt;
|Toggle between zoom and overview modes&lt;br /&gt;
|-&lt;br /&gt;
|Ctrl+O&lt;br /&gt;
|Reset the zoom (zoom out completely)&lt;br /&gt;
|-&lt;br /&gt;
|colspan=2|&#039;&#039;&#039;Misc&#039;&#039;&#039;&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
|R&lt;br /&gt;
|Set cent reference frequency to the frequency of the active cursor in the sectioner spectrum window&lt;br /&gt;
|-&lt;br /&gt;
|Ctrl+A&lt;br /&gt;
|Turn automatic sectioner update on/off (toggle). This calls the &amp;lt;samp&amp;gt;sectionerPlot&amp;lt;/samp&amp;gt; command.&lt;br /&gt;
|-&lt;br /&gt;
|F8&lt;br /&gt;
|Update sectioner windows using signal around position of selected time cursor. Only needed, if automatic update is disabled&lt;br /&gt;
|-&lt;br /&gt;
|Ctrl+F8&lt;br /&gt;
|Compute averaged spectrum of bracketed signal.&lt;br /&gt;
|-&lt;br /&gt;
|Y&lt;br /&gt;
|Enable/disable the &amp;quot;use&amp;lt;nowiki&amp;gt;-&amp;lt;/nowiki&amp;gt;Y for range selection&amp;quot; option&lt;br /&gt;
|-&lt;br /&gt;
|A&lt;br /&gt;
|Start a viewer / analyser application for the bracketed signal. A dialog to select the application and profile is displayed.&lt;br /&gt;
|}&lt;/div&gt;</summary>
		<author><name>Jw</name></author>
	</entry>
	<entry>
		<id>https://mediawiki.kfs.oeaw.ac.at/stx/docs/wiki/index.php?title=User_Guide/Spectrogram_and_Parameter_Viewer&amp;diff=10660</id>
		<title>User Guide/Spectrogram and Parameter Viewer</title>
		<link rel="alternate" type="text/html" href="https://mediawiki.kfs.oeaw.ac.at/stx/docs/wiki/index.php?title=User_Guide/Spectrogram_and_Parameter_Viewer&amp;diff=10660"/>
		<updated>2019-10-01T12:18:52Z</updated>

		<summary type="html">&lt;p&gt;Jw: /* Stopping playback */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{DISPLAYTITLE:{{SUBPAGENAME}}}}&lt;br /&gt;
{{V2}}&lt;br /&gt;
The application {{Viewer2}} implements spectrogram and parameter analysis methods for mono signals. The application window contains the time synchronous plots of the results of the selected analysis methods, the [[User Guide/Spectrogram and Parameter Viewer/Sectioner windows|Sectioner windows]] and the control dialog (see the [[User Guide/Spectrogram and Parameter Viewer/Settings Dialog|settings dialog]]). The computed parameter functions can be edited and saved in the current project. The Sectioner windows (displayed above all other graphs) , contain the waveform and the spectrum of the signal around the active time scale cursor. The [[User Guide/Spectrogram and Parameter Viewer/Sectioner windows|Sectioner]] also implements functions for spectrum averaging, spectrum statistics and fundamental frequency measurement. For the parameter functions, simple graphical edit and statistic functions are implemented and can be controlled via the control dialog (if the control dialog is not visible, activate using the menu General -&amp;gt; Toggle Dialog).&lt;br /&gt;
&lt;br /&gt;
The example below shows the spectrogram with overlaid formant tracks and segment markers, the fundamental frequency track and the waveform of a speech signal. This plot was generated with the default settings of the profile &amp;quot;FFT_Speech&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
[[File:v2_profile_fft_speech.png|thumb]]&lt;br /&gt;
&lt;br /&gt;
==Features==&lt;br /&gt;
&lt;br /&gt;
===Methods===&lt;br /&gt;
&lt;br /&gt;
The source signal can be analysed using a multiple of different [[/Methods/|methods]]. The {{Viewer2}} comes with a set of [[/Pre-Configured Profiles/|pre-configured profiles]] to cover the most common configurations. You can create new profiles with your desired combination of analysis methods by copying an existing profile.&lt;br /&gt;
&lt;br /&gt;
===Parameters===&lt;br /&gt;
&lt;br /&gt;
The parameters calculated by the chosen methods are displayed as function lines in the chosen graph. [[/Statistics/]] are available for each parameter. They can be individually viewed and [[/Editing parameters/|edited]] in the [[/Control dialog/|control dialog]] and graph, [[/Saving parameters/|saved]] for later analysis or [[/Copying parameters to the clipboard/|copied to the clipboard]] for exporting to other applications.&lt;br /&gt;
&lt;br /&gt;
===Playback===&lt;br /&gt;
&lt;br /&gt;
You can play the signal displayed in the {{Viewer2}} by either selecting the command from a menu or using a [[/Spectrogram and Parameter Viewer Hotkeys/|hotkey]]. You can play the signal between the cursors with the hotkey P. You can play back the whole signal with the hotkey Q.&lt;br /&gt;
&lt;br /&gt;
====Looping playback====&lt;br /&gt;
&lt;br /&gt;
You can turn looping on and off with the hotkey &amp;lt;kbd&amp;gt;Ctrl+L&amp;lt;/kbd&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
====Stopping playback====&lt;br /&gt;
&lt;br /&gt;
You can stop playback with the hotkey &amp;lt;kbd&amp;gt;ESC&amp;lt;/kbd&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
===Scale Range Auto-Scaling===&lt;br /&gt;
&lt;br /&gt;
The best scale range for the analysed signal can now be calculated automatically using the auto-scale feature. The following Spectrogram &amp;amp; Parameters Viewer methods support auto-scaling:&lt;br /&gt;
&lt;br /&gt;
* f0 (harmonic grid)&lt;br /&gt;
* formants&lt;br /&gt;
* frq.-band signal energy&lt;br /&gt;
* signal energy (rms)&lt;br /&gt;
* spectrogram&lt;br /&gt;
* waveform&lt;br /&gt;
&lt;br /&gt;
In addition, the Sectioner and Spectrum Viewer supports auto-scaling too.&lt;br /&gt;
&lt;br /&gt;
You can turn auto-scaling off for a Viewer&#039;s profile using the &#039;enable zoom and autoscaling&#039; checkbox in the [[User Guide/Spectrogram and Parameter Viewer/Settings Dialog|profile&#039;s settings dialog]]. Auto-scaling can then be enabled or disabled for each [[User Guide/Spectrogram and Parameter Viewer/Methods|individual method]] in its settings dialog. Sectioner auto-scaling is enabled in the [[User Guide/Spectrogram and Parameter Viewer/Sectioner Settings Dialog|Sectioner settings dialog]].&lt;br /&gt;
&lt;br /&gt;
===Cursors - using the mouse to get detailed information===&lt;br /&gt;
&lt;br /&gt;
There are two [[/Cursors/|cursors]] available in each graph which can be used to mark sections of the signal on which commands should act, e.g. create a new segment, zoom the graph, listen to a section, edit parameters etc. Information pertaining to the signal at the cursors is displayed in the control dialog.&lt;br /&gt;
&lt;br /&gt;
===Zooming in the graphs===&lt;br /&gt;
&lt;br /&gt;
Zooming in the {{Viewer2}} is available on both time, frequency and amplitude axes using [[User Guide/Spectrogram and Parameter Viewer/Spectrogram and Parameter Viewer Hotkeys|hotkeys]] or the context menu. See [[User_Guide/Tutorials/Zooming_in_a_Viewer|Zooming in a Viewer]] for general details about zooming.&lt;br /&gt;
&lt;br /&gt;
===Waveform zoom window===&lt;br /&gt;
&lt;br /&gt;
The top left-hand window - the waveform zoom window - shows a waveform of the signal directly around the active time cursor.&lt;br /&gt;
&lt;br /&gt;
===Sectioner===&lt;br /&gt;
&lt;br /&gt;
The Sectioner graph in the upper right-hand corner displays an amplitude/frequency plot of the signal at the active cursor. The Sectioner also implements functions for spectrum averaging, spectrum statistics and fundamental frequency measurement. See [[User_Guide/Spectrogram_and_Parameter_Viewer/Sectioner|The Sectioner]] for details.&lt;br /&gt;
&lt;br /&gt;
==The Control Dialog==&lt;br /&gt;
&lt;br /&gt;
At the bottom of the display, a dialog displays information about the cursors, segments and parameters. This is called the [[/Control dialog/|control dialog]]. You can create segments, annotate and edit parameters here. The dialog can be shown and hidden via the &#039;&#039;General &amp;gt; Show/Hide Dialog&#039;&#039; menu.&lt;br /&gt;
&lt;br /&gt;
==Hotkeys==&lt;br /&gt;
&lt;br /&gt;
A list of hotkeys available in {{V2}} can be found [[/Spectrogram_and_Parameter_Viewer_Hotkeys/|here]].&lt;br /&gt;
&lt;br /&gt;
==Settings==&lt;br /&gt;
&lt;br /&gt;
All settings are available in the [[/Settings Dialog/]] reached via the context menu for the selected [[/Pre-Configured Profiles/|profile]] in the [[User_Guide/Workspace/Application_and_Setup_Tree/Signal_Analysis_and_Display|Application and Setup Tree]]or via the &amp;lt;samp&amp;gt;General -&amp;gt; Setup / Redraw&amp;lt;/samp&amp;gt; menu in {{Viewer2}}.&lt;br /&gt;
&lt;br /&gt;
==Segments==&lt;br /&gt;
&lt;br /&gt;
You can create segments in {{Viewer2}} using the &#039;Name&#039; function. Select an area of the signal and select name from the context menu. The segment is created in the project. If you would like to move an existing segment, press the &amp;lt;kbd&amp;gt;Ctrl&amp;lt;/kbd&amp;gt; key and drag the segment. If you would like to save your changes, press the [[User_Guide/Spectrogram_and_Parameter_Viewer/Spectrogram_and_Parameter_Viewer_Hotkeys|&amp;lt;samp&amp;gt;segmentSaveSelected&amp;lt;/samp&amp;gt;]] hotkey&lt;br /&gt;
&lt;br /&gt;
==Menus==&lt;br /&gt;
&lt;br /&gt;
The following menus are available in {{Viewer2}}:&lt;br /&gt;
* [[/General_Menu/|General]]&lt;br /&gt;
* [[/Sectioner_Menu/|Sectioner]]&lt;br /&gt;
* [[/Segments_Menu/|Segments]]&lt;br /&gt;
* [[/Editing_parameters|Edit]]&lt;br /&gt;
* [[/Toolbox_Menu/|Toolbox/]]&lt;br /&gt;
* [[/Help_Menu/|Help]]&lt;br /&gt;
&lt;br /&gt;
==Context Menus==&lt;br /&gt;
&lt;br /&gt;
Many of the functions in the {{Viewer2}} are available via context menus.&lt;br /&gt;
* [[/Context Menu of Spectrogram and Parameter Graphs/|Spectrogram and Parameter Graphs]]&lt;br /&gt;
* [[/Context Menu of Sectioner Spectrum Graph/|Sectioner Spectrum Graph]]&lt;br /&gt;
* [[/Context Menu of Sectioner Waveform Graph/|Sectioner Waveform Graph]]&lt;br /&gt;
&lt;br /&gt;
==Print or Copy to Clipboard==&lt;br /&gt;
&lt;br /&gt;
You can print a copy of the whole display, or of the active graph either by selecting &#039;&#039;Copy/Print&#039;&#039; from the context menu or &#039;&#039;Print&#039;&#039; from the General menu. This opens the [[User_Guide/Copy_or_Print_Dialog|Copy or Print]] dialog. The printer settings can be modified via &#039;&#039;Print Settings&#039;&#039; in the &#039;&#039;General&#039;&#039; menu.&lt;/div&gt;</summary>
		<author><name>Jw</name></author>
	</entry>
	<entry>
		<id>https://mediawiki.kfs.oeaw.ac.at/stx/docs/wiki/index.php?title=User_Guide/SPExL/Transcription_Script&amp;diff=10659</id>
		<title>User Guide/SPExL/Transcription Script</title>
		<link rel="alternate" type="text/html" href="https://mediawiki.kfs.oeaw.ac.at/stx/docs/wiki/index.php?title=User_Guide/SPExL/Transcription_Script&amp;diff=10659"/>
		<updated>2019-10-01T12:16:59Z</updated>

		<summary type="html">&lt;p&gt;Jw: /* Versions */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{DISPLAYTITLE:{{SUBPAGENAME}}}}&lt;br /&gt;
{{User Guide}}&lt;br /&gt;
{{SPExL}}&lt;br /&gt;
{{Hotkeys}}&lt;br /&gt;
[[File:stx_ug_spexl_transcription.png|thumb]]&lt;br /&gt;
&lt;br /&gt;
The &#039;Transcription&#039; script is a tool in {{STX}} specifically written for transcribing sound files. The idea is to make transcribing as simple and efficient as possible. In addition to using the mouse, you can do the transcribing with the keyboard alone. The hotkeys are user-definable.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div class=&amp;quot;noautonum&amp;quot;&amp;gt;&lt;br /&gt;
{{TOC limit|2}}&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
You will find it in the bottom left-hand corner of the [[User_Guide/Workspace|Workspace]] where it is called &amp;lt;code&amp;gt;Transcription&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
When starting the Transcription script, you must select the sound file in the Workspace you wish to transcribe. This is unlike the [[User_Guide/Workspace/Application_and_Setup_Tree/Signal_Analysis_and_Display/Profile|analysis profiles]], which analyse a segment. The following dialog will then appear.&lt;br /&gt;
&lt;br /&gt;
[[File:Stx_transcription_startup_dialog.png]]&lt;br /&gt;
&lt;br /&gt;
==Spectrogram / Waveform Views==&lt;br /&gt;
You can display either a spectrogram or a waveform of the sound file (or both). There three different combinations available:&lt;br /&gt;
===Whole file as waveform, with section as spectrogram===&lt;br /&gt;
This view displays a waveform of the whole file and a spectrogram of a section of that file. This means that you can see all the segments in the file in the waveform graph. Navigating around the file in the waveform, you can then view a section of it as a spectrogram (e.g. with the hotkey &amp;lt;kbd&amp;gt;S&amp;lt;/kbd&amp;gt;). When starting the transcription script, choose &#039;&#039;&#039;wave overview &amp;amp; spg. section&#039;&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
===Section of file as waveform===&lt;br /&gt;
This is the fastest view, displaying a section of the sound file as a waveform. The whole of the file is available to scroll through. When starting the transcription script, choose &#039;&#039;&#039;wave only&#039;&#039;&#039;. The length of signal displayed is specified by the scrollbar &#039;&#039;&#039;Length&#039;&#039;&#039; value in the start-up dialog. You can then scroll through the sound file using, for example, the hotkeys &amp;lt;kbd&amp;gt;M&amp;lt;/kbd&amp;gt; (forwards) and &amp;lt;kbd&amp;gt;N&amp;lt;/kbd&amp;gt; (backwards).&lt;br /&gt;
&lt;br /&gt;
===Section of file as synchronised waveform and spectrogram===&lt;br /&gt;
This view displays a section of the sound file as both a waveform and a spectrogram. The waveform and spectrogram are time-aligned. The initial length of analysed signal is determined by the &#039;&#039;&#039;Length&#039;&#039;&#039; value in the start-up dialog. You can zoom in and out of the signal as well as scroll through the whole sound file.&lt;br /&gt;
&lt;br /&gt;
Note that the &#039;&#039;&#039;Fixed&#039;&#039;&#039; checkbox will mean you can zoom into a signal, but cannot zoom out to display more of the signal than the length specified by &#039;Length&#039;.&lt;br /&gt;
&lt;br /&gt;
==Dialog Description==&lt;br /&gt;
&lt;br /&gt;
[[file: Spexl_dialog.png]]&lt;br /&gt;
&lt;br /&gt;
===timebar===&lt;br /&gt;
The timebar lets you scroll through the sound file. This is useful, if you have a large sound file, and therefore only load part of it at any one time.&lt;br /&gt;
* The &amp;lt;samp&amp;gt;|&amp;lt;&amp;lt;/samp&amp;gt; button scrolls back to the beginning of the file.&lt;br /&gt;
* The &amp;lt;samp&amp;gt;&amp;lt;&amp;lt;/samp&amp;gt; button scrolls back one step.&lt;br /&gt;
* The &amp;lt;samp&amp;gt;&amp;gt;&amp;lt;/samp&amp;gt; button scrolls forward one step.&lt;br /&gt;
* The &amp;lt;samp&amp;gt;&amp;gt;|&amp;lt;/samp&amp;gt; button scrolls to the end of the file.&lt;br /&gt;
* The &amp;lt;samp&amp;gt;Play&amp;lt;/samp&amp;gt; button plays the whole signal currently loaded from disk.&lt;br /&gt;
* The &amp;lt;samp&amp;gt;Draw&amp;lt;/samp&amp;gt; button redraws the section of the sound file specified by the scroll bar (if &amp;lt;samp&amp;gt;auto&amp;lt;/samp&amp;gt; is unchecked).&lt;br /&gt;
* The &amp;lt;samp&amp;gt;&amp;lt;Seg&amp;lt;/samp&amp;gt; and &amp;lt;samp&amp;gt;Seg&amp;gt;&amp;lt;/samp&amp;gt; buttons scrolls to the previous and next segments outside of the current loaded signal. This can be useful, if you have a long file with few segments in it.&lt;br /&gt;
* If the &amp;lt;samp&amp;gt;auto&amp;lt;/samp&amp;gt; setting is checked, then moving the scroll bar automatically redraws the graphs. This is the default. If unchecked, you must explicitly press the &amp;lt;samp&amp;gt;Draw&amp;lt;/samp&amp;gt; button.&lt;br /&gt;
&lt;br /&gt;
If you are already viewing the entire sound file, the time bar is not very useful. See [[#Scrolling|Scrolling]] for further details.&lt;br /&gt;
&lt;br /&gt;
===spec.===&lt;br /&gt;
The &amp;lt;samp&amp;gt;spec.&amp;lt;/samp&amp;gt; area of the dialog is only enabled if the spectrogram graph (&amp;lt;samp&amp;gt;wave &amp;amp; spg. section&amp;lt;/samp&amp;gt; or &amp;lt;samp&amp;gt;wave overview &amp;amp; spg. section&amp;lt;/samp&amp;gt; view) is being used. Choose the 1st or 2nd frame/overlap settings specified in the [[User_Guide/SPExL/Settings#Spectrogram_Display_and_Parameter_Setup|settings dialog]].&lt;br /&gt;
&lt;br /&gt;
===f0/for.===&lt;br /&gt;
&lt;br /&gt;
The F0 and formants can be calculated for the displayed spectrogram. This is not available in the &amp;lt;samp&amp;gt;wave only&amp;lt;/samp&amp;gt; view. See [[User_Guide/Transcription_Script#F0_.2F_Formant_Extraction|F0 and Formant Extraction]] for further details.&lt;br /&gt;
&lt;br /&gt;
===main===&lt;br /&gt;
&lt;br /&gt;
Here you can save changes you&#039;ve made to your segments ([[File:resource_dosave.png]]), revert any changes you have made since you last saved the project file (&#039;Revert&#039;), open the settings dialog ([[File: Resource setup.png]] or exit the transcription script.&lt;br /&gt;
&lt;br /&gt;
===playback===&lt;br /&gt;
&lt;br /&gt;
The playback section of the dialog can be used to play the sound file. The most interesting setting is the ability to repeat the signal when played, which can be useful when transcribing. Alternatively you can repeat the signal forever (or until the ESC key is pressed).&lt;br /&gt;
&lt;br /&gt;
===cursor control===&lt;br /&gt;
&lt;br /&gt;
In addition to moving the cursors around by clicking and dragging in the graph, you can also do it with these buttons. All buttons are also associated with [[#Hotkeys|hotkeys]].&lt;br /&gt;
&lt;br /&gt;
==Scrolling==&lt;br /&gt;
&lt;br /&gt;
Since displaying a long sound file can take a while, it can be useful to load only part of the sound file. This is achieved with scrolling in the &amp;lt;samp&amp;gt;wave only&amp;lt;/samp&amp;gt; and &amp;lt;samp&amp;gt;wave &amp;amp; spg. section&amp;lt;/samp&amp;gt; [[User_Guide/Transcription_Script#Spectrogram_.2F_Waveform_Views|views]]. The lowest graph displays the section of the sound file which is loaded (purple) and visible (brown). &lt;br /&gt;
&lt;br /&gt;
Note that the &amp;lt;samp&amp;gt;wave overview &amp;amp; spg. section&amp;lt;/samp&amp;gt; [[User_Guide/Transcription_Script#Spectrogram_.2F_Waveform_Views|view]] always loads the whole sound file.&lt;br /&gt;
&lt;br /&gt;
==F0 / Formant Extraction==&lt;br /&gt;
You can display the F0 and formants in the spectrogram by pressing the [[File: Resource run.png]] button. The settings for extraction are in the [[User Guide/SPExL/Transcription_Script/F0_Formant_Extraction_Settings|F0 / Formant Extraction Settings]] dialog reached by pressing the &#039;f0/for&#039; button [[File: Resource setup.png]].&lt;br /&gt;
&lt;br /&gt;
==Settings==&lt;br /&gt;
There are many settings you can change via the [[User Guide/SPExL/Transcription_Script/Settings|Settings]] dialog reached by the &#039;main&#039; [[File: Resource setup.png]] button, or the &#039;settings-&amp;gt;setup dialog&#039; context menu.&lt;br /&gt;
&lt;br /&gt;
==Hotkeys==&lt;br /&gt;
&lt;br /&gt;
Many operations are available using hotkeys. &lt;br /&gt;
&lt;br /&gt;
===User Defined Hotkeys===&lt;br /&gt;
&lt;br /&gt;
As of version 1.1, these hotkeys can be changed by the user by modifying the &amp;lt;samp&amp;gt;spexl_segtrans.hotkeys&amp;lt;/samp&amp;gt; file. The default hotkeys are defined in the file &amp;lt;samp&amp;gt;spexl_segtrans.hotkeys.default&amp;lt;/samp&amp;gt;. These files are in the &amp;lt;samp&amp;gt;scripts&amp;lt;/samp&amp;gt; directory in {{STX}} &amp;lt;= 4.4.10 and in the &amp;lt;samp&amp;gt;profiles&amp;lt;/samp&amp;gt; directory in {{STX}} &amp;gt;= 5.0.&lt;br /&gt;
&amp;lt;!--&lt;br /&gt;
&lt;br /&gt;
===Default Hotkeys===&lt;br /&gt;
&lt;br /&gt;
Note that unless otherwise specified (e.g. with &amp;lt;kbd&amp;gt;Shift&amp;lt;/kbd&amp;gt;), all hotkeys are lowercase.&lt;br /&gt;
&lt;br /&gt;
====Analyze Hotkeys====&lt;br /&gt;
&lt;br /&gt;
{|&lt;br /&gt;
|&amp;lt;kbd&amp;gt;Ctrl&amp;lt;/kbd&amp;gt;+&amp;lt;kbd&amp;gt;N&amp;lt;/kbd&amp;gt;&lt;br /&gt;
|Select a viewer and profile to analyze the signal between the cursors with (opens new window).&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;kbd&amp;gt;Ctrl&amp;lt;/kbd&amp;gt;+&amp;lt;kbd&amp;gt;A&amp;lt;/kbd&amp;gt;&lt;br /&gt;
|Analyze the signal between the cursors with the viewer/profile which was used last.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
====Cursor Hotkeys====&lt;br /&gt;
&lt;br /&gt;
{|&lt;br /&gt;
!Key&lt;br /&gt;
!Description&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;kbd&amp;gt;B&amp;lt;/kbd&amp;gt;&lt;br /&gt;
|Move the cursors to the selected segment.&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;kbd&amp;gt;D&amp;lt;/kbd&amp;gt;&lt;br /&gt;
|Move left cursor to the left.&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;kbd&amp;gt;F&amp;lt;/kbd&amp;gt;&lt;br /&gt;
|Move left cursor to the right.&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;kbd&amp;gt;E&amp;lt;/kbd&amp;gt;&lt;br /&gt;
|Move left cursor to the left in large steps.&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;kbd&amp;gt;R&amp;lt;/kbd&amp;gt;&lt;br /&gt;
|Move left cursor to the right in large steps.&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;kbd&amp;gt;J&amp;lt;/kbd&amp;gt;&lt;br /&gt;
|Move right cursor to the left.&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;kbd&amp;gt;K&amp;lt;/kbd&amp;gt;&lt;br /&gt;
|Move right cursor to the right.&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;kbd&amp;gt;U&amp;lt;/kbd&amp;gt;&lt;br /&gt;
|Move right cursor to left in large steps.&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;kbd&amp;gt;I&amp;lt;/kbd&amp;gt;&lt;br /&gt;
|Move right cursor to right in large steps.&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;kbd&amp;gt;L&amp;lt;/kbd&amp;gt;&lt;br /&gt;
|Flip left cursor around right cursor.&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;kbd&amp;gt;Shift&amp;lt;/kbd&amp;gt;+&amp;lt;kbd&amp;gt;L&amp;lt;/kbd&amp;gt;&lt;br /&gt;
|Flip right cursor around left cursor.&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;kbd&amp;gt;Ctrl&amp;lt;/kbd&amp;gt;+&amp;lt;kbd&amp;gt;Y&amp;lt;/kbd&amp;gt;&lt;br /&gt;
|Rotate through the available cursor styles.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
====Playback Hotkeys====&lt;br /&gt;
&lt;br /&gt;
{|&lt;br /&gt;
|&amp;lt;kbd&amp;gt;Escape&amp;lt;/kbd&amp;gt;&lt;br /&gt;
|Stops playback&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;kbd&amp;gt;Space&amp;lt;/kbd&amp;gt;&lt;br /&gt;
|Play between the cursors&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;kbd&amp;gt;A&amp;lt;/kbd&amp;gt;&lt;br /&gt;
|Play all of signal in waveform window&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;kbd&amp;gt;O&amp;lt;/kbd&amp;gt;&lt;br /&gt;
|Play all of the signal from the right-hand cursor to end of waveform window&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;kbd&amp;gt;P&amp;lt;/kbd&amp;gt;&lt;br /&gt;
|Play the selected segment&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;kbd&amp;gt;W&amp;lt;/kbd&amp;gt;&lt;br /&gt;
|Play all of signal up to the left-hand cursor&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
====Scrollbar Hotkeys====&lt;br /&gt;
The length scrolled is defined when the transcription script starts up (Scrollbar Step (%)).&lt;br /&gt;
{|&lt;br /&gt;
|&amp;lt;kbd&amp;gt;Ctrl&amp;lt;/kbd&amp;gt;+&amp;lt;kbd&amp;gt;G&amp;lt;/kbd&amp;gt;&lt;br /&gt;
|Jump top a position specified in seconds&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;kbd&amp;gt;M&amp;lt;/kbd&amp;gt;&lt;br /&gt;
|Scroll forward&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;kbd&amp;gt;N&amp;lt;/kbd&amp;gt;&lt;br /&gt;
|Scroll backwards&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
====Segment Hotkeys====&lt;br /&gt;
{|&lt;br /&gt;
|&amp;lt;kbd&amp;gt;Shift&amp;lt;/kbd&amp;gt;+&amp;lt;kbd&amp;gt;B&amp;lt;/kbd&amp;gt;&lt;br /&gt;
|Move the selected segment to the cursor positions.&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;kbd&amp;gt;Enter&amp;lt;/kbd&amp;gt;&lt;br /&gt;
|Create new segment between the cursors.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
====Segment List Hotkeys====&lt;br /&gt;
{|&lt;br /&gt;
|&amp;lt;kbd&amp;gt;Ctrl&amp;lt;/kbd&amp;gt;+&amp;lt;kbd&amp;gt;R&amp;lt;/kbd&amp;gt;&lt;br /&gt;
|Open the segment list sort order dialog.&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;kbd&amp;gt;Ctrl&amp;lt;/kbd&amp;gt;+&amp;lt;kbd&amp;gt;Numpad Plus&amp;lt;/kbd&amp;gt;&lt;br /&gt;
|Resize all columns to fit their content&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
====Spectrogram Hotkeys====&lt;br /&gt;
{|&lt;br /&gt;
|&amp;lt;kbd&amp;gt;Shift&amp;lt;/kbd&amp;gt;+&amp;lt;kbd&amp;gt;Add&amp;lt;/kbd&amp;gt;&lt;br /&gt;
|Increase amplitude floor.&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;kbd&amp;gt;Shift&amp;lt;/kbd&amp;gt;+&amp;lt;kbd&amp;gt;Subtract&amp;lt;/kbd&amp;gt;&lt;br /&gt;
|Decrease amplitude floor.&lt;br /&gt;
&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
====Zoom Hotkeys====&lt;br /&gt;
&lt;br /&gt;
{|&lt;br /&gt;
|&amp;lt;kbd&amp;gt;Y&amp;lt;/kbd&amp;gt;&lt;br /&gt;
|Zoom in on the x axis around the mid point between the cursors.&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;kbd&amp;gt;Q&amp;lt;/kbd&amp;gt;&lt;br /&gt;
|Zoom out on the x axis around the mid point between the cursors.&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;kbd&amp;gt;Ctrl&amp;lt;/kbd&amp;gt;+&amp;lt;kbd&amp;gt;Add&amp;lt;/kbd&amp;gt;&lt;br /&gt;
|Zoom in on the y axis around the active cursor&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;kbd&amp;gt;Ctrl&amp;lt;/kbd&amp;gt;+&amp;lt;kbd&amp;gt;Subtract&amp;lt;/kbd&amp;gt;&lt;br /&gt;
|Zoom out on the y axis around the active cursor&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;kbd&amp;gt;V&amp;lt;/kbd&amp;gt;&lt;br /&gt;
|Zoom between cursors on the x axis&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;kbd&amp;gt;Shift&amp;lt;/kbd&amp;gt;+&amp;lt;kbd&amp;gt;V&amp;lt;/kbd&amp;gt;&lt;br /&gt;
|Zoom between cursors on the y axis. Note that this only works if the cursor style allows y axis positioning.&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;kbd&amp;gt;G&amp;lt;/kbd&amp;gt;&lt;br /&gt;
|Zoom in around the left-hand cursor.&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;kbd&amp;gt;T&amp;lt;/kbd&amp;gt;&lt;br /&gt;
|Zoom out around the left-hand cursor.&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;kbd&amp;gt;H&amp;lt;/kbd&amp;gt;&lt;br /&gt;
|Zoom in around the right-hand cursor.&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;kbd&amp;gt;Z&amp;lt;/kbd&amp;gt;&lt;br /&gt;
|Zoom out around the right-hand cursor.&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;kbd&amp;gt;X&amp;lt;/kbd&amp;gt;&lt;br /&gt;
|Reset the zoom&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
====Misc Hotkeys====&lt;br /&gt;
{|&lt;br /&gt;
!Key&lt;br /&gt;
!Description&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;kbd&amp;gt;S&amp;lt;/kbd&amp;gt;&lt;br /&gt;
|Redraw the spectragraph graph showing the signal between the cursors in the waveform graph. This is only relevant for the [[#Spectrogram_.2F_Waveform_Views|waveform overview &amp;amp; spg. section view]].&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;kbd&amp;gt;TAB&amp;lt;/kbd&amp;gt;&lt;br /&gt;
|If a graph is currently active, move the focus to the next graph. If the dialog is active, move the focus to the next control.&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;kbd&amp;gt;Ctrl&amp;lt;/kbd&amp;gt;+&amp;lt;kbd&amp;gt;TAB&amp;lt;/kbd&amp;gt;&lt;br /&gt;
|Move the focus from the dialog to the graphs, or vica versa.&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;kbd&amp;gt;Ctrl&amp;lt;/kbd&amp;gt;+&amp;lt;kbd&amp;gt;F&amp;lt;/kbd&amp;gt;&lt;br /&gt;
|Toggle between spectrogram frame settings 1 and 2.&lt;br /&gt;
|}&lt;br /&gt;
--&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Versions==&lt;br /&gt;
Note that versions &amp;gt; 1.0 require {{STX}} &amp;gt;= 4.4&lt;br /&gt;
&lt;br /&gt;
===1.1.10===&lt;br /&gt;
* bugfix: Playlist listview now processes listsorted message and displays sort order set by clicking a column heading. The sort order was first being displayed when clicking in the control after clicking the column heading.&lt;br /&gt;
===1.1.9===&lt;br /&gt;
* feature: removed the now unnecessary &#039;autoDraw&#039; function.&lt;br /&gt;
* bugfix: use &#039;ID&#039; as default attribute for text in segments where no attribute is specified.&lt;br /&gt;
===1.1.8===&lt;br /&gt;
* feature: removed the now unnecessary &#039;Refresh&#039; button&lt;br /&gt;
===1.1.7===&lt;br /&gt;
* bugfix: the /U ASegTemplate flag is now respected, and, if used, the last entered value for a segment attribute is used as the default for the next new segment.&lt;br /&gt;
===1.1.5===&lt;br /&gt;
* bugfix: segment placement algorithm no longer drawing segments off screen.&lt;br /&gt;
* bugfix: moving scrollbar no longer generates an error message in the log window.&lt;br /&gt;
Download [https://www.kfs.oeaw.ac.at/pub/stx/spexl/ Transcription script downloads].&lt;/div&gt;</summary>
		<author><name>Jw</name></author>
	</entry>
	<entry>
		<id>https://mediawiki.kfs.oeaw.ac.at/stx/docs/wiki/index.php?title=Main_Page&amp;diff=10658</id>
		<title>Main Page</title>
		<link rel="alternate" type="text/html" href="https://mediawiki.kfs.oeaw.ac.at/stx/docs/wiki/index.php?title=Main_Page&amp;diff=10658"/>
		<updated>2019-10-01T11:41:04Z</updated>

		<summary type="html">&lt;p&gt;Jw: /* Download */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== {{STx}} {{VERSION}}==&lt;br /&gt;
&lt;br /&gt;
{{STX}} is a software tool for the analysis, signal processing and annotation of Wave sound files. {{STX}} runs on the Windows operating system. It was originally a port of the S_TOOLS application for dedicated DSP hardware developed at the [https://www.kfs.oeaw.ac.at Acoustics Research Institute] in the 1980s. This documentation is work in progress and by no means complete. If you fail to find something you need, please [[Contact|get in touch]] with the development team.&lt;br /&gt;
&lt;br /&gt;
=== Using {{STx}} ===&lt;br /&gt;
&lt;br /&gt;
* [[User_Guide|User Guide]]&lt;br /&gt;
&lt;br /&gt;
=== {{STx}} Programming ===&lt;br /&gt;
&lt;br /&gt;
* [[Programmer_Guide/STx_Guru|Starting with {{STx}} Programming]]&lt;br /&gt;
* [[Programmer_Guide|Programmer Guide]]&lt;br /&gt;
* [[Programmer_Guide/Quick_Reference|Quick Reference]]&lt;br /&gt;
&lt;br /&gt;
=== About {{STx}} {{VERSION}} ===&lt;br /&gt;
&lt;br /&gt;
* Platform: runs on Windows Vista and higher&lt;br /&gt;
* [[History of Changes]]&lt;br /&gt;
* [[Known Bugs]]&lt;br /&gt;
* [[Feature Requests]]&lt;br /&gt;
* [[Contact]]&lt;br /&gt;
* [[Running STx under Linux or macOS]]&lt;br /&gt;
&lt;br /&gt;
=== Download ===&lt;br /&gt;
&lt;br /&gt;
[https://www.kfs.oeaw.ac.at/pub/stx/stx-5.0.3.9967-freeware.exe STx 5.0.3]&lt;br /&gt;
&lt;br /&gt;
[https://www.kfs.oeaw.ac.at/pub/stx/ older releases]&lt;br /&gt;
&lt;br /&gt;
==MediaWiki Links==&lt;br /&gt;
* [[STx Documentation Style Guide|Style guide]] for documenting {{STx}} in this wiki.&lt;br /&gt;
* Consult the [http://meta.wikimedia.org/wiki/Help:Contents User&#039;s Guide] for information on using the wiki software.&lt;br /&gt;
* [http://www.mediawiki.org/wiki/Manual:Configuration_settings Configuration settings list]&lt;br /&gt;
* [http://www.mediawiki.org/wiki/Manual:FAQ MediaWiki FAQ]&lt;br /&gt;
* [https://lists.wikimedia.org/mailman/listinfo/mediawiki-announce MediaWiki release mailing list]&lt;br /&gt;
__NOTOC__&lt;/div&gt;</summary>
		<author><name>Jw</name></author>
	</entry>
	<entry>
		<id>https://mediawiki.kfs.oeaw.ac.at/stx/docs/wiki/index.php?title=Template:VERSION&amp;diff=10657</id>
		<title>Template:VERSION</title>
		<link rel="alternate" type="text/html" href="https://mediawiki.kfs.oeaw.ac.at/stx/docs/wiki/index.php?title=Template:VERSION&amp;diff=10657"/>
		<updated>2019-10-01T11:23:49Z</updated>

		<summary type="html">&lt;p&gt;Jw: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;5.0.3&lt;/div&gt;</summary>
		<author><name>Jw</name></author>
	</entry>
	<entry>
		<id>https://mediawiki.kfs.oeaw.ac.at/stx/docs/wiki/index.php?title=History_of_Changes&amp;diff=10656</id>
		<title>History of Changes</title>
		<link rel="alternate" type="text/html" href="https://mediawiki.kfs.oeaw.ac.at/stx/docs/wiki/index.php?title=History_of_Changes&amp;diff=10656"/>
		<updated>2019-10-01T11:18:56Z</updated>

		<summary type="html">&lt;p&gt;Jw: /* 5.0.2 */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;div class=&amp;quot;noautonum&amp;quot;&amp;gt;{{TOC limit|3}}&amp;lt;/div&amp;gt;&lt;br /&gt;
=5.0=&lt;br /&gt;
&lt;br /&gt;
==Features==&lt;br /&gt;
&lt;br /&gt;
===Compact Workspace Mode===&lt;br /&gt;
The Workspace now has a [[User_Guide/Workspace#Modes|compact mode]]. The compact mode is a simplified interface for new users. Although it was designed with linguists in mind, it can be used by anyone.&lt;br /&gt;
&lt;br /&gt;
===webMAUS===&lt;br /&gt;
Automatic segmentation using the [https://clarin.phonetik.uni-muenchen.de/BASWebServices/interface webMAUS] REST API. This has been implemented in the toolbox [[User_Guide/Toolbox/runMAUSBasicDlg|&amp;lt;samp&amp;gt;runMAUSBasicDlg&amp;lt;/samp&amp;gt;]].&lt;br /&gt;
&lt;br /&gt;
==Bugfixes==&lt;br /&gt;
&lt;br /&gt;
* Correctly handle corrupt Workspace file (generate new one, rather than silently exiting)&lt;br /&gt;
&lt;br /&gt;
==5.0.3==&lt;br /&gt;
&lt;br /&gt;
Released: 1st October 2019&lt;br /&gt;
&lt;br /&gt;
Revision: 9967&lt;br /&gt;
&lt;br /&gt;
* feature: Signal.All is now selected by default, if no other segment is selected.&lt;br /&gt;
* feature: When exporting profiles, the present working directory is used, rather than always selecting the &#039;profiles&#039; directory. The profiles directory is only used if the present working directory is the root directory.&lt;br /&gt;
* feature: The first sound file in the project is selected by default in the compact mode.&lt;br /&gt;
* bugfix: When adding a file per drag and drop, the file is now selected.&lt;br /&gt;
* bugfix: enabling a disabled edit box now sets the background color correctly (back to white).&lt;br /&gt;
* bugfix: debugger trace window now visible in release version too&lt;br /&gt;
* bugfix: [[Programmer_Guide/Command_Reference/SYSINFO|SYSINFO]] command now supports Windows 8.1 and Windows 10 (was returning Windows 8)&lt;br /&gt;
* bugfix: SPExL V1.1.10. Playlist listview now processes listsorted message and displays sort order set by clicking a column heading. The sort order was first being displayed when clicking in the control after clicking the column heading.&lt;br /&gt;
* bugfix: The &#039;Start&#039; button should now be activated correctly in the Compact Mode.&lt;br /&gt;
&lt;br /&gt;
==5.0.2==&lt;br /&gt;
&lt;br /&gt;
Released: 19th September 2019&lt;br /&gt;
&lt;br /&gt;
Revision: 9946&lt;br /&gt;
&lt;br /&gt;
* bugfix:  The context menu Add Sound File now working from the Audio File list in the Compact Mode.&lt;br /&gt;
* feature: The possible number of plots in XPlot was increased from 64 to 128&lt;br /&gt;
&lt;br /&gt;
==5.0.0==&lt;br /&gt;
&lt;br /&gt;
Released: 12th September 2019&lt;br /&gt;
&lt;br /&gt;
Revision: 9935&lt;br /&gt;
&lt;br /&gt;
Initial release.&lt;br /&gt;
&lt;br /&gt;
=4.4=&lt;br /&gt;
&lt;br /&gt;
==Features==&lt;br /&gt;
===Transcription Script SPExL 1.1.6===&lt;br /&gt;
The transcription script SPExL has been simplified and improved.&lt;br /&gt;
* Hotkeys can be defined by the user in the SPExL_SegTrans.hotkeys file&lt;br /&gt;
* The number of available &#039;views&#039; has been reduced to 3:&lt;br /&gt;
** wave overview &amp;amp; spg. section (a waveform of the whole file in the top graph, with a section of the file as spectrogram below)&lt;br /&gt;
** wave only (a waveform of a section of the file with scrollbar functionality)&lt;br /&gt;
** wave and spg. section (a synced waveform and spectrogram of a section of the file with scrollbar functionality)&lt;br /&gt;
* Segment selection between graphs and the list are now synchronised. If you select a segment in the graph, it is selected in the list and vice versa.&lt;br /&gt;
* Changes made to the project (new segments, edited attributes) are now made directly in the project rather than the user having to explicitly press the &#039;save segments to project file&#039; button to copy them from SPExL to the Workspace. Note that they are only written to disk, however, if the project is saved (press the &#039;Save&#039; button).&lt;br /&gt;
===Visible Segment Attributes Saved per Project File===&lt;br /&gt;
If you choose to display other attributes other than the default attributes in the Workspace Detail View, these settings are now saved in the open project file. When a project file is then opened, the relevant attribute list is loaded and used, rather than the user having to [[User_Guide/Workspace/Detail/Search_for_Element_Attributes|search for them]] again. You can still modify which attributes are displayed using the General Settings [[User_Guide/Workspace/Application_and_Setup_Tree/Options/General_Settings#.22Set.22_Attributes_.26_.22Segment.22_Attributes|&#039;Select &amp;quot;Segment&amp;quot; Attributes&#039; dialog]].&lt;br /&gt;
===Global / Profile Sectioner Settings===&lt;br /&gt;
The sectioner settings in the {{Viewer2}} analysis application were always global to STx. As of STx 4.4.0, you can choose to save your sectioner settings with your profile. The default is still the &#039;global&#039; variant. To switch to profile sectioner settings, uncheck the &#039;&#039;&#039;use global sectioner settings&#039;&#039;&#039; checkbox in the {{Viewer2}} [[User_Guide/Spectrogram_and_Parameter_Viewer/Settings_Dialog|settings dialog]].&lt;br /&gt;
&lt;br /&gt;
==4.4.10==&lt;br /&gt;
&lt;br /&gt;
Released: 17th January 2019&lt;br /&gt;
&lt;br /&gt;
Revision: 9712&lt;br /&gt;
&lt;br /&gt;
* bugfix: playback gain factor - the playback gain is now working also for asio devices (see CSTXASIOEngine::Transfer())&lt;br /&gt;
* bugfix: renumbering command did not update detail as expected.&lt;br /&gt;
* bugfix: the update version dialogs now display the correct workspace path&lt;br /&gt;
&lt;br /&gt;
==4.4.9==&lt;br /&gt;
&lt;br /&gt;
Released: 25th September 2018&lt;br /&gt;
&lt;br /&gt;
Revision:&lt;br /&gt;
&lt;br /&gt;
* feature: don&#039;t ask user where to put sound file if there are no sets in the project.&lt;br /&gt;
* feature: dragging and dropping a template onto {{ST}X} copies it to the templates folder.&lt;br /&gt;
* feature: added &#039;Open Containing Folder&#039; context menu for sound files and links. Improved contextualisation of context menu in detail (overview==root/set)&lt;br /&gt;
* feature: &#039;txt2wav&#039; script: Adding decimal symbol and field delimiter to parameters, as well as the ability to specify which extension to use to filter files (was hard-coded to &#039;txt&#039;). Now this macro can be used to&lt;br /&gt;
* feature: bdataset createwave and createwwaveex now take an openmode keyword: auto|create|read|write, which is passed on to bsf open. This means that we can now open files in modes other than &#039;auto&#039;.&lt;br /&gt;
process CSV files.&lt;br /&gt;
* bugfix: very long capture text for edit controls with &#039;text above&#039; could lead to capture static being longer than the edit control and unintentionally overlapping with other controls (e.g. in Transcription Setup dialog).&lt;br /&gt;
* bugfix: closing con log window no longer resets PARENT shell variable, unless it is set the the con log window itself.&lt;br /&gt;
* bugfix: sound files now opened using the FILE_SHARE_READ dwShareMode. This should mean, that STx no longer prevents other processes from reading the sound files. &lt;br /&gt;
* bugfix: viewer opens sound file in read mode, rather than read/write.&lt;br /&gt;
* bugfix: the !PATH attribute (MakePath()) now returns the correct path for files in the root of a drive. Bug was introduced in r8998 (STx 4.2.19). This was, for example, was causing sound files in the root directory not to be unloaded, and hence was causing sharing violations.&lt;br /&gt;
&lt;br /&gt;
==4.4.8==&lt;br /&gt;
&lt;br /&gt;
Released: 25th July 2018&lt;br /&gt;
&lt;br /&gt;
Revision: 9500&lt;br /&gt;
&lt;br /&gt;
* feature: Spectrogram &amp;amp; Parameters viewer sectioner window now remembers which function cursor is bound to when being replotted.&lt;br /&gt;
* feature: The &amp;lt;samp&amp;gt;downsampling.sts&amp;lt;/samp&amp;gt; script now has a &amp;lt;samp&amp;gt;ResampleCLI&amp;lt;/samp&amp;gt; macro for automatic resampling of one or more files (see source). The old &amp;lt;samp&amp;gt;ResampleDialog&amp;lt;/samp&amp;gt; was renamed to &amp;lt;samp&amp;gt;ResampleDLG&amp;lt;/samp&amp;gt;.&lt;br /&gt;
* feature: Adding help for &amp;quot;Import_PRAAT_TextGrid&amp;quot; toolbox.&lt;br /&gt;
* feature: Adding ability to edit &#039;Sectioner Settings&#039; from the profile dialog. &lt;br /&gt;
* feature: Transcription 1.1.8 - removed segment &#039;refresh&#039; button, since segments always reflect current project state.&lt;br /&gt;
* bugfix: a window that was maximised will now be maximised to the correct monitor. It was always being maximised to monitor 1 on display creation.&lt;br /&gt;
* bugfix: the profile version number is now imported with the profile. This means that, for example, the use global profile settings flag is now also set correctly on import.&lt;br /&gt;
* bugfix: minor fix of position of two controls which were overlapping with controls beneath&lt;br /&gt;
* bugfix: stop playback cursor if wave is stopped by starting playback in another graph. Beforehand, the playback cursor was stopped if it got to the end, or the ESC key was pressed.&lt;br /&gt;
* bugfix: Y coordinate vector conversion was inaccurate by 1 pixel (bug introduced in r2536) This affects the XY, parameter, scatter, wave and waterfall functions.&lt;br /&gt;
&lt;br /&gt;
==4.4.6==&lt;br /&gt;
&lt;br /&gt;
Released: 21. March 2018&lt;br /&gt;
&lt;br /&gt;
Revision: 9441&lt;br /&gt;
&lt;br /&gt;
* bugfix: some bugfixes and minor changes in BSeq &lt;br /&gt;
* bugfix: BScript: logging of unhandled messages in msg-loop disabled // Conlog: /ton and /toff options implemented (timer on/off + show elapsed time) &lt;br /&gt;
* bugfix: Viewer3 settings now being saved (bug introduced in r9318 - STx 4.4.0)&lt;br /&gt;
* bugfix CShellFile::Status() - catch CTime exception if file time is illegal (avoid program crash)&lt;br /&gt;
&lt;br /&gt;
==4.4.5==&lt;br /&gt;
&lt;br /&gt;
Released: 19. February 2018&lt;br /&gt;
&lt;br /&gt;
Revision: 9416&lt;br /&gt;
&lt;br /&gt;
* bugfix: in Viewer2 large asegtemplates (with many fields) are now displayed correctly - note: the same problem exists in Viewer1 if the segment dialog part (created by the macro call &amp;quot;&amp;quot;metasegment msdialog&amp;quot;) needs more than 90 controls (around 40 segment attributes)&lt;br /&gt;
* feature: the bscript.stx function loaddata (con loaddata) can now also load string tables (extenden tables) from csv-files. The file types TEXT/TEXTCONTINUATION (numeric parameter table), STRING/STRINCONTINUATION (extended string table) and BINARY (binary stx-data files) are available. Type ASCII/ASCIICONTINUATION has been removed.&lt;br /&gt;
* feature: new feature (bugfix?): CShellTable::Read() - handling of field-separator tab has been changed - empty fields are now possible - warning: may have an effect on existing script/macro code!&lt;br /&gt;
&lt;br /&gt;
==4.4.4==&lt;br /&gt;
&lt;br /&gt;
Released: 26. January 2018&lt;br /&gt;
&lt;br /&gt;
Revision: 9404&lt;br /&gt;
&lt;br /&gt;
* bugfix: combobox entries with underliners retain their underliners now in the workspace detail (reported by Anton Baotic), and in Spexl.&lt;br /&gt;
&lt;br /&gt;
==4.4.3==&lt;br /&gt;
&lt;br /&gt;
Released: 18. December 2017&lt;br /&gt;
&lt;br /&gt;
Revision: 9391&lt;br /&gt;
&lt;br /&gt;
* bugfix: adding missing Transcription hotkey file and retisimo scripts&lt;br /&gt;
&lt;br /&gt;
==4.4.2==&lt;br /&gt;
&lt;br /&gt;
Released: 30. November 2017&lt;br /&gt;
&lt;br /&gt;
Revision: 9377&lt;br /&gt;
&lt;br /&gt;
* bugfix: SPExL Transcription script V1.1.7: the /U ASegTemplate flag is now respected, and, if used, the last entered value for a segment attribute is used as the default for the next new segment.&lt;br /&gt;
* bugfix: default profile names no longer have the invalid blank character in them. A check was also added, so new profiles cannot be created with blanks.&lt;br /&gt;
&lt;br /&gt;
==4.4.1==&lt;br /&gt;
&lt;br /&gt;
Released: 23. November 2017&lt;br /&gt;
&lt;br /&gt;
Revision: 9369&lt;br /&gt;
&lt;br /&gt;
* bugfix: if zooming is turned off in {{Viewer2}}, segments are now correctly visible on the Y axis. This bug has existed since at least STx 4.2.&lt;br /&gt;
&lt;br /&gt;
==4.4.0==&lt;br /&gt;
&lt;br /&gt;
Released: 14 November 2017&lt;br /&gt;
&lt;br /&gt;
Revision: 9350&lt;br /&gt;
&lt;br /&gt;
Initial release.&lt;br /&gt;
&lt;br /&gt;
=4.3=&lt;br /&gt;
&lt;br /&gt;
==Features==&lt;br /&gt;
====Load or export parameters from super or sub segments====&lt;br /&gt;
Parameters from super segments or from sub segments can now be loaded into the selected segment. For example, if you have analysed a word and corrected the parameters, you can use these corrected parameters when viewing phoneme segments within the word. This is achieved by selecting &#039;super segment data only&#039; setting in the Viewer settings [[User_Guide/Spectrogram_and_Parameter_Viewer/Settings_Dialog#Parameter_IO_Configuration|Parameter IO Configuration]] dialog.&lt;br /&gt;
&lt;br /&gt;
It is possible to select which super/sub segment parameters should be used, filtering by time, attribute or ID.&lt;br /&gt;
&lt;br /&gt;
This feature is also available in the parameter export dialog.&lt;br /&gt;
&lt;br /&gt;
====Parameter setting summary====&lt;br /&gt;
A summary of the settings used for parameter analysis is now saved with the parameter in the project file. This information is displayed in the [[User_Guide/Workspace/Detail/Views/Parameter_View|Parameter View]].&lt;br /&gt;
&lt;br /&gt;
====Exact sample positioning in {{Viewer2}}====&lt;br /&gt;
&lt;br /&gt;
You can now select a position in the [[User_Guide/Spectrogram_and_Parameter_Viewer#Waveform_zoom_window|Waveform Zoom window]] in {{Viewer2}} and move the active time cursor to that position using the hotkey &#039;1&#039;. This is useful for exact positioning of the time cursors when segmenting, for example, words.&lt;br /&gt;
&lt;br /&gt;
==4.3.10==&lt;br /&gt;
&lt;br /&gt;
Released: 26. January 2018&lt;br /&gt;
&lt;br /&gt;
Revision: 9407&lt;br /&gt;
*bugfix: do not allow user to give a profile a name including blanks.&lt;br /&gt;
*bugfix: renaming spectrum profiles (removing blanks)&lt;br /&gt;
*bugfix: the correct most recently entered value in a listctrl is now saved (not the last in the list).&lt;br /&gt;
*bugfix: passing delete, insert and back keys to static control.&lt;br /&gt;
*bugfix: &#039;spexl*.hotkeys.default&#039; &#039;retisimo.sts&#039; &#039;retisimo_*.sts&#039; &#039;HRTF_II_new.txt&#039; &#039;downsample.sts&#039; files are now being copied too (bug introduced in r8789)&lt;br /&gt;
*bugfix: removing extraneous / from Editing segments help URL&lt;br /&gt;
*bugfix: combobox entries with underliners retain their underliners now in the workspace detail (reported by Anton Baotic), and in Spexl.&lt;br /&gt;
&lt;br /&gt;
==4.3.9==&lt;br /&gt;
&lt;br /&gt;
Released: 23. November 2017&lt;br /&gt;
&lt;br /&gt;
Revision: 9363&lt;br /&gt;
&lt;br /&gt;
* bugfix: if zooming is turned off in {{Viewer2}}, segments are now correctly visible on the Y axis. This bug has existed since at least STx 4.2.&lt;br /&gt;
&lt;br /&gt;
==4.3.8==&lt;br /&gt;
&lt;br /&gt;
Released: 14. November 2017&lt;br /&gt;
&lt;br /&gt;
Revision: 9347&lt;br /&gt;
&lt;br /&gt;
* bugfix: zooming and replotting in the xplot class now working&lt;br /&gt;
* feature: user is now informed about bugfixes in current release, and/or new major/minor releases. This means that you will be informed of bug fixes for your version of STx, not just for the newest STx.&lt;br /&gt;
&lt;br /&gt;
==4.3.7==&lt;br /&gt;
&lt;br /&gt;
Released: 19. October 2017&lt;br /&gt;
&lt;br /&gt;
Revision: 9328&lt;br /&gt;
&lt;br /&gt;
* bugfix: stx no longer crashing on y zoom (bug introduced in r9293 - STx 4.3.6)&lt;br /&gt;
* bugfix: binary_file_example.sts now working&lt;br /&gt;
* bugfix: if navigating in file dialog using the keyboard, the edit box is now updated with the selected file.&lt;br /&gt;
&lt;br /&gt;
==4.3.6==&lt;br /&gt;
&lt;br /&gt;
Released 25. September 2017&lt;br /&gt;
&lt;br /&gt;
Revision: 9297&lt;br /&gt;
&lt;br /&gt;
* bugfix: the spectrogram dataset now frees up memory once dataset is drawn&lt;br /&gt;
* bugfix: adding specials folder to installer&lt;br /&gt;
&lt;br /&gt;
==4.3.5==&lt;br /&gt;
&lt;br /&gt;
Released: 6. September 2017&lt;br /&gt;
&lt;br /&gt;
Revision: 9286&lt;br /&gt;
&lt;br /&gt;
* bugfix: auto-saving the project file no longer leaks memory&lt;br /&gt;
* bugfix: editing segments in the workspace now uses the segment template by default&lt;br /&gt;
* bugfix: a backup copy of the project file is now made when saving&lt;br /&gt;
* bugfix: lists with one item are now selectable with the keyboard&lt;br /&gt;
* bugfix: listview column width now calculated with correct font&lt;br /&gt;
* bugfix: default values from aseg templates now written to new segment before editing&lt;br /&gt;
* bugfix: correct default value written to segment, even if attribute value starts with a number&lt;br /&gt;
* bugfix: combobox entries no longer replacing underlines&lt;br /&gt;
&lt;br /&gt;
==4.3.4==&lt;br /&gt;
&lt;br /&gt;
Released: 3. July 2017&lt;br /&gt;
&lt;br /&gt;
Revision: 9214&lt;br /&gt;
&lt;br /&gt;
====Features====&lt;br /&gt;
* feature: the [[Programmer_Guide/Macro_Library/CONLOG|conlog]] command can now log to a file.&lt;br /&gt;
====Bug Fixes====&lt;br /&gt;
* bugfix: the conlog savedata command no longer fails silently if the file cannot be created.&lt;br /&gt;
&lt;br /&gt;
==4.3.3==&lt;br /&gt;
&lt;br /&gt;
Released: 19. June 2017&lt;br /&gt;
&lt;br /&gt;
Revision: 9185&lt;br /&gt;
&lt;br /&gt;
====Bug Fixes====&lt;br /&gt;
* bugfix: segment address in the Transcription script is now rounded to 10th of a millisecond (4 decimal places) rather than 1 millisecond.&lt;br /&gt;
* bugfix: saving the project file now resets the automatic save timer.&lt;br /&gt;
* bugfix: the Transcription, Import Word List and Reorder Word List should now be working correctly again.&lt;br /&gt;
====Features====&lt;br /&gt;
* feature: new script: [[User_Guide/Scripts/Anonymize.sts|Anonymize.sts]] - anonymize segments (attributes and signal) - requested by the ARI phonetics group&lt;br /&gt;
* feature: adding option to automatically save every minute.&lt;br /&gt;
&lt;br /&gt;
==4.3.2==&lt;br /&gt;
&lt;br /&gt;
Released: 13. June 2017&lt;br /&gt;
&lt;br /&gt;
Revision: 9170&lt;br /&gt;
&lt;br /&gt;
====Bug Fixes====&lt;br /&gt;
* bugfix: The segment &#039;Signal.All&#039; is now created when a new sound file is imported. This bug was introduced in version 4.3.1.&lt;br /&gt;
* bugfix: the &#039;wave-only&#039; view in the Transcription script is now available again.&lt;br /&gt;
&lt;br /&gt;
==4.3.1==&lt;br /&gt;
&lt;br /&gt;
Released: 8. June 2017&lt;br /&gt;
&lt;br /&gt;
Revision: 9165&lt;br /&gt;
&lt;br /&gt;
====Bug Fixes====&lt;br /&gt;
&lt;br /&gt;
* bugfix: clicking SPExL graph whilst editing segment in the segment list now draws the segment in the graph (previously needed an explicit refresh to draw the segment).&lt;br /&gt;
* bugfix: the workspace is now saved even if the path contains spaces (bug introduced in r8843)&lt;br /&gt;
* bugfix: searching using keyboard in listctrl now working in correct order (not backwards). Bug introduced in r9002.&lt;br /&gt;
* bugfix: zooming out in SPExL on the y axis with Ctrl+Subtract is now working correctly. This appears to have been around since at least r4442 (STx 3.9)&lt;br /&gt;
* bugfix: y position of cursors is now retained when zooming&lt;br /&gt;
* bugfix: Viewers/SPEXL create segments at selected address and not with P=0 and L=0&lt;br /&gt;
* bugfix: maximising whilst spectrogram is drawing no longer leaves the spectrogram in unfinished version on screen (set new &#039;m_bRecalculate&#039; flag to force recalculation/redraw when dataset sync has finished).&lt;br /&gt;
&lt;br /&gt;
==4.3.0==&lt;br /&gt;
&lt;br /&gt;
Released: April 2017&lt;br /&gt;
&lt;br /&gt;
Revision: 9149&lt;br /&gt;
&lt;br /&gt;
=Older Versions=&lt;br /&gt;
&lt;br /&gt;
==4.2==&lt;br /&gt;
====4.2.23====&lt;br /&gt;
Released: 24 August 2017&lt;br /&gt;
Revision: 9264&lt;br /&gt;
* BUGFIX: correct font used for calculation of formant dialog column size in {{Viewer2}}&lt;br /&gt;
&lt;br /&gt;
====4.2.22====&lt;br /&gt;
Released: 25 January 2017&lt;br /&gt;
Revision: 9064&lt;br /&gt;
* BUGFIX: The following wildcard string comparison will now match:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
if &#039;*ha&#039; =SI &#039;haha&#039; then&lt;br /&gt;
   // it&#039;s a match :-)&lt;br /&gt;
end&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
* BUGFIX: Changed behavior of comparisons in FIND-TABLE/XML: if a field/attribute is not defined all &amp;quot;notequal&amp;quot; and &amp;quot;notmatching&amp;quot; operators evaluates to &amp;quot;true&amp;quot; and all others to &amp;quot;false&amp;quot;&lt;br /&gt;
&lt;br /&gt;
====4.2.21====&lt;br /&gt;
Released: 9 January 2017&lt;br /&gt;
Revision: 9023&lt;br /&gt;
* BUGFIX: Edit segment dialog now referencing correct segment attributes (bug introduced in r8852 - STx 4.2.15)&lt;br /&gt;
&lt;br /&gt;
====4.2.20====&lt;br /&gt;
Released: 23 December 2016&lt;br /&gt;
* FEATURE: STx now informs the user of available update via the About dialog.&lt;br /&gt;
* BUGFIX: Removing non-existent files from STX.INI when loading&lt;br /&gt;
* BUGFIX: About dialog no long blocking workspace file.&lt;br /&gt;
&lt;br /&gt;
====4.2.19====&lt;br /&gt;
Released: 12th December 2016&lt;br /&gt;
* BUGFIX: Ctrl+U no longer the same as Ctrl+Shift+U in, e.g., signal view.&lt;br /&gt;
* BUGFIX: Generating correct hotkey string for Ctrl+Shift+&amp;lt;key&amp;gt;&lt;br /&gt;
* BUGFIX: Switching from long to short list of segments in the workspace should no longer lead to a blank detail.&lt;br /&gt;
* BUGFIX: Transcription left cursor right bitmap now correct image&lt;br /&gt;
* BUGFIX: Fixed bug in Viewer2 where setting the range did not work under all circumstances.&lt;br /&gt;
* BUGFIX: Focus moving with selection for listview key navigation and single selection.&lt;br /&gt;
* BUGFIX: Copy attributes in the Workspace overview now includes first value (bug introduced in r8297)&lt;br /&gt;
* BUGFIX: Checkbox size increased because some strings were being cut off.&lt;br /&gt;
* BUGFIX: Show Find Dialog menu now checked if Show Find Dialog is visible&lt;br /&gt;
* BUGFIX: Occasional crash in {{Viewer2}} fixed by removing use of static with CString (r9010,r9012).&lt;br /&gt;
&lt;br /&gt;
====4.2.18====&lt;br /&gt;
Released: 27 October 2016&lt;br /&gt;
&lt;br /&gt;
* FEATURE: adding PCM info to edit sound file dialog for editing existing project files too.&lt;br /&gt;
* FEATURE/BUGFIX: Improved listview keyboard handling (up/down, page up, page down). Disabled scrolling of listview whilst editing.&lt;br /&gt;
* BUGFIX: viewer2 no longer hangs if saved rmsb-data are loaded and displayed with autoscale-option&lt;br /&gt;
* BUGFIX: detail sequence view now using Ctrl+Shift+U to move selected entry up and Ctrl+Shift+D to move selected entry down (rather than Ctrl+UP and Ctrl+Down - which conflict with internal listview keyboard handling).&lt;br /&gt;
* BUGFIX: bscript log window no longer jumps in front of SPExL window when a dialog is opened.&lt;br /&gt;
* FEATURE: releases are now digitally signed by the Österreichische Akademie der Wissenschaften&lt;br /&gt;
* NOTE: the pole-zero sectioner in the {{Viewer2}} application is extremely slow for high frame rates. We are working on improving it.&lt;br /&gt;
&lt;br /&gt;
====4.2.17====&lt;br /&gt;
Released: 26 September 2016&lt;br /&gt;
* BUGFIX: Transcription (SPExL) segment list handling working correctly again (bug introduced in 4.2.16)&lt;br /&gt;
* BUGFIX: Moving selected sequence entry up/down with keyboard now uses the hotkeys Ctrl+Shift+U and Ctrl+Shift+D (rather than Ctrl+Up and Ctrl+Down) and now works as expected.&lt;br /&gt;
&lt;br /&gt;
====4.2.16====&lt;br /&gt;
Released: 30 August 2016&lt;br /&gt;
* Support for Windows XP has been removed.&lt;br /&gt;
* FEATURE: the XPLOT member &amp;quot;FORALLGRAPHS&amp;quot; is now a public function.&lt;br /&gt;
* FEATURE: the XGRAPH function Zoom -&amp;gt; X-Sync was aded to apply the x-zoom of the current graph across all other graphs.&lt;br /&gt;
* BUGFIX: the Automatic Segment Names dialog no longer allows invalid segment names.&lt;br /&gt;
* BUGFIX: The palette import/export are working again.&lt;br /&gt;
* BUGFIX: The Application and Setup tree now correctly stores it&#039;s state.&lt;br /&gt;
* BUGFIX: Keyboard focus no longer disappears after pressing enter in the Workspace Detail.&lt;br /&gt;
* BUGFIX: The selected entry no longer centers itself after editing.&lt;br /&gt;
* BUGFIX: The Transcription script SPExL now plays single selections every time (not every second time).&lt;br /&gt;
* BUGFIX: Tabbing through the entries in the Workspace Detail no longer goes backwards instead of forwards.&lt;br /&gt;
&lt;br /&gt;
====4.2.15====&lt;br /&gt;
Released: unreleased&lt;br /&gt;
* FEATURE: Improved sound file export performance&lt;br /&gt;
* BUGFIX: The File-&amp;gt;Workspace-&amp;gt;Save As workspace menu command is now working (bug introduced in r4092)&lt;br /&gt;
* BUGFIX: parameter and function now drawing (invalidating) correctly if being set whilst zoomed in.&lt;br /&gt;
* BUGFIX: parameter export dialog no longer needs manual refresh (group box is now transparent - uses WS_EX_TRANSPARENT)&lt;br /&gt;
&lt;br /&gt;
====4.2.14====&lt;br /&gt;
Released: 18 January 2016&lt;br /&gt;
* Minimising GDI use&lt;br /&gt;
* Projects files are now associated with {{STX}}&lt;br /&gt;
* BUGFIX: one memory leak fixed&lt;br /&gt;
* BUGFIX: all help menus associated with mediawiki online help&lt;br /&gt;
====4.2.13====&lt;br /&gt;
Released: 22 December 2015&lt;br /&gt;
* Default help file now the STx Wiki ([https://www.kfs.oeaw.ac.at/stx/docs/wiki/ https://www.kfs.oeaw.ac.at/stx/docs/wiki/]).&lt;br /&gt;
* BUGFIX: Find Segments dialog no longer uses ASet search criteria for ASeg search criteria when ASeg criteria is empty&lt;br /&gt;
* BUGFIX: Find Segments dialog can now search for segments within a time range.&lt;br /&gt;
* BUGFIX: assigning number values to an integer field using table[,field] := eval $#num1 + $#num2 syntax now works&lt;br /&gt;
* BUGFIX: growing table by assigning no longer corrupts heap.&lt;br /&gt;
*BUGFIX: force context menu to display within dialog window, even if called directly from shell with 0,0 coordinates.&lt;br /&gt;
*BUGFIX: edit segment dialog is now initialised with the segment channel&lt;br /&gt;
*BUGFIX: context menu now rebuilt before being displayed to ensure that it reflects current state.&lt;br /&gt;
&lt;br /&gt;
====4.2.12====&lt;br /&gt;
Released: 4 December 2015&lt;br /&gt;
* Improved spectrogram &#039;overview&#039; visualisation.&lt;br /&gt;
&lt;br /&gt;
====4.2.11====&lt;br /&gt;
&lt;br /&gt;
Released: 16 November 2015&lt;br /&gt;
&lt;br /&gt;
* Added pole-zero to {{Viewer2}} Sectioner&lt;br /&gt;
* Bugfix: pane sizes are no longer reset in {{V2}} when sectioner settings dialog is closed.&lt;br /&gt;
* Bugfix: list view control header now correct size and clickable, and entries now selectable with one, rather than two clicks.&lt;br /&gt;
* Bugfix: copied attributes are no longer preceded by blank line&lt;br /&gt;
&lt;br /&gt;
====4.2.9====&lt;br /&gt;
&lt;br /&gt;
Released: 16 October 2015&lt;br /&gt;
&lt;br /&gt;
* Bugfix: saving to PNG working again&lt;br /&gt;
&lt;br /&gt;
====4.2.8====&lt;br /&gt;
&lt;br /&gt;
Released: 5 October 2015&lt;br /&gt;
&lt;br /&gt;
* Bugfix: the pole-zero method spectrogram overlay is now working correctly.&lt;br /&gt;
&lt;br /&gt;
====4.2.5====&lt;br /&gt;
&lt;br /&gt;
Released: 30 September 2015&lt;br /&gt;
&lt;br /&gt;
* Feature: the pole-zero method is now available as an overlay in the spectrogram and parameter viewer&#039;s spectrogram graph. Note however, that this is not bug free, so please wait for 4.2.6 if you&#039;re interested in this feature.&lt;br /&gt;
&lt;br /&gt;
====4.2.4====&lt;br /&gt;
&lt;br /&gt;
Released: 10 September 2015&lt;br /&gt;
&lt;br /&gt;
* Bugfix: added missing Visual C++ 2013 Redistributable Package&lt;br /&gt;
&lt;br /&gt;
====4.2.3====&lt;br /&gt;
&lt;br /&gt;
Released: 26 August 2015&lt;br /&gt;
&lt;br /&gt;
* Metasegment size modification now locks modification mode&lt;br /&gt;
&lt;br /&gt;
====4.2.2====&lt;br /&gt;
&lt;br /&gt;
Released: 15 June 2015&lt;br /&gt;
&lt;br /&gt;
* Viewer print font now legible&lt;br /&gt;
&lt;br /&gt;
====4.2.0====&lt;br /&gt;
&lt;br /&gt;
Released: February 2015&lt;br /&gt;
&lt;br /&gt;
=====Features=====&lt;br /&gt;
&lt;br /&gt;
* The speed of audio playback can now be set in the project interface&lt;br /&gt;
* The menu shell item has been given the alias &#039;DIALOG&#039; and will now be refered to as such in the documentation (r8578)&lt;br /&gt;
* Pole-Zero [[Programmer_Guide/SPU_Reference/PZTF|SPAtom]] and [[Programmer Guide/Command Reference/EVAL/pztf|EVAL]] methods are now available and are integrated into the [[User_Guide/Spectrogram_and_Parameter_Viewer/Methods/Polezero|Spectrogram and Parameter viewer]].&lt;br /&gt;
* Support for Windows 2000/XP has been removed&lt;br /&gt;
* Pole-Zero SPU and EVAL methods&lt;br /&gt;
* Multiple bug fixes&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==4.0==&lt;br /&gt;
&lt;br /&gt;
===4.0.0===&lt;br /&gt;
&lt;br /&gt;
Released: 2012&lt;br /&gt;
&lt;br /&gt;
==3.9==&lt;br /&gt;
&lt;br /&gt;
3.9.4&lt;br /&gt;
&lt;br /&gt;
Released: 15th October 2009&lt;br /&gt;
&lt;br /&gt;
* BUGFIX: real-time analyser drawing more smoothly&lt;br /&gt;
&lt;br /&gt;
3.9.3&lt;br /&gt;
&lt;br /&gt;
Released: 16th September 2009&lt;br /&gt;
&lt;br /&gt;
* BUGFIX: sequences now being saved.&lt;br /&gt;
&lt;br /&gt;
3.9.2&lt;br /&gt;
&lt;br /&gt;
Released: 30th July 2009&lt;br /&gt;
&lt;br /&gt;
* BUGFIX: segments no longer duplicated in un-linked datasets when importing metadata.&lt;br /&gt;
* BUGFIX: user-defined amplitude range working in waveform viewer&lt;br /&gt;
* BUGFIX: spectrogram amplitude floor now correct after using settings dialog&lt;br /&gt;
* BUGFIX: recorder application now recording&lt;br /&gt;
&lt;br /&gt;
3.9.1&lt;br /&gt;
&lt;br /&gt;
Released: 3rd July 2009&lt;br /&gt;
&lt;br /&gt;
* BUGFIX: cmenu check/uncheck working for consecutive items&lt;br /&gt;
* BUGFIX: text files items and the load command can now read files encoded with an &amp;quot;FE FF&amp;quot; byte order mark (encoded in UTF-16BE). The error message &amp;quot;unsupported byte order mark&amp;quot; is returned if a UTF-32BE or UTF-32LE byte order mark is found.Supported encodings specified using a byte order mark: UTF-8, UTF-16LE, UTF-16BE&amp;lt;br /&amp;gt; Other supported encodings:windows-1252&lt;br /&gt;
* BUGFIX: wave files with chunks defined after the data chunk now have the correct length.&lt;br /&gt;
* BUGFIX: saving dataset faster&lt;br /&gt;
* BUGFIX: &amp;quot;load soundfile&amp;quot; options should no longer conflict with each other&lt;br /&gt;
* BUGFIX: prevent stack overflow in XML files with many siblings (~ 20000)&lt;br /&gt;
* BUGFXI: closing rtanalyser whilst it is running now exits shell correctly (without leaving ghost process).&lt;br /&gt;
&lt;br /&gt;
3.9.0&lt;br /&gt;
&lt;br /&gt;
Released: 15th April 2009&lt;br /&gt;
&lt;br /&gt;
Graphical User Interface&lt;br /&gt;
&lt;br /&gt;
General&lt;br /&gt;
&lt;br /&gt;
S_TOOLS-STx now supports all fonts available on the host system.&lt;br /&gt;
&lt;br /&gt;
Comboboxes in ASegTemplates can now be made editable using the flag &amp;lt;span class=&amp;quot;stxmacrocommandoption-character&amp;quot;&amp;gt;/E&amp;lt;/span&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
You can enable/disable runtime error reporting in the Log Control dialog. It is disabled by default, and should only be enabled if you are having problems with S_TOOLS-STx.&lt;br /&gt;
&lt;br /&gt;
Workspace&lt;br /&gt;
&lt;br /&gt;
The segment list can now be edited in the Workspace.&lt;br /&gt;
&lt;br /&gt;
A summary of existing parameters can now be displayed in the segment list (see the Display and Layout Settings dialog).&lt;br /&gt;
&lt;br /&gt;
The Workspace Detail cells can now display text in multiple lines (see the Display and Layout Settings dialog).&lt;br /&gt;
&lt;br /&gt;
Spectrogram &amp;amp;amp; Parameters Viewer&lt;br /&gt;
&lt;br /&gt;
The Spectrogram &amp;amp;amp; Parameters Viewer can now display a harmonic cursor in the spectrogram graph.&lt;br /&gt;
&lt;br /&gt;
The Spectrogram &amp;amp;amp; Parameters Viewer spectrogram method Wavelet has been extended, and a new Cohen&#039;s class distribution method has been implemented.&lt;br /&gt;
&lt;br /&gt;
An amplitude legend is now available in spectrogram plots (via the context menu).&lt;br /&gt;
&lt;br /&gt;
DSP&lt;br /&gt;
&lt;br /&gt;
The band-pass filters now have a window parameter.&lt;br /&gt;
&lt;br /&gt;
Toolbox&lt;br /&gt;
&lt;br /&gt;
The toolbox AutoSeg is available in Spectrogram &amp;amp;amp; Parameters Viewer (if loaded) to automatically segment using peaks, clicks or pauses.&lt;br /&gt;
&lt;br /&gt;
A range of Klatt speech synthesis and resynthesis toolbox functions are available.&lt;br /&gt;
&lt;br /&gt;
The toolbox file &#039;SegmentImEx.sts&#039; implements toolbox functions to import and export segments in the [http://www.fon.hum.uva.nl/praat/ PRAAT] file format. These functions are available in the Workspace.&lt;br /&gt;
&lt;br /&gt;
Scripts&lt;br /&gt;
&lt;br /&gt;
A script specifically designed for transcription and annotation has been developed and included in the default installation of S_TOOLS-STx. The script can be found in the script directory in the file SPExL.sts. There is also a new entry called transcription in the Workspace script tree, which calls the default segmentation routine. The SPExL macro documentation is still being written.&lt;br /&gt;
&lt;br /&gt;
Macro Language&lt;br /&gt;
&lt;br /&gt;
General&lt;br /&gt;
&lt;br /&gt;
Modal window handling has now been moved to the NEW DISPLAY command. Use the option &amp;lt;span class=&amp;quot;stxmacrocommandoption-character&amp;quot;&amp;gt;/O=$#ownerDisplay&amp;lt;/span&amp;gt; to set the owner (which is behind the new display in the z-order. You may also use the option &amp;lt;span class=&amp;quot;stxmacrocommandoption-character&amp;quot;&amp;gt;/Modal&amp;lt;/span&amp;gt; to specify that the owner should be disabled whilst the new display exists.&lt;br /&gt;
&lt;br /&gt;
The NEW command can create objects which are protected from deletion (option &amp;lt;span class=&amp;quot;stxmacrocommandoption-character&amp;quot;&amp;gt;/U|u&amp;lt;/span&amp;gt;).&lt;br /&gt;
&lt;br /&gt;
The command STXCONSTANTS now supports the keywords BITMAPS and BUTTONS.&lt;br /&gt;
&lt;br /&gt;
The command TRANSLATE can now translate the contents of a variable or table.&lt;br /&gt;
&lt;br /&gt;
The command EXIT -xLevel now returns to the first macro defining the label label &amp;quot;OnExitAll&amp;quot; or to the toplevel macro (1st called macro) (rather than to the first macro where the variable #EXITLEVEL = xLevel).&lt;br /&gt;
&lt;br /&gt;
The new command TOKEN, an extended form of the command WORD, can tokenise a string using the specified delimiter.&lt;br /&gt;
&lt;br /&gt;
The new command TRIM can be used to trim characters from the beginning and end of a string.&lt;br /&gt;
&lt;br /&gt;
The new command QUOTE can quote all special characters in a string.&lt;br /&gt;
&lt;br /&gt;
The new command LINELENGTH, although similar to LENGTH, returns the length of a line including delimiters.&lt;br /&gt;
&lt;br /&gt;
The NAME command can now check XML attributes and S_TOOLS-STx XML IDs for syntactical validity. The NAME command can also return a UNC file name for a file on a mapped drive. This is useful, for example, for making DataSets portable in a network environment.&lt;br /&gt;
&lt;br /&gt;
The new command ARG can be used to retrieve macro arguments.&lt;br /&gt;
&lt;br /&gt;
The IREF command supports the option &amp;lt;span class=&amp;quot;stxmacrocommandoption-character&amp;quot;&amp;gt;/I&amp;lt;/span&amp;gt; to simplify and suppress certain error messages.&lt;br /&gt;
&lt;br /&gt;
The global variable @REPORTRUNTIMEERRORS can be set to 1 to display a dialog every time a error occurs when processing a command. Many commands can now take an option specifying that warnings should be generated, rather than errors (DRIVE, LOAD, UNLOAD, SET file LOAD|SAVE|STATUS|DELETE|RENAME|COPY|POSITION), READ, SEGMENT). If set to specify warnings, they will not cause a runtime error.&lt;br /&gt;
&lt;br /&gt;
The READ command (and its variants READSTR, READTAB and READVAR) have a new option &amp;lt;span class=&amp;quot;stxmacrocommandoption-character&amp;quot;&amp;gt;/E&amp;lt;/span&amp;gt; which can be used to escape characters in the input from being used as separators.&lt;br /&gt;
&lt;br /&gt;
Format strings can now add a new line character (\n), using the tag %n. The standard C format tags %x and %X are now supported.&lt;br /&gt;
&lt;br /&gt;
The KEYWORD command now supports the option &amp;lt;span class=&amp;quot;stxmacrocommandoption-character&amp;quot;&amp;gt;/F&amp;lt;/span&amp;gt; which prevents abbreviations from being found and &amp;lt;span class=&amp;quot;stxmacrocommandoption-character&amp;quot;&amp;gt;/C&amp;lt;/span&amp;gt; to make the comparison case sensitive.&lt;br /&gt;
&lt;br /&gt;
The new commands SYSTEMCALL and SYSTEMCALLX are variants of SYSTEM and SYSTEMX which return warnings rather than errors on failure.&lt;br /&gt;
&lt;br /&gt;
The command TGET can now return elapsed milliseconds, when the new option &amp;lt;span class=&amp;quot;stxmacrocommandoption-character&amp;quot;&amp;gt;/ms&amp;lt;/span&amp;gt; is used.&lt;br /&gt;
&lt;br /&gt;
The NAME command, when used with the new UNC subcommand can convert a file path on a mapped drive to its UNC equivalent. This help keep project files portable when accessed from multiple computers (E.g. when the z drive is mapped to \\server\data, the command &amp;quot;name &#039;z:\ds.xml&#039; unc&amp;quot; will return &amp;quot;\\server\data\ds.xml&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
The READ commands have a new option &amp;lt;span class=&amp;quot;stxmacrocommandoption-character&amp;quot;&amp;gt;/T&amp;lt;/span&amp;gt; which prevents arguments from being trimmed.&lt;br /&gt;
&lt;br /&gt;
The macro WINDOWSIZEDLG can be used to allow a user to set a window&#039;s size (width and height in pixels).&lt;br /&gt;
&lt;br /&gt;
SPAtoms&lt;br /&gt;
&lt;br /&gt;
The new SPAtom MIXALL mixes up to eight input arrays/vectors into an output array/vector with gain scaling.&lt;br /&gt;
&lt;br /&gt;
The new SPAtom WLANA performs a general wavelet analysis, and the SPAtom CCANA implement a Cohen Class distribution.&lt;br /&gt;
&lt;br /&gt;
The SPAtoms PVANA and PVSYN no accept a windowing function parameter.&lt;br /&gt;
&lt;br /&gt;
The new SPAtom KLATTSYN can be used to generate synthesised speech.&lt;br /&gt;
&lt;br /&gt;
EVAL command&lt;br /&gt;
&lt;br /&gt;
The EVAL command has the following new subcommands:&amp;lt;br /&amp;gt; formants - a new formant tracking algorithm.&amp;lt;br /&amp;gt; limit, limitlow, limithigh - limits values to within a range of values.&amp;lt;br /&amp;gt; min, max - can receive more than one parameter.&amp;lt;br /&amp;gt; cdot, ctrn, conj - complex dot product, matrix transposition and conjugation.&amp;lt;br /&amp;gt; f0ac - F0 detection using autocorrelation.&amp;lt;br /&amp;gt; The EVAL command now supports numerical (e.g. &amp;amp;gt;=), logical (e.g. &amp;amp;amp;&amp;amp;amp;) and ternary (e.g. eval $#a &amp;amp;gt; $#b ? $#a : $#b).&lt;br /&gt;
&lt;br /&gt;
The Macro Library&lt;br /&gt;
&lt;br /&gt;
The DATASETCMD has a new subcommand AUTOSAVE with which you can turn the DataSet autosave feature on and off.&lt;br /&gt;
&lt;br /&gt;
The GRAPHSETUP macro.&lt;br /&gt;
&lt;br /&gt;
The new CGRAPHSETUP command GRAPHLEGEND displays an amplitude legend in a spectrogram plot.&lt;br /&gt;
&lt;br /&gt;
The new CGRAPHSETUP command GETCOLORPALETTE retrieves the print or screen palette in an extended table.&lt;br /&gt;
&lt;br /&gt;
The new CGRAPHSETUP command GETPROFILELIST returns a simple table with a list of color profiles defined in the settings file (S_TOOLS-STx INI).&lt;br /&gt;
&lt;br /&gt;
===== Classes =====&lt;br /&gt;
&lt;br /&gt;
BXMLDoc class&lt;br /&gt;
&lt;br /&gt;
The SETELEMENT function can now take a table containing attribute/value pairs.&lt;br /&gt;
&lt;br /&gt;
CMenu class&lt;br /&gt;
&lt;br /&gt;
The new CMenu function AddToolBoxMenu adds the standard toolbox menu items to the menu.&lt;br /&gt;
&lt;br /&gt;
XPlot class&lt;br /&gt;
&lt;br /&gt;
When constructing an XPlot instance, an owner window may now be specified.&lt;br /&gt;
&lt;br /&gt;
===== Shell Items =====&lt;br /&gt;
&lt;br /&gt;
Dialog Item&lt;br /&gt;
&lt;br /&gt;
The dialog edit control has a new option &#039;&amp;lt;span class=&amp;quot;stxmacrocommandoption-character&amp;quot;&amp;gt;/F&amp;lt;/span&amp;gt;&#039; which forwards KEY messages to the shell.&lt;br /&gt;
&lt;br /&gt;
There are now four &#039;types&#039; of edit control and a host of new parameters, which means it can display syntax highlighting, be used as a command line interface, etc.&lt;br /&gt;
&lt;br /&gt;
A listview&#039;s cells can now be editable. The option &amp;lt;span class=&amp;quot;stxmacrocommandoption-character&amp;quot;&amp;gt;/E&amp;lt;/span&amp;gt; which must be set for a ListView to be editable. The message CELLEDITED is sent if it is editable and its contents has been changed. If the user cancels editing, the message CELLCANCELLED is sent to the shell. If editing is ended because the user presses &amp;lt;span class=&amp;quot;stxhotkey&amp;quot;&amp;gt;TAB&amp;lt;/span&amp;gt; or &amp;lt;span class=&amp;quot;stxhotkey&amp;quot;&amp;gt;Shift TAB&amp;lt;/span&amp;gt;, the CELLEDITEDTAB or CELLEDITEDBACKTAB messages are sent. You can set the focus to a specific cell and enter editing mode using the new command SET dialogItem listviewIndex STARTEDIT.&lt;br /&gt;
&lt;br /&gt;
The listview now supports the &amp;lt;span class=&amp;quot;stxmacrocommandoption-character&amp;quot;&amp;gt;/F&amp;lt;/span&amp;gt; flag which forwards specific key types to the shell.&lt;br /&gt;
&lt;br /&gt;
The listview supports a new option /R=n, which determines the maximum number of lines of text which can be displayed in the listview.&lt;br /&gt;
&lt;br /&gt;
The new attribute !FOREGROUND returns 1 if the dialog window is in the foreground, 0 if it is not and -1 if the command fails in some way.&lt;br /&gt;
&lt;br /&gt;
The new dialog attribute !EDITING can be used to ascertain if a listview is currently being edited or not.&lt;br /&gt;
&lt;br /&gt;
File Item&lt;br /&gt;
&lt;br /&gt;
The NEW FILE command can now take the option &amp;lt;span class=&amp;quot;stxmacrocommandoption-character&amp;quot;&amp;gt;/S&amp;lt;/span&amp;gt;, to suppress error messages on creation failure.&lt;br /&gt;
&lt;br /&gt;
The new file item command COPY &amp;lt;span class=&amp;quot;stxmacrocommandoption-character&amp;quot;&amp;gt;/Z&amp;lt;/span&amp;gt; can be used to encrypt/decrypt a file, including optional password protection.&lt;br /&gt;
&lt;br /&gt;
The new command TRYLOCK will try to get a lock on the file but will not block the script.&lt;br /&gt;
&lt;br /&gt;
The !CHANGED attribute can now be explicitly set or reset. This functionality is new, in as much as versions previous to 3.9.0 could only reset the attribute. The meaning of assigning &#039;1&#039; to the attribute has changed, since assigning &#039;1&#039; now *sets* the attribute, whilst assigning &#039;0&#039; resets the attribute.&lt;br /&gt;
&lt;br /&gt;
A new file item type - the GDX file item - has been developed, which can be used to create files containing graphic data which are passed directly to a graph item. GDX stands for &amp;quot;graphical data exchange&amp;quot;. Currently, the spectrogram is the only plot which supports the GDX file type.&lt;br /&gt;
&lt;br /&gt;
Graph Item&lt;br /&gt;
&lt;br /&gt;
The command ADDMARKER can now be used to add a &#039;Box and Whiskers&#039; metasegment.&lt;br /&gt;
&lt;br /&gt;
The metasegment font can be specified on an individual basis using the ADDMARKER command.&lt;br /&gt;
&lt;br /&gt;
A metasegment may be told not to change color on selection. This is only available using the &amp;quot;SET graph ADDMARKER table&amp;quot; command with the parameter &amp;quot;invertSelected&amp;quot; set to &amp;quot;true&amp;quot; if the metasegment color should be inverted whilst selected or &amp;quot;false&amp;quot; if not. The default is &amp;quot;true&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
The key used to make a metasegment moveable can now be set using a &#039;modifyKeys&#039; entry in the ADDMARKER table parameter.&lt;br /&gt;
&lt;br /&gt;
A simple marker can now be displayed as a single vertical line (option &amp;lt;span class=&amp;quot;stxmacrocommandoption-character&amp;quot;&amp;gt;/M&amp;lt;/span&amp;gt;).&lt;br /&gt;
&lt;br /&gt;
The command OVERVIEW, which toggles between the &#039;view&#039; and &#039;overview&#039; modes, has been documented.&lt;br /&gt;
&lt;br /&gt;
The graph supports a new attribute !CURSORMODE which returns the currently visible cursors, as set using the last CURSORMODE command.&lt;br /&gt;
&lt;br /&gt;
The width of a graph&#039;s border can now be set using new AXIS command parameters. The default border width is 1 pixel.&lt;br /&gt;
&lt;br /&gt;
The spectrogram palette can be changed at any time using the &amp;quot;SET graph Y * * SPECTROGRAM&amp;quot; function.&lt;br /&gt;
&lt;br /&gt;
The DATASETLOADED message is now sent when a graph finishes loading data for a particular input.&lt;br /&gt;
&lt;br /&gt;
Instance Item&lt;br /&gt;
&lt;br /&gt;
The new command TRYLOCK will try to get a lock on the instance but will not block the script.&lt;br /&gt;
&lt;br /&gt;
Table Item&lt;br /&gt;
&lt;br /&gt;
A table item connected to a ListView must be configured to be editable using the CONFIG command or the !EDITABLE attribute. The CONFIG command has also been extended to allow for a restrictive set of values to be specified for a table field. If specified, the ListView will display a combobox in this column for each entry. All parameters set using the CONFIG command can now be queried via table field attributes.&lt;br /&gt;
&lt;br /&gt;
The new command TRYLOCK will try to get a lock on the table but will not block the script.&lt;br /&gt;
&lt;br /&gt;
The command NEW TABLE supports a silent error flag.&lt;br /&gt;
&lt;br /&gt;
A table field can now display multirow entries, if the !MULTIROW attribute is set to 1, or the CONFIG command multirow parameter is set to ON.&lt;br /&gt;
&lt;br /&gt;
The last user input for a particular column can now be used as the default for that column using the CONFIG command&#039;s setuserdefault parameter.&lt;br /&gt;
&lt;br /&gt;
The DEFINE command can now be used to rename an existing field.&lt;br /&gt;
&lt;br /&gt;
Wave Item&lt;br /&gt;
&lt;br /&gt;
The wave item now supports the new attribute !PLAYSRATE which can be used to return the sampling rate currently used to for playback or set a new sampling rate for playback.&lt;br /&gt;
&lt;br /&gt;
=== Changes ===&lt;br /&gt;
&lt;br /&gt;
Changes in S_TOOLS-STx &amp;amp;lt;CURRENT_VERSION&amp;amp;gt;:&lt;br /&gt;
&lt;br /&gt;
Graphical User Interface&lt;br /&gt;
&lt;br /&gt;
F0 Test, F0Lookup, Amplitude Spectrum Statistics&lt;br /&gt;
&lt;br /&gt;
The F0 Test, F0 Lookup and Amplitude Spectrum Statistics functions in the Spectrogram &amp;amp;amp; Parameters Viewer sectioner have been moved to the toolbox file SpectrumTB.sts.&lt;br /&gt;
&lt;br /&gt;
Macro Language&lt;br /&gt;
&lt;br /&gt;
UNLOAD command&lt;br /&gt;
&lt;br /&gt;
The command UNLOAD MACROCODE, UNLOAD SPUCODE and UNLOAD SOURCECODE take one parameter - the name of a sourcecode file (relative or absolute). The MACROCODE variant used to take a blank separated list of macro names and the SPUCODE version used to take a blank separated list of SPU names.&lt;br /&gt;
&lt;br /&gt;
Display and Dialog DROPFILE message&lt;br /&gt;
&lt;br /&gt;
The DROPFILE message sent to displays and dialogs when files are dropped onto them has been changed. The &amp;lt;span class=&amp;quot;stxmacrocommandparameter-character&amp;quot;&amp;gt;filePath&amp;lt;/span&amp;gt; parameter is not longer a string, but rather the id of a simple table with one absolute path per entry.&lt;br /&gt;
&lt;br /&gt;
Syntax&lt;br /&gt;
&lt;br /&gt;
The string &amp;quot;123 456&amp;quot; is no longer a valid number.&lt;br /&gt;
&lt;br /&gt;
=== Bug Fixes ===&lt;br /&gt;
&lt;br /&gt;
Bug fixes&lt;br /&gt;
&lt;br /&gt;
The waterfall graph now prints correctly.&lt;br /&gt;
&lt;br /&gt;
The BDataSet member function AddASet now selects the new audio set if adding the set succeeds (r5534).&lt;br /&gt;
&lt;br /&gt;
Shell commands using the return value RC now assign the value even if return code equals 0 (indicating success) (r5609).&lt;br /&gt;
&lt;br /&gt;
Spectrogram &amp;amp;amp; Parameters Viewer Sectioner copy to clipboard working again (r5625).&lt;br /&gt;
&lt;br /&gt;
The &#039;view&#039; graph mode now displays correctly when first drawn (r5643).&lt;br /&gt;
&lt;br /&gt;
The asterisk character * is now officially an invalid hotkey, rather than being one which doesn&#039;t work correctly (r5500).&lt;br /&gt;
&lt;br /&gt;
Loading an XML file which an unsupported character encoding now fails rather than asserting (r5614).&lt;br /&gt;
&lt;br /&gt;
The Spectrum viewer can now saving CEPST parameters (r6470).&lt;br /&gt;
&lt;br /&gt;
The color &#039;GRAY&#039; is now defined as the RGB value 96:96:96, which fixes the bug where cursors were invisible on a &#039;GRAY&#039; background (r6148).&lt;br /&gt;
&lt;br /&gt;
The &amp;quot;SET graph XSCALE&amp;quot; flag &amp;quot;/I&amp;quot; is now working (r6187).&lt;br /&gt;
&lt;br /&gt;
Using the correct normal/dual/tight phase vocoder pv filters (r5874).&lt;br /&gt;
&lt;br /&gt;
All valid number formats (including mmmE /-eee) can now be used in time-expressions (r5746).&lt;br /&gt;
&lt;br /&gt;
=== Corrections ===&lt;br /&gt;
&lt;br /&gt;
S_TOOLS-STx Version: 3.9&lt;br /&gt;
&lt;br /&gt;
A list of documentation corrections since the last release (3.7).&lt;br /&gt;
&lt;br /&gt;
The macro COBJ has been superseded by the COBJ class and no longer exists.&lt;br /&gt;
&lt;br /&gt;
The command SYSTEM MKDIR and SYSTEM RMDIR were undocumented.&lt;br /&gt;
&lt;br /&gt;
The SPAtom ASEG1 parameters are now in the correct order (&amp;lt;span class=&amp;quot;stxmacrocommandparameter-character&amp;quot;&amp;gt;TABS&amp;lt;/span&amp;gt; and &amp;lt;span class=&amp;quot;stxmacrocommandparameter-character&amp;quot;&amp;gt;TABM&amp;lt;/span&amp;gt; were swapped).&lt;br /&gt;
&lt;br /&gt;
The SPAtom VSPLIT was mistakenly documented as VSPLIT1.&lt;br /&gt;
&lt;br /&gt;
The macro DEBUGTB no longer exists.&lt;br /&gt;
&lt;br /&gt;
The descriptions of the different formulas used by the SPAtom MORLET have been corrected.&lt;br /&gt;
&lt;br /&gt;
The section FILE item command LOAD parameters were not documented as mandatory.&lt;br /&gt;
&lt;br /&gt;
Added description of shell variables SCRIPTFILEPATH, SCRIPTDIRECTORY AND SCRIPTMAINNAME.&lt;br /&gt;
&lt;br /&gt;
The AWEIGHT SPAtom has now been documented.&lt;br /&gt;
&lt;br /&gt;
The WAVEOUT SPAtom has now been documented.&lt;br /&gt;
&lt;br /&gt;
A list of documentation corrections since the last release (3.6.2).&lt;br /&gt;
&lt;br /&gt;
The BUTIL FILEDIALOG no longer has a &amp;lt;span class=&amp;quot;stxmacrocommandparameter-character&amp;quot;&amp;gt;path&amp;lt;/span&amp;gt; parameter.&lt;br /&gt;
&lt;br /&gt;
A list of documentation corrections since the last release (3.6.1).&lt;br /&gt;
&lt;br /&gt;
The SET table FIND &amp;lt;span class=&amp;quot;stxmacrocommandparameter-character&amp;quot;&amp;gt;cexpr&amp;lt;/span&amp;gt; format uses colons, not commas as delimiters.&lt;br /&gt;
&lt;br /&gt;
The SET value OUTPUT commands can take &amp;lt;span class=&amp;quot;stxmacrocommandoption-character&amp;quot;&amp;gt;/Double&amp;lt;/span&amp;gt; options.&lt;br /&gt;
&lt;br /&gt;
The description of the parameters for the NEW TABLE command where field definitions are possible has been corrected.&lt;br /&gt;
&lt;br /&gt;
The SET graph CURSORMODE command now describes the bound and locked parameters correctly.&lt;br /&gt;
&lt;br /&gt;
The VAR arithmetic operators DIV, MUL and SUB are actually called DIVIDE, MULTIPLY and SUBTRACT&lt;br /&gt;
&lt;br /&gt;
The SET graph ZSCALE command parameters were incorrect.&lt;br /&gt;
&lt;br /&gt;
=== Known Bugs ===&lt;br /&gt;
&lt;br /&gt;
S_TOOLS-STx Version: 3.9&lt;br /&gt;
&lt;br /&gt;
These bugs were known to exist at the time of the release and are proving difficult, if not impossible to fix.&lt;br /&gt;
&lt;br /&gt;
Interface&lt;br /&gt;
&lt;br /&gt;
Sometimes 44KB soundfiles are created, which are invalid. This bug has not proved easy to replicate, so if you can replicate it, please contact us ( \n  This e-mail address is being protected from spam bots, you need JavaScript enabled to view it  ).&lt;br /&gt;
&lt;br /&gt;
Can&#039;t delete an entry in the DataSet if it has no ID. It is highly unlikely that you will ever have a DataSet entry with no ID. If this is the case however, you must currently delete it by hand (Close S_TOOLS-STx, open the DataSet in a text editor and either give the offending entry an ID, or remove it). Should you be able to reproduce any action which creates an entry without an ID, please contact us ( \n  This e-mail address is being protected from spam bots, you need JavaScript enabled to view it  ).&lt;br /&gt;
&lt;br /&gt;
Spectrogram &amp;amp;amp; Parameters Viewer&lt;br /&gt;
&lt;br /&gt;
Interpolation of very short signals is incorrect (Deutsch - 2004-11-10 - since 1.0).&lt;br /&gt;
&lt;br /&gt;
Graphics&lt;br /&gt;
&lt;br /&gt;
Copying a display graphic to the clipboard and pasting into a graphics program does not always achieve the desired results. This bug will not be fixed in the foreseeable future. Some graphics programs paste it properly (IrfanView, Microsoft Word), others don&#039;t (PaintShop Pro) - (Jonnie White - 2004-07-14).&lt;br /&gt;
&lt;br /&gt;
Selected cursors is not visible if background is set to GRAY (White - 2004-07-12 - since 1.0).&lt;br /&gt;
&lt;br /&gt;
Macro&lt;br /&gt;
&lt;br /&gt;
The dialog control listbox does not handle displaying huge strings properly. This seems to be a problem with the underlying CListBox control (Becker/White - 2004-12 - since 1.0).&lt;br /&gt;
&lt;br /&gt;
The DCOM command INVOKEMETHOD Evaluate always returns an error when communicating with the R DCOM server even if the command was actually successful (Deutsch/White - 2004 - since 3.6.0).&lt;br /&gt;
&lt;br /&gt;
==3.8==&lt;br /&gt;
&lt;br /&gt;
3.8.3&lt;br /&gt;
&lt;br /&gt;
* BUGFIX: zoom in in viewer3 now working when zooming around active cursor&lt;br /&gt;
* BUGFIX: spectragram title display corrected (amin/amax)&lt;br /&gt;
* BUGFIX: CDLGMAP now deletes window only if it has created the window during construction&lt;br /&gt;
&lt;br /&gt;
3.8.2&lt;br /&gt;
&lt;br /&gt;
* BUGFIX: dataset path now displayed, even if it has spaces in it.&lt;br /&gt;
* BUGFIX: Parameter plot explicitly redrawn when new data is sent. This fixes the bug (reported by Julia Brandstaetter) where Set Zero and Undo were not working properly in Spectrogram and Parameter plot.&lt;br /&gt;
&lt;br /&gt;
3.8.1&lt;br /&gt;
&lt;br /&gt;
* BUGFIX: Warn user that more waveform samples are being sent than expected and refrain from crashing.&lt;br /&gt;
* BUGFIX: CDlgMap now always uses the next free dialog index for a new entry. This means that multiple maps can reference the same dialog and still work. The functions fci and nc were removed since they are never used. Display now using second event to synchronise creation and variable initialisation. This fixes the mysterious bug where the window class was only sometimes used.&lt;br /&gt;
* BUGFIX: If the polyline function is called with less than two points it no longer asserts, but rather ends gracefully.&lt;br /&gt;
* BUGFIX: send keys not processed by dialog on to graph hotkey handlers&lt;br /&gt;
* BUGFIX: spectrogram is now being initialised with the correct context menu when formants are displayed in it.&lt;br /&gt;
* BUGFIX: giving dialog focus if there are no graphs&lt;br /&gt;
* BUGFIX: buttons in dialogs in a graph no longer process normal mneumonics. This means that the graph can process them (for Moosmueller). Buttons can still be activated with return and the space bar and tabbed/arrowed to.&lt;br /&gt;
* BUGFIX: preventing race conditions in Attach/Detach. This removes one possible cause of autosave crashing. It does not guarantee, though, there to be no other reasons for autosave to crash.&lt;br /&gt;
&lt;br /&gt;
=Downloads=&lt;br /&gt;
The {{STX}} downloads are available here: https://www.kfs.oeaw.ac.at/pub/stx&lt;/div&gt;</summary>
		<author><name>Jw</name></author>
	</entry>
	<entry>
		<id>https://mediawiki.kfs.oeaw.ac.at/stx/docs/wiki/index.php?title=Programmer_Guide/STx_Guru&amp;diff=10655</id>
		<title>Programmer Guide/STx Guru</title>
		<link rel="alternate" type="text/html" href="https://mediawiki.kfs.oeaw.ac.at/stx/docs/wiki/index.php?title=Programmer_Guide/STx_Guru&amp;diff=10655"/>
		<updated>2019-10-01T08:43:49Z</updated>

		<summary type="html">&lt;p&gt;Jw: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{DISPLAYTITLE:Becoming an {{STx}} Guru}}&lt;br /&gt;
The following text is based on an {{STX}} workshop of 2005, which took place in the [http://www.kfs.oeaw.ac.at Acoustics Research Institute (ARI)], and which was described as &amp;quot;our weekly time-wasting meeting&amp;quot; in a colleague&#039;s blog. It explains the internal structure and the features of the {{STX}} 3.7 release, and has been carefully adapted to the current {{Stx}} version (4.0) in 2014.&lt;br /&gt;
&lt;br /&gt;
__TOC__&lt;br /&gt;
&lt;br /&gt;
==Whom this is for==&lt;br /&gt;
&lt;br /&gt;
This manual is a general introduction to the programming language that is part of the {{Stx}} environment. Reading this manual will allow you to implement procedural functions and then to proceed to object-oriented classes for a wide range of tasks, with a natural focus on numerical applications, sound processing, and visualization. As a reader of this manual, you should be slightly familiar with programming in general, and it would be great if you were an avid user of {{STx}} (on the other hand, being faintly familiar with starting up {{STX}}, loading sound files, and maybe even starting the spectrogram function should suffice).&lt;br /&gt;
&lt;br /&gt;
This manual is intended for reading from start to end (not necessarily without interruptions). It is not a reference manual (there is such a thing, too: the [[Programmer_Guide/Quick_Reference|{{STx}} Quick Reference]]), meaning that it will abstract from, you might even bluntly say: omit, many a detail in order not to depress the reader with a seemingly abundant amount of material. Instead, a careful selection has been taken on what is, and what is not, necessary for achieving common goals. Of course this selectivity (or, if you prefer, these omissions) try hard not to give any false impressions of what can, and what can&#039;t, be done with {{Stx}} (and how). We are well aware that writing such an introductory programmer&#039;s (or, as we hope, programmers&#039;) manual is a slippery slope, and we hope for the reader&#039;s (or, as we hope, the readers&#039;) pardon if the depth covering each topic is too shallow, or to deep, or both (we are not quite sure whether the latter is logically possible, but one never knows). We appreciate any comments or criticism, both on this manual and on {{STx}}.&lt;br /&gt;
&lt;br /&gt;
If you want to dig deeper into any specific topic, or if you are looking for information on a specific issue, we recommend having a look either at the online help of {{STX}} (just start {{Stx}} and select the &amp;quot;Help&amp;quot; menu, or press the &amp;quot;F1&amp;quot; key), or, even better, at the [[Programmer_Guide|{{STx}} Programmer Guide]]. Both are a vast and ever-growing collection of deep, sometimes even exhausting wisdom. They are, in fact, the official reference manual.&lt;br /&gt;
&lt;br /&gt;
When new to {{STX}} programming, we recommend first reading this manual (you might skip paragraphs you find particularly uninteresting), probably trying out all the examples by yourself, preferably even modifying and improving them. Afterwards, you will have a basis firm enough for using the [[Programmer_Guide|{{Stx}} Programmer Guide]], or even the [[Programmer_Guide/Quick_Reference|{{STx}} Quick Reference]], as a reference manual. And you will surely have a sound basis for solving all your future programming tasks with {{STx}}, disposing of the need for any other programming languages or environments.&lt;br /&gt;
&lt;br /&gt;
== How to write an {{STX}} Script: The Easy Part ==&lt;br /&gt;
&lt;br /&gt;
This chapter deals with quite a basic fact, answering the first question that may come to your mind: &#039;&#039;How&#039;&#039; can I create and edit a script, and &#039;&#039;what&#039;&#039; need I do to submit it to {{Stx}} for execution?&lt;br /&gt;
&lt;br /&gt;
Well, the first part is easy: Just use a text editor of your choosing. Since Windows does not come equipped with the editor of your choosing, you should probably get it from [http://www.vim.org/download.php www.vim.org], unless, of course, you already did so.&lt;br /&gt;
&lt;br /&gt;
There is a faint convention to use the filename extension &amp;quot;.STS&amp;quot; for {{STx}} scripts, but everything else will really work equally well. So: just start editing. In its simplest case, your script will contain only one macro. The start of the macro is indicated by macro header, and it should end with an &amp;lt;code&amp;gt;EXIT&amp;lt;/code&amp;gt; statement:&lt;br /&gt;
&lt;br /&gt;
 [macro TowersOfHanoi]&lt;br /&gt;
    [[Programmer_Guide/Macro_Library/StdLib#UM_and_EM|um]] &#039;Rapid prototyping of the towers of Hanoi problem. Program logic not yet present.&#039;&lt;br /&gt;
    exit&lt;br /&gt;
&lt;br /&gt;
There is, of course, [[Programmer_Guide/Source_code|a more formal definition of what an {{Stx}} script is built up from]], but at this stage you should probably not bother with all these other thingies.&lt;br /&gt;
&lt;br /&gt;
After crafting your {{STX}} script, you still have {{Stx}} to notice its presence, and to execute it. The simplest way for working on a script is pushing the large button labelled &amp;quot;Script file&amp;quot; (on the top of the main {{STx}} window, labelled (and called) &amp;quot;Workspace&amp;quot;. After pressing this button, a file dialog titled &amp;quot;Select script file&amp;quot; will open, allowing you to, well, select your shiny new script file.&lt;br /&gt;
&lt;br /&gt;
[[File:ws_sc.png]]&lt;br /&gt;
&lt;br /&gt;
To the right of the &amp;quot;Script file&amp;quot; area, there is another area labelled &amp;quot;Macro&amp;quot;. If your script file contains more than one macro function, this drop-down thingy will allow you to select which macro to execute.&lt;br /&gt;
&lt;br /&gt;
There is a third field, labelled &amp;quot;Arguments&amp;quot;, where you can supply arguments for your macro. And there are two awesome checkboxes labelled &amp;quot;Debug&amp;quot; and &amp;quot;Console&amp;quot;, respectively. When checking &amp;quot;Debug&amp;quot;, {{STX}} will start your amazing macro program in the [[User_Guide/Debugger|gorgeous {{Stx}} macro debugger]]. When checking &amp;quot;Console&amp;quot;, your macro will run in the interactive {{STx}} console (an interactive version of the {{STX}} command interpreter). When checking both, either may happen, or both.&lt;br /&gt;
&lt;br /&gt;
The awesome buttons, fields and checkboxes mentioned here build up what we call the gorgeous Script Controller. You will not find much more information in [[User_Guide/Workspace/Script_Controller|Script Controller]].&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;Note&#039;&#039;: If you do not see any of the fields mentioned here (bluntly put: if you do not see the Script Controller at all), it is likely that it is not there. In this case, try using the Workspace menu item &amp;quot;Scripts &amp;gt; Show Scripts&amp;quot; to unhide it.&lt;br /&gt;
&lt;br /&gt;
==Constants==&lt;br /&gt;
&lt;br /&gt;
Our {{Stx}} does not strictly discern between string constants and numerical constants. Normally each constant is considered a string, there only being exceptions dependent on the context where the constant occurs. If, for example, a constant occurs as part of a numerical expression, {{STx}} tries to get its numerical value.&lt;br /&gt;
&lt;br /&gt;
Generally, you may, but you need not, put single quotes around constants. With a few exceptions depending on context, this will not change the way {{STX}} handles the constant. So each of the following strings is a valid {{Stx}} constant:&lt;br /&gt;
&lt;br /&gt;
 string1&lt;br /&gt;
 &#039;string1&#039;&lt;br /&gt;
 -12.34&lt;br /&gt;
 &#039;-12.34&#039;&lt;br /&gt;
&lt;br /&gt;
Regardless of the presence or absence of single quotes, both the first and the second argument will be considered string constants. Also regardless of the presence or absence of single quotes, both the third and the fourth constant will be considered numerical constants when occurring in a numerical context, or string constants when occurring in a string context.&lt;br /&gt;
&lt;br /&gt;
If a string constant contains whitespace characters, it depends on the context whether {{STX}} considers it &#039;&#039;one&#039;&#039; string constant or &#039;&#039;more than one&#039;&#039; string constant. If you want to make sure that a string constant is considered one constant, you should always put single quotes around the whole affair:&lt;br /&gt;
&lt;br /&gt;
 &#039;Hello World&#039;&lt;br /&gt;
 Hello World&lt;br /&gt;
&lt;br /&gt;
While the first string is always considered one string constant, the second one may, depending on where it is occurring, be considered one string constant denoting the string &amp;quot;Hello World&amp;quot;, or two string constants, denoting the strings &amp;quot;Hello&amp;quot; and &amp;quot;World&amp;quot;, respectively.&lt;br /&gt;
&lt;br /&gt;
These issues will be dealt with in more detail below. For the moment, the curious reader may have a look at the following assignment statements:&lt;br /&gt;
&lt;br /&gt;
 #a := [[Programmer_Guide/Command_Reference/NUM|num]] &#039;5&#039; * &#039;3&#039; // value of #a will be 15&lt;br /&gt;
 #b := [[Programmer_Guide/Command_Reference/SET|set]] 5 * 3 // value of #a will be &amp;quot;5 * 3&amp;quot;&lt;br /&gt;
&lt;br /&gt;
The first statement is a numerical assignment (denoted by the keyword &amp;quot;&amp;lt;code&amp;gt;[[Programmer_Guide/Command_Reference/NUM|num]]&amp;lt;/code&amp;gt;&amp;quot;). Both constants, 5 and 3, will be considered numerical constants, even if surrounded by quote characters. On the other hand, the second statement is a string assignment (denoted by the keyword &amp;quot;&amp;lt;code&amp;gt;[[Programmer_Guide/Command_Reference/SET|set]]&amp;lt;/code&amp;gt;&amp;quot;). So the argument will, logically, be interpreted as one string constant, &amp;quot;5 * 3&amp;quot;, even though it contains whitespace and lacks any quote character. What happens physically is that all separate words will be concatenated to the one string constant expected, inserting exactly one blank between each pair of words. The following statements show the consequences of this procedure:&lt;br /&gt;
&lt;br /&gt;
 #b := [[Programmer_Guide/Command_Reference/SET|set]] 5 * 3 // value of #b will be &amp;quot;5 * 3&amp;quot;&lt;br /&gt;
 #b := [[Programmer_Guide/Command_Reference/SET|set]] 5        *      3 // value of #b will be &amp;quot;5 * 3&amp;quot;, too&lt;br /&gt;
 #b := [[Programmer_Guide/Command_Reference/SET|set]] &#039;5 * 3&#039; // value of #b will also be &amp;quot;5 * 3&amp;quot;&lt;br /&gt;
&lt;br /&gt;
In the second statement, though the words &amp;quot;5&amp;quot;, &amp;quot;*&amp;quot;, and &amp;quot;3&amp;quot; are separated by more than one whitespace character, the one string that will be built up from them is &amp;quot;5 * 3&amp;quot; – when concatenating them, they get separated by exactly one space character.&lt;br /&gt;
&lt;br /&gt;
You may influence the way concatenation works by quoting some, or all, of the words to concatenate. Quoting a word will prevent {{STx}} from automatically inserting a blank before and after that word. So, compare the above statements with the statements below:&lt;br /&gt;
&lt;br /&gt;
 #b := [[Programmer_Guide/Command_Reference/SET|set]] 5 &#039;*&#039; 3 // #b is &amp;quot;5*3&amp;quot; (no space)&lt;br /&gt;
 #b := [[Programmer_Guide/Command_Reference/SET|set]] &#039;5&#039; * 3 // #b is &amp;quot;5* 3&amp;quot; (one space)&lt;br /&gt;
 #b := [[Programmer_Guide/Command_Reference/SET|set]] 5 &#039; * &#039; 3 // #b is &amp;quot;5 * 3&amp;quot; (three spaces)&lt;br /&gt;
&lt;br /&gt;
With the first statement, the word in the middle, &amp;quot;*&amp;quot;, is quoted. This indicates {{STX}} on concatenation not to insert a space character either before or after this word, resulting in &amp;lt;var&amp;gt;#b&amp;lt;/var&amp;gt; being set to &amp;quot;5*3&amp;quot; (no intervening whitespace).&lt;br /&gt;
&lt;br /&gt;
With the second statement, the first word is quoted and will, hence, be concatenated to its right successor (there is no left predecessor) without inserting space. The second and the third word are not quoted and will be concatenated with an additional space in between them. This results in &amp;lt;var&amp;gt;#b&amp;lt;/var&amp;gt; being assigned &amp;quot;5* 3&amp;quot; (no whitespace between &amp;quot;5&amp;quot; and &amp;quot;*&amp;quot;, one blank between &amp;quot;*&amp;quot; and &amp;quot;3&amp;quot;).&lt;br /&gt;
&lt;br /&gt;
With the third statement, concatenation will not add any additional blanks either before or after the word in the middle. The whitespace that is part of the word, i.e. part of the quotation (three blanks before and after the asterisk, each), will be unaltered, though. So what results it &amp;lt;var&amp;gt;#b&amp;lt;/var&amp;gt; being assigned the string &amp;quot;5 * 3&amp;quot; (exactly three blanks both before and after the asterisk).&lt;br /&gt;
&lt;br /&gt;
Within a constant, you may alter the meaning of special characters by using the {{Stx}} escape character &amp;quot;`&amp;quot;, the backwards single quote, sometimes called back-tick. At the current stage, we can only use this feature for defining a string constant that contains single quote characters themselves:&lt;br /&gt;
&lt;br /&gt;
 #a := set &#039;Rome is a city but `&#039;Rome`&#039; is a four-letter word&#039;&lt;br /&gt;
 #a := set Rome is a city but `&#039;Rome`&#039; is a four-letter word&lt;br /&gt;
&lt;br /&gt;
Both statements will assign the string &amp;quot;Rome is a city but &#039;Rome&#039; is a four-letter word&amp;quot; to a variable called &amp;lt;var&amp;gt;#a&amp;lt;/var&amp;gt; (although it may not always be easy later to retrieve the value of this variable). We have to leave these issues open for later discussion.&lt;br /&gt;
&lt;br /&gt;
==Variables==&lt;br /&gt;
&lt;br /&gt;
The names of {{STx}} variables start with an optional one-character prefix indicating the scope of this variable (the lack of such a prefix indicating shell-global scope, see below). Besides this prefix, they may consist of letters and digits, although their first actual character must be a letter. Names are not case-sensitive, meaning that e.g. „freq&amp;quot;, „Freq&amp;quot;, and „FREQ&amp;quot;, are names of the same variable.&lt;br /&gt;
&lt;br /&gt;
Our {{STX}} discerns four kinds of scope and, hence, four kinds of variables:&lt;br /&gt;
&lt;br /&gt;
{|&lt;br /&gt;
|-&lt;br /&gt;
|Scope&lt;br /&gt;
|Prefix&lt;br /&gt;
|Description&lt;br /&gt;
|-&lt;br /&gt;
|Global&lt;br /&gt;
|&amp;lt;code&amp;gt;@&amp;lt;/code&amp;gt;&lt;br /&gt;
|Global variables are known to, and may be changed by, every shell instance, both running or yet to start. Global variables are the only kind of variables guaranteed to be persistent over interactive macro calls during one {{Stx}} run.&lt;br /&gt;
|-&lt;br /&gt;
|Shell&lt;br /&gt;
|no prefix&lt;br /&gt;
|&amp;quot;Shell-global&amp;quot; variables are global to the running shell. This implies that they are known to, any may be changed by, any macro invoked by a normal macro call. The variable will not, though, be known to other running shells or to shells yet to start. So, in general, shell-global variables will not be persistent through interactive calls to a user-defined macro.N.B.: Do not mix up shell-global variables with item handles that will be dealt with in chapter [[Programmer Guide/STx Guru/Shell Items: An Overview|5]] (page 1). For the time being, suffice it to say that item handles look like shell-global variables, but that they reside in different namespaces and that they behave differently.&lt;br /&gt;
|-&lt;br /&gt;
|Local&lt;br /&gt;
|&amp;lt;code&amp;gt;#&amp;lt;/code&amp;gt;&lt;br /&gt;
|Local variables are valid only during the runtime of one invocation of a shell macro. On each invocation of a shell macro, a separate namespace containing all its local variables is being created. This namespace is destroyed as soon as the macro finishes. Note that this implies that on invocating a macro recursively, it will find itself starting with a fresh, empty copy of all its local variables, while the calling instance will find its namespace, i.e. its local variables, untouched.&lt;br /&gt;
|-&lt;br /&gt;
|Member&lt;br /&gt;
|&amp;lt;code&amp;gt;&amp;amp;&amp;lt;/code&amp;gt;&lt;br /&gt;
|When adhering to the object-oriented programming paradigm, you will define classes and instantiate them. Each instance of a class will have its own set of variables called member variables. The introductory chapters will stick to the clean ole&#039; procedural way of programming.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
As a rule of thumb, most of the time you will be using local variables whose names start with &amp;quot;&amp;lt;code&amp;gt;#&amp;lt;/code&amp;gt;&amp;quot;, e.g. variables like &amp;lt;var&amp;gt;#i&amp;lt;/var&amp;gt;, &amp;lt;var&amp;gt;#depth&amp;lt;/var&amp;gt; or &amp;lt;var&amp;gt;#title&amp;lt;/var&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Variables need neither be declared nor to be explicitly initialized. If you want to introduce a variable, just start using it. Note that a variable is empty, i.e. contains the empty string, when being referred to without having been explicitly set to a value different from the void.&lt;br /&gt;
&lt;br /&gt;
===Typing===&lt;br /&gt;
&lt;br /&gt;
There is really not much about typing in {{STx}}. All variables store strings, like it is the case with most scripting languages. Of course these strings are at liberty only to consist of digits, a comma, and an optional sign character, making them look like numbers, smell like numbers, taste like numbers, and being treated like numbers by numerical {{STX}} functions like addition, multiplication, or even the controversial subtraction.&lt;br /&gt;
&lt;br /&gt;
===Setting Variables===&lt;br /&gt;
&lt;br /&gt;
Setting a variable, i.e. assigning a value to the variable, is done with the &amp;quot;&amp;lt;code&amp;gt;:=&amp;lt;/code&amp;gt;&amp;quot; operator. Its general format is&lt;br /&gt;
&lt;br /&gt;
 variable := expression&lt;br /&gt;
&lt;br /&gt;
You should &#039;&#039;never&#039;&#039; use this kind of assignment with {{Stx}}, though. Instead, &#039;&#039;always&#039;&#039; use one of the following assignments:&lt;br /&gt;
&lt;br /&gt;
 variable := [[Programmer_Guide/Command_Reference/SET|SET]] string_expression       // typed string assignment&lt;br /&gt;
 variable := [[Programmer_Guide/Command_Reference/INT|INT]] numerical_expression    // typed integer assignment&lt;br /&gt;
 variable := [[Programmer_Guide/Command_Reference/NUM|NUM]] numerical_expression    // typed numerical assignment&lt;br /&gt;
 variable := [[Programmer_Guide/Command_Reference/EVAL|EVAL]] amazing_expression     // awesome assignment using [[Programmer_Guide/Command_Reference/EVAL|EVAL]]&lt;br /&gt;
&lt;br /&gt;
See the following chapters for the reasons of this recommendation.&lt;br /&gt;
&lt;br /&gt;
====Simple string assignment====&lt;br /&gt;
&lt;br /&gt;
In its simplest form, this &amp;quot;expression&amp;quot; is a simple string constant, just like in the following example:&lt;br /&gt;
&lt;br /&gt;
 #adress := &#039;Reichsratsstrasse 17&#039;     // discouraged, see further below - always use [[Programmer_Guide/Command_Reference/SET|SET]]&lt;br /&gt;
&lt;br /&gt;
Or even:&lt;br /&gt;
&lt;br /&gt;
 #adress := Reichsratsstrasse 17       // discouraged, see further below - always use [[Programmer_Guide/Command_Reference/SET|SET]]&lt;br /&gt;
&lt;br /&gt;
Although generally valid, either usage is strongly discouraged, because it may lead to often surprising, seldom desired results if or when the string to be assigned starts with the name of a built-in function or a user-defined macro (note that words so far not reserved may become reserved words any time now, and that, when in a large software-building project, you never know how your colleagues call their helper macros today).&lt;br /&gt;
&lt;br /&gt;
====Typed string assignment====&lt;br /&gt;
&lt;br /&gt;
You may indicate your expressed desire for the expression to be a string constant by prefixing it with the type-selector statement &amp;quot;&amp;lt;code&amp;gt;[[Programmer_Guide/Command_Reference/SET|set]]&amp;lt;/code&amp;gt;&amp;quot;:&lt;br /&gt;
&lt;br /&gt;
 #address := [[Programmer_Guide/Command_Reference/SET|set]] Reichsratsstrasse 17        // this is better&lt;br /&gt;
&lt;br /&gt;
or, even better:&lt;br /&gt;
&lt;br /&gt;
 #address := [[Programmer_Guide/Command_Reference/SET|set]] &#039;Reichsratsstrasse 17&#039;      // and this is the way to go&lt;br /&gt;
&lt;br /&gt;
In this case, the assignment will even work if one day the {{Stx}} macro language should be added a built-in function &amp;quot;Reichsratsstrasse&amp;quot; (which is, we dare to admit, unlikely) – or if one of your colleagues&#039; macros happens to be likely called.&lt;br /&gt;
&lt;br /&gt;
====Typed numerical assignment====&lt;br /&gt;
&lt;br /&gt;
Although the value assigned is invariably a string, this string may be the result of a numerical computation. You may indicate your desire for it to be so by using one out of the following type-selector statements: &amp;quot;&amp;lt;code&amp;gt;[[Programmer_Guide/Command_Reference/INT|int]]&amp;lt;/code&amp;gt;&amp;quot;, &amp;quot;&amp;lt;code&amp;gt;[[Programmer_Guide/Command_Reference/NUM|num]]&amp;lt;/code&amp;gt;&amp;quot;, and &amp;quot;&amp;lt;code&amp;gt;[[Programmer_Guide/Command_Reference/EVAL|eval]]&amp;lt;/code&amp;gt;&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
The &amp;quot;&amp;lt;code&amp;gt;[[Programmer_Guide/Command_Reference/INT|int]]&amp;lt;/code&amp;gt;&amp;quot; type-selector will cause your expression being evaluated as an integer expression. More precisely (more precisely less wrongly), the expression will be evaluated numerically, and the result will be converted to an integer whose textual representation will be the string to be assigned to the destination variable. The calculation itself will be done with the point floating, though (see the below examples for what that means).&lt;br /&gt;
&lt;br /&gt;
The &amp;quot;&amp;lt;code&amp;gt;[[Programmer_Guide/Command_Reference/NUM|num]]&amp;lt;/code&amp;gt;&amp;quot; type-selector will cause your expression being evaluated as a numerical expression, provided it is such. The textual representation of the numerical result will be the string to assign to the destination variable.&lt;br /&gt;
&lt;br /&gt;
The &amp;quot;&amp;lt;code&amp;gt;[[Programmer_Guide/Command_Reference/EVAL|eval]]&amp;lt;/code&amp;gt;&amp;quot; type-selector is the most powerful of them all. Firstly, it does everything the &amp;quot;&amp;lt;code&amp;gt;[[Programmer_Guide/Command_Reference/NUM|num]]&amp;lt;/code&amp;gt;&amp;quot; type-selector does. So, when evaluating a plain numerical expression, it is your free choice whether to use &amp;quot;&amp;lt;code&amp;gt;[[Programmer_Guide/Command_Reference/NUM|num]]&amp;lt;/code&amp;gt;&amp;quot; or &amp;quot;&amp;lt;code&amp;gt;[[Programmer_Guide/Command_Reference/EVAL|eval]]&amp;lt;/code&amp;gt;&amp;quot; (we might one day choose spontaneously to fade out the &amp;quot;&amp;lt;code&amp;gt;[[Programmer_Guide/Command_Reference/NUM|num]]&amp;lt;/code&amp;gt;&amp;quot; type-selector, but do not allow this to bias your choice). But, secondly: The &amp;quot;&amp;lt;code&amp;gt;[[Programmer_Guide/Command_Reference/EVAL|eval]]&amp;lt;/code&amp;gt;&amp;quot; type-selector is capable of much, much more: It does vector and matrix operations of the most sophisticated kind, calculates averages, converts units, dances the Fourier transform, and so on. The actual number of functions available to &amp;quot;&amp;lt;code&amp;gt;eval&amp;lt;/code&amp;gt;&amp;quot; expressions is more than 70 and counting (see the interactive {{STX}} help topics &amp;quot;[[Programmer_Guide/Command_Reference/EVAL|eval]]&amp;quot;).&lt;br /&gt;
&lt;br /&gt;
For an example, compare the following statements:&lt;br /&gt;
&lt;br /&gt;
 #a := [[Programmer_Guide/Command_Reference/NUM|num]] 3*3.4 // result is 10.19999999999&lt;br /&gt;
 #a := [[Programmer_Guide/Command_Reference/INT|int]] 3*3.4 // result is 10 (!)&lt;br /&gt;
 #a := [[Programmer_Guide/Command_Reference/NUM|num]] 3*int(3.4) // result is 9&lt;br /&gt;
 #a := [[Programmer_Guide/Command_Reference/INT|int]] 3*int(3.4) // result is 9&lt;br /&gt;
 #a := [[Programmer_Guide/Command_Reference/NUM|num]] int(3*3.4) // result is 10 (!)&lt;br /&gt;
 #a := [[Programmer_Guide/Command_Reference/NUM|num]] int(3*int(3.4)) // result is 9&lt;br /&gt;
&lt;br /&gt;
Here the first statement will cause &amp;lt;code&amp;gt;#a&amp;lt;/code&amp;gt; to be assigned the result of the floating point multiplication of 3 and 3.4, i.e. about 10.2. In the second statement, the same multiplication will be calculated, and only the result of this calculation, i.e. 10.2 (roughly...), will get truncated to an integer – this integer in turn being 10. Only the third and the fourth statement (both!) will cause the second factor, 3.4, to be broken down to an integer before multiplication. This usage, though, is strictly not a feature of the type selector-based assignment, but of the numerical function (we will come to these later) &amp;quot;int&amp;quot;. (Note that since the product of two integers is an integer itself, in the third and fourth statement it does not make any difference whether we use the &amp;quot;num&amp;quot; or the &amp;quot;int&amp;quot; type selector.)&lt;br /&gt;
&lt;br /&gt;
Do not mix up the type selector of the assignment with any built-in type-conversion functions: Whereas the type-selector always immediately follows the assignment operator, &amp;quot;&amp;lt;code&amp;gt;:=&amp;lt;/code&amp;gt;&amp;quot;, type-conversion functions never do. Furthermore, the arguments of type-conversion functions are always enclosed in brackets, whereas the type selector never uses brackets.&lt;br /&gt;
&lt;br /&gt;
So in the third to sixth example, the type selectors are &amp;quot;&amp;lt;code&amp;gt;num&amp;lt;/code&amp;gt;&amp;quot;, &amp;quot;&amp;lt;code&amp;gt;int&amp;lt;/code&amp;gt;&amp;quot;, &amp;quot;&amp;lt;code&amp;gt;num&amp;lt;/code&amp;gt;&amp;quot;, and again &amp;quot;&amp;lt;code&amp;gt;num&amp;lt;/code&amp;gt;&amp;quot;, whereas the strings &amp;quot;&amp;lt;code&amp;gt;int(3.4)&amp;lt;/code&amp;gt;&amp;quot;, &amp;quot;&amp;lt;code&amp;gt;int(3*3.4)&amp;lt;/code&amp;gt;&amp;quot;, and &amp;quot;&amp;lt;code&amp;gt;int(3*int(3.4))&amp;lt;/code&amp;gt;&amp;quot; are calls to the built-in type conversion function, &amp;quot;&amp;lt;code&amp;gt;int&amp;lt;/code&amp;gt;&amp;quot;. (If this sounds confusing for the moment, you should not worry: In practice, things are much easier, and it is not normally necessary to think these things over).&lt;br /&gt;
&lt;br /&gt;
====Function calls====&lt;br /&gt;
&lt;br /&gt;
Syntactically, every built-in {{STx}} function, every macro, and every method of a user-defined class may be the source of an assignment. If this happens to be the case, the respective function or macro is executed, and its result is assigned to the destination variable. See it for yourself:&lt;br /&gt;
&lt;br /&gt;
 #i := [[Programmer_Guide/Command_Reference/WORD|word]] 2 one two three four // #i will be &amp;quot;three&amp;quot;&lt;br /&gt;
&lt;br /&gt;
The built-in &amp;quot;&amp;lt;code&amp;gt;[[Programmer_Guide/Command_Reference/WORD|word]]&amp;lt;/code&amp;gt;&amp;quot; function takes an integer index and a list of strings as its arguments. From this list, it selects and returns the string with the respective index. Hence, the expression &amp;quot;&amp;lt;code&amp;gt;word 2 one two three four&amp;lt;/code&amp;gt;&amp;quot; will select, and return, the third word, „three&amp;quot;. When part of an assignment as in the above example, this very string &amp;quot;three&amp;quot; will be assigned to the respective destination variable, in this case: to the local variable &amp;lt;code&amp;gt;#i&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
The same holds true if the source of the assignment is the name of a class method. In this case, the respective method is being called, and its result (which may as well be the empty string) gets assigned to the destination variable.&lt;br /&gt;
&lt;br /&gt;
The issue of function calls will be dealt with in full detail in chapter [[#Calls_to_Macros_and_Built-In_Functions|Calls to {{Stx}} Macros and Built-in Functions]].&lt;br /&gt;
&lt;br /&gt;
===Accessing Variables===&lt;br /&gt;
&lt;br /&gt;
If and when you want to access the value of a variable (bluntly put: to read out its content), you need to put a dollar sign in front of the variable name. What happens internally is that, before actually executing a line from the macro file, {{STX}} replaces all occurrences of variable names that are prefixed by a dollar sign by the content of the respective variables. See for yourself:&lt;br /&gt;
&lt;br /&gt;
 #i := [[Programmer_Guide/Command_Reference/INT|int]] 7&lt;br /&gt;
 [[Programmer_Guide/Command_Reference/WRITELOG|writelog]] &#039;The current value of variable #i is $#i&#039;&lt;br /&gt;
 #i := [[Programmer_Guide/Command_Reference/INT|int]] $#i + 1 // #i will be set to 8&lt;br /&gt;
 #heading := [[Programmer_Guide/Command_Reference/SET|set]] &#039;This is page $#curpage out of $#totpage&#039;&lt;br /&gt;
&lt;br /&gt;
The first line in this example will assign the value 7 to a local variable called &amp;lt;var&amp;gt;#i&amp;lt;/var&amp;gt;. This is nothing new; note that we are using the type-selector &amp;quot;&amp;lt;code&amp;gt;[[Programmer_Guide/Command_Reference/INT|int]]&amp;lt;/code&amp;gt;&amp;quot; to make sure the assigned value is interpreted as an integer, though in this case this is strictly redundant because 7 cannot help being an integer anyway.&lt;br /&gt;
&lt;br /&gt;
The second line will print out the text &amp;quot;The current value of variable #i is 7&amp;quot;. This should not be surprising, for the name of a variable is only replaced by its content if preceded by a dollar sign. Hence, the first occurrence of &amp;quot;#i&amp;quot; – although we know that there is a variable called &amp;lt;var&amp;gt;#i&amp;lt;/var&amp;gt; – does not get replaced by that variable&#039;s value. The second, though, does, because it is preceded by the dollar sign. {{Stx}} is one reliable piece of software, strictly and indiscriminately following the instructions laid out by its master.&lt;br /&gt;
&lt;br /&gt;
What the third line does is increase the value of the local variable &amp;lt;var&amp;gt;#i&amp;lt;/var&amp;gt; by 1. What&#039;s more interesting is how it does so. First, {{STx}} replaces all dollar-prefixed variable names by the contents of the respective variables. Hence, {{STX}} will replace the string &amp;quot;$#i&amp;quot; by the current value of &amp;lt;var&amp;gt;#i&amp;lt;/var&amp;gt; which, in our example, happens to be 7. This replacement will change the current statement from &amp;quot;#&amp;lt;code&amp;gt;i := [[Programmer_Guide/Command_Reference/INT|int]] $#i + 1&amp;lt;/code&amp;gt;&amp;quot; to &amp;quot;&amp;lt;code&amp;gt;#i := [[Programmer_Guide/Command_Reference/INT|int]] 7 + 1&amp;lt;/code&amp;gt;&amp;quot;. Now this is one fine integer expression that in turn gets evaluated to 8, thereby causing 8 to be the string that is finally assigned to the destination variable.&lt;br /&gt;
&lt;br /&gt;
The fourth and last line demonstrates that substitution also works within string constants, and that it does so even if they are put under quotation marks (in our case, apostrophes). Some macro languages, e.g. the well-known UNIX shells, let certain kinds of quotation marks prevent substitution. Users familiar with such shells should bear in mind that {{Stx}} is a kind of its own. (Note that if you really want to suppress the special meaning of a character like the dollar sign, you may precede it with the {{STx}} escape character &amp;quot;&amp;lt;code&amp;gt;`&amp;lt;/code&amp;gt;&amp;quot;, the so-called back-tick.)&lt;br /&gt;
&lt;br /&gt;
The aspiring {{STX}} guru may find it instructive to consider the following example (anyone else will find no harm in completely skipping it):&lt;br /&gt;
&lt;br /&gt;
 #var := [[Programmer_Guide/Command_Reference/SET|set]] &#039;one&#039;&lt;br /&gt;
 [[Programmer_Guide/Command_Reference/WRITELOG|writelog]] &#039;#var now containing &amp;quot;$#var&amp;quot;&#039;&lt;br /&gt;
 &lt;br /&gt;
 #var := [[Programmer_Guide/Command_Reference/SET|set]] &#039;two&#039;&lt;br /&gt;
 [[Programmer_Guide/Command_Reference/WRITELOG|writelog]] &#039;#var now containing &amp;quot;$#var&amp;quot;&#039;&lt;br /&gt;
 &lt;br /&gt;
 $#var := [[Programmer_Guide/Command_Reference/SET|set]] &#039;three&#039; // N.B.: substitution will make this&lt;br /&gt;
                      // &amp;quot;two := set &#039;three&#039;&amp;quot;&lt;br /&gt;
 [[Programmer_Guide/Command_Reference/WRITELOG|writelog]] &#039;#var still containing &amp;quot;$#var&amp;quot;&#039;&lt;br /&gt;
 &lt;br /&gt;
 [[Programmer_Guide/Command_Reference/WRITELOG|writelog]] &#039;...but there suddenly is a variable called two&#039;&lt;br /&gt;
 [[Programmer_Guide/Command_Reference/WRITELOG|writelog]] &#039;...and its value is &amp;quot;$two&amp;quot;&#039;&lt;br /&gt;
&lt;br /&gt;
The first line is well familiar. It assigns the string &amp;quot;one&amp;quot; to a local variable called &amp;quot;&amp;lt;code&amp;gt;#var&amp;lt;/code&amp;gt;&amp;quot;. Consequently, the second line will print exactly the following string:&lt;br /&gt;
&lt;br /&gt;
 #var now containing &amp;quot;one&amp;quot;&lt;br /&gt;
&lt;br /&gt;
The third line changes the value of &amp;lt;code&amp;gt;#var&amp;lt;/code&amp;gt; to &amp;quot;two&amp;quot;, hence the third line will print out the following string:&lt;br /&gt;
&lt;br /&gt;
 #var now containing &amp;quot;two&amp;quot;&lt;br /&gt;
&lt;br /&gt;
No surprises yet. But what will the fourth line do? Well, not to be surprised about the answer to this semi-rhetorical question, we must analyze the statement carefully. It reads &amp;quot;&amp;lt;code&amp;gt;$#var := set &#039;three&#039;&amp;lt;/code&amp;gt;&amp;quot; – did you notice that the assignment target is preceded by a dollar sign? Alas, this instructs {{Stx}} to replace the variable name by its content; but the content of variable &amp;quot;&amp;lt;code&amp;gt;#var&amp;lt;/code&amp;gt;&amp;quot; is &amp;quot;two.&amp;quot; Hence the statement gets, by substitution, altered to &amp;quot;&amp;lt;code&amp;gt;two := set &#039;three&#039;&amp;lt;/code&amp;gt;&amp;quot;. This is a perfectly valid assignment statement, only that the target of the assignment is a shell-global variable called &amp;quot;&amp;lt;code&amp;gt;two&amp;lt;/code&amp;gt;&amp;quot;. So we assign the string &amp;quot;three&amp;quot; to a variable called &amp;quot;&amp;lt;code&amp;gt;two&amp;lt;/code&amp;gt;&amp;quot;. The next statements only illustrate this fact by printing out the respective values.&lt;br /&gt;
&lt;br /&gt;
===Read Functions===&lt;br /&gt;
&lt;br /&gt;
The {{STx}} [[Programmer_Guide/Command_Reference/READ|&amp;lt;code&amp;gt;read&amp;lt;/code&amp;gt; family of functions]] supply a means for parsing the contents of a string or a variable, that is for splitting them into several pieces, and for storing some or all of these pieces into one or more other variables (or even in the same variable). That being said, it should be noticed that everything is much easier than this description implicates. See for yourself:&lt;br /&gt;
&lt;br /&gt;
 [[Programmer_Guide/Command_Reference/READ|readstr]] &#039;one two three four five&#039; #a #b #c /Delete&lt;br /&gt;
 // #a is now &amp;quot;one&amp;quot;, #b is now &amp;quot;two&amp;quot;, #c is &amp;quot;three four five&amp;quot;&lt;br /&gt;
 [[Programmer_Guide/Command_Reference/WRITELOG|writelog]] &#039;now a=&amp;quot;$#a&amp;quot;, b=&amp;quot;$#b&amp;quot;, and c=&amp;quot;$#c&amp;quot;.&#039;&lt;br /&gt;
&lt;br /&gt;
The &amp;lt;code&amp;gt;[[Programmer_Guide/Command_Reference/READ|readstr]]&amp;lt;/code&amp;gt; command parses its first argument into (at most) as many blank-separated strings as there are variables. If the number of variables is higher than the number of available words, the remaining variables will either be cleared (if supplying the &amp;lt;code&amp;gt;/Delete&amp;lt;/code&amp;gt; option), or they will be left untouched (if omitting the &amp;lt;code&amp;gt;/Delete&amp;lt;/code&amp;gt; option). If, on the other hand, the number of variables is lower than the number of available words, the last variable gets all the remaining words. Note that if there is more than one whitespace character between two words, this will not do any harm.&lt;br /&gt;
&lt;br /&gt;
So what the above example does is parse the string &amp;quot;&amp;lt;code&amp;gt;one two three four five&amp;lt;/code&amp;gt;&amp;quot; into three substrings (there are three variables supplied, &amp;lt;var&amp;gt;#a&amp;lt;/var&amp;gt;, &amp;lt;var&amp;gt;#b&amp;lt;/var&amp;gt;, and &amp;lt;var&amp;gt;#c&amp;lt;/var&amp;gt;). The first substring will be the first word, &amp;quot;one&amp;quot;. The second substring will be the second word, &amp;quot;two&amp;quot;. Since there are more words than variables, the third substring will catch all the rest, that is, the string &amp;quot;three four five&amp;quot;. It&#039;s really simple, isn&#039;t it?&lt;br /&gt;
&lt;br /&gt;
There is one additional feature you may, or may not, find convenient. You may as well parse strings that are separated by exactly one character of your choice. If, for some reason, you prefer semicolons over blanks, you might have done the above example as follows:&lt;br /&gt;
&lt;br /&gt;
 [[Programmer_Guide/Command_Reference/READ|readstr]] &#039;one;two;three;four;five&#039; #a &#039;;&#039; #b &#039;;&#039; #c /Delete&lt;br /&gt;
 // #a is now &amp;quot;one&amp;quot;, #b is now &amp;quot;two&amp;quot;, #c is &amp;quot;three;four;five&amp;quot;&lt;br /&gt;
 [[Programmer_Guide/Command_Reference/WRITELOG|writelog]] &#039;now a=&amp;quot;$#a&amp;quot;, b=&amp;quot;$#b&amp;quot;, and c=&amp;quot;$#c&amp;quot;.&#039;&lt;br /&gt;
&lt;br /&gt;
The syntactical difference between those two examples is that the latter explicitly names the separator character between each pair of variables. The difference in semantics is that now there must be exactly one separator character between two words. So this variant of the &amp;lt;code&amp;gt;[[Programmer_Guide/Command_Reference/READ|readstr]]&amp;lt;/code&amp;gt; command empowers you to read empty words, two. Consider the following statement (we may abbreviate the &amp;lt;code&amp;gt;/Delete&amp;lt;/code&amp;gt; option to &amp;lt;code&amp;gt;/D&amp;lt;/code&amp;gt;, if we do not care for the reduced legibility):&lt;br /&gt;
&lt;br /&gt;
 [[Programmer_Guide/Command_Reference/READ|readstr]] &#039;one;;two;three;four;five&#039; #a &#039;;&#039; #b &#039;;&#039; #c /D&lt;br /&gt;
 // #a is &amp;quot;one&amp;quot;, #b is empty, #c is &amp;quot; two;three;four;five&amp;quot;&lt;br /&gt;
 [[Programmer_Guide/Command_Reference/WRITELOG|writelog]] &#039;now a=&amp;quot;$#a&amp;quot;, b=&amp;quot;$#b&amp;quot;, and c=&amp;quot;$#c&amp;quot;.&#039;&lt;br /&gt;
&lt;br /&gt;
Looking awfully identical, doesn&#039;t it? Well, instead of one semicolon, there are now two semicolons between the first two words, &amp;quot;one&amp;quot; and &amp;quot;two&amp;quot;. Believe it or not, this is making all the difference in the world: {{STx}} will consider these successive semicolons three separate words, the first being &amp;quot;one&amp;quot;, the second one being empty, and the third one being, in general, &amp;quot;two&amp;quot; (in our case where there are only three variables supplied, the third word will get the rest of the string). So, with this example, variable &amp;lt;var&amp;gt;#a&amp;lt;/var&amp;gt; will get the string &amp;quot;one&amp;quot;, variable &amp;lt;var&amp;gt;#b&amp;lt;/var&amp;gt; will be cleared, and variable &amp;lt;var&amp;gt;#c&amp;lt;/var&amp;gt; will get the rest, that is the string, &amp;quot;two;three;four;five&amp;quot;. Cool, isn&#039;t it?&lt;br /&gt;
&lt;br /&gt;
Note that if you omit the &amp;lt;code&amp;gt;/Delete&amp;lt;/code&amp;gt; option, target variables corresponding to empty words will not be cleared, that is, they will keep whatever value that had before calling &amp;lt;code&amp;gt;[[Programmer_Guide/Command_Reference/READ|readstr]]&amp;lt;/code&amp;gt;. That being said, you can easily foretell the results of the following statements:&lt;br /&gt;
&lt;br /&gt;
 b := set &#039;old value before calling readstr&#039;&lt;br /&gt;
 [[Programmer_Guide/Command_Reference/READ|readstr]] &#039;one;;two;three;four;five&#039; #a &#039;;&#039; #b &#039;;&#039; #c&lt;br /&gt;
 [[Programmer_Guide/Command_Reference/WRITELOG|writelog]] &#039;now a=&amp;quot;$#a&amp;quot;, b=&amp;quot;$#b&amp;quot;, and c=&amp;quot;$#c&amp;quot;.&#039;&lt;br /&gt;
&lt;br /&gt;
As you rightly foretold, the &amp;lt;code&amp;gt;[[Programmer_Guide/Command_Reference/READ|readstr]]&amp;lt;/code&amp;gt; command in this example will not change the value of the second variable, &amp;lt;var&amp;gt;#b&amp;lt;/var&amp;gt;, since the second word in this string is empty.&lt;br /&gt;
&lt;br /&gt;
Although technically a consequence of the above, it may not immediately be clear that the space character, too, may explicitly named as separating arguments – and that this does cause a difference to the default &amp;lt;code&amp;gt;[[Programmer_Guide/Command_Reference/READ|readstr]]&amp;lt;/code&amp;gt; behaviour. Look for yourself (and notice that there are two space characters between the &amp;quot;a&amp;quot; and the &amp;quot;b&amp;quot; in the first string constant):&lt;br /&gt;
&lt;br /&gt;
 [[Programmer_Guide/Command_Reference/READ|readstr]] &#039;a b c&#039; #a #b #c /Delete&amp;lt;/code&amp;gt;&lt;br /&gt;
 // #a is now &amp;quot;a&amp;quot;, #b is &amp;quot;b&amp;quot;, #c is &amp;quot;c&amp;quot;&lt;br /&gt;
 [[Programmer_Guide/Command_Reference/WRITELOG|writelog]] &#039;a=&amp;quot;$#a&amp;quot;, b=&amp;quot;$#b&amp;quot;, c=&amp;quot;$#c&amp;quot;&#039;&lt;br /&gt;
 [[Programmer_Guide/Command_Reference/READ|readstr]] &#039;a b c&#039; #a &#039; &#039; #b &#039; &#039; #c /Delete&lt;br /&gt;
 // #a is now &amp;quot;a&amp;quot;, #b is empty, #c is &amp;quot;b c&amp;quot;&lt;br /&gt;
 [[Programmer_Guide/Command_Reference/WRITELOG|writelog]] &#039;a=&amp;quot;$#a&amp;quot;, b=&amp;quot;$#b&amp;quot;, c=&amp;quot;$#c&amp;quot;&#039;&lt;br /&gt;
&lt;br /&gt;
As you already know, there is one important difference between both &amp;lt;code&amp;gt;[[Programmer_Guide/Command_Reference/READ|readstr]]&amp;lt;/code&amp;gt; variants: When explicitly naming the separation character, {{STX}} considers consecutive occurrences of the separation character to separate empty strings. When not naming a separation, consecutive occurrences of whitespace are considered one single separator character, thereby causing no empty word to be read. So, in the above example, the first &amp;lt;code&amp;gt;[[Programmer_Guide/Command_Reference/READ|readstr]]&amp;lt;/code&amp;gt; command will read &amp;quot;a&amp;quot; into &amp;lt;var&amp;gt;#a&amp;lt;/var&amp;gt;, &amp;quot;b&amp;quot; into &amp;lt;var&amp;gt;#b&amp;lt;/var&amp;gt;, and &amp;quot;c&amp;quot; into &amp;lt;var&amp;gt;#c&amp;lt;/var&amp;gt;, whereas the second &amp;lt;code&amp;gt;[[Programmer_Guide/Command_Reference/READ|readstr]]&amp;lt;/code&amp;gt; command will read &amp;quot;a&amp;quot; into &amp;lt;var&amp;gt;#a&amp;lt;/var&amp;gt;, the empty word into &amp;lt;var&amp;gt;#b&amp;lt;/var&amp;gt;, and the remaining string, &amp;quot;b c&amp;quot;, into the last variable, &amp;lt;var&amp;gt;#c&amp;lt;/var&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Of course the string argument supplied to &amp;lt;code&amp;gt;[[Programmer_Guide/Command_Reference/READ|readstr]]&amp;lt;/code&amp;gt; may even be the result of variable substitution. Less prosaically put, you might as well supply code like the following:&lt;br /&gt;
&lt;br /&gt;
 #three := set &#039;THREE&#039;&lt;br /&gt;
 [[Programmer_Guide/Command_Reference/READ|readstr]] &#039;one two $#three four&#039; #a #b #c #d&lt;br /&gt;
 [[Programmer_Guide/Command_Reference/WRITELOG|writelog]] &#039;now a=&amp;quot;$#a&amp;quot;, b=&amp;quot;$#b&amp;quot;, c=&amp;quot;$#c&amp;quot;, d=&amp;quot;$#d&amp;quot;&#039;&lt;br /&gt;
 &lt;br /&gt;
Before executing the command, {{Stx}} will, as usual, look for any variable name prefixed with a dollar sign. If there happens to be any, they will be replaced by the contents of the respective variables. So in the above example, the text &amp;quot;&amp;lt;code&amp;gt;$#three&amp;lt;/code&amp;gt;&amp;quot; will get replaced by the contents of variable &amp;lt;var&amp;gt;#three&amp;lt;/var&amp;gt;, thereby causing the [[Programmer_Guide/Command_Reference/READ|{{Stx}} &amp;lt;code&amp;gt;readstr&amp;lt;/code&amp;gt; command]] to actually be processed to be the following:&lt;br /&gt;
&lt;br /&gt;
 [[Programmer_Guide/Command_Reference/READ|readstr]] &#039;one two THREE four&#039; #a #b #c #d&lt;br /&gt;
&lt;br /&gt;
Only the strong survive the following example (anyone else will find no harm in skipping it).&lt;br /&gt;
&lt;br /&gt;
 [[Programmer_Guide/Command_Reference/READ|readstr]] &#039;x y z&#039; #a #b #c &lt;br /&gt;
 [[Programmer_Guide/Command_Reference/WRITELOG|writelog]] &#039;now a=&amp;quot;$#a&amp;quot;, b=&amp;quot;$#b&amp;quot;, c=&amp;quot;$#c&amp;quot;&#039;&lt;br /&gt;
 [[Programmer_Guide/Command_Reference/READ|readstr]] &#039;one two three&#039; $#a $#b $#c&lt;br /&gt;
 [[Programmer_Guide/Command_Reference/WRITELOG|writelog]] &#039;gee, now a=&amp;quot;$#a&amp;quot;, b=&amp;quot;$#b&amp;quot;, c=&amp;quot;$#c&amp;quot;&#039;&lt;br /&gt;
 [[Programmer_Guide/Command_Reference/WRITELOG|writelog]] &#039;but mysteriously, x=&amp;quot;$x&amp;quot;, y=&amp;quot;$y&amp;quot;, z=&amp;quot;$z&amp;quot;&#039;&lt;br /&gt;
&lt;br /&gt;
When listening very carefully, you might hear the above example speak for itself. If not, you will find the key in the third line that contains the second &amp;lt;code&amp;gt;[[Programmer_Guide/Command_Reference/READ|readstr]]&amp;lt;/code&amp;gt; command. Did you notice the variables being prefixed by a dollar sign each? Now the dollar sign indicates {{STx}} that variable substitution is desired (and required) before the command is to be processed. So all {{STX}} does is replace the two strings &amp;quot;&amp;lt;code&amp;gt;$#a&amp;lt;/code&amp;gt;&amp;quot;, &amp;quot;&amp;lt;code&amp;gt;$#b&amp;lt;/code&amp;gt;&amp;quot;, and &amp;quot;&amp;lt;code&amp;gt;$#c&amp;lt;/code&amp;gt;&amp;quot; by the contents of the respective variables. Since, at this stage, their contents are &amp;quot;x&amp;quot;, &amp;quot;y&amp;quot;, and &amp;quot;z&amp;quot;, the command actually to get executed will look as follows:&lt;br /&gt;
&lt;br /&gt;
 [[Programmer_Guide/Command_Reference/READ|readstr]] &#039;one two three&#039; x y z&lt;br /&gt;
&lt;br /&gt;
Now this clearly is a request to parse the string &amp;quot;one two three&amp;quot; into the three shell-global variables &amp;quot;&amp;lt;var&amp;gt;x&amp;lt;/var&amp;gt;&amp;quot;, &amp;quot;&amp;lt;var&amp;gt;y&amp;lt;/var&amp;gt;&amp;quot;, and &amp;quot;&amp;lt;var&amp;gt;z&amp;lt;/var&amp;gt;&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
When reading directly from one variable, you might prefer a variant of &amp;lt;code&amp;gt;[[Programmer_Guide/Command_Reference/READ|readstr]]&amp;lt;/code&amp;gt;, the &amp;lt;code&amp;gt;[[Programmer_Guide/Command_Reference/READ|readvar]]&amp;lt;/code&amp;gt; command. &amp;lt;code&amp;gt;[[Programmer_Guide/Command_Reference/READ|readvar]]&amp;lt;/code&amp;gt; works similar to &amp;lt;code&amp;gt;readstr&amp;lt;/code&amp;gt;, as the following example shows:&lt;br /&gt;
&lt;br /&gt;
 #var := set &#039;one two three&#039;&lt;br /&gt;
 [[Programmer_Guide/Command_Reference/READ|readvar]] #var #a #b #c /Delete&lt;br /&gt;
&lt;br /&gt;
The first argument to &amp;lt;code&amp;gt;[[Programmer_Guide/Command_Reference/READ|readvar]]&amp;lt;/code&amp;gt; is one variable to read from. The remaining arguments are the variables where to store the words read. Otherwise that &amp;lt;code&amp;gt;[[Programmer_Guide/Command_Reference/READ|readvar]]&amp;lt;/code&amp;gt; reads from a variable as opposed to reading from a literal string, there is no difference between &amp;lt;code&amp;gt;[[Programmer_Guide/Command_Reference/READ|readvar]]&amp;lt;/code&amp;gt; and &amp;lt;code&amp;gt;readstr&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
You will undoubtedly ask why there is such a thing as a &amp;lt;code&amp;gt;[[Programmer_Guide/Command_Reference/READ|readvar]]&amp;lt;/code&amp;gt; command. After all, all that&lt;br /&gt;
&lt;br /&gt;
 [[Programmer_Guide/Command_Reference/READ|readvar]] #var #a #b #c&lt;br /&gt;
&lt;br /&gt;
does may as well be done using the following command:&lt;br /&gt;
&lt;br /&gt;
 [[Programmer_Guide/Command_Reference/READ|readstr]] &#039;$#var&#039; #a #b #c&lt;br /&gt;
&lt;br /&gt;
You are, of course, right in principle. The difference between the two commands is that the latter depends upon variable substitution which introduces a second step when evaluating and executing the command. Hence, the former is simply faster.&lt;br /&gt;
&lt;br /&gt;
Note that there is a &amp;lt;code&amp;gt;[[Programmer_Guide/Command_Reference/READ|readtable]]&amp;lt;/code&amp;gt; function, too. We will come to that much later when dealing with the versatile (both are) {{Stx}} table feature.&lt;br /&gt;
&lt;br /&gt;
===Special Variables===&lt;br /&gt;
&lt;br /&gt;
There are a number of reserved variables that serve special purposes. At this stage, it suffices to give a short overview of the most important special variables.&lt;br /&gt;
&lt;br /&gt;
{|&lt;br /&gt;
|-&lt;br /&gt;
|Variable&lt;br /&gt;
|Description&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;var&amp;gt;rc&amp;lt;/var&amp;gt;&lt;br /&gt;
|After executing an {{STx}} statement or built-in function (not a user-defined macro!), this variable contains its numerical return code, 0 indicating success, and values different from 0 indicating different kinds of failure. &amp;quot;&amp;lt;var&amp;gt;rc&amp;lt;/var&amp;gt;&amp;quot; gets set after each invocation of an {{STX}} statement or built-in function, meaning that an error code will get reset when executing the next statement. If you later need to map a numerical error code to a textual error message (e.g. for presenting it to the user), you may always use the [[Programmer_Guide/Command_Reference/EMSG|EMSG]] command.&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;var&amp;gt;emsg&amp;lt;/var&amp;gt;&lt;br /&gt;
|This variable contains a textual description of the value of the &amp;quot;&amp;lt;var&amp;gt;rc&amp;lt;/var&amp;gt;&amp;quot; variable. It, too, gets reset with each new {{Stx}} statement. If you have saved the value of &amp;lt;var&amp;gt;rc&amp;lt;/var&amp;gt; e.g. in a local variable and you later need to map it to a textual error message (e.g. for presenting it to the user), you may always use the [[Programmer_Guide/Command_Reference/EMSG|EMSG]] command. (And don&#039;t confuse the &amp;lt;var&amp;gt;emsg&amp;lt;/var&amp;gt; variable and the [[Programmer_Guide/Command_Reference/EMSG|EMSG]] command - they are not the same).&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;var&amp;gt;#argc&amp;lt;/var&amp;gt;, &amp;lt;var&amp;gt;#argv&amp;lt;/var&amp;gt;&lt;br /&gt;
|On macro invocation, &amp;quot;&amp;lt;var&amp;gt;argc&amp;lt;/var&amp;gt;&amp;quot; contains the number of arguments supplied to the respective macro, while &amp;quot;&amp;lt;var&amp;gt;argv&amp;lt;/var&amp;gt;&amp;quot; contains the actual arguments (all of them). See below.&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;var&amp;gt;result&amp;lt;/var&amp;gt;&lt;br /&gt;
|After returning from a user-defined macro call, the variable &amp;quot;&amp;lt;var&amp;gt;result&amp;lt;/var&amp;gt;&amp;quot; contains the value returned by the respective macro, i.e. the value the macro supplied as an argument to the &amp;quot;&amp;lt;code&amp;gt;[[Programmer_Guide/Command_Reference/EXIT|exit]]&amp;lt;/code&amp;gt;&amp;quot; call. If the macro was left without returning an argument, &amp;quot;&amp;lt;var&amp;gt;result&amp;lt;/var&amp;gt;&amp;quot; is empty (this is not considered an error – honestly, there is not much that is ever considered an error as far as {{STx}} is concerned).&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;var&amp;gt;#read&amp;lt;/var&amp;gt;&lt;br /&gt;
|After using one of the {{STX}} [[Programmer_Guide/Command_Reference/READ|READ]] commands (&amp;lt;code&amp;gt;read&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;readstr&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;readvar&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;readtab&amp;lt;/code&amp;gt;), this variable contains the number of arguments actually read.&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;var&amp;gt;#new&amp;lt;/var&amp;gt;&lt;br /&gt;
|When allocating an {{Stx}} shell item, its item name will be stored in a variable called &amp;quot;&amp;lt;var&amp;gt;#new&amp;lt;/var&amp;gt;&amp;quot;. On the issue of shell items, please be patient until chapter [[Programmer_Guide/STx_Guru#Shell_Items:_An_Overview|Shell Items: An Overview]], or divert to the [[Programmer_Guide/Shell_Items|Shell Items]] chapter in the Reference Manual.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
In general, even the reserved variable may be target of an assignment (this is sometimes used with the &amp;quot;&amp;lt;var&amp;gt;#argv&amp;lt;/var&amp;gt;&amp;quot; variable for implementing default macro arguments). You should not be surprised, though, that assigning a value to either &amp;quot;&amp;lt;var&amp;gt;rc&amp;lt;/var&amp;gt;&amp;quot; or &amp;quot;&amp;lt;var&amp;gt;emsg&amp;lt;/var&amp;gt;&amp;quot; will not have the desired outcome: Since the assignment statement is built-in {{STx}} statement itself, executing it will reset &amp;quot;&amp;lt;var&amp;gt;rc&amp;lt;/var&amp;gt;&amp;quot; to 0 and &amp;quot;&amp;lt;var&amp;gt;emsg&amp;lt;/var&amp;gt;&amp;quot; to the empty string, thereby indicating that the assignment statement itself was successful (which it was).&lt;br /&gt;
&lt;br /&gt;
==Control Structures==&lt;br /&gt;
&lt;br /&gt;
===Calls to Macros and Built-In Functions===&lt;br /&gt;
&lt;br /&gt;
You might argue that we have been through that already, but, unfortunately, this is only part true: There is much more to passing an argument to a function than we have explored when calling the built-in &amp;quot;&amp;lt;code&amp;gt;[[Programmer_Guide/Command_Reference/WORD|word]]&amp;lt;/code&amp;gt;&amp;quot; function, or the built-in &amp;quot;&amp;lt;code&amp;gt;[[Programmer_Guide/Command_Reference/WRITELOG|writelog]]&amp;lt;/code&amp;gt;&amp;quot; command. This chapter tells why and what.&lt;br /&gt;
&lt;br /&gt;
===Macros===&lt;br /&gt;
&lt;br /&gt;
Semantically, an {{STX}} macro is like a procedure or function of any procedural programming language of your choice. Syntactically, a macro starts with a macro definition surrounded by square brackets, e.g. the following line:&lt;br /&gt;
&lt;br /&gt;
 [Macro mymacro]&lt;br /&gt;
&lt;br /&gt;
There is no clear end to a macro. Execution continues until the control flow reaches an &amp;quot;&amp;lt;code&amp;gt;exit&amp;lt;/code&amp;gt;&amp;quot; statement, until a new macro starts, or until the file comes to an end (whichever happens first).&lt;br /&gt;
&lt;br /&gt;
==== Calling a macro ====&lt;br /&gt;
&lt;br /&gt;
For calling a macro, you simply type the macro name. In the above case, if {{Stx}} encounters a line starting whose first word is the string &amp;quot;&amp;lt;code&amp;gt;mymacro&amp;lt;/code&amp;gt;&amp;quot;, it will execute the like-named macro. {{STx}} supports recursive macro calls.&lt;br /&gt;
&lt;br /&gt;
There are a few commands providing different, not always cleaner ways of calling a macro, namely the [[Programmer_Guide/Command_Reference/MACRO|MACRO]], the [[Programmer_Guide/Command_Reference/MACROX|MACROX]] and the [[Programmer_Guide/Command_Reference/SHELL|SHELL]] command. Please do not use these commands unless there is very good reason to (there normally isn&#039;t).&lt;br /&gt;
&lt;br /&gt;
====Returning From a Macro====&lt;br /&gt;
&lt;br /&gt;
Macro execution will stop when {{STX}} encounters the &amp;quot;&amp;lt;code&amp;gt;[[Programmer_Guide/Command_Reference/EXIT|exit]]&amp;lt;/code&amp;gt;&amp;quot; statement. Normally, control flow resumes at the line immediately following the statement that caused the macro to execute. You may supply the following optional arguments to an exit statement:&lt;br /&gt;
&lt;br /&gt;
 [[Programmer_Guide/Command_Reference/EXIT|exit]] &amp;lt;var&amp;gt;level&amp;lt;/var&amp;gt; &amp;lt;var&amp;gt;result&amp;lt;/var&amp;gt;&lt;br /&gt;
&lt;br /&gt;
When calling &amp;quot;&amp;lt;code&amp;gt;[[Programmer_Guide/Command_Reference/EXIT|exit]]&amp;lt;/code&amp;gt;&amp;quot; without any arguments or when calling &amp;quot;&amp;lt;code&amp;gt;[[Programmer_Guide/Command_Reference/EXIT|exit]] 1&amp;lt;/code&amp;gt;&amp;quot;, control flow will, as said above, resume with the next statement after the macro call.&lt;br /&gt;
&lt;br /&gt;
In general, the first argument to &amp;quot;&amp;lt;code&amp;gt;[[Programmer_Guide/Command_Reference/EXIT|exit]]&amp;lt;/code&amp;gt;&amp;quot; indicates how many call levels to skip. When calling &amp;quot;&amp;lt;code&amp;gt;[[Programmer_Guide/Command_Reference/EXIT|exit]] 2&amp;lt;/code&amp;gt;&amp;quot;, control flow will not resume at the line after the statement calling the macro, but at the line after that statement calling whichever macro was in turn calling our macro. When calling &amp;quot;&amp;lt;code&amp;gt;[[Programmer_Guide/Command_Reference/EXIT|exit]] 3&amp;lt;/code&amp;gt;&amp;quot;, control flow will resume at the line after the statement calling the macro calling the macro calling our macro. When calling &amp;quot;&amp;lt;code&amp;gt;[[Programmer_Guide/Command_Reference/EXIT|exit]] 4&amp;lt;/code&amp;gt;&amp;quot;, control flow will resume at the line after the statement calling the macro calling the macro calling the macro calling our macro, while on &amp;quot;&amp;lt;code&amp;gt;[[Programmer_Guide/Command_Reference/EXIT|exit]] 5&amp;lt;/code&amp;gt;&amp;quot; execution will resume with the line after the statement calling the macro calling the macro calling the macro calling the macro calling our macro, and so on. There is limited use to this feature, and you are at the safe side when, at least in the beginning, always using &amp;quot;&amp;lt;code&amp;gt;[[Programmer_Guide/Command_Reference/EXIT|exit]] 1&amp;lt;/code&amp;gt;&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
There are two special cases, one when supplying 0 for the exit level, the other when supplying a negative number.&lt;br /&gt;
&lt;br /&gt;
When supplying 0 for the exit level, i.e. when executing &amp;lt;code&amp;gt;[[Programmer_Guide/Command_Reference/EXIT|exit]] 0&amp;lt;/code&amp;gt;, the executing shell will be terminated, effectively ending execution of the whole user script (both the running macro and all calling macros).&lt;br /&gt;
&lt;br /&gt;
When supplying a &#039;&#039;negative&#039;&#039; level argument (e.g. &amp;lt;code&amp;gt;[[Programmer_Guide/Command_Reference/EXIT|exit]] -2&amp;lt;/code&amp;gt;), {{Stx}} will return from as many macro levels as needed to find a macro level where there is a non-empty local variable &amp;lt;var&amp;gt;#onexitall&amp;lt;/var&amp;gt; defined. Since this is a bit complicated and not very clean, you probably should try not to use this feature.&lt;br /&gt;
&lt;br /&gt;
Of more interest than the first is the second argument to &amp;quot;&amp;lt;code&amp;gt;[[Programmer_Guide/Command_Reference/EXIT|exit]]&amp;lt;/code&amp;gt;&amp;quot;. It is the result of the macro, that is the number or string the macro is to return. Like with assignment operations, this result may, and should, start with a type selector, one out of &amp;quot;&amp;lt;code&amp;gt;[[Programmer_Guide/Command_Reference/SET|set]]&amp;lt;/code&amp;gt;&amp;quot;, &amp;quot;&amp;lt;code&amp;gt;[[Programmer_Guide/Command_Reference/INT|int]]&amp;lt;/code&amp;gt;&amp;quot;, &amp;quot;&amp;lt;code&amp;gt;[[Programmer_Guide/Command_Reference/NUM|num]]&amp;lt;/code&amp;gt;&amp;quot;, and &amp;quot;&amp;lt;code&amp;gt;[[Programmer_Guide/Command_Reference/EVAL|eval]]&amp;lt;/code&amp;gt;&amp;quot;. Consider the following &amp;quot;&amp;lt;code&amp;gt;exit&amp;lt;/code&amp;gt;&amp;quot; statements:&lt;br /&gt;
&lt;br /&gt;
 [[Programmer_Guide/Command_Reference/EXIT|exit]] 1 set &#039;Hallo Welt&#039;&lt;br /&gt;
 [[Programmer_Guide/Command_Reference/EXIT|exit]] 1 int 5/3&lt;br /&gt;
 [[Programmer_Guide/Command_Reference/EXIT|exit]] 1 num 3/5&lt;br /&gt;
&lt;br /&gt;
The first statement will exit the running macro and return the friendly string &amp;quot;Hello World&amp;quot;. The second statement will exit the running macro and return whichever integer results on dividing 5 by 3. Finally, the third statement will exit the running macro and return the quotient of 3 and 5.&lt;br /&gt;
&lt;br /&gt;
There are several interchangeable ways for the caller to retrieve whatever value the macro has returned. First of all, the result is stored in the reserved shell variable &amp;quot;&amp;lt;code&amp;gt;result&amp;lt;/code&amp;gt;&amp;quot;, rendering the following code snipped a working example:&lt;br /&gt;
&lt;br /&gt;
 greetings // call the &amp;quot;greetings&amp;quot; macro&lt;br /&gt;
 writelog &#039;$result&#039; // ...and print its results&lt;br /&gt;
 exit // ...and rest after a long day&#039;s work&lt;br /&gt;
 &lt;br /&gt;
 &lt;br /&gt;
 [Macro greetings]&lt;br /&gt;
    [[Programmer_Guide/Command_Reference/EXIT|exit]] 1 set &#039;Hello World&#039;&lt;br /&gt;
&lt;br /&gt;
An even more elegant feature is using command substitution, a concept both known and feared from the UNIX shells:&lt;br /&gt;
&lt;br /&gt;
 #var := set &#039;$(greetings)&#039; &lt;br /&gt;
 writelog &#039;$(greetings)&#039;&lt;br /&gt;
&lt;br /&gt;
The first statement executes the macro &amp;quot;greetings&amp;quot; and assigns its result to a variable called &amp;quot;&amp;lt;code&amp;gt;var&amp;lt;/code&amp;gt;&amp;quot;. The second statement, too, calls the &amp;quot;greetings&amp;quot; macro, but directly pastes its result into a &amp;quot;&amp;lt;code&amp;gt;writelog&amp;lt;/code&amp;gt;&amp;quot; statement.&lt;br /&gt;
&lt;br /&gt;
Though command substitution is the most general way, a macro may be directly called, too – just like any built-in {{STx}} function:&lt;br /&gt;
&lt;br /&gt;
 #var := greetings&lt;br /&gt;
&lt;br /&gt;
The latter format greatly improves legibility and is therefore he recommended way of calling a user-defined macro.&lt;br /&gt;
&lt;br /&gt;
====Supplying and Retrieving Arguments====&lt;br /&gt;
&lt;br /&gt;
There are, they say, many ways leading to Rome, and this surely holds true for retrieving and parsing the arguments a user-defined macro has been supplied with. The easiest way is disposing of the problem in the macro definition, i.e. by writing something like this:&lt;br /&gt;
&lt;br /&gt;
 [Macro multiply #mand #mor]&lt;br /&gt;
    #prod := [[Programmer_Guide/Command_Reference/EVAL|eval]] $#mand * $#mor&lt;br /&gt;
    [[Programmer_Guide/Command_Reference/WRITELOG|writelog]] &#039;multiplying $#mand by $#mor results in $#prod&#039;&lt;br /&gt;
    [[Programmer_Guide/Command_Reference/EXIT|exit]]&lt;br /&gt;
&lt;br /&gt;
As you may have noticed, the macro name may be followed by one or more variable names. In this case the arguments supplied to the macro are being automatically parsed and stored to the like-named variables. We call this the implicit argument parsing feature. Hence, when calling &amp;quot;&amp;lt;code&amp;gt;multiply 7 9&amp;lt;/code&amp;gt;&amp;quot;, the starting macro will find its local variable &amp;lt;code&amp;gt;#mand&amp;lt;/code&amp;gt; set to 7 and its local variable &amp;lt;code&amp;gt;#mor&amp;lt;/code&amp;gt; set to 9. This will cause the above macro to print the message &amp;quot;multiplying 7 by 9 results in 63&amp;quot;. If there are fewer arguments than variables, the remaining variables will be empty. If there are more arguments than variables, the whole remaining part of the arguments will be stored to the last variable. When you think it over, this is completely analogous to the &amp;lt;code&amp;gt;readstr&amp;lt;/code&amp;gt; and &amp;lt;code&amp;gt;readvar&amp;lt;/code&amp;gt; functions already known.&lt;br /&gt;
&lt;br /&gt;
What&#039;s also analogous to &amp;lt;code&amp;gt;readstr&amp;lt;/code&amp;gt; and &amp;lt;code&amp;gt;readvar&amp;lt;/code&amp;gt; is the possibility explicitly to name a separator character of one&#039;s choice. See for yourself:&lt;br /&gt;
&lt;br /&gt;
 [Macro multiply #mand&#039;;&#039;#mor]&lt;br /&gt;
    #prod := [[Programmer_Guide/Command_Reference/EVAL|eval]] $#mand * $#mor&lt;br /&gt;
    [[Programmer_Guide/Command_Reference/WRITELOG|writelog]] &#039;multiplying $#mand by $#mor results in $#prod&#039;&lt;br /&gt;
    [[Programmer_Guide/Command_Reference/EXIT|exit]]&lt;br /&gt;
&lt;br /&gt;
While the first variant of the user-defined macro &amp;quot;multiply&amp;quot; will expect its arguments to be separated by an arbitrary number of whitespace characters, the second version will expect them to be separated by exactly one semicolon. This comes in handy when passing arguments that may contain, or contain, or must contain, or should contain, or would contain were it not for the fact that this is impossible with the default way of argument parsing, whitespace characters.&lt;br /&gt;
&lt;br /&gt;
A further and generally slightly more flexible, though a little more laborious way of parsing one&#039;s arguments is using the special variables &amp;quot;&amp;lt;code&amp;gt;#argc&amp;lt;/code&amp;gt;&amp;quot; and &amp;quot;&amp;lt;code&amp;gt;#argv&amp;lt;/code&amp;gt;&amp;quot;. On start-up of a macro, these variables get set to the number of arguments and to the actual argument list, respectively. So the above example may be re-written for explicit argument parsing as follows:&lt;br /&gt;
&lt;br /&gt;
 [Macro multiply]&lt;br /&gt;
    readvar #argv #mand #mor&lt;br /&gt;
    #prod := [[Programmer_Guide/Command_Reference/EVAL|eval]] $#mand * $#mor&lt;br /&gt;
    [[Programmer_Guide/Command_Reference/WRITELOG|writelog]] &#039;multiplying $#mand by $#mor results in $#prod&#039;&lt;br /&gt;
    [[Programmer_Guide/Command_Reference/EXIT|exit]]&lt;br /&gt;
&lt;br /&gt;
Why is this more flexible in general? – Because of the greater versatility of the &amp;lt;code&amp;gt;readvar&amp;lt;/code&amp;gt; and &amp;lt;code&amp;gt;readstr&amp;lt;/code&amp;gt; commands that even allow parsing argument lists built up from a variable number of arguments. We will come to that with the macro &amp;lt;code&amp;gt;countSTXProgrammers&amp;lt;/code&amp;gt; of chapter 4.1.1.3 on page 1.&lt;br /&gt;
&lt;br /&gt;
That being said, we may well continue with a real-world example. Consider e.g. the following macro:&lt;br /&gt;
&lt;br /&gt;
 [Macro declare #person #attribute]&lt;br /&gt;
    [[Programmer_Guide/Command_Reference/WRITELOG|writelog]] &#039;I hereby declare $#person an $#attribute&#039;&lt;br /&gt;
    [[Programmer_Guide/Command_Reference/EXIT|exit]]&lt;br /&gt;
&lt;br /&gt;
Now, if you would like to declare, say, Toni an {{STX}} hero, you might call the macro as follows:&lt;br /&gt;
&lt;br /&gt;
 declare Toni {{Stx}} hero&lt;br /&gt;
&lt;br /&gt;
This will work fine because the first word, &amp;quot;Toni&amp;quot;, gets stored to the first variable, &amp;lt;code&amp;gt;#person&amp;lt;/code&amp;gt;, and the rest of the arguments, &amp;quot;STX hero&amp;quot;, gets stored to the second, and last, variable, &amp;lt;code&amp;gt;#attribute&amp;lt;/code&amp;gt;. But what if you want to declare Christian Gottschall an {{STx}} beginner? See for yourself:&lt;br /&gt;
&lt;br /&gt;
 declare Christian Gottschall {{STX}} beginner&lt;br /&gt;
&lt;br /&gt;
This will invariably lead to the first word, &amp;quot;Christian&amp;quot;, being stored to &amp;lt;code&amp;gt;#person&amp;lt;/code&amp;gt;, and the whole rest, &amp;quot;Gottschall {{STx}} beginner&amp;quot;, being stored to &amp;lt;code&amp;gt;#attribute&amp;lt;/code&amp;gt;, hence causing Christian being declared a (sic!) &amp;quot;Gottschall {{STx}} beginner&amp;quot;, which he surely isn&#039;t.&lt;br /&gt;
&lt;br /&gt;
You might be tempted to attacking this problem by using quotes, but in fact this is utterly impossible. You will find any conceivable combination (and even most unconceivable combinations) of quotes and escape characters to have a meaning very different from that intended. So the only general solution to this problem is using a different separator character:&lt;br /&gt;
&lt;br /&gt;
 [Macro declare #person&#039;;&#039;#attribute]&lt;br /&gt;
    [[Programmer_Guide/Command_Reference/WRITELOG|writelog]] &#039;I hereby declare $#person an $#attribute&#039;&lt;br /&gt;
    [[Programmer_Guide/Command_Reference/EXIT|exit]]&lt;br /&gt;
&lt;br /&gt;
Or:&lt;br /&gt;
&lt;br /&gt;
 [Macro declare]&lt;br /&gt;
    readvar #argv #person &#039;;&#039; #attribute&lt;br /&gt;
    [[Programmer_Guide/Command_Reference/WRITELOG|writelog]] &#039;I hereby declare $#person an $#attribute&#039;&lt;br /&gt;
    [[Programmer_Guide/Command_Reference/EXIT|exit]]&lt;br /&gt;
&lt;br /&gt;
Now you may declare whomever you want whatever you please:&lt;br /&gt;
&lt;br /&gt;
 declare Toni ; {{STX}} hero&lt;br /&gt;
 &lt;br /&gt;
 declare Christian Gottschall ; {{Stx}} beginner&lt;br /&gt;
&lt;br /&gt;
Though looking unusual from the standpoint of several other programming languages, it is good {{STx}} practice to quote the macro arguments, either as a whole, or argument-wise, or even (don&#039;t read this loudly!) on a per-word basis:&lt;br /&gt;
&lt;br /&gt;
 declare &#039;Jonnie White ; {{STX}} guru&#039;&lt;br /&gt;
 declare &#039;Jonnie White&#039; ; &#039;STX guru&#039;&lt;br /&gt;
 declare &#039;Jonnie&#039; &#039; White&#039; ; &#039;STX &#039; &#039;guru&#039;&lt;br /&gt;
&lt;br /&gt;
In general, neither form of quotation will do any harm. Remember, though, that, with {{Stx}}, writing several quoted strings will cause them to be implicitly concatenated with any intervening whitespace removed. Hence, although the above examples work as desired (note the quotations of the fourth statement containing space characters), the following won&#039;t:&lt;br /&gt;
&lt;br /&gt;
 declare &#039;Jonnie&#039; &#039;White&#039; ; &#039;STX&#039; &#039;guru&#039;&lt;br /&gt;
&lt;br /&gt;
The latter statement will print out the text &amp;quot;I hereby declare JonnieWhite an STXguru&amp;quot;: Although there is a whitespace character between each pair of quoted words, the quotations themselves do not contain any blank character, thereby causing the respective words to be concatenated without any intervening space. Compare this with the third statement in the previous example where there is a space character at the beginning of the second, and at the end of the third quoted word. (We&#039;ve already had a few words on concatenation in chapter on page 1.)&lt;br /&gt;
&lt;br /&gt;
Note that when using the implicit argument parsing feature (or when using &amp;lt;code&amp;gt;readvar&amp;lt;/code&amp;gt; with the default separation characters (whitespace), you need to be careful not to let the concatenation feature come in your way. Consider the following macro call:&lt;br /&gt;
&lt;br /&gt;
 usermacro &#039;one&#039; &#039;two&#039; &#039;three&#039;&lt;br /&gt;
&lt;br /&gt;
Here, by string concatenation, the two strings &amp;quot;one&amp;quot;, &amp;quot;two,&amp;quot; and &amp;quot;three&amp;quot; will get concatenated to one single string, &amp;quot;onetwothree&amp;quot;. Consequently, the macro will, whatever way of parsing it uses, get only one argument – the string &amp;quot;onetwothree.&amp;quot; If you want the macro actually to be called with three arguments, you will need to use one of the following statements:&lt;br /&gt;
&lt;br /&gt;
 usermacro one two three&lt;br /&gt;
 usermacro &#039;one two three&#039;&lt;br /&gt;
 usermacro &#039;one &#039; &#039;two &#039; &#039; three&#039;&lt;br /&gt;
&lt;br /&gt;
It will work either way, additional whitespace characters never doing any harm.&lt;br /&gt;
&lt;br /&gt;
As a rule of thumb, the easiest thing would be always to quote the whole arguments to a macro call, like is done in the second statement of the above example.&lt;br /&gt;
&lt;br /&gt;
====Combined example====&lt;br /&gt;
&lt;br /&gt;
The following example builds up several things we are at this stage familiar with (and several others we are not). You need not fully understand the macro at this stage, but you might notice several familiar issues.&lt;br /&gt;
&lt;br /&gt;
 [Macro countSTXProgrammers]&lt;br /&gt;
    // read 0 both into #count and #totcount&lt;br /&gt;
    [[Programmer_Guide/Command_Reference/READ|readstr]] &#039;0 0&#039; #count #totcount // [[#ckremark1|(1)]]&lt;br /&gt;
 &lt;br /&gt;
    // the &amp;quot;forever&amp;quot; loop will never terminate by itself.&lt;br /&gt;
    // it will only stop at a &amp;quot;break&amp;quot; statement&lt;br /&gt;
    [[Programmer_Guide/Command_Reference/FOREVER|forever]] // [[#ckremark2|(2)]]&lt;br /&gt;
 &lt;br /&gt;
       // read the first person into #person, and the&lt;br /&gt;
       // remaining persons into #argv&lt;br /&gt;
       [[Programmer_Guide/Command_Reference/READ|readvar]] #argv #person &#039;;&#039; #argv /Delete // [[#ckremark3|(3)]]&lt;br /&gt;
 &lt;br /&gt;
       // return both the total number of persons counted and&lt;br /&gt;
       // the number of {{STx}} persons&lt;br /&gt;
       [[Programmer_Guide/Command_Reference/IF|if]] &#039;$#read&#039; == 0 then // [[#ckremark4|(4)]]&lt;br /&gt;
          [[{Programmer_Guide/Command_Reference/EXIT|exit]] 1 set &#039;$#totcount;$#count&#039; // [[#ckremark5|(5)]]&lt;br /&gt;
       end&lt;br /&gt;
 &lt;br /&gt;
       #totcount := int $#totcount+1&lt;br /&gt;
       #index := keyword &#039;$#person&#039; Toni Jonnie Christian // [[#ckremark6|(6)]]&lt;br /&gt;
 &lt;br /&gt;
       [[Programmer_Guide/Command_Reference/IF|if]] &#039;$#index&#039; &amp;gt;= 0 then&lt;br /&gt;
          #count := int $#count+1&lt;br /&gt;
       end&lt;br /&gt;
 &lt;br /&gt;
    end&lt;br /&gt;
&lt;br /&gt;
The &amp;lt;code&amp;gt;countSTXProgrammers&amp;lt;/code&amp;gt; macro gets an arbitrary number of arguments separated by semicolons. Each argument is considered the name of a person. What the macro does, slightly arbitrarily, is count both the total number of persons supplied, and the number of {{STX}} programmers amongst them ({{Stx}} programmers being considered Toni, Jonnie, and Christian only). The most important statements are the following (see the respective numbers commented in the macro source):&lt;br /&gt;
&lt;br /&gt;
;{{anchor|ckremark1|(1)}}: This shows an idiomatic use of the &amp;lt;code&amp;gt;readstr&amp;lt;/code&amp;gt; command for initializing multiple variables. Here the string &amp;quot;0 0&amp;quot; is parsed into two variables, &amp;lt;code&amp;gt;#count&amp;lt;/code&amp;gt; and &amp;lt;code&amp;gt;#totcount&amp;lt;/code&amp;gt;, effectively setting them both to zero. Of course you might as well use the two separate assignment statements &amp;quot;&amp;lt;code&amp;gt;#count := int 0&amp;lt;/code&amp;gt;&amp;quot;, and &amp;quot;&amp;lt;code&amp;gt;#totcount := int 0&amp;lt;/code&amp;gt;&amp;quot;.&lt;br /&gt;
;{{anchor|ckremark2|(2)}}: The &amp;lt;code&amp;gt;forever&amp;lt;/code&amp;gt; keyword starts kind of an eternal loop running until a &amp;lt;code&amp;gt;break&amp;lt;/code&amp;gt; statement will be met. Both issues are dealt with in separate chapters ([[#Forever_and_Ever|Forever and Ever]] and [[#Ending_a_Loop_Prematurely:_Break_and_Continue|Ending a Loop Prematurely: Break and Continue]]).&lt;br /&gt;
;{{anchor|ckremark3|(3)}}: The &amp;lt;code&amp;gt;readvar&amp;lt;/code&amp;gt; statement will be utterly familiar to you. Note, though, that one of the destination variables is the same as the source variable. This is not a problem at all. Parsing will proceed normally, and the assignment will take place only after parsing has finished. So this &amp;lt;code&amp;gt;readvar&amp;lt;/code&amp;gt; statement will result in the first word of &amp;lt;var&amp;gt;#argv&amp;lt;/var&amp;gt; being parsed into &amp;lt;var&amp;gt;#person&amp;lt;/var&amp;gt;. The remaining contents of &amp;lt;var&amp;gt;#argv&amp;lt;/var&amp;gt; will, in turn, be parsed to%&amp;amp;hellip; &amp;lt;var&amp;gt;#argv&amp;lt;/var&amp;gt; itself(!), effectively removing the first word from &amp;lt;var&amp;gt;#argv&amp;lt;/var&amp;gt;. So with each pass of the loop, the next &amp;quot;first&amp;quot; name from the list will both be stored in &amp;lt;var&amp;gt;#person&amp;lt;/var&amp;gt; and be removed from &amp;lt;var&amp;gt;#argv&amp;lt;/var&amp;gt;. Isn&#039;t &#039;&#039;that&#039;&#039; cool?&lt;br /&gt;
;{{anchor|ckremark4|(4)}}: This line introduces the &amp;lt;code&amp;gt;if&amp;lt;/code&amp;gt; command. You need not worry about this command; it will be dealt with properly in chapterc 4.1.3.&lt;br /&gt;
;{{anchor|ckremark5|(5)}}: The &amp;lt;code&amp;gt;exit&amp;lt;/code&amp;gt; statement will return from the macro, and it will do so – due to the &amp;lt;code&amp;gt;if&amp;lt;/code&amp;gt; statement – on the condition that &amp;lt;var&amp;gt;#read&amp;lt;/var&amp;gt; is zero which is the case as soon as there are no more names to read. The first argument to the &amp;lt;code&amp;gt;exit&amp;lt;/code&amp;gt; statement is 1, indicating that only the current macro is to end (and that execution shall continue with the calling macro). The second argument to the &amp;lt;code&amp;gt;exit&amp;lt;/code&amp;gt; statement is the result of the macro, in this case: the string to return (indicated by the string assignment type selector, &amp;lt;code&amp;gt;set&amp;lt;/code&amp;gt;). This string is built up from &amp;lt;var&amp;gt;#totcount&amp;lt;/var&amp;gt;, a semicolon, and &amp;lt;var&amp;gt;#count&amp;lt;/var&amp;gt;, and will hence contain the total number of persons and the number of {{STx}} programmers, separated by a semicolon.&lt;br /&gt;
;{{anchor|ckremark6|(6)}}: This statement uses the built-in &amp;lt;code&amp;gt;keyword&amp;lt;/code&amp;gt; function to investigate whether the current person is on the list of {{STX}} programmers.&lt;br /&gt;
&lt;br /&gt;
===Statements and Built-in Functions===&lt;br /&gt;
&lt;br /&gt;
Arguments to {{Stx}} statements and to built-in functions differ in several respects from macro calls:&lt;br /&gt;
&lt;br /&gt;
# One quoted string is always considered one argument, even if it contains whitespace characters.&lt;br /&gt;
# Hence there is no automatic string concatenation either.&lt;br /&gt;
# If (and only if) the statement or the function expects a numerical argument, you may supply a numerical expression instead of a number. This expression will be evaluated before executing the statement, or calling the built-in function, respectively.&lt;br /&gt;
&lt;br /&gt;
The first two issues are easily demonstrated by the following example:&lt;br /&gt;
&lt;br /&gt;
 #a := [[Programmer_Guide/Command_Reference/WORD|word]] 2 &#039;a b c&#039; d &#039;e&#039; f&lt;br /&gt;
 [[Programmer_Guide/Command_Reference/WRITELOG|writelog]] &#039;#a=&amp;quot;$#a&amp;quot;&#039; // value of #a is &amp;quot;e&amp;quot;&lt;br /&gt;
&lt;br /&gt;
Both quoted strings will be considered one argument each, and no concatenation will take place. Hence, the built-in &amp;lt;code&amp;gt;[[Programmer_Guide/Command_Reference/WORD|word]]&amp;lt;/code&amp;gt; function will return the string &amp;quot;e&amp;quot;, &amp;quot;e&amp;quot; being the third argument (index 2).&lt;br /&gt;
&lt;br /&gt;
More surprising is the third issue, but it, too, can be demonstrated by a simple example:&lt;br /&gt;
&lt;br /&gt;
 #a := [[Programmer_Guide/Command_Reference/WORD|word]] 1+1 &#039;a b c&#039; d &#039;e&#039; f&lt;br /&gt;
 [[Programmer_Guide/Command_Reference/WRITELOG|writelog]] &#039;#a=&amp;quot;$#a&amp;quot;&#039; // value of #a is &amp;quot;e&amp;quot;, too&lt;br /&gt;
&lt;br /&gt;
Since the &amp;quot;[[Programmer_Guide/Command_Reference/WORD|word]]&amp;quot; built-in expects its first argument to be a number, any numerical expression occurring at the respective position will be evaluated before calling &amp;quot;word&amp;quot;. Hence, this example will return &amp;quot;e&amp;quot;, too, because 1+1 equals 2. Compare this with the following statements:&lt;br /&gt;
&lt;br /&gt;
 #a := [[Programmer_Guide/Command_Reference/WORD|word]] 1+1 &#039;a b c&#039; d &#039;2+2&#039; f&lt;br /&gt;
 [[Programmer_Guide/Command_Reference/WRITELOG|writelog]] &#039;#a=&amp;quot;$#a&amp;quot;&#039; // value of #a is &amp;quot;2+2&amp;quot;&lt;br /&gt;
&lt;br /&gt;
Here what the third argument of the &amp;quot;[[Programmer_Guide/Command_Reference/WORD|word]]&amp;quot; built-in will return is the string &amp;quot;2+2&amp;quot;. This string does not get evaluated, because &amp;quot;[[Programmer_Guide/Command_Reference/WORD|word]]&amp;quot; expects a string argument (and not a numerical argument) at this position.&lt;br /&gt;
&lt;br /&gt;
Note that if the numerical expression is to contain whitespace (or if it cannot be precluded that it does, e.g. when it is built up using variable substitution), you need to quote the whole expression. This quite naturally leads to the following rule of thumb: Always quote numerical expressions that are arguments to a statement or to a built-in function. See the following example:&lt;br /&gt;
&lt;br /&gt;
 #i := [[Programmer_Guide/Command_Reference/INT|int]] 3-2&lt;br /&gt;
 #a := [[Programmer_Guide/Command_Reference/WORD|word]] &#039;$#i+2&#039; a b c d e&lt;br /&gt;
 [[Programmer_Guide/Command_Reference/WRITELOG|writelog]] &#039;#a=&amp;quot;$#a&amp;quot;&#039; // value of #a is &amp;quot;d&amp;quot;&lt;br /&gt;
&lt;br /&gt;
First of all, &amp;lt;var&amp;gt;#i&amp;lt;/var&amp;gt; gets assigned the difference between 3 and 2, that is 1. String substitution will change the string &amp;quot;&amp;lt;code&amp;gt;$#i+2&amp;lt;/code&amp;gt;&amp;quot; to &amp;quot;&amp;lt;code&amp;gt;1+2&amp;lt;/code&amp;gt;&amp;quot;, &amp;quot;&amp;lt;code&amp;gt;1&amp;lt;/code&amp;gt;&amp;quot; being the value of &amp;lt;var&amp;gt;#i&amp;lt;/var&amp;gt;. Finally, due to the fact that the &amp;quot;&amp;lt;code&amp;gt;[[Programmer_Guide/Command_Reference/WORD|word]]&amp;lt;/code&amp;gt;&amp;quot; function expects its first argument to be numerical, &amp;quot;&amp;lt;code&amp;gt;1+2&amp;lt;/code&amp;gt;&amp;quot; will be evaluated as a numerical expression, resulting in 3. So the fourth string argument, &amp;quot;d&amp;quot;, will be returned.&lt;br /&gt;
&lt;br /&gt;
===If Conditions are to be Tested===&lt;br /&gt;
&lt;br /&gt;
If conditions are to be tested, the &amp;quot;&amp;lt;code&amp;gt;[[Programmer_Guide/Command_Reference/IF|if]]&amp;lt;/code&amp;gt;&amp;quot; statement comes in handy. It actually does so in two flavours:&lt;br /&gt;
&lt;br /&gt;
 [[Programmer_Guide/Command_Reference/IF|if]] [[Programmer_Guide/Concepts/Conditional_Expressions|condition]] statement&lt;br /&gt;
&lt;br /&gt;
And:&lt;br /&gt;
&lt;br /&gt;
 [[Programmer_Guide/Command_Reference/IF|if]] [[Programmer_Guide/Concepts/Conditional_Expressions|condition]] then&lt;br /&gt;
 &lt;br /&gt;
    many statements&lt;br /&gt;
 &lt;br /&gt;
 else&lt;br /&gt;
 &lt;br /&gt;
    many more statements&lt;br /&gt;
 &lt;br /&gt;
 end&lt;br /&gt;
&lt;br /&gt;
Before going into more details about what conditions look like, a few simple examples should make things more clear:&lt;br /&gt;
&lt;br /&gt;
 [[Programmer_Guide/Command_Reference/IF|if]] &#039;$#a&#039; == &amp;lt;nowiki&amp;gt;&#039;&#039;&amp;lt;/nowiki&amp;gt; [[[[Programmer_Guide/Command_Reference/WRITELOG|writelog]] &#039;Variable #a is empty.&#039;&lt;br /&gt;
 &lt;br /&gt;
 [[Programmer_Guide/Command_Reference/IF|if]] &#039;1+2&#039; != 3 then&lt;br /&gt;
    // note the use of the {{STx}} escape character, the back-tick,&lt;br /&gt;
    // for building up a string that contains a quote character &lt;br /&gt;
    [[Programmer_Guide/Command_Reference/WRITELOG|writelog]] Wohllebenstraße, we`&#039;re having a problem. &lt;br /&gt;
 else&lt;br /&gt;
    [[Programmer_Guide/Command_Reference/WRITELOG|writelog]] All systems nominal.&lt;br /&gt;
 end&lt;br /&gt;
&lt;br /&gt;
 [[Programmer_Guide/Command_Reference/IF|if]] a &amp;gt; c then // character-wise comparison&lt;br /&gt;
    [[Programmer_Guide/Command_Reference/WRITELOG|writelog]] &#039;Detecting an unusual character set&#039;&lt;br /&gt;
 else &lt;br /&gt;
    [[Programmer_Guide/Command_Reference/WRITELOG|writelog]] &#039;Detecting a usual character set&#039;&lt;br /&gt;
 end&lt;br /&gt;
&lt;br /&gt;
 [[Programmer_Guide/Command_Reference/IF|if]] &#039;2+3&#039; != &#039;3+2&#039; writelog &#039;STX addition is not commutative&#039;&lt;br /&gt;
&lt;br /&gt;
Note that with the first, simple form of the &amp;quot;&amp;lt;code&amp;gt;[[Programmer_Guide/Command_Reference/IF|if]]&amp;lt;/code&amp;gt;&amp;quot; command, the statement to be executed in case of the condition being true must not be another &amp;quot;&amp;lt;code&amp;gt;if&amp;lt;/code&amp;gt;&amp;quot; command. (In simpler wording: &#039;&#039;Simple [[Programmer_Guide/Command_Reference/IF|if]] statements must not be nested.&#039;&#039;) Hence, it is not allowed to construct a statement like the following:&lt;br /&gt;
&lt;br /&gt;
 // BAD! NOT ALLOWED! ERRONEOUS! DON&#039;T DO IT!&lt;br /&gt;
 // COMBINING TWO SIMPLE &amp;quot;IF&amp;quot; STATEMENTS IS FORBIDDEN!&lt;br /&gt;
 &lt;br /&gt;
 if &#039;$a&#039; == &#039;$b&#039; if &#039;$c&#039; != &#039;$d&#039; writelog a and b are equal, but c and d are not&lt;br /&gt;
&lt;br /&gt;
If two or more &amp;quot;&amp;lt;code&amp;gt;[[Programmer_Guide/Command_Reference/IF|if]]&amp;lt;/code&amp;gt;&amp;quot; statements are to be combined, use their complex form instead:&lt;br /&gt;
&lt;br /&gt;
 if &#039;$a&#039; == &#039;$b&#039; then&lt;br /&gt;
    if &#039;$c&#039; != &#039;$d&#039; then&lt;br /&gt;
       [[Programmer_Guide/Command_Reference/WRITELOG|writelog]] &#039;a and b are equal, but c and d are not&#039;&lt;br /&gt;
    end&lt;br /&gt;
 end&lt;br /&gt;
&lt;br /&gt;
===Conditions, Formally Revisited===&lt;br /&gt;
&lt;br /&gt;
====Simple Comparison====&lt;br /&gt;
&lt;br /&gt;
Conditions basically compare two entities for being equal, or for one of them being less than, or higher than, or not higher than, or not less than, or quite unlike the other. All this is done with the comparison operators &amp;quot;&amp;lt;code&amp;gt;=&amp;lt;/code&amp;gt;&amp;quot;, &amp;quot;&amp;lt;code&amp;gt;&amp;amp;lt;&amp;lt;/code&amp;gt;&amp;quot;, &amp;quot;&amp;lt;code&amp;gt;&amp;amp;gt;&amp;lt;/code&amp;gt;&amp;quot;, &amp;quot;&amp;lt;code&amp;gt;&amp;amp;lt;=&amp;lt;/code&amp;gt;&amp;quot;, &amp;quot;&amp;lt;code&amp;gt;&amp;amp;gt;=&amp;lt;/code&amp;gt;&amp;quot;, and &amp;quot;&amp;lt;code&amp;gt;!=&amp;lt;/code&amp;gt;&amp;quot;. The arguments to these operators may either be strings, in which case a Unicode-based string comparison will take place, or numerical expressions, in which case a numerical comparison will take place. If the argument to a comparison operator looks like a numerical expression, it will be treated as such, even if the programmer did not mean that to happen.&lt;br /&gt;
&lt;br /&gt;
Note that unless the argument to a comparison operator is quoted, it must be separated from the operator by at least one whitespace character. This means that while &amp;quot;&amp;lt;code&amp;gt;&#039;$#a&#039;==&#039;1&#039;&amp;lt;/code&amp;gt;&amp;quot; (no whitespace, but quotes) and &amp;quot;&amp;lt;code&amp;gt;$#a == 1&amp;lt;/code&amp;gt;&amp;quot; (blanks between the operator and its arguments) are well-formed expressions, &amp;quot;&amp;lt;code&amp;gt;$#a==1&amp;lt;/code&amp;gt;&amp;quot; is not. (Yet another reason for always quoting everything, one might feel inclined to say.)&lt;br /&gt;
&lt;br /&gt;
See a number of simple examples:&lt;br /&gt;
&lt;br /&gt;
 if &#039;$#a&#039; &amp;gt; &#039;$#b*2&#039; writelog &#039;#a is more than twice as much as #b&#039;&lt;br /&gt;
 &lt;br /&gt;
 if &#039;int($#a)&#039; == &#039;$#a&#039; writelog &#039;#a is an integer&#039;&lt;br /&gt;
 &lt;br /&gt;
 if &#039;$#a&#039; == &#039;0+$#a&#039; then&lt;br /&gt;
    writelog &#039;#a is a number.&#039;&lt;br /&gt;
 else&lt;br /&gt;
    writelog &#039;#a is not a number.&#039;&lt;br /&gt;
 end&lt;br /&gt;
&lt;br /&gt;
All these examples show that numerical expressions occurring in comparisons will be evaluated. Hence, the first example will compare the value of &amp;lt;code&amp;gt;#a&amp;lt;/code&amp;gt; with twice the value of &amp;lt;code&amp;gt;#b&amp;lt;/code&amp;gt;. The second example will compare &amp;lt;code&amp;gt;#a&amp;lt;/code&amp;gt; with its integer part. If they are the same, we know that &amp;lt;code&amp;gt;#a&amp;lt;/code&amp;gt; must store an integer.&lt;br /&gt;
&lt;br /&gt;
The most interesting of these examples is the third one. What it does is check if the variable &amp;lt;code&amp;gt;#a&amp;lt;/code&amp;gt; is numeric, i.e. if it contains a number. For understanding how it does so you need to remember that {{STX}} evaluates numerical expressions only. Now, should &amp;lt;code&amp;gt;#a&amp;lt;/code&amp;gt; contain a number, say, 42, variable substitution will alter the expression &amp;quot;&amp;lt;code&amp;gt;if &#039;$#a&#039; == &#039;0+$#a&#039;&amp;lt;/code&amp;gt;&amp;quot; to &amp;quot;&amp;lt;code&amp;gt;if &#039;42&#039; == &#039;0+42&#039;&amp;lt;/code&amp;gt;&amp;quot;. Now since &amp;quot;&amp;lt;code&amp;gt;0+42&amp;lt;/code&amp;gt;&amp;quot; is a numerical expression (remember that single quotes do not matter), it will, in turn, be evaluated to 42 (0+42 equalling 42). This leads to the final statement &amp;quot;&amp;lt;code&amp;gt;if 42 == 42&amp;lt;/code&amp;gt;&amp;quot;. Since the number 42 is equal to 42, the condition will come out true, causing the &amp;quot;&amp;lt;code&amp;gt;then&amp;lt;/code&amp;gt;&amp;quot; branch to be executed.&lt;br /&gt;
&lt;br /&gt;
If, on the other hand, &amp;lt;code&amp;gt;#a&amp;lt;/code&amp;gt; contains a value that is not a number, say, the string &amp;quot;Hello&amp;quot;, variable substitution will alter the &amp;quot;&amp;lt;code&amp;gt;if&amp;lt;/code&amp;gt;&amp;quot; statement to &amp;quot;&amp;lt;code&amp;gt;if &#039;Hello&#039; == &#039;0+Hello&amp;lt;/code&amp;gt;&amp;quot;. Due to &amp;quot;&amp;lt;code&amp;gt;0+Hello&amp;lt;/code&amp;gt;&amp;quot; not being a numerical expression, there will be no evaluation, resulting in the string &amp;quot;&amp;lt;code&amp;gt;Hello&amp;lt;/code&amp;gt;&amp;quot; to be compared against the string &amp;quot;&amp;lt;code&amp;gt;0+Hello&amp;lt;/code&amp;gt;&amp;quot;. Since they are not identical, the &amp;quot;&amp;lt;code&amp;gt;else&amp;lt;/code&amp;gt;&amp;quot; branch will be executed.&lt;br /&gt;
&lt;br /&gt;
Note that there is one potential pitfall (and note the alliteration, too). Should #a consist of digits separated by whitespace, it will be considered a number (one number) anyway. So e.g. the string &amp;quot;&amp;lt;code&amp;gt;123 440 . 12&amp;lt;/code&amp;gt;&amp;quot; will be considered the number &amp;quot;123440.12&amp;quot;. This is a feature allowing for separating numbers into groups of digits (e.g. a group of ones, tenths, and hundreds, and a group of thousands, ten-thousands, and hundred-thousands).&lt;br /&gt;
&lt;br /&gt;
====Pattern Matching====&lt;br /&gt;
&lt;br /&gt;
Besides these comparison operators, there are matching operators, too. Matching may be considered a more powerful way of comparing strings that is able not only to find out if two strings are strictly identical, but also to find out whether they are similar in a way yet to be defined. With a matching operation, its first, left-hand side argument must be the string to match. Its second, right-hand side argument must be the &#039;&#039;pattern&#039;&#039; against which to match the string.&lt;br /&gt;
&lt;br /&gt;
===== Wildcard Pattern Matching=====&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;Wildcard patterns&#039;&#039; are similar to strings with the exception that they may contain wildcards (hence the name). With {{Stx}}, these wildcards are the asterisk, &amp;quot;*&amp;quot;, for matching a string of arbitrary length, and the question mark, &amp;quot;?&amp;quot;, for matching exactly one character.&lt;br /&gt;
&lt;br /&gt;
There are the following wildcard matching operators:&lt;br /&gt;
&lt;br /&gt;
; Wildcard string matching:&lt;br /&gt;
{| style=&amp;quot;margin-left: 1.5em;&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;code&amp;gt;=SI&amp;lt;/code&amp;gt;&lt;br /&gt;
|The string argument does match the pattern. Case will be ignored.&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;code&amp;gt;!SI&amp;lt;/code&amp;gt;&lt;br /&gt;
|The string does not match the pattern, not even regardless of case.&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;code&amp;gt;=SR&amp;lt;/code&amp;gt;&lt;br /&gt;
|The string argument matches the pattern case-sensitively.&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;code&amp;gt;!SR&amp;lt;/code&amp;gt;&lt;br /&gt;
|The string argument does not match the pattern when respecting case.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
; Wildcard name matching: Name matching is similar to string matching, the difference being that the string to match is expected to be a well-formed {{STX}} name. If this is not the case, the match will fail, even if the pattern would string-match the string. More precisely, matching a non-name string with &amp;lt;code&amp;gt;=N&amp;lt;/code&amp;gt; will always return false, whereas matching a non-name string with &amp;lt;code&amp;gt;!N&amp;lt;/code&amp;gt; will always succeed, regardless of the pattern used.&lt;br /&gt;
{| style=&amp;quot;margin-left: 1.5em;&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;code&amp;gt;=NI&amp;lt;/code&amp;gt;&lt;br /&gt;
|The name argument matches the pattern ignoring case.&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;code&amp;gt;!NI&amp;lt;/code&amp;gt;&lt;br /&gt;
|The name argument does not match the pattern, not even regardless of case.&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;code&amp;gt;=NR&amp;lt;/code&amp;gt;&lt;br /&gt;
|The name argument matches the pattern including case.&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;code&amp;gt;!NR&amp;lt;/code&amp;gt;&lt;br /&gt;
|The name argument does not match the pattern when respecting case.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Have a glance at the following examples:&lt;br /&gt;
&lt;br /&gt;
 if &#039;hallo&#039; =SI ha* writelog &#039;OK&#039; // 1&lt;br /&gt;
 if &#039;hallo&#039; =SI *ha* writelog &#039;OK&#039; // 2&lt;br /&gt;
 if &#039;hallo&#039; =SI h*o writelog &#039;OK&#039; // 3&lt;br /&gt;
 if &#039;hallx&#039; !NI ha*o writelog &#039;OK&#039; // 4&lt;br /&gt;
 if &#039;test&#039; !SI ha* writelog &#039;OK&#039; // 5&lt;br /&gt;
 if &#039;test&#039; !SI *ha* writelog &#039;OK&#039; // 6&lt;br /&gt;
 if &#039;test&#039; !SI h*o writelog &#039;OK&#039; // 7&lt;br /&gt;
 if &#039;h-o&#039; !NI h*o writelog &#039;OK&#039; // 8&lt;br /&gt;
 if &#039;test&#039; =SI t*t* writelog &#039;OK&#039; // 9&lt;br /&gt;
&lt;br /&gt;
Each of these comparisons should come out true, hence causing each statement to print the string &amp;quot;OK&amp;quot;. Let&#039;s have a look at a few of these examples in detail:&lt;br /&gt;
&lt;br /&gt;
The pattern, &amp;quot;&amp;lt;code&amp;gt;ha*&amp;lt;/code&amp;gt;&amp;quot;, will match any string starting with &amp;quot;&amp;lt;code&amp;gt;ha&amp;lt;/code&amp;gt;&amp;quot; – &amp;quot;&amp;lt;code&amp;gt;hallo&amp;lt;/code&amp;gt;&amp;quot; does. So &amp;quot;&amp;lt;code&amp;gt;=SI&amp;lt;/code&amp;gt;&amp;quot; will guarantee a positive outcome.&lt;br /&gt;
&lt;br /&gt;
The pattern &amp;quot;&amp;lt;code&amp;gt;h*o&amp;lt;/code&amp;gt;&amp;quot; will match any string whose first character is an &amp;quot;h&amp;quot; and whose last character is an &amp;quot;o&amp;quot;. Now, &amp;quot;&amp;lt;code&amp;gt;hallx&amp;lt;/code&amp;gt;&amp;quot; is no such string, but since we are using a negative comparison operator, &amp;quot;&amp;lt;code&amp;gt;!NI&amp;lt;/code&amp;gt;&amp;quot;, the whole thing comes out true since the pattern does not match. (Using &amp;quot;&amp;lt;code&amp;gt;!NI&amp;lt;/code&amp;gt;&amp;quot; instead of &amp;quot;&amp;lt;code&amp;gt;!SI&amp;lt;/code&amp;gt;&amp;quot; presupposes the string to be a well-formed {{STx}} name which, by chance, &amp;quot;&amp;lt;code&amp;gt;hallx&amp;lt;/code&amp;gt;&amp;quot; is. But compare statement 8.)&lt;br /&gt;
&lt;br /&gt;
The pattern &amp;quot;&amp;lt;code&amp;gt;h*o&amp;lt;/code&amp;gt;&amp;quot; normally matches any string starting with &amp;quot;h&amp;quot; and ending with &amp;quot;o&amp;quot;. That it does not match in this expression is because the &amp;quot;&amp;lt;code&amp;gt;NI&amp;lt;/code&amp;gt;&amp;quot; operator presupposes its argument to be a well-formed {{Stx}} name. Now, &amp;quot;&amp;lt;code&amp;gt;h-o&amp;lt;/code&amp;gt;&amp;quot; is no such name because it contains a minus sign, &amp;quot;&amp;lt;code&amp;gt;-&amp;lt;/code&amp;gt;&amp;quot;. So, the match fails by necessity, hence causing the negative expression &amp;quot;&amp;lt;code&amp;gt;!NI&amp;lt;/code&amp;gt;&amp;quot; to become true.&lt;br /&gt;
&lt;br /&gt;
If you are shaken by statement 8 of the previous example, you might want to try out for yourself the following macro:&lt;br /&gt;
&lt;br /&gt;
 if &#039;h-o&#039; !NI h*o writelog &#039;OK1&#039; // 1&lt;br /&gt;
 if &#039;h-o&#039; !SI h*o writelog &#039;OK2&#039; // 2&lt;br /&gt;
 if &#039;h-o&#039; =NI h*o writelog &#039;OK3&#039; // 3&lt;br /&gt;
 if &#039;h-o&#039; =SI h*o writelog &#039;OK4&#039; // 4&lt;br /&gt;
&lt;br /&gt;
What this will do is print out &amp;quot;OK1&amp;quot; and &amp;quot;OK4&amp;quot;, but neither &amp;quot;OK2&amp;quot; nor &amp;quot;OK3&amp;quot;. Do you see why?&lt;br /&gt;
&lt;br /&gt;
Well, first of all, the string &amp;quot;&amp;lt;code&amp;gt;h-o&amp;lt;/code&amp;gt;&amp;quot; is no valid {{STX}} name due to its containing the minus sign, &amp;quot;&amp;lt;code&amp;gt;-&amp;lt;/code&amp;gt;&amp;quot;. So every name-based comparison will fail before even considering the pattern argument. So the third comparison, &amp;quot;&amp;lt;code&amp;gt;=NI&amp;lt;/code&amp;gt;&amp;quot;, will fail though &amp;quot;&amp;lt;code&amp;gt;h-o&amp;lt;/code&amp;gt;&amp;quot; is a string starting with &amp;quot;h&amp;quot; and ending with &amp;quot;o&amp;quot;. Consequently, the expression inverting that condition (using &amp;quot;&amp;lt;code&amp;gt;!NI&amp;lt;/code&amp;gt;&amp;quot; instead of &amp;quot;&amp;lt;code&amp;gt;=NI&amp;lt;/code&amp;gt;&amp;quot;) will come out true, causing the first comparison to come out true.&lt;br /&gt;
&lt;br /&gt;
With the string-based comparison operators, things are different. Stringly put, the pattern &amp;quot;&amp;lt;code&amp;gt;h*o&amp;lt;/code&amp;gt;&amp;quot; does match the string &amp;quot;h-o&amp;quot;, that string actually starting with an &amp;quot;h&amp;quot; and ending with an &amp;quot;o&amp;quot;. So the positive operator, &amp;quot;&amp;lt;code&amp;gt;=SI&amp;lt;/code&amp;gt;&amp;quot;, will come out true, while, consequently, its negative form will come out false.&lt;br /&gt;
&lt;br /&gt;
===== Regular-Expression Pattern Matching=====&lt;br /&gt;
&lt;br /&gt;
Aside from the simple wildcard-patterns, {{Stx}} also supports full POSIX regular-expression pattern matching, using the open-source [https://github.com/laurikari/tre/ TRE] library. Here is not the place for introducing POSIX regular-expressions, but if you are familiar with that concept, you will find the following {{STx}} matching operations useful:&lt;br /&gt;
&lt;br /&gt;
; Regular-expression string matching:&lt;br /&gt;
{| style=&amp;quot;margin-left: 1.5em;&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;code&amp;gt;=RSI&amp;lt;/code&amp;gt;&lt;br /&gt;
|The string argument does match the regular expression. Case will be ignored.&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;code&amp;gt;!RSI&amp;lt;/code&amp;gt;&lt;br /&gt;
|The string does not match the regular expression, not even regardless of case.&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;code&amp;gt;=RSR&amp;lt;/code&amp;gt;&lt;br /&gt;
|The string argument matches the regular expression case-sensitively.&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;code&amp;gt;!RSR&amp;lt;/code&amp;gt;&lt;br /&gt;
|The string argument does not match the regular expression when respecting case.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
; Regular-expression name matching: This, too, is similar to regular-expression string matching, the difference being that the string to match is expected to be a well-formed {{STX}} name. If this is not the case, the match will fail, even if the regular expression would string-match the string.&lt;br /&gt;
{| style=&amp;quot;margin-left: 1.5em;&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;code&amp;gt;=RNI&amp;lt;/code&amp;gt;&lt;br /&gt;
|The name argument matches the regular expression &#039;&#039;ignoring case&#039;&#039;.&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;code&amp;gt;!RNI&amp;lt;/code&amp;gt;&lt;br /&gt;
|The name argument does not match the regular expression, not even regardless of case.&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;code&amp;gt;=RNR&amp;lt;/code&amp;gt;&lt;br /&gt;
|The name argument matches the regular expression including case.&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;code&amp;gt;!RNR&amp;lt;/code&amp;gt;&lt;br /&gt;
|The name argument does not match the regular expression when respecting case.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
====Building up Complex Expressions====&lt;br /&gt;
&lt;br /&gt;
You may combine more than one comparison either conjunctively, using the &amp;quot;&amp;lt;code&amp;gt;&amp;amp;&amp;amp;&amp;lt;/code&amp;gt;&amp;quot; operator, or disjunctively, using the &amp;quot;&amp;lt;code&amp;gt;&amp;amp;#124;&amp;amp;#124;&amp;lt;/code&amp;gt;&amp;quot; operator. There is, though, neither precedence nor grouping, meaning that (a) complex expressions will be evaluated strictly from left to right and that (b) you cannot use brackets for grouping sub-expressions. While the former is not strictly an offence once one gets used to it (other programming languages like APL behave very similarly), the latter may sometimes cause some programmer inconvenience. We will try addressing this issue a wee bit later.&lt;br /&gt;
&lt;br /&gt;
Evaluation stops as soon as the outcome is clear, but with {{Stx}}, this is only a performance issue (there is no such thing as built-in functions with side-effects, whereas command substitution, on the other hand, will always be done regardless of where the &amp;quot;&amp;lt;code&amp;gt;$(...)&amp;lt;/code&amp;gt;&amp;quot; expression actually occurs).&lt;br /&gt;
&lt;br /&gt;
See the following examples:&lt;br /&gt;
&lt;br /&gt;
 if 1 &amp;gt; 2 &amp;amp;#124;&amp;amp;#124; 3 &amp;gt; 1 writelog &#039;condition 1 is true&#039;&lt;br /&gt;
 &lt;br /&gt;
 if 1 &amp;gt; 2 &amp;amp;#124;&amp;amp;#124; 3 &amp;gt; 1 &amp;amp;&amp;amp; 0 == 1 writelog &#039;condition 2 is true&#039;&lt;br /&gt;
 &lt;br /&gt;
 if &#039;$#a+1&#039; &amp;lt; &#039;$#b*3&#039; &amp;amp;#124;&amp;amp;#124; &#039;$#c-7&#039; == &#039;$#d&#039; writelog &#039;condition 3 is true&#039;&lt;br /&gt;
&lt;br /&gt;
Whereas the first statement should be fairly clear, fully to understand the second statement requires being aware of {{STx}} strictly evaluating from left to right: For {{STX}}, the condition &amp;quot;&amp;lt;code&amp;gt;1 &amp;gt; 2 &amp;amp;#124;&amp;amp;#124; 3 &amp;gt; 1 &amp;amp;&amp;amp; 0 == 1&amp;lt;/code&amp;gt;&amp;quot; will mean the same as, for a human reader, &amp;quot;(1 &amp;gt; 2 or 3 &amp;gt; 1) and 0 == 1&amp;quot; would. The &amp;quot;and&amp;quot; (&amp;quot;&amp;lt;code&amp;gt;&amp;amp;&amp;amp;&amp;lt;/code&amp;gt;&amp;quot;) does not – as it normally does in logic and mathematics – take precedence over the &amp;quot;or&amp;quot; (&amp;quot;&amp;lt;code&amp;gt;&amp;amp;#124;&amp;amp;#124;&amp;lt;/code&amp;gt;&amp;quot;).&lt;br /&gt;
&lt;br /&gt;
{|&lt;br /&gt;
|-&lt;br /&gt;
|What you type&lt;br /&gt;
|What {{Stx}} does&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;code&amp;gt;$a &amp;amp;gt; $b &amp;amp;&amp;amp; $b &amp;amp;lt; $c &amp;amp;#124;&amp;amp;#124; $c &amp;amp;lt; $b &amp;amp;&amp;amp; $b &amp;amp;lt; $a&amp;lt;/code&amp;gt;&lt;br /&gt;
|&amp;lt;code&amp;gt;(($a &amp;gt; $b &amp;amp;&amp;amp; $b &amp;lt; $c) &amp;amp;#124;&amp;amp;#124; $c &amp;lt; $b) &amp;amp;&amp;amp; $b &amp;lt; $a&amp;lt;/code&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;code&amp;gt;$a &amp;lt; $b &amp;amp;&amp;amp; $a &amp;gt; 0 &amp;amp;#124;&amp;amp;#124; $b == -1&amp;lt;/code&amp;gt;&lt;br /&gt;
|&amp;lt;code&amp;gt;($a &amp;lt; $b &amp;amp;&amp;amp; $a &amp;gt; 0) &amp;amp;#124;&amp;amp;#124; $b == -1&amp;lt;/code&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;code&amp;gt;$a &amp;lt; $b &amp;amp;#124;&amp;amp;#124; $b &amp;gt; $a &amp;amp;&amp;amp; $invert == 1&amp;lt;/code&amp;gt;&lt;br /&gt;
|&amp;lt;code&amp;gt;($a &amp;lt; $b &amp;amp;#124;&amp;amp;#124; $b &amp;gt; $a) &amp;amp;&amp;amp; $invert == 1&amp;lt;/code&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;code&amp;gt;$a &amp;lt; $b &amp;amp;#124;&amp;amp;#124; ( $b &amp;gt; $a &amp;amp;&amp;amp; $invert == 1 )&amp;lt;/code&amp;gt;&lt;br /&gt;
|Syntax error (brackets are not allowed!)&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
From the theoretical standpoint, the lack of grouping (i.e. brackets) allows for a much faster evaluation. It does, though, sometimes force the programmer either to combine several &amp;quot;&amp;lt;code&amp;gt;if&amp;lt;/code&amp;gt;&amp;quot;-statements, or to alter his or her expression – that is why support for bracketing in logical expressions is under active consideration for {{STx}} versions to come. For the time being, here are a few examples on how to rewrite complex expressions:&lt;br /&gt;
&lt;br /&gt;
{|&lt;br /&gt;
|-&lt;br /&gt;
|What you mean to do&lt;br /&gt;
|What you need to do to do what you mean to do&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;code&amp;gt;if ($a &amp;gt; $b &amp;amp;&amp;amp; $b &amp;lt; $c) &amp;amp;#124;&amp;amp;#124; ($c &amp;lt; $b &amp;amp;&amp;amp; $b &amp;lt; $a) then&amp;lt;/code&amp;gt;&amp;lt;br&amp;gt;&amp;lt;code&amp;gt;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;statements&amp;amp;hellip;&amp;lt;/code&amp;gt;&amp;lt;br&amp;gt;&amp;lt;code&amp;gt;end&amp;lt;/code&amp;gt;&lt;br /&gt;
|&amp;lt;code&amp;gt;#flag := int 0&amp;lt;/code&amp;gt;&amp;lt;br&amp;gt;&amp;lt;code&amp;gt;if $a &amp;gt; $b &amp;amp;&amp;amp; $b &amp;lt; $c #flag := int 1&amp;lt;/code&amp;gt;&amp;lt;br&amp;gt;&amp;lt;code&amp;gt;if $c &amp;lt; $b &amp;amp;&amp;amp; $b &amp;lt; $a &amp;amp;#124;&amp;amp;#124; $#flag == 1 then&amp;lt;/code&amp;gt;&amp;lt;br&amp;gt;&amp;lt;code&amp;gt;&amp;amp;nbsp;statements&amp;amp;hellip;&amp;lt;/code&amp;gt;&amp;lt;br&amp;gt;&amp;lt;code&amp;gt;end&amp;lt;/code&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;code&amp;gt;if $a &amp;gt; 0 &amp;amp;#124;&amp;amp;#124; ( $a &amp;lt; 0 &amp;amp;&amp;amp; $b == int($b) ) then&amp;lt;/code&amp;gt;&amp;lt;br&amp;gt;&amp;lt;code&amp;gt;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;statements&amp;amp;hellip;&amp;lt;/code&amp;gt;&amp;lt;br&amp;gt;&amp;lt;code&amp;gt;end&amp;lt;/code&amp;gt;&lt;br /&gt;
|&amp;lt;code&amp;gt;if $a &amp;lt; 0 &amp;amp;&amp;amp; $b == int($b) &amp;amp;#124;&amp;amp;#124; $a &amp;gt; 0 then&amp;lt;/code&amp;gt;&amp;lt;br&amp;gt;&amp;lt;code&amp;gt;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;statements&amp;amp;hellip;&amp;lt;/code&amp;gt;&amp;lt;br&amp;gt;&amp;lt;code&amp;gt;end&amp;lt;/code&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;code&amp;gt;if ($a &amp;gt; $b) &amp;amp;&amp;amp; $b &amp;lt; $c) &amp;amp;#124;&amp;amp;#124;&amp;lt;/code&amp;gt;&amp;lt;br&amp;gt;&amp;lt;code&amp;gt;($c &amp;lt; $b &amp;amp;&amp;amp; $b &amp;lt; $a) &amp;amp;#124;&amp;amp;#124;&amp;lt;/code&amp;gt;&amp;lt;br&amp;gt;&amp;lt;code&amp;gt;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;($b &amp;lt; $c &amp;amp;&amp;amp; $c &amp;lt; $a) &amp;amp;#124;&amp;amp;#124;&amp;lt;/code&amp;gt;&amp;lt;br&amp;gt;&amp;lt;code&amp;gt;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;($b &amp;lt; $a &amp;amp;&amp;amp; $a &amp;lt; $c) then&amp;lt;/code&amp;gt;&amp;lt;br&amp;gt;&amp;lt;code&amp;gt;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;Statements&amp;amp;hellip;&amp;lt;/code&amp;gt;&amp;lt;br&amp;gt;&amp;lt;code&amp;gt;end&amp;lt;/code&amp;gt;&lt;br /&gt;
|&amp;lt;code&amp;gt;#flag := int 0&amp;lt;/code&amp;gt;&amp;lt;br&amp;gt;&amp;lt;code&amp;gt;if $a &amp;gt; $b &amp;amp;&amp;amp; $b &amp;lt; $c #flag := int 1&amp;lt;/code&amp;gt;&amp;lt;br&amp;gt;&amp;lt;code&amp;gt;if $c &amp;lt; $b &amp;amp;&amp;amp; $b &amp;lt; $a #flag := int 1&amp;lt;/code&amp;gt;&amp;lt;br&amp;gt;&amp;lt;code&amp;gt;if $b &amp;lt; $c &amp;amp;&amp;amp; $c &amp;lt; $a #flag := int 1&amp;lt;/code&amp;gt;&amp;lt;br&amp;gt;&amp;lt;code&amp;gt;if $b &amp;lt; $a &amp;amp;&amp;amp; $a &amp;lt; $c &amp;amp;#124;&amp;amp;#124; $#flag == 1 then&amp;lt;/code&amp;gt;&amp;lt;br&amp;gt;&amp;lt;code&amp;gt;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;statements&amp;amp;hellip;&amp;lt;/code&amp;gt;&amp;lt;br&amp;gt;&amp;lt;code&amp;gt;end&amp;lt;/code&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
====Reference====&lt;br /&gt;
* [[Programmer_Guide/Concepts/Conditional_Expressions|Conditional Expressions]] Reference in the {{STX}} Programmers&#039; Guide&lt;br /&gt;
&lt;br /&gt;
===While Loops Loop===&lt;br /&gt;
&lt;br /&gt;
While loops model our everyday concept of repeating a task until it finally has the desired outcome. With {{Stx}}, this is done as follows:&lt;br /&gt;
&lt;br /&gt;
 [[Programmer_Guide/Command_Reference/WHILE|while]] [[Programmer_Guide/Concepts/Conditional_Expressions|expression]]&lt;br /&gt;
 &lt;br /&gt;
    many statements&amp;amp;hellip;&lt;br /&gt;
 &lt;br /&gt;
 end&lt;br /&gt;
&lt;br /&gt;
With this code, {{STx}} will first evaluate the [[Programmer_Guide/Concepts/Conditional_Expressions|expression]] supplied to the &amp;quot;&amp;lt;code&amp;gt;[[Programmer_Guide/Command_Reference/WHILE|while]]&amp;lt;/code&amp;gt;&amp;quot; statement. If this expression happens to be true, all statements between the &amp;quot;&amp;lt;code&amp;gt;[[Programmer_Guide/Command_Reference/WHILE|while]]&amp;lt;/code&amp;gt;&amp;quot; and the corresponding &amp;quot;&amp;lt;code&amp;gt;[[Programmer_Guide/Command_Reference/END|end]]&amp;lt;/code&amp;gt;&amp;quot; statement are being executed once. Afterwards, {{STX}} again evaluates the very same [[Programmer_Guide/Concepts/Conditional_Expressions|expression]]. If it is still true, all the statements between the &amp;quot;&amp;lt;code&amp;gt;[[Programmer_Guide/Command_Reference/WHILE|while]]&amp;lt;/code&amp;gt;&amp;quot; and the &amp;quot;&amp;lt;code&amp;gt;[[Programmer_Guide/Command_Reference/END|end]]&amp;lt;/code&amp;gt;&amp;quot; statement are being executed once more. Then, again, the [[Programmer_Guide/Concepts/Conditional_Expressions|expression]] is evaluated&amp;amp;hellip; and so on, the effect being that all statements between the &amp;quot;&amp;lt;code&amp;gt;[[Programmer_Guide/Command_Reference/WHILE|while]]&amp;lt;/code&amp;gt;&amp;quot; and the &amp;quot;&amp;lt;code&amp;gt;[[Programmer_Guide/Command_Reference/END|end]]&amp;lt;/code&amp;gt;&amp;quot; statement are being executed &amp;quot;while&amp;quot; (i.e. as long as) the condition happens to be true.&lt;br /&gt;
&lt;br /&gt;
===For Loops to Be Organized===&lt;br /&gt;
&lt;br /&gt;
The &amp;quot;&amp;lt;code&amp;gt;[[Programmer_Guide/Command_Reference/FOR|for]]&amp;lt;/code&amp;gt;&amp;quot; statement is a more organized loop statement. Its syntax is the following:&lt;br /&gt;
&lt;br /&gt;
 [[Programmer_Guide/Command_Reference/FOR|for]] startcmd to [[Programmer_Guide/Concepts/Conditional_Expressions|whilecondition]] step changecmd&lt;br /&gt;
    many statements&amp;amp;hellip;&lt;br /&gt;
 end&lt;br /&gt;
&lt;br /&gt;
First of all, &amp;quot;&amp;lt;code&amp;gt;startcmd&amp;lt;/code&amp;gt;&amp;quot; – some arbitrary command – gets executed. Next, the expression &amp;quot;&amp;lt;code&amp;gt;[[Programmer_Guide/Concepts/Conditional_Expressions|whilecondition]]&amp;lt;/code&amp;gt;&amp;quot; gets evaluated. If it is false, the control flow will continue with the line immediately following the &amp;quot;end&amp;quot; statement. If, on the other hand, it is true, all the statements between &amp;quot;[[Programmer_Guide/Command_Reference/FOR|for]]&amp;quot; and &amp;quot;end&amp;quot; will be executed. Next, the &amp;quot;&amp;lt;code&amp;gt;changecmd&amp;lt;/code&amp;gt;&amp;quot; – again, any command of your choice – will be executed. After that, things will start all over, with &amp;quot;condition&amp;quot; being evaluated again.&lt;br /&gt;
&lt;br /&gt;
This is functionally equivalent to the following code snippet:&lt;br /&gt;
&lt;br /&gt;
 startcmd&lt;br /&gt;
 while whilecondition &lt;br /&gt;
    many statements&amp;amp;hellip;&lt;br /&gt;
    changecmd&lt;br /&gt;
 end&lt;br /&gt;
&lt;br /&gt;
So the &amp;lt;code&amp;gt;[[Programmer_Guide/Command_Reference/FOR|for]]&amp;lt;/code&amp;gt; statement does not introduce any new functionality. What it does, though, is saving space and making this certain kind of loop more readable.&lt;br /&gt;
&lt;br /&gt;
Note that the &amp;lt;code&amp;gt;[[Programmer_Guide/Command_Reference/FOR|for]]&amp;lt;/code&amp;gt; statement is modelled after the like-named statement of fashionable programming languages like C, C++, Java, or the author&#039;s all-time favourite AWK. From a semantical point of view, the keyword &amp;quot;&amp;lt;code&amp;gt;to&amp;lt;/code&amp;gt;&amp;quot; may seem slightly misleading. Suffice it to say that there is a lesser-known (and these days virtually extinct) Klingon dialect where the word &amp;quot;t&#039;o&amp;quot; means the same as the English imperative phrase &amp;quot;do this while&amp;quot; (at least we trust this statement to be hard to disprove).&lt;br /&gt;
&lt;br /&gt;
As an example, counting from 1 to 10, may serve the following &amp;quot;[[Programmer_Guide/Command_Reference/FOR|for]]&amp;quot; loop:&lt;br /&gt;
&lt;br /&gt;
 [[Programmer_Guide/Command_Reference/FOR|for]] #a := int 1 to $#a &amp;lt;= 10 step #a := int $#a + 1&lt;br /&gt;
    writelog &#039;at this stage, #a=$#a&#039;&lt;br /&gt;
 end&lt;br /&gt;
 exit&lt;br /&gt;
&lt;br /&gt;
===Forever and Ever===&lt;br /&gt;
&lt;br /&gt;
People often feel uneasy with the rapid change and the lack of durability in today&#039;s fast-paced environment. {{Stx}} addresses these issues with the &amp;quot;&amp;lt;code&amp;gt;[[Programmer_Guide/Command_Reference/FOREVER|forever]]&amp;lt;/code&amp;gt;&amp;quot; statement that allows for enduring, long-term code execution. In fact, &amp;quot;&amp;lt;code&amp;gt;[[Programmer_Guide/Command_Reference/FOREVER|forever]]&amp;lt;/code&amp;gt;&amp;quot; will start a flow of execution that never ends:&lt;br /&gt;
&lt;br /&gt;
 [[Programmer_Guide/Command_Reference/FOREVER|forever]]&lt;br /&gt;
    eternal statements&amp;amp;hellip;&lt;br /&gt;
 end&lt;br /&gt;
&lt;br /&gt;
This kind of loop will cause the statements between &amp;quot;&amp;lt;code&amp;gt;[[Programmer_Guide/Command_Reference/FOREVER|forever]]&amp;lt;/code&amp;gt;&amp;quot; and &amp;quot;&amp;lt;code&amp;gt;end&amp;lt;/code&amp;gt;&amp;quot; to be processed for eternity (or until your computer breaks down, whichever happens first).&lt;br /&gt;
&lt;br /&gt;
===Ending a Loop Prematurely: Break and Continue===&lt;br /&gt;
&lt;br /&gt;
If {{STx}} encounters the &amp;quot;&amp;lt;code&amp;gt;[[Programmer_Guide/Command_Reference/BREAK|break]]&amp;lt;/code&amp;gt;&amp;quot; statement within the body of a loop, this very loop gets at once terminated. Control flow will resume at the statement immediately following the &amp;quot;&amp;lt;code&amp;gt;end&amp;lt;/code&amp;gt;&amp;quot; statement at the end of the loop.&lt;br /&gt;
&lt;br /&gt;
The &amp;quot;&amp;lt;code&amp;gt;[[Programmer_Guide/Command_Reference/CONTINUE|continue]]&amp;lt;/code&amp;gt;&amp;quot; statement will have a different effect: Whenever {{STX}} encounters this kind of statement, it will directly pass to the next run of this loop, ignoring any statements between the &amp;quot;&amp;lt;code&amp;gt;[[Programmer_Guide/Command_Reference/BREAK|break]]&amp;lt;/code&amp;gt;&amp;quot; statement and the &amp;quot;&amp;lt;code&amp;gt;end&amp;lt;/code&amp;gt;&amp;quot; statement at the end of this loop.&lt;br /&gt;
&lt;br /&gt;
Consider the following example:&lt;br /&gt;
&lt;br /&gt;
 // print odd numbers less than 20 that are not a multiple of 3&lt;br /&gt;
 &lt;br /&gt;
 #i := 0 &lt;br /&gt;
 forever&lt;br /&gt;
    #i := int $#i + 1&lt;br /&gt;
    if &#039;$#i&#039; &amp;gt;= 20 break&lt;br /&gt;
 &lt;br /&gt;
    // note that &amp;quot;int&amp;quot; here is an in-place function truncating the&lt;br /&gt;
    // fractional part off a number&lt;br /&gt;
    if &#039;$#i/3&#039; == &#039;int($#i/3)&#039; || &#039;$#i/2&#039; == &#039;int($#i/2)&#039; continue&lt;br /&gt;
 &lt;br /&gt;
    writelog &#039;$#i is neither a multiple of 3 nor even&#039;&lt;br /&gt;
 end&lt;br /&gt;
 writelog &#039;Done.&#039;&lt;br /&gt;
 exit&lt;br /&gt;
&lt;br /&gt;
Though not at all an example in style, the above loop surely demonstrates the use of both the &amp;quot;&amp;lt;code&amp;gt;[[Programmer_Guide/Command_Reference/BREAK|break]]&amp;lt;/code&amp;gt;&amp;quot; and the &amp;quot;&amp;lt;code&amp;gt;[[Programmer_Guide/Command_Reference/CONTINUE|continue]]&amp;lt;/code&amp;gt;&amp;quot; statement. The basic idea of this loop is to run forever, with each pass increasing &amp;lt;code&amp;gt;#i&amp;lt;/code&amp;gt; by one. Immediately after increasing &amp;lt;code&amp;gt;#i&amp;lt;/code&amp;gt; is where the &amp;quot;&amp;lt;code&amp;gt;break&amp;lt;/code&amp;gt;&amp;quot; statement finds its use: &amp;lt;code&amp;gt;#i&amp;lt;/code&amp;gt; is being compared against twenty, and after having reached this upper limit, the whole loop will be terminated. Execution will continue with the first statement after the &amp;quot;end&amp;quot; statement of the respective loop. In our example, this first statement is the call to the built-in &amp;quot;&amp;lt;code&amp;gt;writelog&amp;lt;/code&amp;gt;&amp;quot; statement printing out the string &amp;quot;Done.&amp;quot;&lt;br /&gt;
&lt;br /&gt;
The next issue demonstrated here is the &amp;quot;&amp;lt;code&amp;gt;continue&amp;lt;/code&amp;gt;&amp;quot; statement. After having ensured that &amp;lt;code&amp;gt;#i&amp;lt;/code&amp;gt; has not reached its desired upper limit, &amp;lt;code&amp;gt;#i&amp;lt;/code&amp;gt; is being checked for being either a multiple of 3, being a multiple of 2, or both. If so happens, {{Stx}} will &amp;quot;continue&amp;quot; the loop, i.e. omit its remaining part (in our case, the &amp;quot;&amp;lt;code&amp;gt;writelog&amp;lt;/code&amp;gt;&amp;quot; statement), and continue with its first statement.&lt;br /&gt;
&lt;br /&gt;
Should the loop to be &amp;quot;continued&amp;quot; be a &amp;quot;&amp;lt;code&amp;gt;[[Programmer_Guide/Command_Reference/FOR|for]]&amp;lt;/code&amp;gt;&amp;quot; or &amp;quot;&amp;lt;code&amp;gt;[[Programmer_Guide/Command_Reference/WHILE|while]]&amp;lt;/code&amp;gt;&amp;quot; loop, the next run of the loop will begin normally, that is with testing the expression supplied to the &amp;quot;&amp;lt;code&amp;gt;[[Programmer_Guide/Command_Reference/FOR|for]]&amp;lt;/code&amp;gt;&amp;quot; or &amp;quot;&amp;lt;code&amp;gt;[[Programmer_Guide/Command_Reference/WHILE|while]]&amp;lt;/code&amp;gt;&amp;quot; statement. Should it prove false, the loop will terminate. In the case of a &amp;quot;&amp;lt;code&amp;gt;[[Programmer_Guide/Command_Reference/FOR|for]]&amp;lt;/code&amp;gt;&amp;quot; loop, its &amp;quot;&amp;lt;code&amp;gt;changecmd&amp;lt;/code&amp;gt;&amp;quot; (see above), too, will be executed normally, i.e., before checking the condition.&lt;br /&gt;
&lt;br /&gt;
===Statements Considered Useful: goto, gosub, and gosubx===&lt;br /&gt;
&lt;br /&gt;
Each statement in an {{STx}} script may be labelled. The name of a label may consist of letters, digits, and underscores (though it must not start with a digit). The label must be immediately followed by a colon (that&#039;s necessary because otherwise there would be no way to discern between labels and macro calls). Note that labels are local to the macro they are part of. It is hence not possible to jump to a label that is part of a macro different from the executing macro (and it is possible to use labels of the same name in more than one macro).&lt;br /&gt;
&lt;br /&gt;
When using a label, you may at any time divert the flow of control to that label. This is done with the &amp;quot;&amp;lt;code&amp;gt;[[Programmer_Guide/Command_Reference/GOTO|goto]]&amp;lt;/code&amp;gt;&amp;quot; command. Though it has come out of fashion recently, the &amp;quot;&amp;lt;code&amp;gt;[[Programmer_Guide/Command_Reference/GOTO|goto]]&amp;lt;/code&amp;gt;&amp;quot; command allows for very efficient diversions in the control flow that may be really hard to follow.&lt;br /&gt;
&lt;br /&gt;
Contrary to most other programming languages, {{STX}} allows &amp;quot;&amp;lt;code&amp;gt;[[Programmer_Guide/Command_Reference/GOTO|goto]]&amp;lt;/code&amp;gt;&amp;quot; to be supplied not only one, but even two labels. If this is the case, {{Stx}} first tries to go to the first label. Only if there happens to be no such label, {{STx}} falls back to the second label and tries to go there. If the second label is not present either, the &amp;quot;&amp;lt;code&amp;gt;[[Programmer_Guide/Command_Reference/GOTO|goto]]&amp;lt;/code&amp;gt;&amp;quot; command will do nothing (it will leave an error code in the variable &amp;lt;code&amp;gt;rc&amp;lt;/code&amp;gt;, though, but most programmers do not check for errors anyway).&lt;br /&gt;
&lt;br /&gt;
The following loop will count from 1 to 10 (compare this with the &amp;quot;&amp;lt;code&amp;gt;[[Programmer_Guide/Command_Reference/FOR|for]]&amp;lt;/code&amp;gt;&amp;quot; loop of the last example in the previous chapter):&lt;br /&gt;
&lt;br /&gt;
 #a := int 0&lt;br /&gt;
 looping:&lt;br /&gt;
    if &#039;$#a&#039; &amp;gt;= 10 [[Programmer_Guide/Command_Reference/GOTO|goto]] endloop&lt;br /&gt;
    #a := int $#a + 1&lt;br /&gt;
    writelog &#039;at this stage, a=$#a&#039;&lt;br /&gt;
    [[Programmer_Guide/Command_Reference/GOTO|goto]] looping&lt;br /&gt;
 endloop:&lt;br /&gt;
    writelog &#039;let it be&#039;&lt;br /&gt;
    exit&lt;br /&gt;
&lt;br /&gt;
A different issue is the &amp;quot;&amp;lt;code&amp;gt;[[Programmer_Guide/Command_Reference/GOSUB|gosub]]&amp;lt;/code&amp;gt;&amp;quot; command. It is very similar to calling a macro: A new execution environment will be created, and control will resume at the label referred to by the &amp;quot;&amp;lt;code&amp;gt;[[Programmer_Guide/Command_Reference/GOSUB|gosub]]&amp;lt;/code&amp;gt;&amp;quot; command. When (and if) the control flow reaches an &amp;quot;&amp;lt;code&amp;gt;[[Programmer_Guide/Command_Reference/EXIT|exit]]&amp;lt;/code&amp;gt;&amp;quot; command, this execution environment will be destroyed, and control will resume with the line immediately following the &amp;quot;&amp;lt;code&amp;gt;[[Programmer_Guide/Command_Reference/GOSUB|gosub]]&amp;lt;/code&amp;gt;&amp;quot; command that caused all that to happen. Summarizing things up, the code called by the &amp;quot;&amp;lt;code&amp;gt;[[Programmer_Guide/Command_Reference/GOSUB|gosub]]&amp;lt;/code&amp;gt;&amp;quot; statement will see all variables empty. Furthermore, any changes made during the statements invoked using &amp;quot;&amp;lt;code&amp;gt;[[Programmer_Guide/Command_Reference/GOSUB|gosub]]&amp;lt;/code&amp;gt;&amp;quot; will get lost on returning. This is a very powerful feature.&lt;br /&gt;
&lt;br /&gt;
The &amp;quot;&amp;lt;code&amp;gt;[[Programmer_Guide/Command_Reference/GOSUBX|gosubx]]&amp;lt;/code&amp;gt;&amp;quot; statement differs from the &amp;quot;&amp;lt;code&amp;gt;[[Programmer_Guide/Command_Reference/GOSUB|gosub]]&amp;lt;/code&amp;gt;&amp;quot; command in that no separate execution environment is being created. Hence, the code will see all variables having their current value, and, conversely, any changes in variables done by the called code will remain in effect after returning. This, too, is always a powerful, sometimes a desired feature, and seldom easy to follow.&lt;br /&gt;
&lt;br /&gt;
Compare the effect of the &amp;quot;&amp;lt;code&amp;gt;[[Programmer_Guide/Command_Reference/GOSUB|gosub]]&amp;lt;/code&amp;gt;&amp;quot; and the &amp;quot;&amp;lt;code&amp;gt;[[Programmer_Guide/Command_Reference/GOSUBX|gosubx]]&amp;lt;/code&amp;gt;&amp;quot; commands in the following example:&lt;br /&gt;
&lt;br /&gt;
 #a := 5&lt;br /&gt;
 [[Programmer_Guide/Command_Reference/GOSUB|gosub]] subroutine&lt;br /&gt;
 writelog &#039;a after gosubbing subroutine: $#a (no change!)&#039;&lt;br /&gt;
 [[Programmer_Guide/Command_Reference/GOSUBX|gosubx]] subroutine&lt;br /&gt;
 writelog &#039;a after gosubxing subroutine: $#a (changed!)&#039;&lt;br /&gt;
 exit&lt;br /&gt;
 &lt;br /&gt;
 subroutine:&lt;br /&gt;
    // should #a be unset, numerical evaluation will fail&lt;br /&gt;
    #a := int $#a + 5&lt;br /&gt;
    writelog &#039;value of a in subroutine: $#a&#039;&lt;br /&gt;
    exit&lt;br /&gt;
&lt;br /&gt;
Note that we do not actually dare to recommend using any of these statements, and that we strongly encourage structured programming (using &amp;quot;&amp;lt;code&amp;gt;[[Programmer_Guide/Command_Reference/FOR|for]]&amp;lt;/code&amp;gt;&amp;quot; and &amp;quot;&amp;lt;code&amp;gt;[[Programmer_Guide/Command_Reference/WHILE|while]]&amp;lt;/code&amp;gt;&amp;quot; loops and breaking program code into macros). There may, however, be cases where the real programmer finds that he or she can do many interesting things with the help of the statements considered harmful since Dijkstra&#039;s famous letter.&lt;br /&gt;
&lt;br /&gt;
==Shell Items: An Overview==&lt;br /&gt;
&lt;br /&gt;
[[Programmer_Guide/Shell_Items|Shell items]] are a kind of their own. Each shell item has a handle – actually kind of an internal name – that is not normally directly known to the programmer. Shell items may be created using the &amp;quot;&amp;lt;code&amp;gt;[[Programmer_Guide/Command_Reference/NEW|new]]&amp;lt;/code&amp;gt;&amp;quot; command, and they may – and should – be disposed of properly after use which is done with the &amp;quot;&amp;lt;code&amp;gt;[[Programmer_Guide/Command_Reference/DELETE|delete]]&amp;lt;/code&amp;gt;&amp;quot; command. The handle to a shell item is normally stored in an {{STX}} variable.&lt;br /&gt;
&lt;br /&gt;
There are different sorts of shell items, the most important being [[Programmer_Guide/Shell_Items/File|file items]] (representing disk files), [[Programmer_Guide/Shell_Items/Graph|graph items]] (representing graphs visible to the user), [[Programmer_Guide/Shell_Items/Dialog|dialog items]] (representing GUI dialogs, menus, windows, and the like), [[Programmer_Guide/Shell_Items/Table|table items]] (representing in-memory databases, numerical vectors, and matrices), [[Programmer_Guide/Shell_Items/Value|value items]] (providing things as diverse as timers, and fast matrix operations), [[Programmer_Guide/Shell_Items/Wave|wave items]] (for handling soundfiles), and instances of user-defined classes. We will come to each of them later (or at least to most of them).&lt;br /&gt;
&lt;br /&gt;
Beginners occasionally find it difficult to grasp the difference between a variable and a shell item. It is often helpful to remember the following properties:&lt;br /&gt;
&lt;br /&gt;
# Shell items are very complex objects like files or tables that normally consist of many parts (e.g. the rows and columns of a table, or the records of a file) most of which are themselves complex objects.&lt;br /&gt;
# Variables, on the other hand, are very simple and dumb things: They store one string each – nothing complex in that.&lt;br /&gt;
# Shell items are referred to by their handle, variables by their name.&lt;br /&gt;
# You usually store the handle of a shell item in a variable.&lt;br /&gt;
# You usually do not access a shell item directly, but by using the variable storing its item handle.&lt;br /&gt;
# For using a variable, i.e. accessing its contents, you need the dollar sign (&amp;quot;$&amp;quot;). Opposed to this there is no dollar sign with item handles, because there is no such thing as a simple content of an item.&lt;br /&gt;
&lt;br /&gt;
You may at any time request some action from an existing shell item. For doing so, you use the following command:&lt;br /&gt;
&lt;br /&gt;
 set &amp;lt;var&amp;gt;itemhandle&amp;lt;/var&amp;gt; actionrequest&lt;br /&gt;
&lt;br /&gt;
Here &amp;quot;&amp;lt;var&amp;gt;itemhandle&amp;lt;/var&amp;gt;&amp;quot; is the internal handle of the respective {{Stx}} item, and the exact nature of &amp;quot;&amp;lt;code&amp;gt;actionrequest&amp;lt;/code&amp;gt;&amp;quot; depends on what kind of item you are dealing with; you may, e.g., request a table item to add or remove one or more rows, or a file item to write or to read data.&lt;br /&gt;
&lt;br /&gt;
Since requesting some item to do something is such common a task, you may abbreviate it by completely omitting the &amp;quot;&amp;lt;code&amp;gt;set&amp;lt;/code&amp;gt;&amp;quot; command. This means that instead of &amp;quot;&amp;lt;code&amp;gt;set itemhandle actionrequest&amp;lt;/code&amp;gt;&amp;quot;, you may at any time type the following command:&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;var&amp;gt;itemhandle&amp;lt;/var&amp;gt; actionrequest&lt;br /&gt;
&lt;br /&gt;
So there would actually be no need of even knowing about the &amp;quot;&amp;lt;code&amp;gt;set&amp;lt;/code&amp;gt;&amp;quot; command, were it not for the fact that with the {{STx}} online help, you find the actions each kind of item supports under the keyword &amp;quot;&amp;lt;code&amp;gt;set itemtype&amp;lt;/code&amp;gt;&amp;quot; (&amp;lt;code&amp;gt;[[Programmer_Guide/Shell_Items/Table/SET_TABLE|set table]]&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;[[Programmer_Guide/Shell_Items/Dialog/SET_DIALOG|SET DIALOG]]&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;[[Programmer_Guide/Shell_Items/Graph/SET_GRAPH|SET GRAPH]]&amp;lt;/code&amp;gt;, and so on).&lt;br /&gt;
&lt;br /&gt;
Let&#039;s have a first simple example on how shell items are normally used:&lt;br /&gt;
&lt;br /&gt;
 // create a table whose handle is called &amp;quot;myhandle&amp;quot;&lt;br /&gt;
 [[Programmer_Guide/Shell_Items/Table/NEW_TABLE|new table]] myhandle&lt;br /&gt;
 &lt;br /&gt;
 // set third line (first and second line will be created empty)&lt;br /&gt;
 [[Programmer_Guide/Shell_Items/Table/SET_TABLE|set]] myhandle 2 &#039;third line&#039; // explicitly using &amp;quot;set&amp;quot;&lt;br /&gt;
 &lt;br /&gt;
 // replace empty first line with a string&lt;br /&gt;
 [[Programmer_Guide/Shell_Items/Table/SET_TABLE|myhandle]] 0 &#039;first line&#039; // not using &amp;quot;set&amp;quot; works just as well&lt;br /&gt;
 &lt;br /&gt;
 // now replace the second line, too&lt;br /&gt;
 [[Programmer_Guide/Shell_Items/Table/SET_TABLE|myhandle]] 1 &#039;second line&#039;&lt;br /&gt;
 &lt;br /&gt;
 // show the table&lt;br /&gt;
 [[Programmer_Guide/Macro_Library/StdLib#ShowItem|showitem]] myhandle ; Showing table &amp;quot;myhandle&amp;quot;&lt;br /&gt;
 &lt;br /&gt;
 // now, just for the fun of it, delete the second row – note that, again,&lt;br /&gt;
 // either using &amp;quot;set&amp;quot; or omitting it makes no change at all&lt;br /&gt;
 [[Programmer_Guide/Shell_Items/Table/SET_TABLE|myhandle]] myhandle 1 /Delete&lt;br /&gt;
 &lt;br /&gt;
 // finally, show the reduced table&lt;br /&gt;
 [[Programmer_Guide/Macro_Library/StdLib#ShowItem|showitem]] myhandle; Showing table myhandle&amp;quot; after deleting its second row&lt;br /&gt;
 &lt;br /&gt;
 [[Programmer_Guide/Command_Reference/DELETE|delete]] myhandle // don&#039;t forget to delete the item after use&lt;br /&gt;
&lt;br /&gt;
In this example, we create a table item whose handle is the string &amp;quot;&amp;lt;code&amp;gt;myhandle&amp;lt;/code&amp;gt;&amp;quot;. Any further access to this item is done with this handle. Note that there is no dollar sign when using &amp;quot;&amp;lt;code&amp;gt;myhandle&amp;lt;/code&amp;gt;&amp;quot;, because &amp;quot;&amp;lt;code&amp;gt;myhandle&amp;lt;/code&amp;gt;&amp;quot; is not a variable, but an item handle. If, by mistake, we would use the expression &amp;quot;&amp;lt;code&amp;gt;$myhandle&amp;lt;/code&amp;gt;&amp;quot;, {{STX}} would replace this expression by the contents of the shell-global variable &amp;quot;&amp;lt;code&amp;gt;myhandle&amp;lt;/code&amp;gt;&amp;quot; – an empty string in case of there being no such variable, and surely an undesired result. Bluntly put: Item handles and variables reside in different namespaces, and you may well have like-named variables and item handles (of course this is not at all recommended because it may lead to some degree of confusion.)&lt;br /&gt;
&lt;br /&gt;
All that being said, it is, common practice not to choose a handle of one&#039;s own, but to let {{Stx}} do the choosing. In this case, the automatically chosen handle is normally stored in an {{STx}} variable:&lt;br /&gt;
&lt;br /&gt;
 // create a table item with a handle of STX&#039;s choice (e.g. T#27)&lt;br /&gt;
 // (the asterisk instructs {{STX}} to choose a handle on its own).&lt;br /&gt;
 // the handle will be stored in a variable called &amp;quot;#tab&amp;quot;&lt;br /&gt;
 #tab := [[Programmer_Guide/Shell_Items/Table/NEW_TABLE|new table]] *&lt;br /&gt;
 &lt;br /&gt;
 // set third line (first and second line will be created empty)&lt;br /&gt;
 [[Programmer_Guide/Shell_Items/Table/SET_TABLE|$#tab]] 2 &#039;third line&#039;&lt;br /&gt;
 &lt;br /&gt;
 // replace empty first line with a string&lt;br /&gt;
 [[Programmer_Guide/Shell_Items/Table/SET_TABLE|$#tab]] 0 &#039;first line&#039;&lt;br /&gt;
 &lt;br /&gt;
 // now replace the second line, too&lt;br /&gt;
 [[Programmer_Guide/Shell_Items/Table/SET_TABLE|$#tab]] 1 &#039;second line&#039;&lt;br /&gt;
 &lt;br /&gt;
 // show the table&lt;br /&gt;
 [[Programmer_Guide/Macro_Library/StdLib#ShowItem|showitem]] $#tab ; Showing table &amp;quot;#tab&amp;quot;&lt;br /&gt;
 &lt;br /&gt;
 // now, just for fun, delete the second row&lt;br /&gt;
 [[Programmer_Guide/Shell_Items/Table/SET_TABLE|$#tab]] 1 /Delete&lt;br /&gt;
 &lt;br /&gt;
 // finally, show the reduced table&lt;br /&gt;
 [[Programmer_Guide/Macro_Library/StdLib#ShowItem|showitem]] $#tab ; Showing table &amp;quot;#tab&amp;quot; after deleting second row&lt;br /&gt;
 &lt;br /&gt;
 // old-style deletion&lt;br /&gt;
 // [[Programmer_Guide/Command_Reference/DELETE|delete]] $#tab    // important: delete after use&lt;br /&gt;
 // #tab := set &amp;lt;nowiki&amp;gt;&#039;&#039;&amp;lt;/nowiki&amp;gt;  // clean the variable&lt;br /&gt;
 &lt;br /&gt;
 // new-style deletion - deletes the shell item whose name is stored in a variable,&lt;br /&gt;
 //                      &#039;&#039;and&#039;&#039; clears the variable&lt;br /&gt;
 [[Programmer_Guide/Command_Reference/DELETE|delete]] /Var #tab   // no dollar here!&lt;br /&gt;
&lt;br /&gt;
N.B.: Whenever actively allocating a shell item (normally with the &amp;quot;&amp;lt;code&amp;gt;[[Programmer_Guide/Command_Reference/NEW|new]]&amp;lt;/code&amp;gt;&amp;quot; command), you should always delete it as soon as you no longer need it. If you don&#039;t, your macro(s) will consume an unnecessarily high amount of memory which may, for large macro applications, impair performance. There is no such thing as automatic garbage collection in {{Stx}}.&lt;br /&gt;
&lt;br /&gt;
===Shell Tables in Detail===&lt;br /&gt;
&lt;br /&gt;
There are three kinds of tables: (a) [[Programmer_Guide/Concepts/Simple_table|plain, or simple, tables]], (b) [[Programmer_Guide/Concepts/Parameter_table|parameter tables]], and (c) [[Programmer_Guide/Concepts/Extended_table|extended tables]] (I do not mention [[Programmer_Guide/Concepts/Directory_table|directory tables]] here, and I do not even mention that I do not mention [[Programmer_Guide/Concepts/Directory_table|directory tables]] here). [[Programmer_Guide/Concepts/Simple_table|plain, or simple, tables]] are easiest to handle, and they are most useful for storing lists of strings, each table entry being one such string. [[Programmer_Guide/Concepts/Extended_table|Extended tables]] are such that tables more versatile than them cannot be conceived: [[Programmer_Guide/Concepts/Extended_table|Extended tables]] tables may consist of an arbitrary number of columns each of which may be a string, an {{STx}} name, an integer, or a general number. Access to each column may be done, at the programmer&#039;s discretion, either by its index or by its symbolic name. [[Programmer_Guide/Concepts/Parameter_table|Parameter tables]], in turn, are a somewhat reduced variant of extended tables, in that they store numbers only. On the other hand, parameter tables do so most efficiently, both memory-wise and runtime-wise. This makes [[Programmer_Guide/Concepts/Parameter_table|parameter tables]] the preferred means of storing numerical vectors and matrices, and for doing numerical operations of the utmost complicated kinds. The following chapters will deal with each kind of table in detail.&lt;br /&gt;
&lt;br /&gt;
====Plain, or Simple, Tables====&lt;br /&gt;
&lt;br /&gt;
[[Programmer_Guide/Concepts/Simple_table|Plain tables]] are mainly useful for storing lists of strings. As always, these strings may be of arbitrary content, allowing for e.g. logically storing multiple values per row that are, in turn, retrieved by the &amp;quot;&amp;lt;code&amp;gt;readstr&amp;lt;/code&amp;gt;&amp;quot; or even the &amp;quot;&amp;lt;code&amp;gt;readtab&amp;lt;/code&amp;gt;&amp;quot; command (the [[Programmer_Guide/Command_Reference/READ|READ family of commands]]). Be this as it may, with the availability of the more efficient extended tables for database-like structured data, and of parameter tables for structured numerical data like vectors and matrices, storing structured data in plain tables is no longer recommended.&lt;br /&gt;
&lt;br /&gt;
The &amp;quot;&amp;lt;code&amp;gt;[[Programmer_Guide/Shell_Items/Table/NEW_TABLE|new table]] *&amp;lt;/code&amp;gt;&amp;quot; command creates a plain table item. The name of this table item will be stored in the reserved variable &amp;quot;&amp;lt;code&amp;gt;#new&amp;lt;/code&amp;gt;&amp;quot;. Furthermore, it will be the result of the &amp;quot;&amp;lt;code&amp;gt;[[Programmer_Guide/Shell_Items/Table/NEW_TABLE|new table]] *&amp;lt;/code&amp;gt;&amp;quot; command. The asterisk, though strictly instructing {{STX}} to choose an internal name on its own, should be considered a part of the command and should not normally be altered.&lt;br /&gt;
&lt;br /&gt;
Have a look at the following example using simple tables. The macro &amp;quot;&amp;lt;code&amp;gt;tablewrite&amp;lt;/code&amp;gt;&amp;quot; will create a table, fill it with a hundred strings, delete every other row, and, finally, save the table to a file. The macro &amp;quot;&amp;lt;code&amp;gt;tableread&amp;lt;/code&amp;gt;&amp;quot; will, in turn, re-read the table from the file.&lt;br /&gt;
&lt;br /&gt;
 [Macro tablewrite]&lt;br /&gt;
    // create the table&lt;br /&gt;
    #tab := [[Programmer_Guide/Shell_Items/Table/NEW_TABLE|new table]] *&lt;br /&gt;
 &lt;br /&gt;
    // the &amp;quot;[[Programmer_Guide/Macro_Library/StdLib#UM_and_EM|em]]&amp;quot; command will, after displaying its second argument in an error&lt;br /&gt;
    // dialog, immediately terminate the macro, using its first argument as the&lt;br /&gt;
    // result of the macro&lt;br /&gt;
    if &#039;$#tab[?]&#039; != table [[Programmer_Guide/Macro_Library/StdLib#UM_and_EM|em]] &#039;-1 ; Cannot create table&#039;&lt;br /&gt;
 &lt;br /&gt;
    // fill the table with a hundred strings&lt;br /&gt;
    for #i := 1 to $#i &amp;lt;= 100 step #i := int $#i+1&lt;br /&gt;
       $#tab $#i &#039;This is string $#i out of 100&#039;&lt;br /&gt;
    end&lt;br /&gt;
 &lt;br /&gt;
    // now we prove of changing mind and delete every other row&lt;br /&gt;
    for #i := 98 to $#i &amp;gt;= 0 step #i := int $#i-2&lt;br /&gt;
       $#tab $#i /Delete&lt;br /&gt;
    end&lt;br /&gt;
 &lt;br /&gt;
    // show the contents of the table&lt;br /&gt;
    [[Programmer_Guide/Macro_Library/StdLib#ShowItem|showitem]] $#tab ; See Our Table&lt;br /&gt;
 &lt;br /&gt;
    // now save the table as a text file called &amp;quot;table_file.txt&amp;quot;.&lt;br /&gt;
    // the file will be stored in the {{Stx}} script directory (whose path&lt;br /&gt;
    // is available in the shell-global variable &amp;quot;scriptDirectory&amp;quot;)&lt;br /&gt;
    #fileName := set &#039;$scriptDirectory\table_file.txt&#039;&lt;br /&gt;
 &lt;br /&gt;
    // create a text file item – we will come to this in a later chapter,&lt;br /&gt;
    // here it is shown only as kind of cliffhanger&lt;br /&gt;
    #fileItem := [[Programmer_Guide/Shell_Items/File/NEW_FILE|new file]] * &#039;$#fileName&#039; /Text /Write&lt;br /&gt;
    if &#039;$#fileItem&#039; == * [[Programmer_Guide/Macro_Library/StdLib#UM_and_EM|em]]  &#039;-1 ; failed to open the file $#fileName&#039;&lt;br /&gt;
 &lt;br /&gt;
    // save the table to the file&lt;br /&gt;
    [[Programmer_Guide/Shell_Items/File/SET_FILE#Text_Files:_SAVE|$#fileItem save]] $#tab&lt;br /&gt;
 &lt;br /&gt;
    if &#039;$rc&#039; &amp;gt; 0 [[Programmer_Guide/Macro_Library/StdLib#UM_and_EM|em]]  &#039;-1 ; failed to save table to file $#fileName&#039;&lt;br /&gt;
 &lt;br /&gt;
    // dispose of the file item (not the file on disk!) and the table&lt;br /&gt;
    [[Programmer_Guide/Command_Reference/DELETE|delete]] $#fileItem $#tab&lt;br /&gt;
 &lt;br /&gt;
    exit 1 int 0&lt;br /&gt;
 &lt;br /&gt;
 &lt;br /&gt;
 [Macro tableread]&lt;br /&gt;
    // create an empty table&lt;br /&gt;
    #tab := [[Programmer_Guide/Shell_Items/Table/NEW_TABLE|new table]] *&lt;br /&gt;
    #fileName := set &#039;$scriptDirectory\table_file.txt&#039;&lt;br /&gt;
 &lt;br /&gt;
    // now, create a file item for reading a text file&lt;br /&gt;
    #fileItem := [[Programmer_Guide/Shell_Items/File/NEW_FILE|new file]] * &#039;$#fileName&#039; /Text /Read&lt;br /&gt;
    if &#039;$#fileItem&#039; == * [[Programmer_Guide/Macro_Library/StdLib#UM_and_EM|em]] -1 ; failed to open the file $#fileName&lt;br /&gt;
 &lt;br /&gt;
    [[Programmer_Guide/Shell_Items/File/SET_FILE#Text_Files:_LOAD|$#fileItem load]] $#tab&lt;br /&gt;
    if &#039;$rc&#039; &amp;gt; 0 [[Programmer_Guide/Macro_Library/StdLib#UM_and_EM|em]]  -1 ; failed to load table from file $#fileName&lt;br /&gt;
 &lt;br /&gt;
    [[Programmer_Guide/Command_Reference/DELETE|delete]] $#fileItem&lt;br /&gt;
 &lt;br /&gt;
    // show the loaded table&lt;br /&gt;
    [[Programmer_Guide/Macro_Library/StdLib#ShowItem|showitem]] $#tab ; See Our Loaded Table&lt;br /&gt;
 &lt;br /&gt;
    [[Programmer_Guide/Command_Reference/DELETE|delete]] $#tab&lt;br /&gt;
    exit 1 int 0&lt;br /&gt;
&lt;br /&gt;
The above macro already makes use of file items we need to leave for later discussion. As you can see, using them for saving and loading tables is fairly easy. You might even at this stage start saving and loading tables of your own without having looked up any details about file items.&lt;br /&gt;
&lt;br /&gt;
====Parameter Tables====&lt;br /&gt;
&lt;br /&gt;
[[Programmer_Guide/Concepts/Parameter_table|Parameter tables]] store numerical data only. They are optimized for numerical throughput and, hence, are the means of choice when it comes to modelling vectors and matrices.&lt;br /&gt;
&lt;br /&gt;
Technically, parameter tables are a variant of the extended tables yet to be mentioned. The reason why we deal with parameter tables first is their optimal fitness for vector and matrix arithmetic. Note that extended tables, when they are all numerical, support exactly the same operations as parameter tables – in fact, numerical-only extended tables and parameter tables are completely interchangeable. Nevertheless, parameter tables are more efficient both runtime-wise and memory-wise. So, as a rule of thumb, always use parameter tables whenever doing vector and matrix arithmetic.&lt;br /&gt;
&lt;br /&gt;
There are two ways of creating a parameter table:&lt;br /&gt;
# explicitly, by using the [[Programmer_Guide/Shell_Items/Table/NEW_TABLE|NEW TABLE &amp;amp;hellip; /Parameter]] command; or&lt;br /&gt;
# implicitly, by using the matrix or vector result of a call to [[Programmer_Guide/Command_Reference/EVAL|eval]].&lt;br /&gt;
&lt;br /&gt;
Here&#039;s a simple and semantically quite meaningless example of working with parameter tables created both ways:&lt;br /&gt;
&lt;br /&gt;
 // create a 20-element vector initialized with all zeroes&lt;br /&gt;
 #v0 := [[Programmer_Guide/Command_Reference/EVAL/fill|eval fill]](20,0,0) // 20 elements, first value 0, increment 0&lt;br /&gt;
 &lt;br /&gt;
 // create and fill a vector&lt;br /&gt;
 #v1 := [[Programmer_Guide/Command_Reference/EVAL/fill|eval fill]](30,2,4) // 30 elements, first value 2, increment 4&lt;br /&gt;
 &lt;br /&gt;
 // create and fill a second vector&lt;br /&gt;
 #v2 := [[Programmer_Guide/Command_Reference/EVAL/fill|eval fill]](30,3,9) // 30 elements, first value 3, increment 9&lt;br /&gt;
 &lt;br /&gt;
 // add up both vectors&lt;br /&gt;
 #v3 := eval $#v1 + $#v2&lt;br /&gt;
 &lt;br /&gt;
 [[Programmer_Guide/Macro_Library/StdLib#ShowItem|showitem]] $#v3 ; v3 // show the sum vector&lt;br /&gt;
 &lt;br /&gt;
 // create a vector with 30 elements each of which is the sine&lt;br /&gt;
 // of its index (not a useful example, but useful for an example)&lt;br /&gt;
 #v4 := [[Programmer_Guide/Shell_Items/Table/NEW_TABLE|new table]] * * number:x /Parameter&lt;br /&gt;
 for #i := 0 to $#i &amp;lt; 30 step #i := int $#i + 1&lt;br /&gt;
    // store the sine of the index, #i, in #a&lt;br /&gt;
    #a := eval sin($#i)&lt;br /&gt;
 &lt;br /&gt;
    // set the #i-th value of the vector to the value of #a&lt;br /&gt;
    $#v4 $#i $#a&lt;br /&gt;
 end&lt;br /&gt;
 &lt;br /&gt;
 // transpose a matrix&lt;br /&gt;
 &lt;br /&gt;
 // create the matrix to transpose – here we must explicitly create the&lt;br /&gt;
 // matrix because we are going to assign values to its&lt;br /&gt;
 // individual columns&lt;br /&gt;
 #mat1 := [[Programmer_Guide/Shell_Items/Table/NEW_TABLE|new table]] * * number:x:4 /Parameter // 4 columns&lt;br /&gt;
 &lt;br /&gt;
 // fill each of its individual columns with some values&lt;br /&gt;
 $#mat1[*,0] := [[Programmer_Guide/Command_Reference/EVAL/fill|eval fill]](30,10,4) // fill the first column&lt;br /&gt;
 $#mat1[*,1] := [[Programmer_Guide/Command_Reference/EVAL/fill|eval fill]](30,2,1) // fill the second column&lt;br /&gt;
 $#mat1[*,2] := [[Programmer_Guide/Command_Reference/EVAL/fill|eval fill]](30,0.1,1.2) // fill the third column&lt;br /&gt;
 $#mat1[*,3] := [[Programmer_Guide/Command_Reference/EVAL/fill|eval fill]](30,1.2,1.2) // fill the fourth column&lt;br /&gt;
 &lt;br /&gt;
 // now transpose mat1 and store the transposed matrix to mat2&lt;br /&gt;
 #mat2 := [[Programmer_Guide/Command_Reference/EVAL/trn|eval trn]]($#mat1)&lt;br /&gt;
 &lt;br /&gt;
 // show the transposed matrix&lt;br /&gt;
 [[Programmer_Guide/Macro_Library/StdLib#ShowItem|showitem]] $#mat2 ; transposed matrix&lt;br /&gt;
 &lt;br /&gt;
 // now, multiply the matrix by the vector and see what happens&lt;br /&gt;
 #mat3 := eval $#mat2 * $#v3&lt;br /&gt;
 &lt;br /&gt;
 [[Programmer_Guide/Macro_Library/StdLib#ShowItem|showitem]] $#mat3 ; Transposed matrix multiplied by a vector&lt;br /&gt;
 &lt;br /&gt;
 // create and initialize a matrix in a single step&lt;br /&gt;
 #mat4 := eval init(30,10,1.2) // 30 rows, 10 columns, value 1.2&lt;br /&gt;
 &lt;br /&gt;
 [[Programmer_Guide/Macro_Library/StdLib#ShowItem|showitem]] $#mat4 ; A matrix containing all 1.2&lt;br /&gt;
 &lt;br /&gt;
 // important: delete all items not to leak memory&lt;br /&gt;
 [[Programmer_Guide/Command_Reference/DELETE|delete /Var]] #v0 #v1 #v2 #v3 #v4 #mat1 #mat2 #mat3 #mat4&lt;br /&gt;
 &lt;br /&gt;
 exit&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!--&lt;br /&gt;
 [Macro globales]&lt;br /&gt;
    a := set &amp;lt;nowiki&amp;gt;&#039;&#039;&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
    #mat := [[Programmer_Guide/Shell_Items/Table/NEW_TABLE|new table]] * * number:x:5 /Parameter&lt;br /&gt;
    #i := int 0&lt;br /&gt;
    forever&lt;br /&gt;
       #vec := usermacro&lt;br /&gt;
       if &#039;$#vec[?]&#039; != table break&lt;br /&gt;
       if &#039;$#vec[]&#039; != 5 then&lt;br /&gt;
          um An error has occurred.&lt;br /&gt;
          exit -1&lt;br /&gt;
       end&lt;br /&gt;
       $#mat[$#i,*] := $#vec&lt;br /&gt;
       delete $#vec&lt;br /&gt;
       #i := int $#i + 1&lt;br /&gt;
       [[Programmer_Guide/Macro_Library/StdLib#ShowItem|showitem]] $#mat ; Matrix after step $#i&lt;br /&gt;
    end&lt;br /&gt;
    [[Programmer_Guide/Macro_Library/StdLib#ShowItem|showitem]] $#mat ; Resulting Matrix, each vector is a row&lt;br /&gt;
 &lt;br /&gt;
    #trnmat := [[Programmer_Guide/Command_Reference/EVAL/trn|eval trn]]($#mat)&lt;br /&gt;
    [[Programmer_Guide/Macro_Library/StdLib#ShowItem|showitem]] $#trnmat ; Transposed Matrix&lt;br /&gt;
 &lt;br /&gt;
    delete $#mat $#trnmat&lt;br /&gt;
    exit&lt;br /&gt;
 &lt;br /&gt;
 [Macro usermacro]&lt;br /&gt;
    a := set &#039;$a&#039; a&lt;br /&gt;
    if &#039;$a&#039; == &#039;aaaaa&#039; exit 1 set &amp;lt;nowiki&amp;gt;&#039;&#039;&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
    #v1 := [[Programmer_Guide/Command_Reference/EVAL/fill|eval fill]]( 5, 1, 2 )&lt;br /&gt;
    exit 1 set $#v1&lt;br /&gt;
 &lt;br /&gt;
for #i := 0 to $#i &amp;lt; 10 step #i := int $#i + 1&lt;br /&gt;
&lt;br /&gt;
#j := int $#i+1&lt;br /&gt;
&lt;br /&gt;
$#mat1[*,$#i] := $#v4&lt;br /&gt;
&lt;br /&gt;
$#mat1[*,$#j] := $#v4&lt;br /&gt;
&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
XXX&lt;br /&gt;
&lt;br /&gt;
#i := int 7&lt;br /&gt;
&lt;br /&gt;
#i := set $#i * $#i&lt;br /&gt;
&lt;br /&gt;
#x := set word&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
for #i := 0 to $#i &amp;lt; 10 step #i := int $#i + 1&lt;br /&gt;
&lt;br /&gt;
#var := set &#039;#v$#i&#039;&lt;br /&gt;
&lt;br /&gt;
$#var := int 7 // set variable&lt;br /&gt;
&lt;br /&gt;
readvar $#var #value // get value&lt;br /&gt;
&lt;br /&gt;
end&lt;br /&gt;
XXX&lt;br /&gt;
--&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!--  ====Extended Tables====&lt;br /&gt;
&lt;br /&gt;
XXX--&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!-- ===Shell Items: Managing Memory and Avoiding Waste===&lt;br /&gt;
&lt;br /&gt;
Although allocating shell items and disposing of them is very easy, there are a few fine points to consider.&lt;br /&gt;
&lt;br /&gt;
There are two ways of allocating a shell item: (a) the &amp;quot;&amp;lt;code&amp;gt;new&amp;lt;/code&amp;gt;&amp;quot; command, and (b) the &amp;quot;&amp;lt;code&amp;gt;eval&amp;lt;/code&amp;gt;&amp;quot; type selector, or statement (&amp;quot;&amp;lt;code&amp;gt;eval&amp;lt;/code&amp;gt;&amp;quot; is also capable of standalone use).&lt;br /&gt;
&lt;br /&gt;
XXX&lt;br /&gt;
&lt;br /&gt;
XXX&lt;br /&gt;
--&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== {{STx|caps}} Pitfalls ==&lt;br /&gt;
&lt;br /&gt;
When invocating a macro for the second time, third time, or generally the n-th time, n being any finite positive integer, it will find its namespace empty. This is what you would expect from a full-featured programming language, but it is not what you get from many macro languages inferior to {{STX}}, or even from classical languages like the venerable FORTRAN, Basic, or – God forbid – COBOL.&lt;br /&gt;
&lt;br /&gt;
One important implication of this fact is that local variables are not a means for storing data persistently (bluntly put, local variables are no such thing as the local &amp;quot;static&amp;quot; variables of Kernighan&#039;s and Ritchie&#039;s fine C programming language).&lt;br /&gt;
&lt;br /&gt;
This consistently holds true even when invocating a macro recursively. Its new instance will find all its variables empty, while the calling instance will find its local variables untouched by the macro call.&lt;br /&gt;
&lt;br /&gt;
Hence, local variables are no means at all for passing information to and from a macro. For passing data to a macro, you should use macro arguments. For a macro to return results, you should use the return mechanism (using the verbose form of the &amp;quot;&amp;lt;code&amp;gt;[[Programmer_Guide/Command_Reference/EXIT|exit]]&amp;lt;/code&amp;gt;&amp;quot; command). Technically, another means of passing data to and from a macro is using shell-global (or even global) variables, but in the era of structured and modular programming, this is considered harmful to one&#039;s career.&lt;br /&gt;
&lt;br /&gt;
Using one and the same variable name in different scopes is technically valid. You may, e.g., have a global variable called &amp;lt;code&amp;gt;@i&amp;lt;/code&amp;gt;, a shell-global variable &amp;lt;code&amp;gt;i&amp;lt;/code&amp;gt;, and a local variable called &amp;lt;code&amp;gt;#i&amp;lt;/code&amp;gt;. Allow for it to be misleading and a source of programmer error, though.&lt;br /&gt;
&lt;br /&gt;
Misspelled variable names tend to be the cause for great confusion. What makes it worse is that there is no way of automatically detecting misspelled variable names: Since variables need not be explicitly declared nor initialized, any syntactically well-formed variable name will be valid at any stage – this is an issue all programming languages without explicit variable declarations share, among them illustrious names like FORTRAN, Basic, or PROLOG. There is no real remedy for this issue other than placing debug statements in the macro source that occasionally print out the values of some important variables, and to check the printed values against one&#039;s expectations.&lt;br /&gt;
&lt;br /&gt;
More than the occasional pitfall results from the fact that the expression in an assignment is a rather complex issue. Though this expression is, in last consequence, a string (remember that with {{Stx}}, all variables are being created equal, i.e. as string variables), the way this string is computed may be a surprisingly complex, heart-warmingly powerful, and sometimes even error-prone affair, bearing the potential for unexpected side-effects. That being said, preventing most kinds of trouble is easy by following two rules of thumb: (a) put everything under apostrophes; and (b) use the appropriate expression type selector when directly assigning a value (as opposed to the result of a function call or a built-in function). So, instead of writing &amp;quot;&amp;lt;code&amp;gt;name := hugo&amp;lt;/code&amp;gt;&amp;quot;, always type &amp;quot;&amp;lt;code&amp;gt;name := set &#039;hugo&#039;&amp;lt;/code&amp;gt;&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
Users, especially those familiar with other programming languages, but not with macro languages like the UNIX shells, often confuse when to prefix the name of a variable with the dollar sign and when not to. The rule is easy: If you want to &#039;&#039;mention&#039;&#039; a variable, you do not use the dollar sign. If you want to &#039;&#039;use&#039;&#039; a variable, that is, if you want its occurrence be replaced by its actual contents, you do use the dollar sign. Compiled to a rule of thumb: If the variable is the target of an assignment, you do not use a dollar sign. If the variable is the source of an assignment, or if it is the argument to a function or macro call, you do use the dollar sign.&lt;br /&gt;
&lt;br /&gt;
When using string constants, you should generally use quotation, i.e., place them between single quotes.&lt;br /&gt;
&lt;br /&gt;
Where two or more quoted string constants meet (but see the below exception), they will get concatenated without inserting any whitespace characters. This is a standard feature with many programming languages, especially macro languages, but it is sometimes met with surprise. So please be aware that if you want two string constants to be separated by a blank, you will either need to quote the whole string, or to add the whitespace character at the beginning or at the end of the respective string literal. Hence, the statement &amp;quot;&amp;lt;code&amp;gt;#var := set &#039;abc&#039; &#039;def&#039;&amp;lt;/code&amp;gt;&amp;quot; will set &amp;lt;var&amp;gt;#var&amp;lt;/var&amp;gt; to &amp;quot;abcdef&amp;quot;, whereas each of the statements &amp;quot;&amp;lt;code&amp;gt;#var := set &#039;abc &#039; &#039;def&#039;&amp;lt;/code&amp;gt;&amp;quot;, &amp;quot;&amp;lt;code&amp;gt;#var := set &#039;abc&#039; &#039; def&#039;&amp;lt;/code&amp;gt;&amp;quot;, and &amp;quot;&amp;lt;code&amp;gt;#var := set &#039;abc def&#039;&amp;lt;/code&amp;gt;&amp;quot; will set &amp;lt;var&amp;gt;#var&amp;lt;/var&amp;gt; to &amp;quot;abc def&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
If a quoted string constant is an argument to a statement or to a built-in function (i.e. not to a user macro), there will be no string concatenation. Hence, each quoted string and each unquoted string is exactly one argument to the function.&lt;br /&gt;
&lt;br /&gt;
If a statement or a built-in function expects a numerical argument, this argument may either be a numerical constant or a numerical expression. Either way, it is more secure to quote even a numerical argument (don&#039;t quote me on that, though).&lt;br /&gt;
&lt;br /&gt;
It is easy to mix up the reserved variables &amp;quot;&amp;lt;var&amp;gt;rc&amp;lt;/var&amp;gt;&amp;quot; and &amp;quot;&amp;lt;var&amp;gt;result&amp;lt;/var&amp;gt;&amp;quot;. The former (&amp;quot;&amp;lt;var&amp;gt;rc&amp;lt;/var&amp;gt;&amp;quot;) contains the numerical return code of the {{STx}} statement or built-in function most-recently executed (or the reason code why some {{STX}} statement could not be executed). The latter (&amp;quot;&amp;lt;var&amp;gt;result&amp;lt;/var&amp;gt;&amp;quot;) contains whatever information the most recently called user-defined macro (or class method) chose to return.&lt;br /&gt;
&lt;br /&gt;
Unlike most other programming languages and many macro languages, {{Stx}} evaluates logical expressions strictly from left to right. Furthermore, it does not support grouping (i.e. using brackets). Although this is not a bad thing in general, it may be cause for error and misunderstanding. When writing down a logical expression, be aware that no rules of precedence will apply. If in doubt, use a second (third, fourth&amp;amp;hellip;) &amp;quot;&amp;lt;code&amp;gt;[[Programmer_Guide/Command_Reference/IF|if]]&amp;lt;/code&amp;gt;&amp;quot; statement within the scope of each other.&lt;br /&gt;
&lt;br /&gt;
Note that whitespace characters may at any time freely be interspersed within a number. This means that e.g. the string &amp;quot;&amp;lt;code&amp;gt;123 456&amp;lt;/code&amp;gt;&amp;quot;, although containing a blank character, will be interpreted as the number &amp;quot;123456&amp;quot;. This is not a bad thing in itself, but you should be aware of this fact.&lt;br /&gt;
&lt;br /&gt;
Never forget to free an object (both shell-items and user-defined classes) after use. If you don&#039;t, and automatic cleanup will only be done at the termination of the running shell which, when using a complex set of macros, may be very late.&lt;br /&gt;
&lt;br /&gt;
Be careful not to mix up internal {{STx}} item handles on the one hand and variable names on the other hand. Remember that accessing an {{STX}} item by its name means just using this name – there is no dollar sign involved. If, on the other hand, your item handle is stored in an {{Stx}} variable, you will need to refer to the contents of this variable, i.e. use this variable – here there is a need for using the dollar sign.&lt;/div&gt;</summary>
		<author><name>Jw</name></author>
	</entry>
	<entry>
		<id>https://mediawiki.kfs.oeaw.ac.at/stx/docs/wiki/index.php?title=Programmer_Guide/Macro_Library/BXMLDoc&amp;diff=10654</id>
		<title>Programmer Guide/Macro Library/BXMLDoc</title>
		<link rel="alternate" type="text/html" href="https://mediawiki.kfs.oeaw.ac.at/stx/docs/wiki/index.php?title=Programmer_Guide/Macro_Library/BXMLDoc&amp;diff=10654"/>
		<updated>2019-10-01T08:41:44Z</updated>

		<summary type="html">&lt;p&gt;Jw: /* &amp;quot;Set&amp;quot; functions */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{DISPLAYTITLE:{{SUBPAGENAME}} - General XML Document}}&lt;br /&gt;
:&#039;&#039;&#039;File&#039;&#039;&#039;: BXMLDOC.STX, linked to library STX.LIB&lt;br /&gt;
:&#039;&#039;&#039;Parent class&#039;&#039;&#039;: [[Programmer Guide/Macro Library/COBJ|CObj]], &#039;&#039;&#039;Derived classes&#039;&#039;&#039;: [[Programmer Guide/Macro Library/BSTXIni|BSTXIni]], [[Programmer Guide/Macro Library/BDataSet|BDataSet]]&lt;br /&gt;
&lt;br /&gt;
This class implements a general xml-document. It is mainly used to implement the common part of the two main {{STx}} documents: the project &amp;lt;code&amp;gt;BDataSet&amp;lt;/code&amp;gt; and the workspace &amp;lt;code&amp;gt;BSTXIni&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
==Construction==&lt;br /&gt;
;&amp;lt;code&amp;gt;COBJ NEW BXMLDOC NEW|XNEW ; &amp;lt;var&amp;gt;xmlobj&amp;lt;/var&amp;gt;|&amp;lt;var&amp;gt;roottag&amp;lt;/var&amp;gt; [; &amp;lt;var&amp;gt;aname&amp;lt;/var&amp;gt;=&amp;lt;var&amp;gt;avalue&amp;lt;/var&amp;gt;; ...]&amp;lt;/code&amp;gt;:&lt;br /&gt;
:;&amp;lt;var&amp;gt;xmlobj&amp;lt;/var&amp;gt;: The name of a BXMLDoc-instance or the name of a XML-file-item.&lt;br /&gt;
:;&amp;lt;var&amp;gt;roottag&amp;lt;/var&amp;gt;: The tag of the root element.&lt;br /&gt;
:;&amp;lt;var&amp;gt;aname&amp;lt;/var&amp;gt;, &amp;lt;var&amp;gt;avalue&amp;lt;/var&amp;gt;: The name and the value of a root element attribute.&lt;br /&gt;
;Result: The created and initialized instance-item or an empty string&lt;br /&gt;
;Description: Create a new empty XML document using the same root element tag as &amp;lt;var&amp;gt;xmldoc&amp;lt;/var&amp;gt; or the specified &amp;lt;var&amp;gt;roottag&amp;lt;/var&amp;gt;. During initialization the XML doctype is loaded, if it is defined in the {{STX}} configuration file, and the global item table is created. The &amp;lt;code&amp;gt;XNEW&amp;lt;/code&amp;gt; variant creates or opens the XML file using the /Exclusive flag.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
;&amp;lt;code&amp;gt;COBJ NEW BXMLDOC CREATE|XCREATE ; &amp;lt;var&amp;gt;filepath&amp;lt;/var&amp;gt;; &amp;lt;var&amp;gt;roottag&amp;lt;/var&amp;gt; [; &amp;lt;var&amp;gt;aname&amp;lt;/var&amp;gt;=&amp;lt;var&amp;gt;avalue&amp;lt;/var&amp;gt;; ...]&amp;lt;/code&amp;gt;:&lt;br /&gt;
:;&amp;lt;var&amp;gt;filepath&amp;lt;/var&amp;gt;: The name of the XML file.&lt;br /&gt;
:;&amp;lt;var&amp;gt;roottag&amp;lt;/var&amp;gt;: The tag of the root element.&lt;br /&gt;
:;&amp;lt;var&amp;gt;aname&amp;lt;/var&amp;gt;, &amp;lt;var&amp;gt;avalue&amp;lt;/var&amp;gt;: The name and the value of a root element attribute.&lt;br /&gt;
;Result: The created and initialized instance-item or an empty string&lt;br /&gt;
;Description: Open an existing or create a new XML file and initialize the XML document. During initialization the XML doctype is loaded, if it is defined in the {{STX}} configuration file, and the global item table is created. If a new file is created, the root element with tag &amp;lt;var&amp;gt;roottag&amp;lt;/var&amp;gt; and the specified attributes is created. The &amp;lt;code&amp;gt;XCREATE&amp;lt;/code&amp;gt; variant creates or opens the XML file using the /Exclusive flag.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
;&amp;lt;code&amp;gt;COBJ NEW BXMLDOC OPEN|XOPEN ; &amp;lt;var&amp;gt;filepath&amp;lt;/var&amp;gt;&amp;lt;/code&amp;gt;:&lt;br /&gt;
:;&amp;lt;var&amp;gt;filepath&amp;lt;/var&amp;gt;: The name of the existing XML file.&lt;br /&gt;
;Result: The  created and initialized instance-item or an empty string&lt;br /&gt;
;Description: Open an existing XML file and initialize the XML document. During initialization the XML doctype is loaded if it is defined in the {{STX}} configuration file and the global item table is created.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
;&amp;lt;code&amp;gt;COBJ NEW BXMLDOC LINK ; &amp;lt;var&amp;gt;xmlobj&amp;lt;/var&amp;gt;&amp;lt;/code&amp;gt;:&lt;br /&gt;
:;&amp;lt;var&amp;gt;xmlobj&amp;lt;/var&amp;gt;: The name of a BXMLDoc-instance.&lt;br /&gt;
;Result: The created and initialized instance-item or an empty string&lt;br /&gt;
;Description: Link the new XML document to the XML document &amp;lt;var&amp;gt;xmlobj&amp;lt;/var&amp;gt; which was created and initialized in another shell. This constructor allows the sharing of XML documents between shells. This feature is f.i. used to share the global Workspace object (&amp;lt;code&amp;gt;$BSTXIni&amp;lt;/code&amp;gt;) and the DataSet object (&amp;lt;code&amp;gt;$BDataSet&amp;lt;/code&amp;gt;). Instances create with this method shares the file item and the global item table.&lt;br /&gt;
&lt;br /&gt;
==Access control==&lt;br /&gt;
Because an BXMLDoc instance can be used by more than one shell, there must be a mechanism to control the access to the instance and its data content.&lt;br /&gt;
&lt;br /&gt;
====Attach====&lt;br /&gt;
;&amp;lt;code&amp;gt;&amp;lt;var&amp;gt;bxmldoc&amp;lt;/var&amp;gt; Attach [ &amp;lt;var&amp;gt;iref&amp;lt;/var&amp;gt; ]&amp;lt;/code&amp;gt;:&lt;br /&gt;
:;&amp;lt;var&amp;gt;iref&amp;lt;/var&amp;gt;: Element reference or xml-position.&lt;br /&gt;
;Result: name of file-item of the document&lt;br /&gt;
;Description: Lock the XML document to the calling shell. The current position is saved. If an element reference or xml-position &amp;lt;var&amp;gt;iref&amp;lt;/var&amp;gt; is specified, the member &amp;lt;code&amp;gt;SELECTIREF&amp;lt;/code&amp;gt; is called to select the element. If a shell calls this function for the first time, the current XML file position is saved, for all further calls, only the lock-counter is increment.&lt;br /&gt;
:This function should be called any time before a shell uses a shared XML document. If a shell issues more than one &amp;lt;code&amp;gt;Attach&amp;lt;/code&amp;gt; function call, it must use the same number of &amp;lt;code&amp;gt;Detach&amp;lt;/code&amp;gt; calls to unlock the XML document.&lt;br /&gt;
&lt;br /&gt;
====Detach====&lt;br /&gt;
;&amp;lt;code&amp;gt;&amp;lt;var&amp;gt;bxmldoc&amp;lt;/var&amp;gt; Detach&amp;lt;/code&amp;gt;: &lt;br /&gt;
;Result: 1 if the xml-file-item was changed while it was locked and 0 if not. The return value is also 0 if the xml-file-item was not unlocked by the &amp;lt;code&amp;gt;Detach&amp;lt;/code&amp;gt; function.&lt;br /&gt;
;Description: Unlock the XML document from the shell and restores the element selected before the document was locked. If multiple &amp;lt;code&amp;gt;Attach&amp;lt;/code&amp;gt; calls were used, the same number of &amp;lt;code&amp;gt;Detach&amp;lt;/code&amp;gt; calls is necessary to really unlock the document.&lt;br /&gt;
&lt;br /&gt;
==Query attributes==&lt;br /&gt;
====GetFileItem====&lt;br /&gt;
;&amp;lt;code&amp;gt;&amp;lt;var&amp;gt;bxmldoc&amp;lt;/var&amp;gt; GetFileItem&amp;lt;/code&amp;gt;: Get the XML file item of the instance. The file should only be accessed directly if the XML document is locked to the shell (see [[#Access control]]). The use of the file item may be necessary to perform attribute access, element data access or special browse / search functions.&lt;br /&gt;
;Result: the xml-file-item&lt;br /&gt;
&lt;br /&gt;
====GetDocType====&lt;br /&gt;
;&amp;lt;code&amp;gt;&amp;lt;var&amp;gt;bxmldoc&amp;lt;/var&amp;gt; GetDocType&amp;lt;/code&amp;gt;: Retrieve the name of the doctype if a doctype is defined for the root element of the XML file.&lt;br /&gt;
;Result: name of XML doctype or empty string (if no doctype is defined for the document)&lt;br /&gt;
&lt;br /&gt;
====GetPath====&lt;br /&gt;
;&amp;lt;code&amp;gt;&amp;lt;var&amp;gt;bxmldoc&amp;lt;/var&amp;gt; GetPath&amp;lt;/code&amp;gt;: Retrieve the name of the XML file as stored on the hard drive. The result is empty if no file is associated with the document (this means the file exists in memory and was never loaded or saved). The function sets the &amp;lt;code&amp;gt;&amp;amp;path&amp;lt;/code&amp;gt; member variable.&lt;br /&gt;
;Result: the path of the the xml-file-item&lt;br /&gt;
&lt;br /&gt;
==File handling==&lt;br /&gt;
====Load====&lt;br /&gt;
;&amp;lt;code&amp;gt;&amp;lt;var&amp;gt;bxmldoc&amp;lt;/var&amp;gt; Load [ &amp;lt;var&amp;gt;path&amp;lt;/var&amp;gt; ]&amp;lt;/code&amp;gt;: Load the content of the file &amp;lt;var&amp;gt;path&amp;lt;/var&amp;gt; into the xml-file-item of the document. If &amp;lt;var&amp;gt;path&amp;lt;/var&amp;gt; is not specified, the current path is used (see &amp;lt;code&amp;gt;GetPath&amp;lt;/code&amp;gt;).&lt;br /&gt;
;Result: 0 for success or errorcode&lt;br /&gt;
&lt;br /&gt;
====Save====&lt;br /&gt;
;&amp;lt;code&amp;gt;&amp;lt;var&amp;gt;bxmldoc&amp;lt;/var&amp;gt; Save [ &amp;lt;var&amp;gt;path&amp;lt;/var&amp;gt; ]&amp;lt;/code&amp;gt;: Save the xml-file-item of the document to the file &amp;lt;var&amp;gt;path&amp;lt;/var&amp;gt;. If &amp;lt;var&amp;gt;path&amp;lt;/var&amp;gt; is not specified, the current path is used (see &amp;lt;code&amp;gt;GetPath&amp;lt;/code&amp;gt;).&lt;br /&gt;
;Result: 0 for success or errorcode&lt;br /&gt;
&lt;br /&gt;
====Close====&lt;br /&gt;
;&amp;lt;code&amp;gt;&amp;lt;var&amp;gt;bxmldoc&amp;lt;/var&amp;gt; Close [ &amp;lt;var&amp;gt;save&amp;lt;/var&amp;gt;=0 [; &amp;lt;var&amp;gt;path&amp;lt;/var&amp;gt; ] ]&amp;lt;/code&amp;gt;: Close the xml-file-item and delete the instance &amp;lt;var&amp;gt;bxmldoc&amp;lt;/var&amp;gt;. If the argument &amp;lt;var&amp;gt;save&amp;lt;/var&amp;gt; is set to &amp;lt;code&amp;gt;1&amp;lt;/code&amp;gt;, the document is saved before it is deletec (using the function call &amp;lt;code&amp;gt;&amp;lt;var&amp;gt;bxmldoc&amp;lt;/var&amp;gt; Save [ &amp;lt;var&amp;gt;path&amp;lt;/var&amp;gt; ]&amp;lt;/code&amp;gt;).&lt;br /&gt;
;Result: 0 for success or errorcode (returned from &amp;lt;code&amp;gt;Save&amp;lt;/code&amp;gt;).&lt;br /&gt;
;Note: The instance &amp;lt;var&amp;gt;bxmldoc&amp;lt;/var&amp;gt; is deleted, even if the function returns an errorcode.&lt;br /&gt;
&lt;br /&gt;
==Global items==&lt;br /&gt;
This class implements some members to share items between shells. This feature is used f.i. by the application &amp;lt;code&amp;gt;Viewer1&amp;lt;/code&amp;gt; to implement the &#039;&#039;&#039;signal copy-paste&#039;&#039;&#039; functions and by some other applications.&lt;br /&gt;
&lt;br /&gt;
====AddGlobalItem====&lt;br /&gt;
;&amp;lt;code&amp;gt;&amp;lt;var&amp;gt;bxmldoc&amp;lt;/var&amp;gt; AddGlobalItem &amp;lt;var&amp;gt;id&amp;lt;/var&amp;gt; ; &amp;lt;var&amp;gt;item&amp;lt;/var&amp;gt;&amp;lt;/code&amp;gt;: &lt;br /&gt;
:;&amp;lt;var&amp;gt;id&amp;lt;/var&amp;gt;: The global id-string to use for &amp;lt;var&amp;gt;item&amp;lt;/var&amp;gt;.&lt;br /&gt;
:;&amp;lt;var&amp;gt;item&amp;lt;/var&amp;gt;: The shell-item to add to the global-item-list.&lt;br /&gt;
;Result: 0 for success or errorcode&lt;br /&gt;
;Description: Add a shell item to the global item list. All items in the global item list can be linked by other shells, which have created a linked (shared) instance of this XML document. All types of items except displays, graphs and dialogs can be used.&lt;br /&gt;
&lt;br /&gt;
====AttachGlobalItem====&lt;br /&gt;
;&amp;lt;code&amp;gt;&amp;lt;var&amp;gt;bxmldoc&amp;lt;/var&amp;gt; AttachGlobalItem &amp;lt;var&amp;gt;id&amp;lt;/var&amp;gt; [; &amp;lt;var&amp;gt;lock&amp;lt;/var&amp;gt;=0 ]&amp;lt;/code&amp;gt;:&lt;br /&gt;
:;&amp;lt;var&amp;gt;id&amp;lt;/var&amp;gt;: The id-string of the global-item.&lt;br /&gt;
:;&amp;lt;var&amp;gt;lock&amp;lt;/var&amp;gt;: If set to &amp;lt;code&amp;gt;1&amp;lt;/code&amp;gt; the returned shell-item is locked.&lt;br /&gt;
;Result: name of shell-item linked to the global-item or empty string&lt;br /&gt;
;Description: Creates a [[Programmer_Guide/Shell_Items#References_to_shell_items|linked instance (reference)]] of the global item with the specified id. If lock is set to 1 the linked instance is locked to the calling shell.&lt;br /&gt;
&lt;br /&gt;
====DetachGlobalItem====&lt;br /&gt;
;&amp;lt;code&amp;gt;&amp;lt;var&amp;gt;bxmldoc&amp;lt;/var&amp;gt; DetachGlobalItem &amp;lt;var&amp;gt;item&amp;lt;/var&amp;gt; [; &amp;lt;var&amp;gt;unlock&amp;lt;/var&amp;gt;=0 ]&amp;lt;/code&amp;gt;:&lt;br /&gt;
:;&amp;lt;var&amp;gt;item&amp;lt;/var&amp;gt;: A shell-item linked to a global-item.&lt;br /&gt;
:;&amp;lt;var&amp;gt;unlock&amp;lt;/var&amp;gt;: If set to &amp;lt;code&amp;gt;1&amp;lt;/code&amp;gt; the &amp;lt;var&amp;gt;item&amp;lt;/var&amp;gt; is unlocked before it is deleted.&lt;br /&gt;
;Result: no return value (void)&lt;br /&gt;
;Description: Deletes a linked item. If unlock is set to 1 the linked item is unlocked before it is removed.&lt;br /&gt;
&lt;br /&gt;
====DeleteGlobalItem====&lt;br /&gt;
;&amp;lt;code&amp;gt;&amp;lt;var&amp;gt;bxmldoc&amp;lt;/var&amp;gt; DeleteGlobalItem &amp;lt;var&amp;gt;id&amp;lt;/var&amp;gt; [; &amp;lt;var&amp;gt;delete&amp;lt;/var&amp;gt;=0 ]&amp;lt;/code&amp;gt;:&lt;br /&gt;
:;&amp;lt;var&amp;gt;id&amp;lt;/var&amp;gt;: The id-string of the global-item.&lt;br /&gt;
:;&amp;lt;var&amp;gt;delete&amp;lt;/var&amp;gt;: If set to &amp;lt;code&amp;gt;1&amp;lt;/code&amp;gt; the shell-item is deleted.&lt;br /&gt;
;Result: 0 for success or errorcode&lt;br /&gt;
;Description: Remove the global-item with id-string &amp;lt;var&amp;gt;id&amp;lt;/var&amp;gt;from the global-item-list. If &amp;lt;var&amp;gt;delete&amp;lt;/var&amp;gt; is set to 1, the item is deleted after removing from the list. An item can only be removed by the same shell that adds it to the list.&lt;br /&gt;
&lt;br /&gt;
==Element manipulation==&lt;br /&gt;
====AddElement====&lt;br /&gt;
;&amp;lt;code&amp;gt;&amp;lt;var&amp;gt;bxmldoc&amp;lt;/var&amp;gt; AddElement &amp;lt;var&amp;gt;tag&amp;lt;/var&amp;gt; ; &amp;lt;var&amp;gt;where&amp;lt;/var&amp;gt; ; &amp;lt;var&amp;gt;goto&amp;lt;/var&amp;gt; ; &amp;lt;var&amp;gt;attr&amp;lt;/var&amp;gt;=&amp;lt;var&amp;gt;value&amp;lt;/var&amp;gt; ; ...&amp;lt;/code&amp;gt;:&lt;br /&gt;
:;&amp;lt;var&amp;gt;tag&amp;lt;/var&amp;gt;: The element tag.&lt;br /&gt;
:;&amp;lt;var&amp;gt;where&amp;lt;/var&amp;gt;: Controls where the element should be created: create the element on the current level (&amp;lt;code&amp;gt;CURRENT&amp;lt;/code&amp;gt; or &amp;lt;code&amp;gt;0&amp;lt;/code&amp;gt;) or as a child of the current element (&amp;lt;code&amp;gt;CHILD&amp;lt;/code&amp;gt; or &amp;lt;code&amp;gt;1&amp;lt;/code&amp;gt;).&lt;br /&gt;
:;&amp;lt;var&amp;gt;goto&amp;lt;/var&amp;gt;: Controls how the current position should be changed after the new element is created: select the created element (&amp;lt;code&amp;gt;SELECT&amp;lt;/code&amp;gt; or &amp;lt;code&amp;gt;1&amp;lt;/code&amp;gt;), step into the created element (&amp;lt;code&amp;gt;INSIDE&amp;lt;/code&amp;gt; or &amp;lt;code&amp;gt;2&amp;lt;/code&amp;gt;) or do not change the selected element (&amp;lt;code&amp;gt;HOLD&amp;lt;/code&amp;gt; or &amp;lt;code&amp;gt;0&amp;lt;/code&amp;gt;).&lt;br /&gt;
:;&amp;lt;var&amp;gt;attr&amp;lt;/var&amp;gt;=&amp;lt;var&amp;gt;value&amp;lt;/var&amp;gt;: Name(s) and value(s) of attributes to be assigned to the new element. All &amp;lt;var&amp;gt;name&amp;lt;/var&amp;gt; arguments must specifiy a valid XML attribute name.&lt;br /&gt;
;Result: 0 for success or errorcode&lt;br /&gt;
;Description: Add a new element with the specified tag to the XML document. The element is added on the same level as the current element (&amp;lt;var&amp;gt;where&amp;lt;/var&amp;gt;=&amp;lt;code&amp;gt;CURRENT&amp;lt;/code&amp;gt;) or as child element (&amp;lt;var&amp;gt;where&amp;lt;/var&amp;gt;=&amp;lt;code&amp;gt;CHILD&amp;lt;/code&amp;gt;) of the current element. The attribute assignment &amp;lt;var&amp;gt;attr&amp;lt;/var&amp;gt;=&amp;lt;var&amp;gt;value&amp;lt;/var&amp;gt; are used to initialize the new elements attributes. If the function returns &amp;lt;code&amp;gt;0&amp;lt;/code&amp;gt; the new element is created and the position is changed according to the argument &amp;lt;var&amp;gt;goto&amp;lt;/var&amp;gt;, otherwise the document content and the current element position are not changed. To assign the attributes to the element the function call &amp;lt;code&amp;gt;&amp;lt;var&amp;gt;bxmldoc&amp;lt;/var&amp;gt; SetElement * ; &amp;lt;var&amp;gt;attr&amp;lt;/var&amp;gt;=&amp;lt;var&amp;gt;value&amp;lt;/var&amp;gt; ; ...&amp;lt;/code&amp;gt; is used.&lt;br /&gt;
&lt;br /&gt;
====SetElement====&lt;br /&gt;
;&amp;lt;code&amp;gt;&amp;lt;var&amp;gt;bxmldoc&amp;lt;/var&amp;gt; SetElement &amp;lt;var&amp;gt;pos&amp;lt;/var&amp;gt; ; &amp;lt;var&amp;gt;attrarg&amp;lt;/var&amp;gt; ; ... &amp;lt;/code&amp;gt;:&lt;br /&gt;
:;&amp;lt;var&amp;gt;pos&amp;lt;/var&amp;gt;: The xml-position or element reference of the element to be changed. The value &amp;lt;code&amp;gt;*&amp;lt;/code&amp;gt; :;attrarg: Defines the name and the value of the attribute(s) to be set. &lt;br /&gt;
::;&amp;lt;var&amp;gt;aname&amp;lt;/var&amp;gt;=&amp;lt;var&amp;gt;avalue&amp;lt;/value&amp;gt;: Assign the value &amp;lt;var&amp;gt;avalue&amp;lt;/var&amp;gt; to the attribute &amp;lt;var&amp;gt;aname&amp;lt;/var&amp;gt;. The &amp;lt;var&amp;gt;aname&amp;lt;/var&amp;gt; must be a valid xml-attribute name. If &amp;lt;var&amp;gt;avalue&amp;lt;/var&amp;gt; is empty, the attribute &amp;lt;var&amp;gt;aname&amp;lt;/var&amp;gt; is deleted.&lt;br /&gt;
::;&amp;lt;var&amp;gt;attrtab&amp;lt;/var&amp;gt;: The name of a simple-table containing one attribute setting &amp;lt;code&amp;gt; &amp;lt;var&amp;gt;aname&amp;lt;/var&amp;gt; = &amp;lt;var&amp;gt;avalue&amp;lt;/var&amp;gt; &amp;lt;/code&amp;gt; per entry. This table gets deleted after processing!&lt;br /&gt;
;Result: 0 for success or errorcode.&lt;br /&gt;
;Description: Set the attributes of a specific element. The current position is not changed by this function. An error is returned, if no element is found at the specified position &amp;lt;var&amp;gt;pos&amp;lt;/var&amp;gt;, or an attribute assignment fails. If an error is returned, some attributes of the element may be changed! To remove an attribute, an empty attribute value can be used (&amp;lt;code&amp;gt; &amp;lt;var&amp;gt;aname&amp;lt;/var&amp;gt;=; &amp;lt;/code&amp;gt;).&lt;br /&gt;
&lt;br /&gt;
====GetElement====&lt;br /&gt;
;&amp;lt;code&amp;gt;&amp;lt;var&amp;gt;bxmldoc&amp;lt;/var&amp;gt; GetElement &amp;lt;var&amp;gt;pos&amp;lt;/var&amp;gt; ; &amp;lt;var&amp;gt;info&amp;lt;/var&amp;gt; ; aname1 ; ... &amp;lt;/code&amp;gt;:&lt;br /&gt;
:;&amp;lt;var&amp;gt;pos&amp;lt;/var&amp;gt;: The xml-position or element reference of the element.The value &amp;lt;code&amp;gt;*&amp;lt;/code&amp;gt; can be used for the element at the current position.&lt;br /&gt;
:;&amp;lt;var&amp;gt;info&amp;lt;/var&amp;gt;:&lt;br /&gt;
::{|class=&amp;quot;einrahmen&amp;quot;&lt;br /&gt;
|&amp;lt;code&amp;gt;0&amp;lt;/code&amp;gt; ||get attribute values ||result = &amp;lt;var&amp;gt;avalue1; ...&amp;lt;/var&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;code&amp;gt;1&amp;lt;/code&amp;gt; ||get element tag and attribute values ||:result = &amp;lt;var&amp;gt;tag; avalue1; ...&amp;lt;/var&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;code&amp;gt;2&amp;lt;/code&amp;gt; ||get element tag, number of children and attribute values ||result = &amp;lt;var&amp;gt;tag; nchildren; avalue1; ...&amp;lt;/var&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
:;&amp;lt;var&amp;gt;aname1&amp;lt;/var&amp;gt;, ...: list of attribute names &lt;br /&gt;
;Result: empty string (element not found) or a string containing selected informations (see argument &amp;lt;var&amp;gt;info&amp;lt;/var&amp;gt;)&lt;br /&gt;
;Description: Retrieve general informations about the specified element and/or element attribute values. The current element position is not changed by this function.&lt;br /&gt;
&lt;br /&gt;
====DeleteElement====&lt;br /&gt;
;&amp;lt;code&amp;gt;&amp;lt;var&amp;gt;bxmldoc&amp;lt;/var&amp;gt; DeleteElement &amp;lt;var&amp;gt;pos&amp;lt;/var&amp;gt;&amp;lt;/code&amp;gt;:&lt;br /&gt;
:;&amp;lt;var&amp;gt;pos&amp;lt;/var&amp;gt;: The xml-position or element reference of the element.The value &amp;lt;code&amp;gt;*&amp;lt;/code&amp;gt; can be used for the element at the current position.&lt;br /&gt;
;Result: 0 for success (deleted) or 1 for error&lt;br /&gt;
;Description: Delete the selected element. The current element position is only changed, if the current element was deleted.&lt;br /&gt;
&lt;br /&gt;
==Data manipulation==&lt;br /&gt;
====GetDataType====&lt;br /&gt;
;&amp;lt;code&amp;gt;&amp;lt;var&amp;gt;bxmldoc&amp;lt;/var&amp;gt; GetDataType [ &amp;lt;var&amp;gt;tag&amp;lt;/var&amp;gt; ]&amp;lt;/code&amp;gt;:&lt;br /&gt;
:;&amp;lt;var&amp;gt;tag&amp;lt;/var&amp;gt;: The element tag to be tested; if not specified or set to &amp;lt;code&amp;gt;*&amp;lt;/code&amp;gt; the tag of the current element is used.&lt;br /&gt;
;Result: The data type defined in the doctype or the element tag if no data type is defined for the specified tag.&lt;br /&gt;
;Description: Returns type of date stored in elements with the specified tag. This function is used by &amp;lt;code&amp;gt;LoadData&amp;lt;/code&amp;gt; and &amp;lt;code&amp;gt;SaveData&amp;lt;/code&amp;gt; to retrieve data type information. In the current doctype-version only the types &amp;lt;code&amp;gt;TABLE&amp;lt;/code&amp;gt; and &#039;&amp;lt;code&amp;gt;XTABLE tabledef&amp;lt;/code&amp;gt;&#039; are supported.&lt;br /&gt;
&lt;br /&gt;
====CreateXTable====&lt;br /&gt;
;&amp;lt;code&amp;gt;&amp;lt;var&amp;gt;bxmldoc&amp;lt;/var&amp;gt; CreateXTable &amp;lt;var&amp;gt;typedef&amp;lt;/var&amp;gt; [ &amp;lt;var&amp;gt;fname1&amp;lt;/var&amp;gt; ... ]&amp;lt;/code&amp;gt;:&lt;br /&gt;
:;&amp;lt;var&amp;gt;typedef&amp;lt;/var&amp;gt;: The name (ID) of the &amp;lt;code&amp;gt;XTableTypeDef&amp;lt;/code&amp;gt; element.&lt;br /&gt;
:;&amp;lt;var&amp;gt;fname1&amp;lt;/var&amp;gt;, ...: The name of the extra fields to be added to the extended table.&lt;br /&gt;
;Result: The name of the new and initialized extended table-item or an empty string.&lt;br /&gt;
;Description: Creates an extended table using the specified &amp;lt;var&amp;gt;typedef&amp;lt;/var&amp;gt; or retrieves data type information for the current element (if no &amp;lt;var&amp;gt;typedef&amp;lt;/var&amp;gt; is specified). If extra fields are specified and the &amp;lt;var&amp;gt;typedef&amp;lt;/var&amp;gt; contains a definition statement for the extra fields, they are added to the table.&lt;br /&gt;
;Note: A &amp;lt;var&amp;gt;typedef&amp;lt;/var&amp;gt; for an extended table is defined in an xml element with the tag &amp;lt;code&amp;gt;XTableTypeDef&amp;lt;/code&amp;gt; with the attribute &amp;lt;code&amp;gt;ID=&amp;quot;&amp;lt;var&amp;gt;typedef&amp;lt;/var&amp;gt;&amp;quot;&amp;lt;/code&amp;gt;. This element must be defined in the definition-section of the {{STX}} configuration file or on level of the current element. &lt;br /&gt;
&lt;br /&gt;
====LoadData====&lt;br /&gt;
;&amp;lt;code&amp;gt;&amp;lt;var&amp;gt;bxmldoc&amp;lt;/var&amp;gt; LoadData&amp;lt;/code&amp;gt;:&lt;br /&gt;
;Result: The name of the shell-item (table) containing the loaded data or an empty string.&lt;br /&gt;
;Description: Loads the data stored in the current element. The item for the data is created in the function and returned to the caller. Data type information is retrieved by calling &amp;lt;code&amp;gt;GetDataType&amp;lt;/code&amp;gt; and &amp;lt;code&amp;gt;CreateXTable&amp;lt;/code&amp;gt;. &lt;br /&gt;
;Example: Load data from the {{STX}} configuration file at the IRef &amp;lt;code&amp;gt;/Definitions/DataSet/Methods&amp;lt;/code&amp;gt;.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
...&lt;br /&gt;
$bstxini attach&lt;br /&gt;
$bstxini selectiref &#039;/Definitions/DataSet/Methods&#039;&lt;br /&gt;
if &#039;$result&#039; == 0 #data := $bstxini loaddata&lt;br /&gt;
$bstxini detach&lt;br /&gt;
...&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====SaveData====&lt;br /&gt;
;&amp;lt;code&amp;gt;&amp;lt;var&amp;gt;bxmldoc&amp;lt;/var&amp;gt; SaveData &amp;lt;var&amp;gt;item&amp;lt;/var&amp;gt; [ ; &amp;lt;var&amp;gt;del&amp;lt;/var&amp;gt;=0 ]&amp;lt;/code&amp;gt;:&lt;br /&gt;
:;&amp;lt;var&amp;gt;item&amp;lt;/var&amp;gt;: Shell-item (table) containing the data to be saved.&lt;br /&gt;
:;&amp;lt;var&amp;gt;del&amp;lt;/var&amp;gt;: If set to &amp;lt;code&amp;gt;1&amp;lt;/code&amp;gt; the shell-item is deleted after saving&lt;br /&gt;
;Result: 0 for success or errorcode&lt;br /&gt;
;Description:Save &amp;lt;var&amp;gt;item&amp;lt;/var&amp;gt; into the data section of the current element. The data format is selected by calling &amp;lt;code&amp;gt;GetDataType&amp;lt;/code&amp;gt;. The item is only saved, if it is valid for the data type. If &amp;lt;var&amp;gt;item&amp;lt;/var&amp;gt; is saved successful and &amp;lt;var&amp;gt;del&amp;lt;/var&amp;gt; is set to &amp;lt;code&amp;gt;1&amp;lt;/code&amp;gt;, &amp;lt;var&amp;gt;item&amp;lt;/var&amp;gt; is deleted.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==IRef functions==&lt;br /&gt;
* This group of functions was originally developed, to deal with unique references to elements of type &#039;&#039;&#039;Set&#039;&#039;&#039; with the special unique id attribute &#039;&#039;&#039;ID&#039;&#039;&#039;. This implementation was modified, because the attribute &#039;&#039;&#039;ID&#039;&#039;&#039; is now used as a unique identifier for elements of any type.&lt;br /&gt;
* A string in the format &#039;&#039;&#039; /&#039;&#039;id1&#039;&#039;/&#039;&#039;id2&#039;&#039;/.../&#039;&#039;idn&#039;&#039; &#039;&#039;&#039; is called &#039;&#039;&#039;IRef&#039;&#039;&#039; (for &amp;quot;(unique) Internal REFerence&amp;quot;). This string is interpreted as follows:&lt;br /&gt;
** &#039;&#039;id1&#039;&#039; is the unique element id (value of attribute &#039;&#039;&#039;ID&#039;&#039;&#039;) on the root-level&lt;br /&gt;
** &#039;&#039;id2&#039;&#039; is the unique element id inside the element selected by &#039;&#039;id1&#039;&#039;&lt;br /&gt;
** and so on&lt;br /&gt;
&lt;br /&gt;
====SelectIRef====&lt;br /&gt;
{{/SelectIRef}}&lt;br /&gt;
&lt;br /&gt;
====FormatIRef====&lt;br /&gt;
;&amp;lt;code&amp;gt;&amp;lt;var&amp;gt;bxmldoc&amp;lt;/var&amp;gt; FormatIRef [ &amp;lt;var&amp;gt;pos&amp;lt;/var&amp;gt;=* ]&amp;lt;/code&amp;gt;&lt;br /&gt;
:;&amp;lt;var&amp;gt;pos&amp;lt;/var&amp;gt;: The XML element position or &amp;lt;code&amp;gt;*&amp;lt;/code&amp;gt; for the current element.&lt;br /&gt;
;Result: A reference (IRef) to the selected element or an empty string.&lt;br /&gt;
;Description:Generates the internal XML reference string for the specified element at position &amp;lt;var&amp;gt;pos&amp;lt;/var&amp;gt;. This string can only be created if all elements in the path except the root element have an ID attribute.&lt;br /&gt;
;see also: commands [[Programmer_Guide/Command_Reference/IREF|IREF]] and [[Programmer_Guide/Command_Reference/POSITION|POSITION]]&lt;br /&gt;
&lt;br /&gt;
====UniqueID====&lt;br /&gt;
;&amp;lt;code&amp;gt;&amp;lt;var&amp;gt;bxmldoc&amp;lt;/var&amp;gt; UniqueID [ &amp;lt;var&amp;gt;pos&amp;lt;/var&amp;gt;=* ; &amp;lt;var&amp;gt;id&amp;lt;/var&amp;gt;=* ; &amp;lt;var&amp;gt;ext&amp;lt;/var&amp;gt;=0 ; &amp;lt;var&amp;gt;start&amp;lt;/var&amp;gt;=-1 ; &amp;lt;var&amp;gt;digits&amp;lt;/var&amp;gt;=0 ]&amp;lt;/code&amp;gt;&lt;br /&gt;
:;&amp;lt;var&amp;gt;pos&amp;lt;/var&amp;gt;: The position/reference of the parent element (&amp;lt;code&amp;gt;*&amp;lt;/code&amp;gt; = current element)&lt;br /&gt;
:;&amp;lt;var&amp;gt;id&amp;lt;/var&amp;gt;: The fixed part of the id-string. If an asterisk is specified, the string &amp;quot;Auto&amp;quot; is used.&lt;br /&gt;
:;&amp;lt;var&amp;gt;ext&amp;lt;/var&amp;gt;: Use the counter in the id-extension (&amp;lt;code&amp;gt;yes&amp;lt;/code&amp;gt; or &amp;lt;code&amp;gt;1&amp;lt;/code&amp;gt;) or append the counter directly to the id-string (&amp;lt;code&amp;gt;no&amp;lt;/code&amp;gt; or &amp;lt;code&amp;gt;0&amp;lt;/code&amp;gt;).&lt;br /&gt;
;&amp;lt;var&amp;gt;start&amp;lt;/var&amp;gt;: The counter start value. Use &amp;lt;code&amp;gt;-1&amp;lt;/code&amp;gt; to test &amp;lt;var&amp;gt;id&amp;lt;/var&amp;gt; without the counter suffix: if &amp;lt;var&amp;gt;id&amp;lt;/var&amp;gt; is unique it is returned without any modifications.&lt;br /&gt;
;&amp;lt;var&amp;gt;digits&amp;lt;/var&amp;gt;: The number of digits. Use a value outside the range &amp;lt;code&amp;gt;2..9&amp;lt;/code&amp;gt; to disable zero padding. If e.g. &amp;lt;var&amp;gt;digits&amp;lt;/var&amp;gt; equals 3, the generated counter values will be &amp;lt;code&amp;gt;000&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;001&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;002&amp;lt;/code&amp;gt;, etc.&lt;br /&gt;
;Result: A unique id string (unique on the selected level) or an empty string on failure.&lt;br /&gt;
;Description: Generate a unique id for the current level or inside the specified parent element. If &amp;lt;var&amp;gt;id&amp;lt;/var&amp;gt; is unique, then &amp;lt;var&amp;gt;id&amp;lt;/var&amp;gt; is returned. Otherwise, the counter is appended to &amp;lt;var&amp;gt;id&amp;lt;/var&amp;gt; in the requested format.&lt;br /&gt;
&lt;br /&gt;
==&amp;quot;Set&amp;quot; functions==&lt;br /&gt;
* This group of functions was originally developed to deal with elements of type &#039;&#039;&#039;Set&#039;&#039;&#039; with the special unique id attribute &#039;&#039;&#039;ID&#039;&#039;&#039;. This implementation was modified, because the attribute &#039;&#039;&#039;ID&#039;&#039;&#039; is now used as a unique identifier for elements of any type.&lt;br /&gt;
&lt;br /&gt;
===ListSetElements===&lt;br /&gt;
&amp;lt;code&amp;gt;&amp;lt;var&amp;gt;bxmldoc&amp;lt;/var&amp;gt; ListSetElements [ &amp;lt;var&amp;gt;table&amp;lt;/var&amp;gt;=* ; &amp;lt;var&amp;gt;iref&amp;lt;/var&amp;gt;=* ]&amp;lt;/code&amp;gt;&lt;br /&gt;
:;&amp;lt;var&amp;gt;table&amp;lt;/var&amp;gt;: simple table-item to store result; if &amp;lt;code&amp;gt;*&amp;lt;/code&amp;gt; is used a new table is created&lt;br /&gt;
:;&amp;lt;var&amp;gt;iref&amp;lt;/var&amp;gt;: reference of the set-element containing the elements to be listed; use &amp;lt;code&amp;gt;*&amp;lt;/code&amp;gt; for the current level&lt;br /&gt;
;Result: the table-item containing the result (list of id&#039;s) or an empty string&lt;br /&gt;
;Description: Lists all element id&#039;s on the current level (&amp;lt;var&amp;gt;iref&amp;lt;/var&amp;gt;=*) or inside the specified set-element. If a table-item is passed, it is emptied before the id list is stored, otherwise a new table is created.&lt;br /&gt;
&lt;br /&gt;
===FindSetElement===&lt;br /&gt;
&amp;lt;code&amp;gt;&amp;lt;var&amp;gt;bxmldoc&amp;lt;/var&amp;gt; FindSetElement [ &amp;lt;var&amp;gt;tag&amp;lt;/var&amp;gt;=* ; &amp;lt;var&amp;gt;id&amp;lt;/var&amp;gt;=* ; &amp;lt;var&amp;gt;iref&amp;lt;/var&amp;gt;=* ]&amp;lt;/code&amp;gt;&lt;br /&gt;
:;&amp;lt;var&amp;gt;tag&amp;lt;/var&amp;gt;: element tag; use &amp;lt;code&amp;gt;*&amp;lt;/code&amp;gt; for all elements&lt;br /&gt;
:;&amp;lt;var&amp;gt;id&amp;lt;/var&amp;gt;: value of ID attribute; wildcards are possible&lt;br /&gt;
:;&amp;lt;var&amp;gt;iref&amp;lt;/var&amp;gt;: reference of the set-element to be searched; use &amp;lt;code&amp;gt;*&amp;lt;/code&amp;gt; for the current level&lt;br /&gt;
;Result: 0 if the element was found and 1 if not&lt;br /&gt;
;Description: Find the (first element) with the specified &amp;lt;var&amp;gt;tag&amp;lt;/var&amp;gt; (* = search all element tags) and &amp;lt;var&amp;gt;id&amp;lt;/var&amp;gt;. For the matching of tag and id a case-sensitive comparison is used! If no &amp;lt;var&amp;gt;iref&amp;lt;/var&amp;gt; is specified, the current level is searched from the beginning, otherwise the search is performed inside the specified set.&lt;br /&gt;
&lt;br /&gt;
===AddSetElement===&lt;br /&gt;
&amp;lt;code&amp;gt;&amp;lt;var&amp;gt;bxmldoc&amp;lt;/var&amp;gt; AddSetElement [ &amp;lt;var&amp;gt;tag&amp;lt;/var&amp;gt; ; &amp;lt;var&amp;gt;id&amp;lt;/var&amp;gt; ; &amp;lt;var&amp;gt;iref&amp;lt;/var&amp;gt;=* ]&amp;lt;/code&amp;gt;&lt;br /&gt;
:;&amp;lt;var&amp;gt;tag&amp;lt;/var&amp;gt;: element tag&lt;br /&gt;
:;&amp;lt;var&amp;gt;id&amp;lt;/var&amp;gt;: element id (value of ID attribute)&lt;br /&gt;
:;&amp;lt;var&amp;gt;iref&amp;lt;/var&amp;gt;: reference of the set-element where the element should be created; use &amp;lt;code&amp;gt;*&amp;lt;/code&amp;gt; for the current level&lt;br /&gt;
;Result: 0 if the element was selected/created and 1 if not&lt;br /&gt;
;Description: Create a new element with specified tag and id in the set selected by &amp;lt;var&amp;gt;iref&amp;lt;/var&amp;gt;. If the specified set does not exist, it will be created. If a set must be created, for each set element the tag &amp;lt;code&amp;gt;SET&amp;lt;/code&amp;gt; is used by default, but it is possible to specify another tag in the argument &amp;lt;code&amp;gt;ref&amp;lt;/code&amp;gt; with the format: &amp;lt;code&amp;gt;/setid/.../settag:setid/.../&amp;lt;/code&amp;gt;. If the element is created, the new element is selected, otherwise the position is not changed. If the element exists already, it is selected but not changed.&lt;br /&gt;
&lt;br /&gt;
===LoadSetElement===&lt;br /&gt;
&amp;lt;code&amp;gt;&amp;lt;var&amp;gt;bxmldoc&amp;lt;/var&amp;gt; LoadSetElement [ &amp;lt;var&amp;gt;tag&amp;lt;/var&amp;gt;=* ; &amp;lt;var&amp;gt;id&amp;lt;/var&amp;gt;=* ; &amp;lt;var&amp;gt;iref&amp;lt;/var&amp;gt;=* ]&amp;lt;/code&amp;gt;&lt;br /&gt;
;Result: The loaded data object (table-item, value returned from &amp;lt;code&amp;gt;LoadData&amp;lt;/code&amp;gt;) or an empty string.&lt;br /&gt;
:Description: This function uses the call &amp;lt;code&amp;gt;&amp;lt;var&amp;gt;bxmldoc&amp;lt;/var&amp;gt; FindSetElement &amp;lt;var&amp;gt;tag&amp;lt;/var&amp;gt;;&amp;lt;var&amp;gt;id&amp;lt;/var&amp;gt;;&amp;lt;var&amp;gt;iref&amp;lt;/var&amp;gt;&amp;lt;/code&amp;gt; to select the element and the call &amp;lt;code&amp;gt;&amp;lt;var&amp;gt;bxmldoc&amp;lt;/var&amp;gt; LoadData&amp;lt;/var&amp;gt;&amp;lt;/code&amp;gt; to load the content of the selected element. If element selection or loading data failes (error), the file position is not changed, otherwise (success) the loaded element is selected.&lt;br /&gt;
&lt;br /&gt;
===SaveSetElement===&lt;br /&gt;
&amp;lt;code&amp;gt;&amp;lt;var&amp;gt;bxmldoc&amp;lt;/var&amp;gt; SaveSetElement [ &amp;lt;var&amp;gt;item&amp;lt;/var&amp;gt; ; &amp;lt;var&amp;gt;del&amp;lt;/var&amp;gt;=0 ; &amp;lt;var&amp;gt;tag&amp;lt;/var&amp;gt;=* ; &amp;lt;var&amp;gt;id&amp;lt;/var&amp;gt;=* ; &amp;lt;var&amp;gt;iref&amp;lt;/var&amp;gt;=* ]&amp;lt;/code&amp;gt;&lt;br /&gt;
;Result: 0 if the data item was saved successful and 1 otherwise&lt;br /&gt;
:Description: This function uses the call &amp;lt;code&amp;gt;&amp;lt;var&amp;gt;bxmldoc&amp;lt;/var&amp;gt; AddSetElement &amp;lt;var&amp;gt;tag&amp;lt;/var&amp;gt;;&amp;lt;var&amp;gt;id&amp;lt;/var&amp;gt;;&amp;lt;var&amp;gt;iref&amp;lt;/var&amp;gt;&amp;lt;/code&amp;gt; to select or create the element and the call &amp;lt;code&amp;gt;&amp;lt;var&amp;gt;bxmldoc&amp;lt;/var&amp;gt; SaveData&amp;lt;/var&amp;gt;&amp;lt;/code&amp;gt; to save the item into the element. If element selection or save operation failes (error), the file position is not changed, otherwise (success) the created/updated element is selected.&lt;br /&gt;
&lt;br /&gt;
===DeleteSetElement===&lt;br /&gt;
&amp;lt;code&amp;gt;&amp;lt;var&amp;gt;bxmldoc&amp;lt;/var&amp;gt; DeleteSetElement [ &amp;lt;var&amp;gt;tag&amp;lt;/var&amp;gt;=* ; &amp;lt;var&amp;gt;id&amp;lt;/var&amp;gt;=* ; &amp;lt;var&amp;gt;iref&amp;lt;/var&amp;gt;=* ]&amp;lt;/code&amp;gt;&lt;br /&gt;
;Result: 0 if the element was deleted and 1 otherwise&lt;br /&gt;
:Description: This function calls &amp;lt;code&amp;gt;&amp;lt;var&amp;gt;bxmldoc&amp;lt;/var&amp;gt; FindSetElement &amp;lt;var&amp;gt;tag&amp;lt;/var&amp;gt;;&amp;lt;var&amp;gt;id&amp;lt;/var&amp;gt;;&amp;lt;var&amp;gt;iref&amp;lt;/var&amp;gt;&amp;lt;/code&amp;gt; to select an element and than deletes the selected element.&lt;br /&gt;
&lt;br /&gt;
==Misc==&lt;br /&gt;
&lt;br /&gt;
====SavePos====&lt;br /&gt;
&amp;lt;code&amp;gt;&amp;lt;var&amp;gt;bxmldoc&amp;lt;/var&amp;gt; SavePos [ &amp;lt;var&amp;gt;delpos&amp;lt;/var&amp;gt;=* ]&amp;lt;/code&amp;gt;&lt;br /&gt;
;Result: current xml position id or empty string if position can not be saved (no element selected)&lt;br /&gt;
;Description: Returns the xml position id of the currently selected element. If the xmp position id &amp;lt;var&amp;gt;delpos&amp;lt;/var&amp;gt; is not equal &amp;lt;code&amp;gt;*&amp;lt;/code&amp;gt;, this position is closed (reset).&lt;br /&gt;
;See Also: [[Programmer_Guide/Command_Reference/POSITION|POSITION]]&lt;br /&gt;
&lt;br /&gt;
====ResetPos====&lt;br /&gt;
&amp;lt;code&amp;gt;&amp;lt;var&amp;gt;bxmldoc&amp;lt;/var&amp;gt; ResetPos &amp;lt;var&amp;gt;pos&amp;lt;/var&amp;gt;=* [ ; * ; &amp;lt;var&amp;gt;delemem&amp;lt;/var&amp;gt;=0 ] &amp;lt;/code&amp;gt;&lt;br /&gt;
;Result: always 0&lt;br /&gt;
;Description: Restore the the xml position id &amp;lt;var&amp;gt;pos&amp;lt;/var&amp;gt;. If &amp;lt;var&amp;gt;delelem&amp;lt;/var&amp;gt; equals 1 the element at the restored position is deleted.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;&amp;lt;var&amp;gt;bxmldoc&amp;lt;/var&amp;gt; ResetPos &amp;lt;var&amp;gt;table&amp;lt;/var&amp;gt;=* [ ; &amp;lt;var&amp;gt;row&amp;lt;/var&amp;gt;=* ; &amp;lt;var&amp;gt;delemem&amp;lt;/var&amp;gt;=0 ; &amp;lt;var&amp;gt;deltable&amp;lt;/var&amp;gt;=0 ] &amp;lt;/code&amp;gt;&lt;br /&gt;
;Result: always 0&lt;br /&gt;
;Description: Restore all xml positions stored in &amp;lt;var&amp;gt;table[*,row]&amp;lt;/var&amp;gt;. If &amp;lt;var&amp;gt;table&amp;lt;/var&amp;gt; is a simple table, the argument &amp;lt;var&amp;gt;row&amp;lt;/var&amp;gt; is ignored.&lt;br /&gt;
::* If &amp;lt;var&amp;gt;delelem&amp;lt;/var&amp;gt; equals &amp;lt;code&amp;gt;1&amp;lt;/code&amp;gt; the elements at the restored positions are deleted&lt;br /&gt;
::* If &amp;lt;var&amp;gt;deltable&amp;lt;/var&amp;gt; equals &amp;lt;code&amp;gt;1&amp;lt;/code&amp;gt; the &amp;lt;var&amp;gt;table&amp;lt;/var&amp;gt; is deleted&lt;br /&gt;
::* This function can be used to reset positions returned by [[Programmer_Guide/Shell_Items/File/SET_FILE#Find_2|FIND]] or [[Programmer_Guide/Shell_Items/File/SET_FILE#EXTRACTTABLE|EXTRACTTABLE]] commands.&lt;br /&gt;
&lt;br /&gt;
====ExtractSubDoc====&lt;br /&gt;
;&amp;lt;code&amp;gt;&amp;lt;var&amp;gt;bxmldoc&amp;lt;/var&amp;gt; ExtractSubDoc &amp;lt;var&amp;gt;file&amp;lt;/var&amp;gt; ; &amp;lt;var&amp;gt;posattr&amp;lt;/var&amp;gt; ; &amp;lt;var&amp;gt;tag1&amp;lt;/var&amp;gt; ; &amp;lt;var&amp;gt;sub1&amp;lt;/var&amp;gt; ; &amp;lt;var&amp;gt;tag2&amp;lt;/var&amp;gt; ; &amp;lt;var&amp;gt;sub2&amp;lt;/var&amp;gt; ; ...&amp;lt;/code&amp;gt;:&lt;br /&gt;
:;&amp;lt;var&amp;gt;file&amp;lt;/var&amp;gt;: The target XML file item for extracted elements.&lt;br /&gt;
:;&amp;lt;var&amp;gt;posattr&amp;lt;/var&amp;gt;: The name of element attribute for positions of original elements.&lt;br /&gt;
:;&amp;lt;var&amp;gt;tagX&amp;lt;/var&amp;gt;: The element tags to be extracted.&lt;br /&gt;
:;&amp;lt;var&amp;gt;subX&amp;lt;/var&amp;gt;: Flag determining if child elements of &amp;lt;var&amp;gt;tagX&amp;lt;/var&amp;gt; should be scanned scan too (yes=&amp;lt;code&amp;gt;1&amp;lt;/code&amp;gt;, no=&amp;lt;code&amp;gt;0&amp;lt;/code&amp;gt;).&lt;br /&gt;
;Result: none (void), &amp;lt;var&amp;gt;file&amp;lt;/var&amp;gt; contains extracted elemenents&lt;br /&gt;
;Description: Extract the elements with the specified tags from the document and copy them into the specified target &amp;lt;var&amp;gt;file&amp;lt;/var&amp;gt;. The original tree structure is retained. The content of an element with &amp;lt;var&amp;gt;tagX&amp;lt;/var&amp;gt; is only scanned if the corresponding &amp;lt;var&amp;gt;subX&amp;lt;/var&amp;gt; argument is set to &amp;lt;code&amp;gt;1&amp;lt;/code&amp;gt; (or &amp;lt;code&amp;gt;yes&amp;lt;/code&amp;gt;). The element data are not extracted. If &amp;lt;var&amp;gt;posattr&amp;lt;/var&amp;gt; is not set to &#039;&amp;lt;code&amp;gt;*&amp;lt;/code&amp;gt;&#039; the position string of the original element is stored in the attribute &amp;lt;code&amp;gt;posattr&amp;lt;/code&amp;gt; of the copied (extracted) element. If a XML doctype is defined for the original document it is applied to the target file. The element extraction is performed with the command [[Programmer_Guide/Shell_Items/File/SET_FILE#EXTRACTFILE|EXTRACTFILE]]. &lt;br /&gt;
:Note: If the positions of the original elements are saved, the function &amp;lt;code&amp;gt;ResetSubDoc&amp;lt;/code&amp;gt; must be used to reset the positions before the target file is deleted.&lt;br /&gt;
&lt;br /&gt;
====ResetSubDoc====&lt;br /&gt;
;&amp;lt;code&amp;gt;&amp;lt;var&amp;gt;bxmldoc&amp;lt;/var&amp;gt; ResetSubDoc &amp;lt;var&amp;gt;file&amp;lt;/var&amp;gt; ; &amp;lt;var&amp;gt;posattr&amp;lt;/var&amp;gt;&amp;lt;/code&amp;gt;:&lt;br /&gt;
:;&amp;lt;var&amp;gt;file&amp;lt;/var&amp;gt;: A XML containing extracted elements.&lt;br /&gt;
:;&amp;lt;var&amp;gt;posattr&amp;lt;/var&amp;gt;: The name of element attribute for positions of original elements.&lt;br /&gt;
;Result: none&lt;br /&gt;
;Description: Reset the extracted file and all saved positions. This function must be called for all XML files created with EXTRACTSUBDOC.&lt;br /&gt;
&lt;br /&gt;
====DialogSelectElement====&lt;br /&gt;
&amp;lt;code&amp;gt;&amp;lt;var&amp;gt;bxmldoc&amp;lt;/var&amp;gt; DialogSelectElement &amp;lt;var&amp;gt;title&amp;lt;/var&amp;gt; ; &amp;lt;var&amp;gt;selmode&amp;lt;/var&amp;gt; ; &amp;lt;var&amp;gt;outmode&amp;lt;/var&amp;gt; ; &amp;lt;var&amp;gt;tag1&amp;lt;/var&amp;gt; ; &amp;lt;var&amp;gt;sub1&amp;lt;/var&amp;gt; ; &amp;lt;var&amp;gt;tagX&amp;lt;/var&amp;gt; ; &amp;lt;var&amp;gt;subX&amp;lt;/var&amp;gt; ; ...&amp;lt;/code&amp;gt;&lt;br /&gt;
:;&amp;lt;var&amp;gt;title&amp;lt;/var&amp;gt;: The dialog window caption.&lt;br /&gt;
:;&amp;lt;var&amp;gt;selmode&amp;lt;/var&amp;gt;: The selection mode {&amp;lt;code&amp;gt;SINGLE&amp;lt;/code&amp;gt;|&amp;lt;code&amp;gt;MULTIMPLE&amp;lt;/code&amp;gt;}.&lt;br /&gt;
:;&amp;lt;var&amp;gt;outmode&amp;lt;/var&amp;gt;: The output mode {&amp;lt;code&amp;gt;POSITION&amp;lt;/code&amp;gt;|&amp;lt;code&amp;gt;IREF&amp;lt;/code&amp;gt;}&lt;br /&gt;
:;&amp;lt;var&amp;gt;tagX, subX&amp;lt;/var&amp;gt;: The tag names and subtree scan flags which are passed to function &amp;lt;code&amp;gt;ExtractSubDoc&amp;lt;/code&amp;gt;&lt;br /&gt;
;Result: An empty string for error/cancel or one of the values listed in the table below:&lt;br /&gt;
::{|class=&amp;quot;einrahmen&amp;quot;&lt;br /&gt;
!selmode !!outmode !!result&lt;br /&gt;
|-&lt;br /&gt;
|SINGLE&lt;br /&gt;
|POSITION&lt;br /&gt;
|position string of selected element&lt;br /&gt;
|-&lt;br /&gt;
|SINGLE&lt;br /&gt;
|IREF&lt;br /&gt;
|internal reference of selected element&lt;br /&gt;
|-&lt;br /&gt;
|MULTIPLE&lt;br /&gt;
|POSITION&lt;br /&gt;
|simple table containing position strings of selected elements&lt;br /&gt;
|-&lt;br /&gt;
|MULTIPLE&lt;br /&gt;
|IREF&lt;br /&gt;
|simple table containing internal references of selected elements&lt;br /&gt;
|}&lt;br /&gt;
;Description: Extracts a sub-document using the function &amp;lt;code&amp;gt;ExtractSubDoc&amp;lt;/code&amp;gt; and displays the sub-document tree in a dialog where the user can select one or more elements (depending on &amp;lt;var&amp;gt;selmode&amp;lt;/var&amp;gt;). Depending on &amp;lt;var&amp;gt;outmode&amp;lt;/var&amp;gt;, either the position/s or the internal reference/s of the selected element/s is/are returned. If &amp;lt;var&amp;gt;outmode&amp;lt;/var&amp;gt; is set to &amp;lt;code&amp;gt;POSITION&amp;lt;/code&amp;gt; the user must cleanup the positions when the element processing is finished.&lt;br /&gt;
;Examples: The following code displays a dialog with all audio files and sets in the current DataSet and retrieves the audio set information for the file chosen by the user (if any).&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
#pos := $BDataSet DialogSelectElement title ; single ; position ; Set ; 1 ; AFile ; 0&lt;br /&gt;
if &#039;$#pos&#039; != &#039;&#039; then&lt;br /&gt;
    readstr &#039;$($BDataSet GetASetInfo $#pos soundfile)&#039; #sf&#039;;&#039;#setId&#039;;&#039;#srate&#039;;&#039;#ch&#039;;&#039;#fPath&lt;br /&gt;
    if &#039;$#fPath&#039; != &#039;&#039; #file := $#fPath&lt;br /&gt;
    if &#039;$#sRate&#039; != &#039;&#039; #sr := $#srate&lt;br /&gt;
    #iref := $($BDataSet FormatIRef $#pos)&lt;br /&gt;
    #result := &#039;$#file ; $#sr ; $#iref ; $#ch&#039;&lt;br /&gt;
end&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====Table2VarSpace====&lt;br /&gt;
;&amp;lt;code&amp;gt;&amp;lt;var&amp;gt;bxmldoc&amp;lt;/var&amp;gt; Table2VarSpace &amp;lt;var&amp;gt;table ; del ; prefix ; inst&amp;lt;/var&amp;gt;&amp;lt;/code&amp;gt;:&lt;br /&gt;
:;&amp;lt;var&amp;gt;table&amp;lt;/var&amp;gt;: name of table containing variable settings&lt;br /&gt;
:;&amp;lt;var&amp;gt;del&amp;lt;/var&amp;gt;: delete table after conversion (&amp;lt;code&amp;gt;0&amp;lt;/code&amp;gt;=yes, &amp;lt;code&amp;gt;1&amp;lt;/code&amp;gt;=no)&lt;br /&gt;
:;&amp;lt;var&amp;gt;prefix&amp;lt;/var&amp;gt;: prefix string for variable names&lt;br /&gt;
:;&amp;lt;var&amp;gt;inst&amp;lt;/var&amp;gt;: name of an instance item (optional);&lt;br /&gt;
;Result: none&lt;br /&gt;
;Description: Converts the variable assignments (&amp;lt;code&amp;gt;varname = varvalue&amp;lt;/code&amp;gt;) stored in the table to variables. For each entry of the table a variable named &amp;lt;var&amp;gt;prefix&amp;lt;/var&amp;gt;&amp;lt;code&amp;gt;varname&amp;lt;/code&amp;gt; is created and the value &amp;lt;code&amp;gt;varvalue&amp;lt;/code&amp;gt; is assigned. If an instance item &amp;lt;var&amp;gt;inst&amp;lt;/var&amp;gt; is specified, the variables are stored as member variables of the instance, otherwise the variable space used to store the variables depends on the prefix (e.g. if prefix equals &#039;@&#039;, the variables are stored as global variables). If the argument &amp;lt;var&amp;gt;del&amp;lt;/var&amp;gt; is set to &amp;lt;code&amp;gt;1&amp;lt;/code&amp;gt; the table is deleted after conversion. See &amp;lt;code&amp;gt;VarSpace2Table&amp;lt;/code&amp;gt; for conversion in the other direction.&lt;br /&gt;
&lt;br /&gt;
====VarSpace2Table====&lt;br /&gt;
;&amp;lt;code&amp;gt;&amp;lt;var&amp;gt;bxmldoc&amp;lt;/var&amp;gt; VarSpace2Table table ; prefix; inst&amp;lt;/code&amp;gt;:&lt;br /&gt;
:;&amp;lt;var&amp;gt;table&amp;lt;/var&amp;gt;: name of table containing variable settings&lt;br /&gt;
:;&amp;lt;var&amp;gt;prefix&amp;lt;/var&amp;gt;: prefix string for variable names&lt;br /&gt;
:;&amp;lt;var&amp;gt;inst&amp;lt;/var&amp;gt;: name of an instance item (optional);&lt;br /&gt;
;Result: none&lt;br /&gt;
;Description: Convert variables to table. Each entry of &amp;lt;var&amp;gt;table&amp;lt;/var&amp;gt; must define one variable in the format &amp;lt;code&amp;gt;varname = varvalue&amp;lt;/code&amp;gt;. The &amp;lt;code&amp;gt;varvalue&amp;lt;/code&amp;gt; is replaced by the current value of the variable &amp;lt;var&amp;gt;prefix&amp;lt;/var&amp;gt;&amp;lt;code&amp;gt;varname&amp;lt;/code&amp;gt;. If an instance item &amp;lt;var&amp;gt;inst&amp;lt;/var&amp;gt; is specified the variables are read from the instance item, otherwise the variables must be stored in the global or the shell variable space. See VarSpace2Table for conversion in the other direction.&lt;br /&gt;
&lt;br /&gt;
====AFun====&lt;br /&gt;
;&amp;lt;code&amp;gt;&amp;lt;var&amp;gt;bxmldoc&amp;lt;/var&amp;gt; AFun &amp;lt;var&amp;gt;memberFunctionName&amp;lt;/var&amp;gt; [ ; &amp;lt;var&amp;gt;memberFunctionArgs&amp;lt;/var&amp;gt; ]&amp;lt;/code&amp;gt;:&lt;br /&gt;
;Result: result returned from member function call&lt;br /&gt;
;Description: This function attaches the XML document to the calling shell, executes the member function call &amp;lt;code&amp;gt;&amp;lt;var&amp;gt;bxmldoc&amp;lt;/var&amp;gt; &amp;lt;var&amp;gt;memberFunctionName&amp;lt;/var&amp;gt; [ &amp;lt;var&amp;gt;memberFunctionArgs&amp;lt;/var&amp;gt; ]&amp;lt;/code&amp;gt; and detaches the XML document.&lt;/div&gt;</summary>
		<author><name>Jw</name></author>
	</entry>
	<entry>
		<id>https://mediawiki.kfs.oeaw.ac.at/stx/docs/wiki/index.php?title=Programmer_Guide/Macro_Library/BXMLDoc&amp;diff=10653</id>
		<title>Programmer Guide/Macro Library/BXMLDoc</title>
		<link rel="alternate" type="text/html" href="https://mediawiki.kfs.oeaw.ac.at/stx/docs/wiki/index.php?title=Programmer_Guide/Macro_Library/BXMLDoc&amp;diff=10653"/>
		<updated>2019-10-01T08:41:14Z</updated>

		<summary type="html">&lt;p&gt;Jw: /* FormatIRef */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{DISPLAYTITLE:{{SUBPAGENAME}} - General XML Document}}&lt;br /&gt;
:&#039;&#039;&#039;File&#039;&#039;&#039;: BXMLDOC.STX, linked to library STX.LIB&lt;br /&gt;
:&#039;&#039;&#039;Parent class&#039;&#039;&#039;: [[Programmer Guide/Macro Library/COBJ|CObj]], &#039;&#039;&#039;Derived classes&#039;&#039;&#039;: [[Programmer Guide/Macro Library/BSTXIni|BSTXIni]], [[Programmer Guide/Macro Library/BDataSet|BDataSet]]&lt;br /&gt;
&lt;br /&gt;
This class implements a general xml-document. It is mainly used to implement the common part of the two main {{STx}} documents: the project &amp;lt;code&amp;gt;BDataSet&amp;lt;/code&amp;gt; and the workspace &amp;lt;code&amp;gt;BSTXIni&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
==Construction==&lt;br /&gt;
;&amp;lt;code&amp;gt;COBJ NEW BXMLDOC NEW|XNEW ; &amp;lt;var&amp;gt;xmlobj&amp;lt;/var&amp;gt;|&amp;lt;var&amp;gt;roottag&amp;lt;/var&amp;gt; [; &amp;lt;var&amp;gt;aname&amp;lt;/var&amp;gt;=&amp;lt;var&amp;gt;avalue&amp;lt;/var&amp;gt;; ...]&amp;lt;/code&amp;gt;:&lt;br /&gt;
:;&amp;lt;var&amp;gt;xmlobj&amp;lt;/var&amp;gt;: The name of a BXMLDoc-instance or the name of a XML-file-item.&lt;br /&gt;
:;&amp;lt;var&amp;gt;roottag&amp;lt;/var&amp;gt;: The tag of the root element.&lt;br /&gt;
:;&amp;lt;var&amp;gt;aname&amp;lt;/var&amp;gt;, &amp;lt;var&amp;gt;avalue&amp;lt;/var&amp;gt;: The name and the value of a root element attribute.&lt;br /&gt;
;Result: The created and initialized instance-item or an empty string&lt;br /&gt;
;Description: Create a new empty XML document using the same root element tag as &amp;lt;var&amp;gt;xmldoc&amp;lt;/var&amp;gt; or the specified &amp;lt;var&amp;gt;roottag&amp;lt;/var&amp;gt;. During initialization the XML doctype is loaded, if it is defined in the {{STX}} configuration file, and the global item table is created. The &amp;lt;code&amp;gt;XNEW&amp;lt;/code&amp;gt; variant creates or opens the XML file using the /Exclusive flag.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
;&amp;lt;code&amp;gt;COBJ NEW BXMLDOC CREATE|XCREATE ; &amp;lt;var&amp;gt;filepath&amp;lt;/var&amp;gt;; &amp;lt;var&amp;gt;roottag&amp;lt;/var&amp;gt; [; &amp;lt;var&amp;gt;aname&amp;lt;/var&amp;gt;=&amp;lt;var&amp;gt;avalue&amp;lt;/var&amp;gt;; ...]&amp;lt;/code&amp;gt;:&lt;br /&gt;
:;&amp;lt;var&amp;gt;filepath&amp;lt;/var&amp;gt;: The name of the XML file.&lt;br /&gt;
:;&amp;lt;var&amp;gt;roottag&amp;lt;/var&amp;gt;: The tag of the root element.&lt;br /&gt;
:;&amp;lt;var&amp;gt;aname&amp;lt;/var&amp;gt;, &amp;lt;var&amp;gt;avalue&amp;lt;/var&amp;gt;: The name and the value of a root element attribute.&lt;br /&gt;
;Result: The created and initialized instance-item or an empty string&lt;br /&gt;
;Description: Open an existing or create a new XML file and initialize the XML document. During initialization the XML doctype is loaded, if it is defined in the {{STX}} configuration file, and the global item table is created. If a new file is created, the root element with tag &amp;lt;var&amp;gt;roottag&amp;lt;/var&amp;gt; and the specified attributes is created. The &amp;lt;code&amp;gt;XCREATE&amp;lt;/code&amp;gt; variant creates or opens the XML file using the /Exclusive flag.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
;&amp;lt;code&amp;gt;COBJ NEW BXMLDOC OPEN|XOPEN ; &amp;lt;var&amp;gt;filepath&amp;lt;/var&amp;gt;&amp;lt;/code&amp;gt;:&lt;br /&gt;
:;&amp;lt;var&amp;gt;filepath&amp;lt;/var&amp;gt;: The name of the existing XML file.&lt;br /&gt;
;Result: The  created and initialized instance-item or an empty string&lt;br /&gt;
;Description: Open an existing XML file and initialize the XML document. During initialization the XML doctype is loaded if it is defined in the {{STX}} configuration file and the global item table is created.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
;&amp;lt;code&amp;gt;COBJ NEW BXMLDOC LINK ; &amp;lt;var&amp;gt;xmlobj&amp;lt;/var&amp;gt;&amp;lt;/code&amp;gt;:&lt;br /&gt;
:;&amp;lt;var&amp;gt;xmlobj&amp;lt;/var&amp;gt;: The name of a BXMLDoc-instance.&lt;br /&gt;
;Result: The created and initialized instance-item or an empty string&lt;br /&gt;
;Description: Link the new XML document to the XML document &amp;lt;var&amp;gt;xmlobj&amp;lt;/var&amp;gt; which was created and initialized in another shell. This constructor allows the sharing of XML documents between shells. This feature is f.i. used to share the global Workspace object (&amp;lt;code&amp;gt;$BSTXIni&amp;lt;/code&amp;gt;) and the DataSet object (&amp;lt;code&amp;gt;$BDataSet&amp;lt;/code&amp;gt;). Instances create with this method shares the file item and the global item table.&lt;br /&gt;
&lt;br /&gt;
==Access control==&lt;br /&gt;
Because an BXMLDoc instance can be used by more than one shell, there must be a mechanism to control the access to the instance and its data content.&lt;br /&gt;
&lt;br /&gt;
====Attach====&lt;br /&gt;
;&amp;lt;code&amp;gt;&amp;lt;var&amp;gt;bxmldoc&amp;lt;/var&amp;gt; Attach [ &amp;lt;var&amp;gt;iref&amp;lt;/var&amp;gt; ]&amp;lt;/code&amp;gt;:&lt;br /&gt;
:;&amp;lt;var&amp;gt;iref&amp;lt;/var&amp;gt;: Element reference or xml-position.&lt;br /&gt;
;Result: name of file-item of the document&lt;br /&gt;
;Description: Lock the XML document to the calling shell. The current position is saved. If an element reference or xml-position &amp;lt;var&amp;gt;iref&amp;lt;/var&amp;gt; is specified, the member &amp;lt;code&amp;gt;SELECTIREF&amp;lt;/code&amp;gt; is called to select the element. If a shell calls this function for the first time, the current XML file position is saved, for all further calls, only the lock-counter is increment.&lt;br /&gt;
:This function should be called any time before a shell uses a shared XML document. If a shell issues more than one &amp;lt;code&amp;gt;Attach&amp;lt;/code&amp;gt; function call, it must use the same number of &amp;lt;code&amp;gt;Detach&amp;lt;/code&amp;gt; calls to unlock the XML document.&lt;br /&gt;
&lt;br /&gt;
====Detach====&lt;br /&gt;
;&amp;lt;code&amp;gt;&amp;lt;var&amp;gt;bxmldoc&amp;lt;/var&amp;gt; Detach&amp;lt;/code&amp;gt;: &lt;br /&gt;
;Result: 1 if the xml-file-item was changed while it was locked and 0 if not. The return value is also 0 if the xml-file-item was not unlocked by the &amp;lt;code&amp;gt;Detach&amp;lt;/code&amp;gt; function.&lt;br /&gt;
;Description: Unlock the XML document from the shell and restores the element selected before the document was locked. If multiple &amp;lt;code&amp;gt;Attach&amp;lt;/code&amp;gt; calls were used, the same number of &amp;lt;code&amp;gt;Detach&amp;lt;/code&amp;gt; calls is necessary to really unlock the document.&lt;br /&gt;
&lt;br /&gt;
==Query attributes==&lt;br /&gt;
====GetFileItem====&lt;br /&gt;
;&amp;lt;code&amp;gt;&amp;lt;var&amp;gt;bxmldoc&amp;lt;/var&amp;gt; GetFileItem&amp;lt;/code&amp;gt;: Get the XML file item of the instance. The file should only be accessed directly if the XML document is locked to the shell (see [[#Access control]]). The use of the file item may be necessary to perform attribute access, element data access or special browse / search functions.&lt;br /&gt;
;Result: the xml-file-item&lt;br /&gt;
&lt;br /&gt;
====GetDocType====&lt;br /&gt;
;&amp;lt;code&amp;gt;&amp;lt;var&amp;gt;bxmldoc&amp;lt;/var&amp;gt; GetDocType&amp;lt;/code&amp;gt;: Retrieve the name of the doctype if a doctype is defined for the root element of the XML file.&lt;br /&gt;
;Result: name of XML doctype or empty string (if no doctype is defined for the document)&lt;br /&gt;
&lt;br /&gt;
====GetPath====&lt;br /&gt;
;&amp;lt;code&amp;gt;&amp;lt;var&amp;gt;bxmldoc&amp;lt;/var&amp;gt; GetPath&amp;lt;/code&amp;gt;: Retrieve the name of the XML file as stored on the hard drive. The result is empty if no file is associated with the document (this means the file exists in memory and was never loaded or saved). The function sets the &amp;lt;code&amp;gt;&amp;amp;path&amp;lt;/code&amp;gt; member variable.&lt;br /&gt;
;Result: the path of the the xml-file-item&lt;br /&gt;
&lt;br /&gt;
==File handling==&lt;br /&gt;
====Load====&lt;br /&gt;
;&amp;lt;code&amp;gt;&amp;lt;var&amp;gt;bxmldoc&amp;lt;/var&amp;gt; Load [ &amp;lt;var&amp;gt;path&amp;lt;/var&amp;gt; ]&amp;lt;/code&amp;gt;: Load the content of the file &amp;lt;var&amp;gt;path&amp;lt;/var&amp;gt; into the xml-file-item of the document. If &amp;lt;var&amp;gt;path&amp;lt;/var&amp;gt; is not specified, the current path is used (see &amp;lt;code&amp;gt;GetPath&amp;lt;/code&amp;gt;).&lt;br /&gt;
;Result: 0 for success or errorcode&lt;br /&gt;
&lt;br /&gt;
====Save====&lt;br /&gt;
;&amp;lt;code&amp;gt;&amp;lt;var&amp;gt;bxmldoc&amp;lt;/var&amp;gt; Save [ &amp;lt;var&amp;gt;path&amp;lt;/var&amp;gt; ]&amp;lt;/code&amp;gt;: Save the xml-file-item of the document to the file &amp;lt;var&amp;gt;path&amp;lt;/var&amp;gt;. If &amp;lt;var&amp;gt;path&amp;lt;/var&amp;gt; is not specified, the current path is used (see &amp;lt;code&amp;gt;GetPath&amp;lt;/code&amp;gt;).&lt;br /&gt;
;Result: 0 for success or errorcode&lt;br /&gt;
&lt;br /&gt;
====Close====&lt;br /&gt;
;&amp;lt;code&amp;gt;&amp;lt;var&amp;gt;bxmldoc&amp;lt;/var&amp;gt; Close [ &amp;lt;var&amp;gt;save&amp;lt;/var&amp;gt;=0 [; &amp;lt;var&amp;gt;path&amp;lt;/var&amp;gt; ] ]&amp;lt;/code&amp;gt;: Close the xml-file-item and delete the instance &amp;lt;var&amp;gt;bxmldoc&amp;lt;/var&amp;gt;. If the argument &amp;lt;var&amp;gt;save&amp;lt;/var&amp;gt; is set to &amp;lt;code&amp;gt;1&amp;lt;/code&amp;gt;, the document is saved before it is deletec (using the function call &amp;lt;code&amp;gt;&amp;lt;var&amp;gt;bxmldoc&amp;lt;/var&amp;gt; Save [ &amp;lt;var&amp;gt;path&amp;lt;/var&amp;gt; ]&amp;lt;/code&amp;gt;).&lt;br /&gt;
;Result: 0 for success or errorcode (returned from &amp;lt;code&amp;gt;Save&amp;lt;/code&amp;gt;).&lt;br /&gt;
;Note: The instance &amp;lt;var&amp;gt;bxmldoc&amp;lt;/var&amp;gt; is deleted, even if the function returns an errorcode.&lt;br /&gt;
&lt;br /&gt;
==Global items==&lt;br /&gt;
This class implements some members to share items between shells. This feature is used f.i. by the application &amp;lt;code&amp;gt;Viewer1&amp;lt;/code&amp;gt; to implement the &#039;&#039;&#039;signal copy-paste&#039;&#039;&#039; functions and by some other applications.&lt;br /&gt;
&lt;br /&gt;
====AddGlobalItem====&lt;br /&gt;
;&amp;lt;code&amp;gt;&amp;lt;var&amp;gt;bxmldoc&amp;lt;/var&amp;gt; AddGlobalItem &amp;lt;var&amp;gt;id&amp;lt;/var&amp;gt; ; &amp;lt;var&amp;gt;item&amp;lt;/var&amp;gt;&amp;lt;/code&amp;gt;: &lt;br /&gt;
:;&amp;lt;var&amp;gt;id&amp;lt;/var&amp;gt;: The global id-string to use for &amp;lt;var&amp;gt;item&amp;lt;/var&amp;gt;.&lt;br /&gt;
:;&amp;lt;var&amp;gt;item&amp;lt;/var&amp;gt;: The shell-item to add to the global-item-list.&lt;br /&gt;
;Result: 0 for success or errorcode&lt;br /&gt;
;Description: Add a shell item to the global item list. All items in the global item list can be linked by other shells, which have created a linked (shared) instance of this XML document. All types of items except displays, graphs and dialogs can be used.&lt;br /&gt;
&lt;br /&gt;
====AttachGlobalItem====&lt;br /&gt;
;&amp;lt;code&amp;gt;&amp;lt;var&amp;gt;bxmldoc&amp;lt;/var&amp;gt; AttachGlobalItem &amp;lt;var&amp;gt;id&amp;lt;/var&amp;gt; [; &amp;lt;var&amp;gt;lock&amp;lt;/var&amp;gt;=0 ]&amp;lt;/code&amp;gt;:&lt;br /&gt;
:;&amp;lt;var&amp;gt;id&amp;lt;/var&amp;gt;: The id-string of the global-item.&lt;br /&gt;
:;&amp;lt;var&amp;gt;lock&amp;lt;/var&amp;gt;: If set to &amp;lt;code&amp;gt;1&amp;lt;/code&amp;gt; the returned shell-item is locked.&lt;br /&gt;
;Result: name of shell-item linked to the global-item or empty string&lt;br /&gt;
;Description: Creates a [[Programmer_Guide/Shell_Items#References_to_shell_items|linked instance (reference)]] of the global item with the specified id. If lock is set to 1 the linked instance is locked to the calling shell.&lt;br /&gt;
&lt;br /&gt;
====DetachGlobalItem====&lt;br /&gt;
;&amp;lt;code&amp;gt;&amp;lt;var&amp;gt;bxmldoc&amp;lt;/var&amp;gt; DetachGlobalItem &amp;lt;var&amp;gt;item&amp;lt;/var&amp;gt; [; &amp;lt;var&amp;gt;unlock&amp;lt;/var&amp;gt;=0 ]&amp;lt;/code&amp;gt;:&lt;br /&gt;
:;&amp;lt;var&amp;gt;item&amp;lt;/var&amp;gt;: A shell-item linked to a global-item.&lt;br /&gt;
:;&amp;lt;var&amp;gt;unlock&amp;lt;/var&amp;gt;: If set to &amp;lt;code&amp;gt;1&amp;lt;/code&amp;gt; the &amp;lt;var&amp;gt;item&amp;lt;/var&amp;gt; is unlocked before it is deleted.&lt;br /&gt;
;Result: no return value (void)&lt;br /&gt;
;Description: Deletes a linked item. If unlock is set to 1 the linked item is unlocked before it is removed.&lt;br /&gt;
&lt;br /&gt;
====DeleteGlobalItem====&lt;br /&gt;
;&amp;lt;code&amp;gt;&amp;lt;var&amp;gt;bxmldoc&amp;lt;/var&amp;gt; DeleteGlobalItem &amp;lt;var&amp;gt;id&amp;lt;/var&amp;gt; [; &amp;lt;var&amp;gt;delete&amp;lt;/var&amp;gt;=0 ]&amp;lt;/code&amp;gt;:&lt;br /&gt;
:;&amp;lt;var&amp;gt;id&amp;lt;/var&amp;gt;: The id-string of the global-item.&lt;br /&gt;
:;&amp;lt;var&amp;gt;delete&amp;lt;/var&amp;gt;: If set to &amp;lt;code&amp;gt;1&amp;lt;/code&amp;gt; the shell-item is deleted.&lt;br /&gt;
;Result: 0 for success or errorcode&lt;br /&gt;
;Description: Remove the global-item with id-string &amp;lt;var&amp;gt;id&amp;lt;/var&amp;gt;from the global-item-list. If &amp;lt;var&amp;gt;delete&amp;lt;/var&amp;gt; is set to 1, the item is deleted after removing from the list. An item can only be removed by the same shell that adds it to the list.&lt;br /&gt;
&lt;br /&gt;
==Element manipulation==&lt;br /&gt;
====AddElement====&lt;br /&gt;
;&amp;lt;code&amp;gt;&amp;lt;var&amp;gt;bxmldoc&amp;lt;/var&amp;gt; AddElement &amp;lt;var&amp;gt;tag&amp;lt;/var&amp;gt; ; &amp;lt;var&amp;gt;where&amp;lt;/var&amp;gt; ; &amp;lt;var&amp;gt;goto&amp;lt;/var&amp;gt; ; &amp;lt;var&amp;gt;attr&amp;lt;/var&amp;gt;=&amp;lt;var&amp;gt;value&amp;lt;/var&amp;gt; ; ...&amp;lt;/code&amp;gt;:&lt;br /&gt;
:;&amp;lt;var&amp;gt;tag&amp;lt;/var&amp;gt;: The element tag.&lt;br /&gt;
:;&amp;lt;var&amp;gt;where&amp;lt;/var&amp;gt;: Controls where the element should be created: create the element on the current level (&amp;lt;code&amp;gt;CURRENT&amp;lt;/code&amp;gt; or &amp;lt;code&amp;gt;0&amp;lt;/code&amp;gt;) or as a child of the current element (&amp;lt;code&amp;gt;CHILD&amp;lt;/code&amp;gt; or &amp;lt;code&amp;gt;1&amp;lt;/code&amp;gt;).&lt;br /&gt;
:;&amp;lt;var&amp;gt;goto&amp;lt;/var&amp;gt;: Controls how the current position should be changed after the new element is created: select the created element (&amp;lt;code&amp;gt;SELECT&amp;lt;/code&amp;gt; or &amp;lt;code&amp;gt;1&amp;lt;/code&amp;gt;), step into the created element (&amp;lt;code&amp;gt;INSIDE&amp;lt;/code&amp;gt; or &amp;lt;code&amp;gt;2&amp;lt;/code&amp;gt;) or do not change the selected element (&amp;lt;code&amp;gt;HOLD&amp;lt;/code&amp;gt; or &amp;lt;code&amp;gt;0&amp;lt;/code&amp;gt;).&lt;br /&gt;
:;&amp;lt;var&amp;gt;attr&amp;lt;/var&amp;gt;=&amp;lt;var&amp;gt;value&amp;lt;/var&amp;gt;: Name(s) and value(s) of attributes to be assigned to the new element. All &amp;lt;var&amp;gt;name&amp;lt;/var&amp;gt; arguments must specifiy a valid XML attribute name.&lt;br /&gt;
;Result: 0 for success or errorcode&lt;br /&gt;
;Description: Add a new element with the specified tag to the XML document. The element is added on the same level as the current element (&amp;lt;var&amp;gt;where&amp;lt;/var&amp;gt;=&amp;lt;code&amp;gt;CURRENT&amp;lt;/code&amp;gt;) or as child element (&amp;lt;var&amp;gt;where&amp;lt;/var&amp;gt;=&amp;lt;code&amp;gt;CHILD&amp;lt;/code&amp;gt;) of the current element. The attribute assignment &amp;lt;var&amp;gt;attr&amp;lt;/var&amp;gt;=&amp;lt;var&amp;gt;value&amp;lt;/var&amp;gt; are used to initialize the new elements attributes. If the function returns &amp;lt;code&amp;gt;0&amp;lt;/code&amp;gt; the new element is created and the position is changed according to the argument &amp;lt;var&amp;gt;goto&amp;lt;/var&amp;gt;, otherwise the document content and the current element position are not changed. To assign the attributes to the element the function call &amp;lt;code&amp;gt;&amp;lt;var&amp;gt;bxmldoc&amp;lt;/var&amp;gt; SetElement * ; &amp;lt;var&amp;gt;attr&amp;lt;/var&amp;gt;=&amp;lt;var&amp;gt;value&amp;lt;/var&amp;gt; ; ...&amp;lt;/code&amp;gt; is used.&lt;br /&gt;
&lt;br /&gt;
====SetElement====&lt;br /&gt;
;&amp;lt;code&amp;gt;&amp;lt;var&amp;gt;bxmldoc&amp;lt;/var&amp;gt; SetElement &amp;lt;var&amp;gt;pos&amp;lt;/var&amp;gt; ; &amp;lt;var&amp;gt;attrarg&amp;lt;/var&amp;gt; ; ... &amp;lt;/code&amp;gt;:&lt;br /&gt;
:;&amp;lt;var&amp;gt;pos&amp;lt;/var&amp;gt;: The xml-position or element reference of the element to be changed. The value &amp;lt;code&amp;gt;*&amp;lt;/code&amp;gt; :;attrarg: Defines the name and the value of the attribute(s) to be set. &lt;br /&gt;
::;&amp;lt;var&amp;gt;aname&amp;lt;/var&amp;gt;=&amp;lt;var&amp;gt;avalue&amp;lt;/value&amp;gt;: Assign the value &amp;lt;var&amp;gt;avalue&amp;lt;/var&amp;gt; to the attribute &amp;lt;var&amp;gt;aname&amp;lt;/var&amp;gt;. The &amp;lt;var&amp;gt;aname&amp;lt;/var&amp;gt; must be a valid xml-attribute name. If &amp;lt;var&amp;gt;avalue&amp;lt;/var&amp;gt; is empty, the attribute &amp;lt;var&amp;gt;aname&amp;lt;/var&amp;gt; is deleted.&lt;br /&gt;
::;&amp;lt;var&amp;gt;attrtab&amp;lt;/var&amp;gt;: The name of a simple-table containing one attribute setting &amp;lt;code&amp;gt; &amp;lt;var&amp;gt;aname&amp;lt;/var&amp;gt; = &amp;lt;var&amp;gt;avalue&amp;lt;/var&amp;gt; &amp;lt;/code&amp;gt; per entry. This table gets deleted after processing!&lt;br /&gt;
;Result: 0 for success or errorcode.&lt;br /&gt;
;Description: Set the attributes of a specific element. The current position is not changed by this function. An error is returned, if no element is found at the specified position &amp;lt;var&amp;gt;pos&amp;lt;/var&amp;gt;, or an attribute assignment fails. If an error is returned, some attributes of the element may be changed! To remove an attribute, an empty attribute value can be used (&amp;lt;code&amp;gt; &amp;lt;var&amp;gt;aname&amp;lt;/var&amp;gt;=; &amp;lt;/code&amp;gt;).&lt;br /&gt;
&lt;br /&gt;
====GetElement====&lt;br /&gt;
;&amp;lt;code&amp;gt;&amp;lt;var&amp;gt;bxmldoc&amp;lt;/var&amp;gt; GetElement &amp;lt;var&amp;gt;pos&amp;lt;/var&amp;gt; ; &amp;lt;var&amp;gt;info&amp;lt;/var&amp;gt; ; aname1 ; ... &amp;lt;/code&amp;gt;:&lt;br /&gt;
:;&amp;lt;var&amp;gt;pos&amp;lt;/var&amp;gt;: The xml-position or element reference of the element.The value &amp;lt;code&amp;gt;*&amp;lt;/code&amp;gt; can be used for the element at the current position.&lt;br /&gt;
:;&amp;lt;var&amp;gt;info&amp;lt;/var&amp;gt;:&lt;br /&gt;
::{|class=&amp;quot;einrahmen&amp;quot;&lt;br /&gt;
|&amp;lt;code&amp;gt;0&amp;lt;/code&amp;gt; ||get attribute values ||result = &amp;lt;var&amp;gt;avalue1; ...&amp;lt;/var&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;code&amp;gt;1&amp;lt;/code&amp;gt; ||get element tag and attribute values ||:result = &amp;lt;var&amp;gt;tag; avalue1; ...&amp;lt;/var&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;code&amp;gt;2&amp;lt;/code&amp;gt; ||get element tag, number of children and attribute values ||result = &amp;lt;var&amp;gt;tag; nchildren; avalue1; ...&amp;lt;/var&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
:;&amp;lt;var&amp;gt;aname1&amp;lt;/var&amp;gt;, ...: list of attribute names &lt;br /&gt;
;Result: empty string (element not found) or a string containing selected informations (see argument &amp;lt;var&amp;gt;info&amp;lt;/var&amp;gt;)&lt;br /&gt;
;Description: Retrieve general informations about the specified element and/or element attribute values. The current element position is not changed by this function.&lt;br /&gt;
&lt;br /&gt;
====DeleteElement====&lt;br /&gt;
;&amp;lt;code&amp;gt;&amp;lt;var&amp;gt;bxmldoc&amp;lt;/var&amp;gt; DeleteElement &amp;lt;var&amp;gt;pos&amp;lt;/var&amp;gt;&amp;lt;/code&amp;gt;:&lt;br /&gt;
:;&amp;lt;var&amp;gt;pos&amp;lt;/var&amp;gt;: The xml-position or element reference of the element.The value &amp;lt;code&amp;gt;*&amp;lt;/code&amp;gt; can be used for the element at the current position.&lt;br /&gt;
;Result: 0 for success (deleted) or 1 for error&lt;br /&gt;
;Description: Delete the selected element. The current element position is only changed, if the current element was deleted.&lt;br /&gt;
&lt;br /&gt;
==Data manipulation==&lt;br /&gt;
====GetDataType====&lt;br /&gt;
;&amp;lt;code&amp;gt;&amp;lt;var&amp;gt;bxmldoc&amp;lt;/var&amp;gt; GetDataType [ &amp;lt;var&amp;gt;tag&amp;lt;/var&amp;gt; ]&amp;lt;/code&amp;gt;:&lt;br /&gt;
:;&amp;lt;var&amp;gt;tag&amp;lt;/var&amp;gt;: The element tag to be tested; if not specified or set to &amp;lt;code&amp;gt;*&amp;lt;/code&amp;gt; the tag of the current element is used.&lt;br /&gt;
;Result: The data type defined in the doctype or the element tag if no data type is defined for the specified tag.&lt;br /&gt;
;Description: Returns type of date stored in elements with the specified tag. This function is used by &amp;lt;code&amp;gt;LoadData&amp;lt;/code&amp;gt; and &amp;lt;code&amp;gt;SaveData&amp;lt;/code&amp;gt; to retrieve data type information. In the current doctype-version only the types &amp;lt;code&amp;gt;TABLE&amp;lt;/code&amp;gt; and &#039;&amp;lt;code&amp;gt;XTABLE tabledef&amp;lt;/code&amp;gt;&#039; are supported.&lt;br /&gt;
&lt;br /&gt;
====CreateXTable====&lt;br /&gt;
;&amp;lt;code&amp;gt;&amp;lt;var&amp;gt;bxmldoc&amp;lt;/var&amp;gt; CreateXTable &amp;lt;var&amp;gt;typedef&amp;lt;/var&amp;gt; [ &amp;lt;var&amp;gt;fname1&amp;lt;/var&amp;gt; ... ]&amp;lt;/code&amp;gt;:&lt;br /&gt;
:;&amp;lt;var&amp;gt;typedef&amp;lt;/var&amp;gt;: The name (ID) of the &amp;lt;code&amp;gt;XTableTypeDef&amp;lt;/code&amp;gt; element.&lt;br /&gt;
:;&amp;lt;var&amp;gt;fname1&amp;lt;/var&amp;gt;, ...: The name of the extra fields to be added to the extended table.&lt;br /&gt;
;Result: The name of the new and initialized extended table-item or an empty string.&lt;br /&gt;
;Description: Creates an extended table using the specified &amp;lt;var&amp;gt;typedef&amp;lt;/var&amp;gt; or retrieves data type information for the current element (if no &amp;lt;var&amp;gt;typedef&amp;lt;/var&amp;gt; is specified). If extra fields are specified and the &amp;lt;var&amp;gt;typedef&amp;lt;/var&amp;gt; contains a definition statement for the extra fields, they are added to the table.&lt;br /&gt;
;Note: A &amp;lt;var&amp;gt;typedef&amp;lt;/var&amp;gt; for an extended table is defined in an xml element with the tag &amp;lt;code&amp;gt;XTableTypeDef&amp;lt;/code&amp;gt; with the attribute &amp;lt;code&amp;gt;ID=&amp;quot;&amp;lt;var&amp;gt;typedef&amp;lt;/var&amp;gt;&amp;quot;&amp;lt;/code&amp;gt;. This element must be defined in the definition-section of the {{STX}} configuration file or on level of the current element. &lt;br /&gt;
&lt;br /&gt;
====LoadData====&lt;br /&gt;
;&amp;lt;code&amp;gt;&amp;lt;var&amp;gt;bxmldoc&amp;lt;/var&amp;gt; LoadData&amp;lt;/code&amp;gt;:&lt;br /&gt;
;Result: The name of the shell-item (table) containing the loaded data or an empty string.&lt;br /&gt;
;Description: Loads the data stored in the current element. The item for the data is created in the function and returned to the caller. Data type information is retrieved by calling &amp;lt;code&amp;gt;GetDataType&amp;lt;/code&amp;gt; and &amp;lt;code&amp;gt;CreateXTable&amp;lt;/code&amp;gt;. &lt;br /&gt;
;Example: Load data from the {{STX}} configuration file at the IRef &amp;lt;code&amp;gt;/Definitions/DataSet/Methods&amp;lt;/code&amp;gt;.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
...&lt;br /&gt;
$bstxini attach&lt;br /&gt;
$bstxini selectiref &#039;/Definitions/DataSet/Methods&#039;&lt;br /&gt;
if &#039;$result&#039; == 0 #data := $bstxini loaddata&lt;br /&gt;
$bstxini detach&lt;br /&gt;
...&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====SaveData====&lt;br /&gt;
;&amp;lt;code&amp;gt;&amp;lt;var&amp;gt;bxmldoc&amp;lt;/var&amp;gt; SaveData &amp;lt;var&amp;gt;item&amp;lt;/var&amp;gt; [ ; &amp;lt;var&amp;gt;del&amp;lt;/var&amp;gt;=0 ]&amp;lt;/code&amp;gt;:&lt;br /&gt;
:;&amp;lt;var&amp;gt;item&amp;lt;/var&amp;gt;: Shell-item (table) containing the data to be saved.&lt;br /&gt;
:;&amp;lt;var&amp;gt;del&amp;lt;/var&amp;gt;: If set to &amp;lt;code&amp;gt;1&amp;lt;/code&amp;gt; the shell-item is deleted after saving&lt;br /&gt;
;Result: 0 for success or errorcode&lt;br /&gt;
;Description:Save &amp;lt;var&amp;gt;item&amp;lt;/var&amp;gt; into the data section of the current element. The data format is selected by calling &amp;lt;code&amp;gt;GetDataType&amp;lt;/code&amp;gt;. The item is only saved, if it is valid for the data type. If &amp;lt;var&amp;gt;item&amp;lt;/var&amp;gt; is saved successful and &amp;lt;var&amp;gt;del&amp;lt;/var&amp;gt; is set to &amp;lt;code&amp;gt;1&amp;lt;/code&amp;gt;, &amp;lt;var&amp;gt;item&amp;lt;/var&amp;gt; is deleted.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==IRef functions==&lt;br /&gt;
* This group of functions was originally developed, to deal with unique references to elements of type &#039;&#039;&#039;Set&#039;&#039;&#039; with the special unique id attribute &#039;&#039;&#039;ID&#039;&#039;&#039;. This implementation was modified, because the attribute &#039;&#039;&#039;ID&#039;&#039;&#039; is now used as a unique identifier for elements of any type.&lt;br /&gt;
* A string in the format &#039;&#039;&#039; /&#039;&#039;id1&#039;&#039;/&#039;&#039;id2&#039;&#039;/.../&#039;&#039;idn&#039;&#039; &#039;&#039;&#039; is called &#039;&#039;&#039;IRef&#039;&#039;&#039; (for &amp;quot;(unique) Internal REFerence&amp;quot;). This string is interpreted as follows:&lt;br /&gt;
** &#039;&#039;id1&#039;&#039; is the unique element id (value of attribute &#039;&#039;&#039;ID&#039;&#039;&#039;) on the root-level&lt;br /&gt;
** &#039;&#039;id2&#039;&#039; is the unique element id inside the element selected by &#039;&#039;id1&#039;&#039;&lt;br /&gt;
** and so on&lt;br /&gt;
&lt;br /&gt;
====SelectIRef====&lt;br /&gt;
{{/SelectIRef}}&lt;br /&gt;
&lt;br /&gt;
====FormatIRef====&lt;br /&gt;
;&amp;lt;code&amp;gt;&amp;lt;var&amp;gt;bxmldoc&amp;lt;/var&amp;gt; FormatIRef [ &amp;lt;var&amp;gt;pos&amp;lt;/var&amp;gt;=* ]&amp;lt;/code&amp;gt;&lt;br /&gt;
:;&amp;lt;var&amp;gt;pos&amp;lt;/var&amp;gt;: The XML element position or &amp;lt;code&amp;gt;*&amp;lt;/code&amp;gt; for the current element.&lt;br /&gt;
;Result: A reference (IRef) to the selected element or an empty string.&lt;br /&gt;
;Description:Generates the internal XML reference string for the specified element at position &amp;lt;var&amp;gt;pos&amp;lt;/var&amp;gt;. This string can only be created if all elements in the path except the root element have an ID attribute.&lt;br /&gt;
;see also: commands [[Programmer_Guide/Command_Reference/IREF|IREF]] and [[Programmer_Guide/Command_Reference/POSITION|POSITION]]&lt;br /&gt;
&lt;br /&gt;
====UniqueID====&lt;br /&gt;
;&amp;lt;code&amp;gt;&amp;lt;var&amp;gt;bxmldoc&amp;lt;/var&amp;gt; UniqueID [ &amp;lt;var&amp;gt;pos&amp;lt;/var&amp;gt;=* ; &amp;lt;var&amp;gt;id&amp;lt;/var&amp;gt;=* ; &amp;lt;var&amp;gt;ext&amp;lt;/var&amp;gt;=0 ; &amp;lt;var&amp;gt;start&amp;lt;/var&amp;gt;=-1 ; &amp;lt;var&amp;gt;digits&amp;lt;/var&amp;gt;=0 ]&amp;lt;/code&amp;gt;&lt;br /&gt;
:;&amp;lt;var&amp;gt;pos&amp;lt;/var&amp;gt;: The position/reference of the parent element (&amp;lt;code&amp;gt;*&amp;lt;/code&amp;gt; = current element)&lt;br /&gt;
:;&amp;lt;var&amp;gt;id&amp;lt;/var&amp;gt;: The fixed part of the id-string. If an asterisk is specified, the string &amp;quot;Auto&amp;quot; is used.&lt;br /&gt;
:;&amp;lt;var&amp;gt;ext&amp;lt;/var&amp;gt;: Use the counter in the id-extension (&amp;lt;code&amp;gt;yes&amp;lt;/code&amp;gt; or &amp;lt;code&amp;gt;1&amp;lt;/code&amp;gt;) or append the counter directly to the id-string (&amp;lt;code&amp;gt;no&amp;lt;/code&amp;gt; or &amp;lt;code&amp;gt;0&amp;lt;/code&amp;gt;).&lt;br /&gt;
;&amp;lt;var&amp;gt;start&amp;lt;/var&amp;gt;: The counter start value. Use &amp;lt;code&amp;gt;-1&amp;lt;/code&amp;gt; to test &amp;lt;var&amp;gt;id&amp;lt;/var&amp;gt; without the counter suffix: if &amp;lt;var&amp;gt;id&amp;lt;/var&amp;gt; is unique it is returned without any modifications.&lt;br /&gt;
;&amp;lt;var&amp;gt;digits&amp;lt;/var&amp;gt;: The number of digits. Use a value outside the range &amp;lt;code&amp;gt;2..9&amp;lt;/code&amp;gt; to disable zero padding. If e.g. &amp;lt;var&amp;gt;digits&amp;lt;/var&amp;gt; equals 3, the generated counter values will be &amp;lt;code&amp;gt;000&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;001&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;002&amp;lt;/code&amp;gt;, etc.&lt;br /&gt;
;Result: A unique id string (unique on the selected level) or an empty string on failure.&lt;br /&gt;
;Description: Generate a unique id for the current level or inside the specified parent element. If &amp;lt;var&amp;gt;id&amp;lt;/var&amp;gt; is unique, then &amp;lt;var&amp;gt;id&amp;lt;/var&amp;gt; is returned. Otherwise, the counter is appended to &amp;lt;var&amp;gt;id&amp;lt;/var&amp;gt; in the requested format.&lt;br /&gt;
&lt;br /&gt;
==&amp;quot;Set&amp;quot; functions==&lt;br /&gt;
* This group of functions was originally developed, to deal with elements of type &#039;&#039;&#039;Set&#039;&#039;&#039; with the special unique id attribute &#039;&#039;&#039;ID&#039;&#039;&#039;. This implementation was modified, because the attribute &#039;&#039;&#039;ID&#039;&#039;&#039; is now used as a unique identifier for elements of any type.&lt;br /&gt;
&lt;br /&gt;
===ListSetElements===&lt;br /&gt;
&amp;lt;code&amp;gt;&amp;lt;var&amp;gt;bxmldoc&amp;lt;/var&amp;gt; ListSetElements [ &amp;lt;var&amp;gt;table&amp;lt;/var&amp;gt;=* ; &amp;lt;var&amp;gt;iref&amp;lt;/var&amp;gt;=* ]&amp;lt;/code&amp;gt;&lt;br /&gt;
:;&amp;lt;var&amp;gt;table&amp;lt;/var&amp;gt;: simple table-item to store result; if &amp;lt;code&amp;gt;*&amp;lt;/code&amp;gt; is used a new table is created&lt;br /&gt;
:;&amp;lt;var&amp;gt;iref&amp;lt;/var&amp;gt;: reference of the set-element containing the elements to be listed; use &amp;lt;code&amp;gt;*&amp;lt;/code&amp;gt; for the current level&lt;br /&gt;
;Result: the table-item containing the result (list of id&#039;s) or an empty string&lt;br /&gt;
;Description: Lists all element id&#039;s on the current level (&amp;lt;var&amp;gt;iref&amp;lt;/var&amp;gt;=*) or inside the specified set-element. If a table-item is passed, it is emptied before the id list is stored, otherwise a new table is created.&lt;br /&gt;
&lt;br /&gt;
===FindSetElement===&lt;br /&gt;
&amp;lt;code&amp;gt;&amp;lt;var&amp;gt;bxmldoc&amp;lt;/var&amp;gt; FindSetElement [ &amp;lt;var&amp;gt;tag&amp;lt;/var&amp;gt;=* ; &amp;lt;var&amp;gt;id&amp;lt;/var&amp;gt;=* ; &amp;lt;var&amp;gt;iref&amp;lt;/var&amp;gt;=* ]&amp;lt;/code&amp;gt;&lt;br /&gt;
:;&amp;lt;var&amp;gt;tag&amp;lt;/var&amp;gt;: element tag; use &amp;lt;code&amp;gt;*&amp;lt;/code&amp;gt; for all elements&lt;br /&gt;
:;&amp;lt;var&amp;gt;id&amp;lt;/var&amp;gt;: value of ID attribute; wildcards are possible&lt;br /&gt;
:;&amp;lt;var&amp;gt;iref&amp;lt;/var&amp;gt;: reference of the set-element to be searched; use &amp;lt;code&amp;gt;*&amp;lt;/code&amp;gt; for the current level&lt;br /&gt;
;Result: 0 if the element was found and 1 if not&lt;br /&gt;
;Description: Find the (first element) with the specified &amp;lt;var&amp;gt;tag&amp;lt;/var&amp;gt; (* = search all element tags) and &amp;lt;var&amp;gt;id&amp;lt;/var&amp;gt;. For the matching of tag and id a case-sensitive comparison is used! If no &amp;lt;var&amp;gt;iref&amp;lt;/var&amp;gt; is specified, the current level is searched from the beginning, otherwise the search is performed inside the specified set.&lt;br /&gt;
&lt;br /&gt;
===AddSetElement===&lt;br /&gt;
&amp;lt;code&amp;gt;&amp;lt;var&amp;gt;bxmldoc&amp;lt;/var&amp;gt; AddSetElement [ &amp;lt;var&amp;gt;tag&amp;lt;/var&amp;gt; ; &amp;lt;var&amp;gt;id&amp;lt;/var&amp;gt; ; &amp;lt;var&amp;gt;iref&amp;lt;/var&amp;gt;=* ]&amp;lt;/code&amp;gt;&lt;br /&gt;
:;&amp;lt;var&amp;gt;tag&amp;lt;/var&amp;gt;: element tag&lt;br /&gt;
:;&amp;lt;var&amp;gt;id&amp;lt;/var&amp;gt;: element id (value of ID attribute)&lt;br /&gt;
:;&amp;lt;var&amp;gt;iref&amp;lt;/var&amp;gt;: reference of the set-element where the element should be created; use &amp;lt;code&amp;gt;*&amp;lt;/code&amp;gt; for the current level&lt;br /&gt;
;Result: 0 if the element was selected/created and 1 if not&lt;br /&gt;
;Description: Create a new element with specified tag and id in the set selected by &amp;lt;var&amp;gt;iref&amp;lt;/var&amp;gt;. If the specified set does not exist, it will be created. If a set must be created, for each set element the tag &amp;lt;code&amp;gt;SET&amp;lt;/code&amp;gt; is used by default, but it is possible to specify another tag in the argument &amp;lt;code&amp;gt;ref&amp;lt;/code&amp;gt; with the format: &amp;lt;code&amp;gt;/setid/.../settag:setid/.../&amp;lt;/code&amp;gt;. If the element is created, the new element is selected, otherwise the position is not changed. If the element exists already, it is selected but not changed.&lt;br /&gt;
&lt;br /&gt;
===LoadSetElement===&lt;br /&gt;
&amp;lt;code&amp;gt;&amp;lt;var&amp;gt;bxmldoc&amp;lt;/var&amp;gt; LoadSetElement [ &amp;lt;var&amp;gt;tag&amp;lt;/var&amp;gt;=* ; &amp;lt;var&amp;gt;id&amp;lt;/var&amp;gt;=* ; &amp;lt;var&amp;gt;iref&amp;lt;/var&amp;gt;=* ]&amp;lt;/code&amp;gt;&lt;br /&gt;
;Result: The loaded data object (table-item, value returned from &amp;lt;code&amp;gt;LoadData&amp;lt;/code&amp;gt;) or an empty string.&lt;br /&gt;
:Description: This function uses the call &amp;lt;code&amp;gt;&amp;lt;var&amp;gt;bxmldoc&amp;lt;/var&amp;gt; FindSetElement &amp;lt;var&amp;gt;tag&amp;lt;/var&amp;gt;;&amp;lt;var&amp;gt;id&amp;lt;/var&amp;gt;;&amp;lt;var&amp;gt;iref&amp;lt;/var&amp;gt;&amp;lt;/code&amp;gt; to select the element and the call &amp;lt;code&amp;gt;&amp;lt;var&amp;gt;bxmldoc&amp;lt;/var&amp;gt; LoadData&amp;lt;/var&amp;gt;&amp;lt;/code&amp;gt; to load the content of the selected element. If element selection or loading data failes (error), the file position is not changed, otherwise (success) the loaded element is selected.&lt;br /&gt;
&lt;br /&gt;
===SaveSetElement===&lt;br /&gt;
&amp;lt;code&amp;gt;&amp;lt;var&amp;gt;bxmldoc&amp;lt;/var&amp;gt; SaveSetElement [ &amp;lt;var&amp;gt;item&amp;lt;/var&amp;gt; ; &amp;lt;var&amp;gt;del&amp;lt;/var&amp;gt;=0 ; &amp;lt;var&amp;gt;tag&amp;lt;/var&amp;gt;=* ; &amp;lt;var&amp;gt;id&amp;lt;/var&amp;gt;=* ; &amp;lt;var&amp;gt;iref&amp;lt;/var&amp;gt;=* ]&amp;lt;/code&amp;gt;&lt;br /&gt;
;Result: 0 if the data item was saved successful and 1 otherwise&lt;br /&gt;
:Description: This function uses the call &amp;lt;code&amp;gt;&amp;lt;var&amp;gt;bxmldoc&amp;lt;/var&amp;gt; AddSetElement &amp;lt;var&amp;gt;tag&amp;lt;/var&amp;gt;;&amp;lt;var&amp;gt;id&amp;lt;/var&amp;gt;;&amp;lt;var&amp;gt;iref&amp;lt;/var&amp;gt;&amp;lt;/code&amp;gt; to select or create the element and the call &amp;lt;code&amp;gt;&amp;lt;var&amp;gt;bxmldoc&amp;lt;/var&amp;gt; SaveData&amp;lt;/var&amp;gt;&amp;lt;/code&amp;gt; to save the item into the element. If element selection or save operation failes (error), the file position is not changed, otherwise (success) the created/updated element is selected.&lt;br /&gt;
&lt;br /&gt;
===DeleteSetElement===&lt;br /&gt;
&amp;lt;code&amp;gt;&amp;lt;var&amp;gt;bxmldoc&amp;lt;/var&amp;gt; DeleteSetElement [ &amp;lt;var&amp;gt;tag&amp;lt;/var&amp;gt;=* ; &amp;lt;var&amp;gt;id&amp;lt;/var&amp;gt;=* ; &amp;lt;var&amp;gt;iref&amp;lt;/var&amp;gt;=* ]&amp;lt;/code&amp;gt;&lt;br /&gt;
;Result: 0 if the element was deleted and 1 otherwise&lt;br /&gt;
:Description: This function calls &amp;lt;code&amp;gt;&amp;lt;var&amp;gt;bxmldoc&amp;lt;/var&amp;gt; FindSetElement &amp;lt;var&amp;gt;tag&amp;lt;/var&amp;gt;;&amp;lt;var&amp;gt;id&amp;lt;/var&amp;gt;;&amp;lt;var&amp;gt;iref&amp;lt;/var&amp;gt;&amp;lt;/code&amp;gt; to select an element and than deletes the selected element.&lt;br /&gt;
&lt;br /&gt;
==Misc==&lt;br /&gt;
&lt;br /&gt;
====SavePos====&lt;br /&gt;
&amp;lt;code&amp;gt;&amp;lt;var&amp;gt;bxmldoc&amp;lt;/var&amp;gt; SavePos [ &amp;lt;var&amp;gt;delpos&amp;lt;/var&amp;gt;=* ]&amp;lt;/code&amp;gt;&lt;br /&gt;
;Result: current xml position id or empty string if position can not be saved (no element selected)&lt;br /&gt;
;Description: Returns the xml position id of the currently selected element. If the xmp position id &amp;lt;var&amp;gt;delpos&amp;lt;/var&amp;gt; is not equal &amp;lt;code&amp;gt;*&amp;lt;/code&amp;gt;, this position is closed (reset).&lt;br /&gt;
;See Also: [[Programmer_Guide/Command_Reference/POSITION|POSITION]]&lt;br /&gt;
&lt;br /&gt;
====ResetPos====&lt;br /&gt;
&amp;lt;code&amp;gt;&amp;lt;var&amp;gt;bxmldoc&amp;lt;/var&amp;gt; ResetPos &amp;lt;var&amp;gt;pos&amp;lt;/var&amp;gt;=* [ ; * ; &amp;lt;var&amp;gt;delemem&amp;lt;/var&amp;gt;=0 ] &amp;lt;/code&amp;gt;&lt;br /&gt;
;Result: always 0&lt;br /&gt;
;Description: Restore the the xml position id &amp;lt;var&amp;gt;pos&amp;lt;/var&amp;gt;. If &amp;lt;var&amp;gt;delelem&amp;lt;/var&amp;gt; equals 1 the element at the restored position is deleted.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;&amp;lt;var&amp;gt;bxmldoc&amp;lt;/var&amp;gt; ResetPos &amp;lt;var&amp;gt;table&amp;lt;/var&amp;gt;=* [ ; &amp;lt;var&amp;gt;row&amp;lt;/var&amp;gt;=* ; &amp;lt;var&amp;gt;delemem&amp;lt;/var&amp;gt;=0 ; &amp;lt;var&amp;gt;deltable&amp;lt;/var&amp;gt;=0 ] &amp;lt;/code&amp;gt;&lt;br /&gt;
;Result: always 0&lt;br /&gt;
;Description: Restore all xml positions stored in &amp;lt;var&amp;gt;table[*,row]&amp;lt;/var&amp;gt;. If &amp;lt;var&amp;gt;table&amp;lt;/var&amp;gt; is a simple table, the argument &amp;lt;var&amp;gt;row&amp;lt;/var&amp;gt; is ignored.&lt;br /&gt;
::* If &amp;lt;var&amp;gt;delelem&amp;lt;/var&amp;gt; equals &amp;lt;code&amp;gt;1&amp;lt;/code&amp;gt; the elements at the restored positions are deleted&lt;br /&gt;
::* If &amp;lt;var&amp;gt;deltable&amp;lt;/var&amp;gt; equals &amp;lt;code&amp;gt;1&amp;lt;/code&amp;gt; the &amp;lt;var&amp;gt;table&amp;lt;/var&amp;gt; is deleted&lt;br /&gt;
::* This function can be used to reset positions returned by [[Programmer_Guide/Shell_Items/File/SET_FILE#Find_2|FIND]] or [[Programmer_Guide/Shell_Items/File/SET_FILE#EXTRACTTABLE|EXTRACTTABLE]] commands.&lt;br /&gt;
&lt;br /&gt;
====ExtractSubDoc====&lt;br /&gt;
;&amp;lt;code&amp;gt;&amp;lt;var&amp;gt;bxmldoc&amp;lt;/var&amp;gt; ExtractSubDoc &amp;lt;var&amp;gt;file&amp;lt;/var&amp;gt; ; &amp;lt;var&amp;gt;posattr&amp;lt;/var&amp;gt; ; &amp;lt;var&amp;gt;tag1&amp;lt;/var&amp;gt; ; &amp;lt;var&amp;gt;sub1&amp;lt;/var&amp;gt; ; &amp;lt;var&amp;gt;tag2&amp;lt;/var&amp;gt; ; &amp;lt;var&amp;gt;sub2&amp;lt;/var&amp;gt; ; ...&amp;lt;/code&amp;gt;:&lt;br /&gt;
:;&amp;lt;var&amp;gt;file&amp;lt;/var&amp;gt;: The target XML file item for extracted elements.&lt;br /&gt;
:;&amp;lt;var&amp;gt;posattr&amp;lt;/var&amp;gt;: The name of element attribute for positions of original elements.&lt;br /&gt;
:;&amp;lt;var&amp;gt;tagX&amp;lt;/var&amp;gt;: The element tags to be extracted.&lt;br /&gt;
:;&amp;lt;var&amp;gt;subX&amp;lt;/var&amp;gt;: Flag determining if child elements of &amp;lt;var&amp;gt;tagX&amp;lt;/var&amp;gt; should be scanned scan too (yes=&amp;lt;code&amp;gt;1&amp;lt;/code&amp;gt;, no=&amp;lt;code&amp;gt;0&amp;lt;/code&amp;gt;).&lt;br /&gt;
;Result: none (void), &amp;lt;var&amp;gt;file&amp;lt;/var&amp;gt; contains extracted elemenents&lt;br /&gt;
;Description: Extract the elements with the specified tags from the document and copy them into the specified target &amp;lt;var&amp;gt;file&amp;lt;/var&amp;gt;. The original tree structure is retained. The content of an element with &amp;lt;var&amp;gt;tagX&amp;lt;/var&amp;gt; is only scanned if the corresponding &amp;lt;var&amp;gt;subX&amp;lt;/var&amp;gt; argument is set to &amp;lt;code&amp;gt;1&amp;lt;/code&amp;gt; (or &amp;lt;code&amp;gt;yes&amp;lt;/code&amp;gt;). The element data are not extracted. If &amp;lt;var&amp;gt;posattr&amp;lt;/var&amp;gt; is not set to &#039;&amp;lt;code&amp;gt;*&amp;lt;/code&amp;gt;&#039; the position string of the original element is stored in the attribute &amp;lt;code&amp;gt;posattr&amp;lt;/code&amp;gt; of the copied (extracted) element. If a XML doctype is defined for the original document it is applied to the target file. The element extraction is performed with the command [[Programmer_Guide/Shell_Items/File/SET_FILE#EXTRACTFILE|EXTRACTFILE]]. &lt;br /&gt;
:Note: If the positions of the original elements are saved, the function &amp;lt;code&amp;gt;ResetSubDoc&amp;lt;/code&amp;gt; must be used to reset the positions before the target file is deleted.&lt;br /&gt;
&lt;br /&gt;
====ResetSubDoc====&lt;br /&gt;
;&amp;lt;code&amp;gt;&amp;lt;var&amp;gt;bxmldoc&amp;lt;/var&amp;gt; ResetSubDoc &amp;lt;var&amp;gt;file&amp;lt;/var&amp;gt; ; &amp;lt;var&amp;gt;posattr&amp;lt;/var&amp;gt;&amp;lt;/code&amp;gt;:&lt;br /&gt;
:;&amp;lt;var&amp;gt;file&amp;lt;/var&amp;gt;: A XML containing extracted elements.&lt;br /&gt;
:;&amp;lt;var&amp;gt;posattr&amp;lt;/var&amp;gt;: The name of element attribute for positions of original elements.&lt;br /&gt;
;Result: none&lt;br /&gt;
;Description: Reset the extracted file and all saved positions. This function must be called for all XML files created with EXTRACTSUBDOC.&lt;br /&gt;
&lt;br /&gt;
====DialogSelectElement====&lt;br /&gt;
&amp;lt;code&amp;gt;&amp;lt;var&amp;gt;bxmldoc&amp;lt;/var&amp;gt; DialogSelectElement &amp;lt;var&amp;gt;title&amp;lt;/var&amp;gt; ; &amp;lt;var&amp;gt;selmode&amp;lt;/var&amp;gt; ; &amp;lt;var&amp;gt;outmode&amp;lt;/var&amp;gt; ; &amp;lt;var&amp;gt;tag1&amp;lt;/var&amp;gt; ; &amp;lt;var&amp;gt;sub1&amp;lt;/var&amp;gt; ; &amp;lt;var&amp;gt;tagX&amp;lt;/var&amp;gt; ; &amp;lt;var&amp;gt;subX&amp;lt;/var&amp;gt; ; ...&amp;lt;/code&amp;gt;&lt;br /&gt;
:;&amp;lt;var&amp;gt;title&amp;lt;/var&amp;gt;: The dialog window caption.&lt;br /&gt;
:;&amp;lt;var&amp;gt;selmode&amp;lt;/var&amp;gt;: The selection mode {&amp;lt;code&amp;gt;SINGLE&amp;lt;/code&amp;gt;|&amp;lt;code&amp;gt;MULTIMPLE&amp;lt;/code&amp;gt;}.&lt;br /&gt;
:;&amp;lt;var&amp;gt;outmode&amp;lt;/var&amp;gt;: The output mode {&amp;lt;code&amp;gt;POSITION&amp;lt;/code&amp;gt;|&amp;lt;code&amp;gt;IREF&amp;lt;/code&amp;gt;}&lt;br /&gt;
:;&amp;lt;var&amp;gt;tagX, subX&amp;lt;/var&amp;gt;: The tag names and subtree scan flags which are passed to function &amp;lt;code&amp;gt;ExtractSubDoc&amp;lt;/code&amp;gt;&lt;br /&gt;
;Result: An empty string for error/cancel or one of the values listed in the table below:&lt;br /&gt;
::{|class=&amp;quot;einrahmen&amp;quot;&lt;br /&gt;
!selmode !!outmode !!result&lt;br /&gt;
|-&lt;br /&gt;
|SINGLE&lt;br /&gt;
|POSITION&lt;br /&gt;
|position string of selected element&lt;br /&gt;
|-&lt;br /&gt;
|SINGLE&lt;br /&gt;
|IREF&lt;br /&gt;
|internal reference of selected element&lt;br /&gt;
|-&lt;br /&gt;
|MULTIPLE&lt;br /&gt;
|POSITION&lt;br /&gt;
|simple table containing position strings of selected elements&lt;br /&gt;
|-&lt;br /&gt;
|MULTIPLE&lt;br /&gt;
|IREF&lt;br /&gt;
|simple table containing internal references of selected elements&lt;br /&gt;
|}&lt;br /&gt;
;Description: Extracts a sub-document using the function &amp;lt;code&amp;gt;ExtractSubDoc&amp;lt;/code&amp;gt; and displays the sub-document tree in a dialog where the user can select one or more elements (depending on &amp;lt;var&amp;gt;selmode&amp;lt;/var&amp;gt;). Depending on &amp;lt;var&amp;gt;outmode&amp;lt;/var&amp;gt;, either the position/s or the internal reference/s of the selected element/s is/are returned. If &amp;lt;var&amp;gt;outmode&amp;lt;/var&amp;gt; is set to &amp;lt;code&amp;gt;POSITION&amp;lt;/code&amp;gt; the user must cleanup the positions when the element processing is finished.&lt;br /&gt;
;Examples: The following code displays a dialog with all audio files and sets in the current DataSet and retrieves the audio set information for the file chosen by the user (if any).&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
#pos := $BDataSet DialogSelectElement title ; single ; position ; Set ; 1 ; AFile ; 0&lt;br /&gt;
if &#039;$#pos&#039; != &#039;&#039; then&lt;br /&gt;
    readstr &#039;$($BDataSet GetASetInfo $#pos soundfile)&#039; #sf&#039;;&#039;#setId&#039;;&#039;#srate&#039;;&#039;#ch&#039;;&#039;#fPath&lt;br /&gt;
    if &#039;$#fPath&#039; != &#039;&#039; #file := $#fPath&lt;br /&gt;
    if &#039;$#sRate&#039; != &#039;&#039; #sr := $#srate&lt;br /&gt;
    #iref := $($BDataSet FormatIRef $#pos)&lt;br /&gt;
    #result := &#039;$#file ; $#sr ; $#iref ; $#ch&#039;&lt;br /&gt;
end&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====Table2VarSpace====&lt;br /&gt;
;&amp;lt;code&amp;gt;&amp;lt;var&amp;gt;bxmldoc&amp;lt;/var&amp;gt; Table2VarSpace &amp;lt;var&amp;gt;table ; del ; prefix ; inst&amp;lt;/var&amp;gt;&amp;lt;/code&amp;gt;:&lt;br /&gt;
:;&amp;lt;var&amp;gt;table&amp;lt;/var&amp;gt;: name of table containing variable settings&lt;br /&gt;
:;&amp;lt;var&amp;gt;del&amp;lt;/var&amp;gt;: delete table after conversion (&amp;lt;code&amp;gt;0&amp;lt;/code&amp;gt;=yes, &amp;lt;code&amp;gt;1&amp;lt;/code&amp;gt;=no)&lt;br /&gt;
:;&amp;lt;var&amp;gt;prefix&amp;lt;/var&amp;gt;: prefix string for variable names&lt;br /&gt;
:;&amp;lt;var&amp;gt;inst&amp;lt;/var&amp;gt;: name of an instance item (optional);&lt;br /&gt;
;Result: none&lt;br /&gt;
;Description: Converts the variable assignments (&amp;lt;code&amp;gt;varname = varvalue&amp;lt;/code&amp;gt;) stored in the table to variables. For each entry of the table a variable named &amp;lt;var&amp;gt;prefix&amp;lt;/var&amp;gt;&amp;lt;code&amp;gt;varname&amp;lt;/code&amp;gt; is created and the value &amp;lt;code&amp;gt;varvalue&amp;lt;/code&amp;gt; is assigned. If an instance item &amp;lt;var&amp;gt;inst&amp;lt;/var&amp;gt; is specified, the variables are stored as member variables of the instance, otherwise the variable space used to store the variables depends on the prefix (e.g. if prefix equals &#039;@&#039;, the variables are stored as global variables). If the argument &amp;lt;var&amp;gt;del&amp;lt;/var&amp;gt; is set to &amp;lt;code&amp;gt;1&amp;lt;/code&amp;gt; the table is deleted after conversion. See &amp;lt;code&amp;gt;VarSpace2Table&amp;lt;/code&amp;gt; for conversion in the other direction.&lt;br /&gt;
&lt;br /&gt;
====VarSpace2Table====&lt;br /&gt;
;&amp;lt;code&amp;gt;&amp;lt;var&amp;gt;bxmldoc&amp;lt;/var&amp;gt; VarSpace2Table table ; prefix; inst&amp;lt;/code&amp;gt;:&lt;br /&gt;
:;&amp;lt;var&amp;gt;table&amp;lt;/var&amp;gt;: name of table containing variable settings&lt;br /&gt;
:;&amp;lt;var&amp;gt;prefix&amp;lt;/var&amp;gt;: prefix string for variable names&lt;br /&gt;
:;&amp;lt;var&amp;gt;inst&amp;lt;/var&amp;gt;: name of an instance item (optional);&lt;br /&gt;
;Result: none&lt;br /&gt;
;Description: Convert variables to table. Each entry of &amp;lt;var&amp;gt;table&amp;lt;/var&amp;gt; must define one variable in the format &amp;lt;code&amp;gt;varname = varvalue&amp;lt;/code&amp;gt;. The &amp;lt;code&amp;gt;varvalue&amp;lt;/code&amp;gt; is replaced by the current value of the variable &amp;lt;var&amp;gt;prefix&amp;lt;/var&amp;gt;&amp;lt;code&amp;gt;varname&amp;lt;/code&amp;gt;. If an instance item &amp;lt;var&amp;gt;inst&amp;lt;/var&amp;gt; is specified the variables are read from the instance item, otherwise the variables must be stored in the global or the shell variable space. See VarSpace2Table for conversion in the other direction.&lt;br /&gt;
&lt;br /&gt;
====AFun====&lt;br /&gt;
;&amp;lt;code&amp;gt;&amp;lt;var&amp;gt;bxmldoc&amp;lt;/var&amp;gt; AFun &amp;lt;var&amp;gt;memberFunctionName&amp;lt;/var&amp;gt; [ ; &amp;lt;var&amp;gt;memberFunctionArgs&amp;lt;/var&amp;gt; ]&amp;lt;/code&amp;gt;:&lt;br /&gt;
;Result: result returned from member function call&lt;br /&gt;
;Description: This function attaches the XML document to the calling shell, executes the member function call &amp;lt;code&amp;gt;&amp;lt;var&amp;gt;bxmldoc&amp;lt;/var&amp;gt; &amp;lt;var&amp;gt;memberFunctionName&amp;lt;/var&amp;gt; [ &amp;lt;var&amp;gt;memberFunctionArgs&amp;lt;/var&amp;gt; ]&amp;lt;/code&amp;gt; and detaches the XML document.&lt;/div&gt;</summary>
		<author><name>Jw</name></author>
	</entry>
	<entry>
		<id>https://mediawiki.kfs.oeaw.ac.at/stx/docs/wiki/index.php?title=Programmer_Guide/Macro_Library/BXMLDoc/SelectIRef&amp;diff=10652</id>
		<title>Programmer Guide/Macro Library/BXMLDoc/SelectIRef</title>
		<link rel="alternate" type="text/html" href="https://mediawiki.kfs.oeaw.ac.at/stx/docs/wiki/index.php?title=Programmer_Guide/Macro_Library/BXMLDoc/SelectIRef&amp;diff=10652"/>
		<updated>2019-10-01T08:38:25Z</updated>

		<summary type="html">&lt;p&gt;Jw: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;;&amp;lt;code&amp;gt;&amp;lt;var&amp;gt;bxmldoc&amp;lt;/var&amp;gt; SelectIRef [ &amp;lt;var&amp;gt;pos&amp;lt;/var&amp;gt;=* ; &amp;lt;var&amp;gt;in&amp;lt;/var&amp;gt;=0 ]&amp;lt;/code&amp;gt;:&lt;br /&gt;
:;&amp;lt;var&amp;gt;pos&amp;lt;/var&amp;gt;: An (unique internal) element reference, a xml-position or the character &amp;lt;code&amp;gt;*&amp;lt;/code&amp;gt; for the current element.&lt;br /&gt;
:;&amp;lt;var&amp;gt;in&amp;lt;/var&amp;gt;: Go into the selected element (&amp;lt;code&amp;gt;1&amp;lt;/code&amp;gt;) or not (&amp;lt;code&amp;gt;0&amp;lt;/code&amp;gt;).&lt;br /&gt;
;Result: 0 for success or an errorcode&lt;br /&gt;
;Description: Selects the element referred to by &amp;lt;var&amp;gt;pos&amp;lt;/var&amp;gt;. If the element is selected successfully and &amp;lt;var&amp;gt;in&amp;lt;/var&amp;gt; equals &amp;lt;code&amp;gt;1&amp;lt;/code&amp;gt;, the child element level of the element is selected. You can create an IRef for an element with the member function &amp;lt;code&amp;gt;[[Programmer_Guide/Macro_Library/BXMLDoc#FormatIRef|FormatIRef]]&amp;lt;/code&amp;gt;.&lt;br /&gt;
;see also: commands [[Programmer_Guide/Command_Reference/IREF|IREF]] and [[Programmer_Guide/Command_Reference/POSITION|POSITION]]&lt;/div&gt;</summary>
		<author><name>Jw</name></author>
	</entry>
	<entry>
		<id>https://mediawiki.kfs.oeaw.ac.at/stx/docs/wiki/index.php?title=Programmer_Guide/Macro_Library/BXMLDoc/SelectIRef&amp;diff=10651</id>
		<title>Programmer Guide/Macro Library/BXMLDoc/SelectIRef</title>
		<link rel="alternate" type="text/html" href="https://mediawiki.kfs.oeaw.ac.at/stx/docs/wiki/index.php?title=Programmer_Guide/Macro_Library/BXMLDoc/SelectIRef&amp;diff=10651"/>
		<updated>2019-10-01T08:37:44Z</updated>

		<summary type="html">&lt;p&gt;Jw: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;;&amp;lt;code&amp;gt;&amp;lt;var&amp;gt;bxmldoc&amp;lt;/var&amp;gt; SelectIRef [ &amp;lt;var&amp;gt;pos&amp;lt;/var&amp;gt;=* ; &amp;lt;var&amp;gt;in&amp;lt;/var&amp;gt;=0 ]&amp;lt;/code&amp;gt;:&lt;br /&gt;
:;&amp;lt;var&amp;gt;pos&amp;lt;/var&amp;gt;: An (unique internal) element reference, a xml-position or the character &amp;lt;code&amp;gt;*&amp;lt;/code&amp;gt; for the current element.&lt;br /&gt;
:;&amp;lt;var&amp;gt;in&amp;lt;/var&amp;gt;: Go into the selected element (&amp;lt;code&amp;gt;1&amp;lt;/code&amp;gt;) or not (&amp;lt;code&amp;gt;0&amp;lt;/code&amp;gt;).&lt;br /&gt;
;Result: 0 for success or an errorcode&lt;br /&gt;
;Description: Selects the element referred to by &amp;lt;var&amp;gt;pos&amp;lt;/var&amp;gt;. A reference a file item position string, an internal XML reference or the value * (= current element) can be used. If the element is selected successfully and &amp;lt;var&amp;gt;in&amp;lt;/var&amp;gt; equals &amp;lt;code&amp;gt;1&amp;lt;/code&amp;gt;, the child element level of the element is selected. You can create an IRef for an element with the member function &amp;lt;code&amp;gt;[[Programmer_Guide/Macro_Library/BXMLDoc#FormatIRef|FormatIRef]]&amp;lt;/code&amp;gt;.&lt;br /&gt;
;see also: commands [[Programmer_Guide/Command_Reference/IREF|IREF]] and [[Programmer_Guide/Command_Reference/POSITION|POSITION]]&lt;/div&gt;</summary>
		<author><name>Jw</name></author>
	</entry>
	<entry>
		<id>https://mediawiki.kfs.oeaw.ac.at/stx/docs/wiki/index.php?title=Programmer_Guide/Macro_Library/BXMLDoc/SelectIRef&amp;diff=10650</id>
		<title>Programmer Guide/Macro Library/BXMLDoc/SelectIRef</title>
		<link rel="alternate" type="text/html" href="https://mediawiki.kfs.oeaw.ac.at/stx/docs/wiki/index.php?title=Programmer_Guide/Macro_Library/BXMLDoc/SelectIRef&amp;diff=10650"/>
		<updated>2019-10-01T08:26:36Z</updated>

		<summary type="html">&lt;p&gt;Jw: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;;&amp;lt;code&amp;gt;&amp;lt;var&amp;gt;bxmldoc&amp;lt;/var&amp;gt; SelectIRef [ &amp;lt;var&amp;gt;pos&amp;lt;/var&amp;gt;=* ; &amp;lt;var&amp;gt;in&amp;lt;/var&amp;gt;=0 ]&amp;lt;/code&amp;gt;:&lt;br /&gt;
:;&amp;lt;var&amp;gt;pos&amp;lt;/var&amp;gt;: An (unique internal) element reference, a xml-position or the character &amp;lt;code&amp;gt;*&amp;lt;/code&amp;gt; for the current element.&lt;br /&gt;
:;&amp;lt;var&amp;gt;in&amp;lt;/var&amp;gt;: Go into the selected element (&amp;lt;code&amp;gt;1&amp;lt;/code&amp;gt;) or not (&amp;lt;code&amp;gt;0&amp;lt;/code&amp;gt;).&lt;br /&gt;
;Result: 0 for success or an errorcode&lt;br /&gt;
;Description: Selects the element referred to by &amp;lt;var&amp;gt;pos&amp;lt;/var&amp;gt;. A reference a file item position string, an internal XML reference or the value * (= current element) can be used. If the element is selected successful and &amp;lt;var&amp;gt;in&amp;lt;/var&amp;gt; equals &amp;lt;code&amp;gt;1&amp;lt;/code&amp;gt; the child element level of the element is selected. You can create an IRef for an element with the member function &amp;lt;code&amp;gt;[[Programmer_Guide/Macro_Library/BXMLDoc#FormatIRef|FormatIRef]]&amp;lt;/code&amp;gt;.&lt;br /&gt;
;see also: commands [[Programmer_Guide/Command_Reference/IREF|IREF]] and [[Programmer_Guide/Command_Reference/POSITION|POSITION]]&lt;/div&gt;</summary>
		<author><name>Jw</name></author>
	</entry>
	<entry>
		<id>https://mediawiki.kfs.oeaw.ac.at/stx/docs/wiki/index.php?title=User_Guide/Tutorials&amp;diff=10649</id>
		<title>User Guide/Tutorials</title>
		<link rel="alternate" type="text/html" href="https://mediawiki.kfs.oeaw.ac.at/stx/docs/wiki/index.php?title=User_Guide/Tutorials&amp;diff=10649"/>
		<updated>2019-09-30T07:04:08Z</updated>

		<summary type="html">&lt;p&gt;Jw: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{DISPLAYTITLE:{{SUBPAGENAME}}}}&lt;br /&gt;
{{User Guide}}&lt;br /&gt;
Here are a few tutorials to get you started with {{STX}}. If you have any feedback, or need help with a particular task not covered, please get in touch (stxsupport@kfs.oeaw.ac.at). &lt;br /&gt;
&lt;br /&gt;
===Simple===&lt;br /&gt;
* [[User_Guide/Tutorials/Analysing_a_sound_file|Analysing a sound file]]&lt;br /&gt;
* [[User_Guide/Tutorials/Opening_the_samples.stxpr_project|Opening the sample project]]&lt;br /&gt;
* [[User_Guide/Tutorials/Playing_a_sound_file|Play a sound file]]&lt;br /&gt;
* [[User_Guide/Tutorials/Running_an_application|Running an application]]&lt;br /&gt;
* [[User_Guide/Tutorials/Setting_the_default_application|Setting the default application]]&lt;br /&gt;
* [[User_Guide/Tutorials/Zooming_in_a_Viewer|Zooming in a viewer]]&lt;/div&gt;</summary>
		<author><name>Jw</name></author>
	</entry>
	<entry>
		<id>https://mediawiki.kfs.oeaw.ac.at/stx/docs/wiki/index.php?title=User_Guide/Tutorials/Opening_the_samples.stxpr_project&amp;diff=10648</id>
		<title>User Guide/Tutorials/Opening the samples.stxpr project</title>
		<link rel="alternate" type="text/html" href="https://mediawiki.kfs.oeaw.ac.at/stx/docs/wiki/index.php?title=User_Guide/Tutorials/Opening_the_samples.stxpr_project&amp;diff=10648"/>
		<updated>2019-09-30T07:03:29Z</updated>

		<summary type="html">&lt;p&gt;Jw: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{DISPLAYTITLE:{{SUBPAGENAME}}}}&lt;br /&gt;
{{UG_Tutorial}}&lt;br /&gt;
{{STX}} includes a sample project which you can open when {{STX}} starts. This [[User_Guide/Project|project]] contains examples of [[User_Guide/Project/Segment|segments]], sequences, parameters and segment lists, and is used in examples throughout the documentation. The project is called &#039;&#039;samples.stxpr&#039;&#039; and is located in the directory &amp;lt;code&amp;gt;data&amp;lt;/code&amp;gt; in the {{STX}} installation directory.&lt;br /&gt;
&lt;br /&gt;
If the samples.stxpr is not open, please do the following.&lt;br /&gt;
&lt;br /&gt;
====Start {{STX}}====&lt;br /&gt;
&lt;br /&gt;
If {{STX}} is not running then start {{STX}}. The Workspace should appear (if not, please see [[User Guide/Tutorials/Setting the default application|Setting the default application]]).&lt;br /&gt;
&lt;br /&gt;
====Select the Open Project dialog====&lt;br /&gt;
&lt;br /&gt;
Choose the Workspace File menu item Project-&amp;gt;Open.&lt;br /&gt;
&lt;br /&gt;
[[File:ws_menu_file_dataset_open.png]]&lt;br /&gt;
&lt;br /&gt;
====Find the samples.stxpr project====&lt;br /&gt;
&lt;br /&gt;
The sample project is located in the directory &#039;&#039;data&#039;&#039; in the {{STX}} installation directory. Navigate into the directory, select the samples.stxpr file and press OK. Save your previous project if asked.&lt;br /&gt;
&lt;br /&gt;
[[File:ws_dialog_open_dataset.png]]&lt;/div&gt;</summary>
		<author><name>Jw</name></author>
	</entry>
	<entry>
		<id>https://mediawiki.kfs.oeaw.ac.at/stx/docs/wiki/index.php?title=User_Guide/Tutorials/Analysing_a_sound_file&amp;diff=10647</id>
		<title>User Guide/Tutorials/Analysing a sound file</title>
		<link rel="alternate" type="text/html" href="https://mediawiki.kfs.oeaw.ac.at/stx/docs/wiki/index.php?title=User_Guide/Tutorials/Analysing_a_sound_file&amp;diff=10647"/>
		<updated>2019-09-30T07:01:15Z</updated>

		<summary type="html">&lt;p&gt;Jw: /* Analysing a sample sound file */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{DISPLAYTITLE:{{SUBPAGENAME}}}}&lt;br /&gt;
{{UG_Tutorial}}&lt;br /&gt;
==Extended Workspace Mode==&lt;br /&gt;
&lt;br /&gt;
The basic steps needed to analyse a sound file in {{STX}} in the [[User_Guide/Workspace#Compact_and_Extended_Mode|extended workspace mode]] are as follows:&lt;br /&gt;
*Select the sound file or segment you wish to analyse.&lt;br /&gt;
*Select the desired analysis profile from the Signal Analysis &amp;amp; Display branch of the [[User_Guide/Workspace/Application_and_Setup_Tree|Application &amp;amp; Setup Tree tree]].&lt;br /&gt;
*Press the run button [[File:resource_run.png]]&lt;br /&gt;
&lt;br /&gt;
====Analysing a sample sound file====&lt;br /&gt;
&lt;br /&gt;
Assuming that we want to display a spectrogram of the &amp;lt;code&amp;gt;Samples1.wav&amp;lt;/code&amp;gt; we will do the following:&lt;br /&gt;
&lt;br /&gt;
* [[User_Guide/Tutorials/Opening_the_samples.stxpr_project|Open the sample {{STX}} project]], if it is not already open.&lt;br /&gt;
*Select the &amp;lt;code&amp;gt;Samples1.wav&amp;lt;/code&amp;gt; file in the Overview.&lt;br /&gt;
[[File:5660.gif]]&lt;br /&gt;
&lt;br /&gt;
*Select &amp;lt;code&amp;gt;Signal.All&amp;lt;/code&amp;gt; segment in the Detail&lt;br /&gt;
[[File:5661.gif]]&lt;br /&gt;
&lt;br /&gt;
*Select a Spectrogram &amp;amp; Parameters Viewer profile from the Application &amp;amp; Setup Tree tree. We will use the FFT_22Hz profile, which is preconfigured to display a spectrogram and waveform of the selected signal using a&lt;br /&gt;
&lt;br /&gt;
Taking the example sound file &amp;lt;code&amp;gt;Samples1.wav&amp;lt;/code&amp;gt; from the sample project, we will analyse it using the FFT_22HZ Spectrogram &amp;amp; Parameters Viewer profile.&lt;/div&gt;</summary>
		<author><name>Jw</name></author>
	</entry>
	<entry>
		<id>https://mediawiki.kfs.oeaw.ac.at/stx/docs/wiki/index.php?title=User_Guide/Tutorials/Analysing_a_sound_file&amp;diff=10646</id>
		<title>User Guide/Tutorials/Analysing a sound file</title>
		<link rel="alternate" type="text/html" href="https://mediawiki.kfs.oeaw.ac.at/stx/docs/wiki/index.php?title=User_Guide/Tutorials/Analysing_a_sound_file&amp;diff=10646"/>
		<updated>2019-09-30T07:00:04Z</updated>

		<summary type="html">&lt;p&gt;Jw: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{DISPLAYTITLE:{{SUBPAGENAME}}}}&lt;br /&gt;
{{UG_Tutorial}}&lt;br /&gt;
==Extended Workspace Mode==&lt;br /&gt;
&lt;br /&gt;
The basic steps needed to analyse a sound file in {{STX}} in the [[User_Guide/Workspace#Compact_and_Extended_Mode|extended workspace mode]] are as follows:&lt;br /&gt;
*Select the sound file or segment you wish to analyse.&lt;br /&gt;
*Select the desired analysis profile from the Signal Analysis &amp;amp; Display branch of the [[User_Guide/Workspace/Application_and_Setup_Tree|Application &amp;amp; Setup Tree tree]].&lt;br /&gt;
*Press the run button [[File:resource_run.png]]&lt;br /&gt;
&lt;br /&gt;
====Analysing a sample sound file====&lt;br /&gt;
&lt;br /&gt;
Assuming that we want to display a spectrogram of the &amp;lt;code&amp;gt;Samples1.wav&amp;lt;/code&amp;gt; we will do the following:&lt;br /&gt;
&lt;br /&gt;
*[[User Guide/Tutorials/Opening the samples.xml DataSet|Open the ]][[User Guide/Tutorials/Opening the samples.xml DataSet|samples.xml]][[User Guide/Tutorials/Opening the samples.xml DataSet| DataSet]] if it is not already open.&lt;br /&gt;
*Select the &amp;lt;code&amp;gt;Samples1.wav&amp;lt;/code&amp;gt; file in the Overview.&lt;br /&gt;
[[File:5660.gif]]&lt;br /&gt;
&lt;br /&gt;
*Select &amp;lt;code&amp;gt;Signal.All&amp;lt;/code&amp;gt; segment in the Detail&lt;br /&gt;
[[File:5661.gif]]&lt;br /&gt;
&lt;br /&gt;
*Select a Spectrogram &amp;amp; Parameters Viewer profile from the Application &amp;amp; Setup Tree tree. We will use the FFT_22Hz profile, which is preconfigured to display a spectrogram and waveform of the selected signal using a&lt;br /&gt;
&lt;br /&gt;
Taking the example sound file &amp;lt;code&amp;gt;Samples1.wav&amp;lt;/code&amp;gt; from the sample project, we will analyse it using the FFT_22HZ Spectrogram &amp;amp; Parameters Viewer profile.&lt;/div&gt;</summary>
		<author><name>Jw</name></author>
	</entry>
	<entry>
		<id>https://mediawiki.kfs.oeaw.ac.at/stx/docs/wiki/index.php?title=User_Guide/Tutorials/Analysing_a_sound_file&amp;diff=10645</id>
		<title>User Guide/Tutorials/Analysing a sound file</title>
		<link rel="alternate" type="text/html" href="https://mediawiki.kfs.oeaw.ac.at/stx/docs/wiki/index.php?title=User_Guide/Tutorials/Analysing_a_sound_file&amp;diff=10645"/>
		<updated>2019-09-30T06:59:26Z</updated>

		<summary type="html">&lt;p&gt;Jw: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{DISPLAYTITLE:{{SUBPAGENAME}}}}&lt;br /&gt;
{{UG_Tutorial}}&lt;br /&gt;
&lt;br /&gt;
==Extended Workspace Mode==&lt;br /&gt;
&lt;br /&gt;
The basic steps needed to analyse a sound file in {{STX}} in the [[User_Guide/Workspace#Compact_and_Extended_Mode|extended workspace mode]] are as follows:&lt;br /&gt;
*Select the sound file or segment you wish to analyse.&lt;br /&gt;
*Select the desired analysis profile from the Signal Analysis &amp;amp; Display branch of the [[User_Guide/Workspace/Application_and_Setup_Tree|Application &amp;amp; Setup Tree tree]].&lt;br /&gt;
*Press the run button [[File:resource_run.png]]&lt;br /&gt;
&lt;br /&gt;
====Analysing a sample sound file====&lt;br /&gt;
&lt;br /&gt;
Assuming that we want to display a spectrogram of the &amp;lt;code&amp;gt;Samples1.wav&amp;lt;/code&amp;gt; we will do the following:&lt;br /&gt;
&lt;br /&gt;
*[[User Guide/Tutorials/Opening the samples.xml DataSet|Open the ]][[User Guide/Tutorials/Opening the samples.xml DataSet|samples.xml]][[User Guide/Tutorials/Opening the samples.xml DataSet| DataSet]] if it is not already open.&lt;br /&gt;
*Select the &amp;lt;code&amp;gt;Samples1.wav&amp;lt;/code&amp;gt; file in the Overview.&lt;br /&gt;
[[File:5660.gif]]&lt;br /&gt;
&lt;br /&gt;
*Select &amp;lt;code&amp;gt;Signal.All&amp;lt;/code&amp;gt; segment in the Detail&lt;br /&gt;
[[File:5661.gif]]&lt;br /&gt;
&lt;br /&gt;
*Select a Spectrogram &amp;amp; Parameters Viewer profile from the Application &amp;amp; Setup Tree tree. We will use the FFT_22Hz profile, which is preconfigured to display a spectrogram and waveform of the selected signal using a&lt;br /&gt;
&lt;br /&gt;
Taking the example sound file &amp;lt;code&amp;gt;Samples1.wav&amp;lt;/code&amp;gt; from the sample project, we will analyse it using the FFT_22HZ Spectrogram &amp;amp; Parameters Viewer profile.&lt;/div&gt;</summary>
		<author><name>Jw</name></author>
	</entry>
	<entry>
		<id>https://mediawiki.kfs.oeaw.ac.at/stx/docs/wiki/index.php?title=User_Guide/Workspace/Extended_Mode&amp;diff=10644</id>
		<title>User Guide/Workspace/Extended Mode</title>
		<link rel="alternate" type="text/html" href="https://mediawiki.kfs.oeaw.ac.at/stx/docs/wiki/index.php?title=User_Guide/Workspace/Extended_Mode&amp;diff=10644"/>
		<updated>2019-09-30T06:56:59Z</updated>

		<summary type="html">&lt;p&gt;Jw: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[File:ws_schematics.png|600px]]&lt;br /&gt;
&lt;br /&gt;
The Workspace &#039;&#039;extended mode&#039;&#039; makes all of {{STX}}&#039;s functionality available to the user. For a simpler Workspace, see the [[User_Guide/Workspace|compact mode]].&lt;br /&gt;
&lt;br /&gt;
The Workspace is divided into the following four areas:&lt;br /&gt;
&lt;br /&gt;
* [[User_Guide/Workspace/Application_and_Setup_Tree|The Application &amp;amp; Setup Tree]]. The Application &amp;amp; Setup Tree provides access to the installed applications (e.g. Recorder, FindFile, Real-Time Analyser), the profiles used for signal analysis (Signal Analysis &amp;amp; Display), the analysis parameter export dialog, the digital signal processing functions (Signal Processing), general S_TOOLS-STx settings like color schemes, audio settings etc. (Options), and links to frequently used scripts.&lt;br /&gt;
&lt;br /&gt;
* [[User Guide/Workspace/The Workspace Overview|The Overview]] displays the basic elements in the current [[User Guide/Project|project]], e.g. sound files and sequences.&lt;br /&gt;
&lt;br /&gt;
* [[User Guide/Workspace/Detail|The Detail]] displays the metadata in the currently selected element in the Overview. Depending on which [[User Guide/Workspace/Detail/Detail View|view]] is selected, you can see the existing segments, parameters or signal definitions.&lt;br /&gt;
&lt;br /&gt;
* [[User_Guide/The Script_Controller|The Script Controller]] can be used to edit and run {{Stx}} macros or run the {{STX}} console. For a guide to programming {{Stx}} macros, see the [[Programmer_Guide|Programmer Guide]].&lt;br /&gt;
&lt;br /&gt;
==Buttons==&lt;br /&gt;
&lt;br /&gt;
{|&lt;br /&gt;
|-&lt;br /&gt;
|[[File:resource_script_edit.png]]&lt;br /&gt;
|Edit the Script Controller script file using the application associated with *.stx or *.stx files.&lt;br /&gt;
|-&lt;br /&gt;
|[[File:resource_script_test.png]]&lt;br /&gt;
|Test the Script Controller script.&lt;br /&gt;
|-&lt;br /&gt;
|[[File:resource_script_run.png]]&lt;br /&gt;
|Run the Script Controller script.&lt;br /&gt;
|-&lt;br /&gt;
|[[File:resource_run.png]]&lt;br /&gt;
|&amp;lt;div id=&amp;quot;button_run&amp;quot;&amp;gt;&amp;lt;/div&amp;gt;Run selected profile with selected Detail element.&lt;br /&gt;
|-&lt;br /&gt;
|[[File:resource_setup.png]]&lt;br /&gt;
|Open the settings for the selected profile with the option to run with selected Detail element.&lt;br /&gt;
|-&lt;br /&gt;
|[[File:resource_edit.png]]&lt;br /&gt;
|Edit the properties for the selected element in the Detail or the Overview (whichever is active &amp;lt;nowiki&amp;gt;-&amp;lt;/nowiki&amp;gt; default: Detail). Do nothing if no element is selected.&lt;br /&gt;
|-&lt;br /&gt;
|[[File:resource_attribute.png]]&lt;br /&gt;
|Search for [[User Guide/Workspace/Detail/Search for Element Attributes|element attributes]].&lt;br /&gt;
|-&lt;br /&gt;
|[[File:resource_refresh.png]]&lt;br /&gt;
|Force an update to the Workspace window.&lt;br /&gt;
|-&lt;br /&gt;
|[[File:resource_new.png]]&lt;br /&gt;
|Add an element to the selected element in the Detail or the Overview (whichever is active &amp;lt;nowiki&amp;gt;-&amp;lt;/nowiki&amp;gt; default: Detail). The type of element you can add depends on the context (e.g. you cannot add a sound file to a sound file).&lt;br /&gt;
|-&lt;br /&gt;
|[[File:resource_dosave.png]]&lt;br /&gt;
|Save the Workspace settings and the Project file to disk.&lt;br /&gt;
|-&lt;br /&gt;
|[[File:resource_toolbox.png]]&lt;br /&gt;
|Open the Toolbox.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==Channel Mapping==&lt;br /&gt;
&lt;br /&gt;
{{STX}} can map individual channels from wave files with more than two channels to the stereo channels available on a Windows system.&lt;br /&gt;
&lt;br /&gt;
[[File:ws_channel_mapping.png]]&lt;br /&gt;
&lt;br /&gt;
==Hotkeys==&lt;br /&gt;
&lt;br /&gt;
There are many [[User_Guide/Workspace/Workspace_Hotkeys|hotkeys]] available in the Workspace.&lt;br /&gt;
&lt;br /&gt;
==Drag &amp;amp; Drop Support==&lt;br /&gt;
&lt;br /&gt;
You can drag and drop a number of different file types into the Workspace window:&lt;br /&gt;
&lt;br /&gt;
*Project files&lt;br /&gt;
*{{STX}} INI files&lt;br /&gt;
*Sound files&lt;br /&gt;
*Scripts&lt;br /&gt;
You can also drag and drop these files onto the Log window.&lt;br /&gt;
&lt;br /&gt;
==Title==&lt;br /&gt;
&lt;br /&gt;
The Workspace title shows the path to the current [[User_Guide/Workspace/Application_and_Setup_Tree/Workspace_File|Workspace]] file and the current [[User_Guide/Project|Project]] file.&lt;br /&gt;
&lt;br /&gt;
[[File:ws_title.png]]&lt;br /&gt;
&lt;br /&gt;
==Wildcards==&lt;br /&gt;
&lt;br /&gt;
{{STX}} supports the use of wildcards in many dialog boxes. [[User_Guide/Workspace/Wildcards|Here]] is an explanation of the syntax.&lt;/div&gt;</summary>
		<author><name>Jw</name></author>
	</entry>
	<entry>
		<id>https://mediawiki.kfs.oeaw.ac.at/stx/docs/wiki/index.php?title=User_Guide/Workspace&amp;diff=10643</id>
		<title>User Guide/Workspace</title>
		<link rel="alternate" type="text/html" href="https://mediawiki.kfs.oeaw.ac.at/stx/docs/wiki/index.php?title=User_Guide/Workspace&amp;diff=10643"/>
		<updated>2019-09-30T06:56:16Z</updated>

		<summary type="html">&lt;p&gt;Jw: /* Modes */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{DISPLAYTITLE:{{SUBPAGENAME}}}}&lt;br /&gt;
{{UG_Workspace}}&lt;br /&gt;
The Workspace is the default application in {{STX}}. The Workspace is where you organise your project&#039;s sound files and run your analyses. &lt;br /&gt;
&lt;br /&gt;
[[File:Stx ug workspace compact overview.png|600px]]&lt;br /&gt;
&lt;br /&gt;
__TOC__&lt;br /&gt;
&lt;br /&gt;
When you open a sound file in {{STX}}, it is added to your project file. The sound files in your project are listed in the &#039;&#039;Files&#039;&#039; list:&lt;br /&gt;
&lt;br /&gt;
[[File:Stx_ug_workspace_compact_overview_files.png]]&lt;br /&gt;
&lt;br /&gt;
When you select a sound file in the Files list, any segments the sound file contains are displayed in the segment detail view:&lt;br /&gt;
&lt;br /&gt;
[[File:Stx_ug_workspace_compact_overview_detail.png]]&lt;br /&gt;
&lt;br /&gt;
When you want to analyse part of your sound file, you select a segment of the sound file and then choose either &#039;&#039;Start&#039;&#039; from the &#039;&#039;Analysis&#039;&#039; or &#039;&#039;Transcription&#039;&#039; controls. This will open a new window with the relevant analysis.&lt;br /&gt;
&lt;br /&gt;
===Analysis===&lt;br /&gt;
&lt;br /&gt;
The &#039;&#039;Analysis&#039;&#039; section will by default display a narrowband spectrogram with formants tracks as well as an F0, RMS and wave graph of the selected segment.&lt;br /&gt;
&lt;br /&gt;
[[File:stx_ug_workspace_compact_analysis.png]]&lt;br /&gt;
&lt;br /&gt;
You can enable/disable graphs here, before starting the analysis. If you need other features, please use the [[User_Guide/Spectrogram_and_Parameter_Viewer/Settings_Dialog|&#039;&#039;Setup&#039;&#039;]] dialog.&lt;br /&gt;
&lt;br /&gt;
===Transcription===&lt;br /&gt;
&lt;br /&gt;
The &#039;&#039;Transcription&#039;&#039; section of the workspace lets you start the [[User_Guide/SPExL/Transcription_Script|Transcription]] application. This application was specifically designed for transcribing.&lt;br /&gt;
&lt;br /&gt;
[[File:stx_ug_workspace_compact_transcription.png]]&lt;br /&gt;
&lt;br /&gt;
You can change some basic settings here:&lt;br /&gt;
;view:Display the sound file as a waveform or both a waveform and a spectrogram (see [[User_Guide/SPExL/Transcription_Script#Spectrogram_.2F_Waveform_Views|here]] for more details).&lt;br /&gt;
;block length:If the sound file is long, you can view it in blocks to increase loading speed.&lt;br /&gt;
;step size:When scrolling through blocks, the next block will overlap by this value with the last block.&lt;br /&gt;
;Start:Start the Transcription application.&lt;br /&gt;
;Setup:Open the setup dialog for further settings.&lt;br /&gt;
&lt;br /&gt;
===Compact and Extended Mode===&lt;br /&gt;
&lt;br /&gt;
By default, the Workspace starts in the &#039;&#039;Compact Mode&#039;&#039;. This is a simplified GUI which enables quick access to the most frequently used functions of STx. The Workspace can also be run in &#039;&#039;[[/Extended_Mode|Extended Mode]]&#039;&#039;, which exposes all STx functionality to the user. To change mode, choose either &amp;lt;samp&amp;gt;Compact&amp;lt;/samp&amp;gt; or &amp;lt;samp&amp;gt;Extended&amp;lt;/samp&amp;gt; from the &amp;lt;samp&amp;gt;File-&amp;gt;Select Workspace Mode&amp;lt;/samp&amp;gt; menu.&lt;br /&gt;
&lt;br /&gt;
The &#039;&#039;Compact&#039;&#039; mode was added to {{STX}} in version 5.0.&lt;br /&gt;
&lt;br /&gt;
===Extras===&lt;br /&gt;
&lt;br /&gt;
The &#039;&#039;Extras&#039;&#039; menu contains some extra functionality, you might like to quickly access from the &#039;&#039;Compact&#039;&#039; mode.&lt;br /&gt;
;Start Realtime Spectrum Analyser:Analyse an audio input signal in real-time.&lt;br /&gt;
;Start Signal Recorder:Record a sound file from any audio input.&lt;br /&gt;
;Start Signal Plot and Edit:Plot a waveform of the selected segment. This is also a basic wave editor.&lt;br /&gt;
;Export Parameters:[[User_Guide/Workspace/Application_and_Setup_Tree/Parameter_Processing#Parameter_Export|Export previously calculated parameters]].&lt;br /&gt;
;Copy Parameters to Clipboard:Copy the selected segment&#039;s parameters to the clipboard.&lt;br /&gt;
;Import Segments from Wordlist-File:Import a transcription from a file. One sentence per line. This estimates the position of the segments based on word length.&lt;br /&gt;
;Import Segments from Textgrid-File:[[User_Guide/Toolbox/Import_PRAAT_TextGrid|Import a TextGrid file into the selected sound file]].&lt;br /&gt;
;Segment automatically using runMAUSBasic:Segment the selected sound file using the WebMAUS interface [[User_Guide/Toolbox/runMAUSBasicDlg|runMAUSBasic]].&lt;br /&gt;
;Export Segments to Sound Files: Export each of the selected segments to an individual sound file.&lt;br /&gt;
;Anonymize Signals and Transcriptions:[[User_Guide/Scripts/Anonymize.sts|Anonymize the selected sound file&#039;s segments based on a segment attribute]].&lt;br /&gt;
;Signal Up/Down Sampling:Upsample or downsample a sound file.&lt;br /&gt;
;Show Scripts Dialog:Display the [[User_Guide/The_Script_Controller|scripts dialog]] in the Workspace to load and run scripts.&lt;br /&gt;
;Show Find/Select Dialog:Display the [[User_Guide/Workspace_/Detail_Find_Select|Find/Select dialog]] in the Workspace to search for segments contain the search term.&lt;br /&gt;
;General Settings:Open the [[User_Guide/Workspace/Application_and_Setup_Tree/Options/General_Settings|general settings dialog]].&lt;/div&gt;</summary>
		<author><name>Jw</name></author>
	</entry>
	<entry>
		<id>https://mediawiki.kfs.oeaw.ac.at/stx/docs/wiki/index.php?title=User_Guide&amp;diff=10642</id>
		<title>User Guide</title>
		<link rel="alternate" type="text/html" href="https://mediawiki.kfs.oeaw.ac.at/stx/docs/wiki/index.php?title=User_Guide&amp;diff=10642"/>
		<updated>2019-09-30T06:53:01Z</updated>

		<summary type="html">&lt;p&gt;Jw: /* Tutorials */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{DISPLAYTITLE:{{SUBPAGENAME}}}}&lt;br /&gt;
{{User Guide}}&lt;br /&gt;
==Organise your sound files==&lt;br /&gt;
&lt;br /&gt;
{{STX}} can play, analyse, annotate and modify wave files. The main application - the [[User_Guide/Workspace|Workspace]] - is where you load your sound files and start your analysis from. Your sound files are organised in a [[User_Guide/Project|project]] file. You can use the [[User_Guide/FindFile|FindFile]] application to search for wave files on disk and import them into {{STX}}.&lt;br /&gt;
&lt;br /&gt;
==Analyse a Signal==&lt;br /&gt;
&lt;br /&gt;
There are a number of applications for analysing signals in {{STX}}. &lt;br /&gt;
&lt;br /&gt;
* [[User_Guide/Real_Time_Analyser|Real-Time Analyser]] - analyse the current sound input as a spectrum, wave or spectrogram graph&lt;br /&gt;
* [[User Guide/Waveform and Segmentation Viewer|Waveform and Segmentation Viewer]] - useful for segmenting signals&lt;br /&gt;
* [[User Guide/Spectrogram and Parameter Viewer|Spectrogram and Parameter Viewer]] - calculate, edit and extract parameters from the signal. Segmentation is also easy here.&lt;br /&gt;
* [[User Guide/Spectrum Viewer|Spectrum Viewer]] - average the spectra of a signal segment.&lt;br /&gt;
* [[User Guide/Transcription Script|Transcription]] - an application specifically designed for segmentation and transcription.&lt;br /&gt;
&lt;br /&gt;
==Record a Signal==&lt;br /&gt;
&lt;br /&gt;
The [[User Guide/Recorder|Recorder]] can be used to save an input stream to disk and whilst segmenting it on the fly.&lt;br /&gt;
&lt;br /&gt;
==Command-Line Parameters==&lt;br /&gt;
&lt;br /&gt;
There is a minimal set of [[User Guide/Command-Line Parameters|command line parameters]] which can be passed to {{STX}}.&lt;br /&gt;
&lt;br /&gt;
==Concepts and Terminology==&lt;br /&gt;
&lt;br /&gt;
{{STX}} uses some concepts and terminology which might benefit from some explanation. See [[User Guide/Concepts and Terminology|Concepts and Terminology]].&lt;br /&gt;
&lt;br /&gt;
==Tutorials==&lt;br /&gt;
&lt;br /&gt;
There are a few [[User Guide/Tutorials|tutorials available]].&lt;br /&gt;
&lt;br /&gt;
* [[User_Guide/Tutorials/Analysing_a_sound_file|Analysing a sound file]]&lt;br /&gt;
* [[User_Guide/Tutorials/Opening_the_samples.stxpr_project|Opening the sample project]]&lt;br /&gt;
* [[User_Guide/Tutorials/Playing_a_sound_file|Play a sound file]]&lt;br /&gt;
* [[User_Guide/Tutorials/Running_an_application|Running an application]]&lt;br /&gt;
* [[User_Guide/Tutorials/Setting_the_default_application|Setting the default application]]&lt;br /&gt;
* [[User_Guide/Tutorials/Zooming_in_a_Viewer|Zooming in a viewer]]&lt;br /&gt;
&lt;br /&gt;
==Scripts, Toolboxes, Development, and Extending {{STX}}==&lt;br /&gt;
&lt;br /&gt;
{{STX}} comes with a number of [[User Guide/Pre-installed scripts|pre-installed scripts]] - applications written in the {{STX}} scripting language, and loaded and run from a text file. You can write your own {{STX}} scripts, [[User Guide/Toolbox|toolboxes]] and applications. All the functionality that you find in {{STX}} is available to you in the script language. The [[User Guide/The_Script_Controller|script controller]] dialog, the [[User Guide/STX_Console|command line console]], the integrated [[User Guide/Debugger|debugger]] and the [[Programmer Guide]] will help you.&lt;br /&gt;
&lt;br /&gt;
==The Log Window==&lt;br /&gt;
The little window up on the left hand corner of the screen is the {{STX}} [[/Log Window/]]. You can start a number of applications from here, change some general {{STX}} settings, and view the log messages.&lt;/div&gt;</summary>
		<author><name>Jw</name></author>
	</entry>
</feed>