From: <ro...@us...> - 2009-12-04 20:30:39
|
Revision: 1643 http://nsclspectcl.svn.sourceforge.net/nsclspectcl/?rev=1643&view=rev Author: ron-fox Date: 2009-12-04 20:30:29 +0000 (Fri, 04 Dec 2009) Log Message: ----------- BZ384 - Provide fallback fonts in case adobe-courier is not installed. Modified Paths: -------------- trunk/SpecTcl/CHANGELOG trunk/SpecTcl/Display/Xamine.cc trunk/SpecTcl/Display/text.cc Modified: trunk/SpecTcl/CHANGELOG =================================================================== --- trunk/SpecTcl/CHANGELOG 2009-12-04 20:25:34 UTC (rev 1642) +++ trunk/SpecTcl/CHANGELOG 2009-12-04 20:30:29 UTC (rev 1643) @@ -882,5 +882,6 @@ continuously varying parameters. December 4, 2009 - Fix error in XMWarningDialog::Create .. was referencing button objects prior to ensuring they were created. + December 4, 2009 - BZ384 - Provide some fallback fonts in case the adobe-courier + family is not present. - Modified: trunk/SpecTcl/Display/Xamine.cc =================================================================== --- trunk/SpecTcl/Display/Xamine.cc 2009-12-04 20:25:34 UTC (rev 1642) +++ trunk/SpecTcl/Display/Xamine.cc 2009-12-04 20:30:29 UTC (rev 1643) @@ -185,6 +185,8 @@ XtVaSetValues(w, XmNiconPixmap, icon, NULL); } +XMWidget* Xamine_TopLevel; // Point to the top level widget. + int main(int argc, char **argv) { @@ -195,6 +197,8 @@ XMForm panes("PaneManager", work_area); XMWidget *status_area = Xamine_SetupLocator(&work_area); + Xamine_TopLevel = reinterpret_cast<XMWidget*>(&main_win); + /* ** Set up the work area with the panes on top and the status form on the ** Bottom. Modified: trunk/SpecTcl/Display/text.cc =================================================================== --- trunk/SpecTcl/Display/text.cc 2009-12-04 20:25:34 UTC (rev 1642) +++ trunk/SpecTcl/Display/text.cc 2009-12-04 20:30:29 UTC (rev 1643) @@ -49,6 +49,10 @@ #include <X11/Xos.h> #include <X11/Xatom.h> +/* Xamine utilities: */ + +#include "errormsg.h" + /* Local function prototypes. */ #include "text.h" @@ -60,11 +64,26 @@ extern "C" { void exit(int); } #endif +extern XMWidget* Xamine_TopLevel; + /* ** Constant definitions: */ #define XAMINE_FONT_FAMILY "-adobe-courier-medium-r*" +#define ALTERNATE_XAMINE_FONT_FAMILY "-*-fixed-*-r*" + +// List of fonts that are acceptable to us: + +static const char* FontList[] = { + XAMINE_FONT_FAMILY, + "*courier-medium-r*", + "*courier*", + ALTERNATE_XAMINE_FONT_FAMILY, + NULL +}; + + /* ** Class definitions */ @@ -283,25 +302,37 @@ ** First get the list of fonts that are in the font family used ** by Xamine: */ - font_names = XListFonts(display, XAMINE_FONT_FAMILY, 100, &nfonts); - if(font_names == NULL) { - fprintf(stderr, "This server does not have the font family %s\n", - XAMINE_FONT_FAMILY); - fprintf(stderr, "Unfortunately Xamine cannot continue from that error\n"); - exit(-1); + const char** pFontFamily = FontList; + while(*pFontFamily) { + font_names = XListFonts(display, *pFontFamily, 100, &nfonts); + if (font_names) { + font_namelist = font_names; + /* + ** now load the fonts into the database one by one: + */ + fonts = new FontDatabase(nfonts); + + while(nfonts > 0) { + fonts->AddFont(*font_names, XLoadQueryFont(display, *font_names)); + font_names++; + nfonts--; + } + return; + } + else { + pFontFamily++; + } } - font_namelist = font_names; - /* - ** now load the fonts into the database one by one: - */ - fonts = new FontDatabase(nfonts); - while(nfonts > 0) { - fonts->AddFont(*font_names, XLoadQueryFont(display, *font_names)); - font_names++; - nfonts--; - } + // Control landed here if none of the font families could be located. + Xamine_error_msg(Xamine_TopLevel, + "This server does not have a font family suitable for labeling the spectra"); + fprintf(stderr, "No fonts we can use!!\n"); + exit(-1); + + + } /* This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <ro...@us...> - 2009-12-04 21:32:43
|
Revision: 1644 http://nsclspectcl.svn.sourceforge.net/nsclspectcl/?rev=1644&view=rev Author: ron-fox Date: 2009-12-04 21:32:26 +0000 (Fri, 04 Dec 2009) Log Message: ----------- BZ 384 - Provide a catch handler for const char* exceptions that will display the exception string in a Warning Dialog that is modal and whose dismiss is hooked to a callback that exits. - In text.cc/LoadFonts - if no suitable font factor can be found throws a const char* exception indicating that fact. Modified Paths: -------------- trunk/SpecTcl/CHANGELOG trunk/SpecTcl/Display/Xamine.cc trunk/SpecTcl/Display/text.cc Modified: trunk/SpecTcl/CHANGELOG =================================================================== --- trunk/SpecTcl/CHANGELOG 2009-12-04 20:30:29 UTC (rev 1643) +++ trunk/SpecTcl/CHANGELOG 2009-12-04 21:32:26 UTC (rev 1644) @@ -884,4 +884,11 @@ button objects prior to ensuring they were created. December 4, 2009 - BZ384 - Provide some fallback fonts in case the adobe-courier family is not present. + BZ384 - Provide a const char* exception handler in main() + when caught displays a modal warning box with the + exception displayed and when dismissed exits Xamine. + - Throw an appropriate const char* exception when + no suitable fonts can be found in text.cc:LoadFonts + + Modified: trunk/SpecTcl/Display/Xamine.cc =================================================================== --- trunk/SpecTcl/Display/Xamine.cc 2009-12-04 20:30:29 UTC (rev 1643) +++ trunk/SpecTcl/Display/Xamine.cc 2009-12-04 21:32:26 UTC (rev 1644) @@ -185,133 +185,156 @@ XtVaSetValues(w, XmNiconPixmap, icon, NULL); } +/* + * Exit callback for for the error handler + */ +void +ExitOnError(XMWidget* pWidget, XtPointer ed, XtPointer cd) +{ + exit(-1); +} + XMWidget* Xamine_TopLevel; // Point to the top level widget. int main(int argc, char **argv) { - XMApplication top("Xamine", reinterpret_cast<Cardinal*>(&argc), argv); /* Top level/init ap. */ XMMainWindow main_win("MainWindow", top, NULL, 0); /* Main window widget. */ XMForm work_area("WorkArea", main_win); XMForm panes("PaneManager", work_area); XMWidget *status_area = Xamine_SetupLocator(&work_area); - Xamine_TopLevel = reinterpret_cast<XMWidget*>(&main_win); + try { - /* - ** Set up the work area with the panes on top and the status form on the - ** Bottom. - */ + Xamine_TopLevel = reinterpret_cast<XMWidget*>(&main_win); - work_area.SetFractionBase(100); - work_area.SetTopAttachment(panes, XmATTACH_FORM); - work_area.SetLeftAttachment(panes, XmATTACH_FORM); - work_area.SetRightAttachment(panes, XmATTACH_FORM); + /* + ** Set up the work area with the panes on top and the status form on the + ** Bottom. + */ - work_area.SetLeftAttachment(*status_area, XmATTACH_FORM); - work_area.SetBottomAttachment(*status_area, XmATTACH_FORM); - work_area.SetRightAttachment(*status_area, XmATTACH_FORM); - work_area.SetTopAttachment(*status_area, XmATTACH_POSITION); - work_area.SetTopPosition(*status_area, 95); + work_area.SetFractionBase(100); + work_area.SetTopAttachment(panes, XmATTACH_FORM); + work_area.SetLeftAttachment(panes, XmATTACH_FORM); + work_area.SetRightAttachment(panes, XmATTACH_FORM); - work_area.SetBottomAttachment(panes, XmATTACH_POSITION); - work_area.SetBottomPosition(panes, 94); + work_area.SetLeftAttachment(*status_area, XmATTACH_FORM); + work_area.SetBottomAttachment(*status_area, XmATTACH_FORM); + work_area.SetRightAttachment(*status_area, XmATTACH_FORM); + work_area.SetTopAttachment(*status_area, XmATTACH_POSITION); + work_area.SetTopPosition(*status_area, 95); - Arg arg[10]; - Cardinal nArgs = 3; - XtSetArg(arg[0], XmNscrollingPolicy, XmAUTOMATIC); - XtSetArg(arg[1], XmNscrollBarDisplayPolicy, XmAS_NEEDED); - XtSetArg(arg[2], XmNresizable, False); + work_area.SetBottomAttachment(panes, XmATTACH_POSITION); + work_area.SetBottomPosition(panes, 94); + Arg arg[10]; + Cardinal nArgs = 3; + XtSetArg(arg[0], XmNscrollingPolicy, XmAUTOMATIC); + XtSetArg(arg[1], XmNscrollBarDisplayPolicy, XmAS_NEEDED); + XtSetArg(arg[2], XmNresizable, False); - XMWidget *cmd_area = new XMWidget("button_bar", - xmScrolledWindowWidgetClass, main_win, - arg, nArgs); - XMMenuBar *mb; - /* We need to set up the mechanism for getting Xt notification of */ - /* gate events from the users. This will also create the appropriate */ - /* pipe/mailboxes to communicate between Xamine and the client. */ + XMWidget *cmd_area = new XMWidget("button_bar", + xmScrolledWindowWidgetClass, main_win, + arg, nArgs); + XMMenuBar *mb; - Xamine_SetupRequestNotification(XtWidgetToApplicationContext(top.getid()), - (XtInputCallbackProc)Xamine_ProcessClientRequests); + /* We need to set up the mechanism for getting Xt notification of */ + /* gate events from the users. This will also create the appropriate */ + /* pipe/mailboxes to communicate between Xamine and the client. */ - /* Initialize access to the shared memory spectra. */ + Xamine_SetupRequestNotification(XtWidgetToApplicationContext(top.getid()), + (XtInputCallbackProc)Xamine_ProcessClientRequests); - Xamine_initspectra(); + /* Initialize access to the shared memory spectra. */ - /* Set up the icon for the application */ + Xamine_initspectra(); + + /* Set up the icon for the application */ #ifdef HOME - char IconName[100]; - sprintf(IconName,"%s/etc/Xamine.ico" ,HOME); - SetIcon(main_win.getid(), IconName); + char IconName[100]; + sprintf(IconName,"%s/etc/Xamine.ico" ,HOME); + SetIcon(main_win.getid(), IconName); #else - SetIcon(main_win.getid(), ICON_FILENAME); + SetIcon(main_win.getid(), ICON_FILENAME); #endif - /* Set up the user interface */ + /* Set up the user interface */ - mb = Xamine_setup_menus(&main_win); /* Set up the menu bar. */ + mb = Xamine_setup_menus(&main_win); /* Set up the menu bar. */ - Xamine_SetupButtonBar(cmd_area); - Xamine_Initialize_panedb(&panes); /* Set up the spectrum display panes */ + Xamine_SetupButtonBar(cmd_area); + Xamine_Initialize_panedb(&panes); /* Set up the spectrum display panes */ - main_win.SetAreas(mb, cmd_area, NULL, NULL, &work_area); - main_win.SetAttribute(XmNcommandWindowLocation, XmCOMMAND_BELOW_WORKSPACE); + main_win.SetAreas(mb, cmd_area, NULL, NULL, &work_area); + main_win.SetAttribute(XmNcommandWindowLocation, XmCOMMAND_BELOW_WORKSPACE); - XMWidget *panemgr = Xamine_Getpanemgr(); - panemgr->Manage(); - panes.Manage(); - status_area->Manage(); - work_area.Manage(); - cmd_area->Manage(); - main_win.Manage(); + XMWidget *panemgr = Xamine_Getpanemgr(); + panemgr->Manage(); + panes.Manage(); + status_area->Manage(); + work_area.Manage(); + cmd_area->Manage(); + main_win.Manage(); - Xamine_EnableBasePackage(); - Xamine_DisableMultiwindowPackage(); - Xamine_DisableSpectrumPresentPackage(); - Xamine_DisableSpectrumSelectedPackage(); - Xamine_Disable1dSelectedPackage(); - Xamine_Disable2dSelectedPackage(); + Xamine_EnableBasePackage(); + Xamine_DisableMultiwindowPackage(); + Xamine_DisableSpectrumPresentPackage(); + Xamine_DisableSpectrumSelectedPackage(); + Xamine_Disable1dSelectedPackage(); + Xamine_Disable2dSelectedPackage(); - /* Set up the colormap if any: */ + /* Set up the colormap if any: */ - top.Realize(); - Xamine_InitColors(&main_win); + top.Realize(); + Xamine_InitColors(&main_win); - /* Read default pane properties and modify as needed for the tube */ + /* Read default pane properties and modify as needed for the tube */ - Xamine_ReadDefaultProperties(); - /* - ** BUGBUGBUG -- Here's something I can't figure out... - ** Default properties get updated on all changes - ** This can cause flips between BW/Color renditions - ** depending on what's running... - ** the code below effectively ignores the users's default - ** rendition. - ** possibly later, we'll have two files, one for color, - ** one for B/W. - */ + Xamine_ReadDefaultProperties(); + /* + ** BUGBUGBUG -- Here's something I can't figure out... + ** Default properties get updated on all changes + ** This can cause flips between BW/Color renditions + ** depending on what's running... + ** the code below effectively ignores the users's default + ** rendition. + ** possibly later, we'll have two files, one for color, + ** one for B/W. + */ - if(!Xamine_ColorDisplay()) - Xamine_SetDefault2DRendition(scatter); - else - Xamine_SetDefault2DRendition(color); + if(!Xamine_ColorDisplay()) + Xamine_SetDefault2DRendition(scatter); + else + Xamine_SetDefault2DRendition(color); - /* Start the application */ + /* Start the application */ - usage = (caddr_t)sbrk(0); /* Get current stack/heap break point. */ - XtAppAddTimeOut(top.GetContext(), - 1000, - Monitor, - &top); + usage = (caddr_t)sbrk(0); /* Get current stack/heap break point. */ + XtAppAddTimeOut(top.GetContext(), + 1000, + Monitor, + &top); #ifndef CYGWIN // See the comment for <new> above. - set_new_handler(MemGone); + set_new_handler(MemGone); #endif - top.Begin(); /* Start processing events */ + + top.Begin(); /* Start processing events */ + } + catch(const char* msg) { // Error message dialog and exit on accept. + XMWarningDialog error("Exiting", + reinterpret_cast<XMWidget&>(main_win), + msg, + ExitOnError, + (XtPointer)NULL, + (Arg*)NULL, (Cardinal)0); + error.SetModal(XmDIALOG_APPLICATION_MODAL); + + top.Begin(); // Back into the event loop. + } } Modified: trunk/SpecTcl/Display/text.cc =================================================================== --- trunk/SpecTcl/Display/text.cc 2009-12-04 20:30:29 UTC (rev 1643) +++ trunk/SpecTcl/Display/text.cc 2009-12-04 21:32:26 UTC (rev 1644) @@ -75,6 +75,7 @@ // List of fonts that are acceptable to us: + static const char* FontList[] = { XAMINE_FONT_FAMILY, "*courier-medium-r*", @@ -84,6 +85,7 @@ }; + /* ** Class definitions */ @@ -326,13 +328,11 @@ // Control landed here if none of the font families could be located. - Xamine_error_msg(Xamine_TopLevel, - "This server does not have a font family suitable for labeling the spectra"); - fprintf(stderr, "No fonts we can use!!\n"); - exit(-1); + throw "This server does not have a font family suitable for labeling the spectra"; + } /* This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <ro...@us...> - 2010-02-02 21:02:09
|
Revision: 1654 http://nsclspectcl.svn.sourceforge.net/nsclspectcl/?rev=1654&view=rev Author: ron-fox Date: 2010-02-02 21:02:03 +0000 (Tue, 02 Feb 2010) Log Message: ----------- Export CRingBufferDecoder.h to $prefix/include rather than hiding it in noinst_HEADERS Modified Paths: -------------- trunk/SpecTcl/CHANGELOG trunk/SpecTcl/DecoderRing/Makefile.am Modified: trunk/SpecTcl/CHANGELOG =================================================================== --- trunk/SpecTcl/CHANGELOG 2010-01-28 12:08:39 UTC (rev 1653) +++ trunk/SpecTcl/CHANGELOG 2010-02-02 21:02:03 UTC (rev 1654) @@ -890,5 +890,6 @@ - Throw an appropriate const char* exception when no suitable fonts can be found in text.cc:LoadFonts - +February 2, 2010 - Export CRingBufferDecoder.h to the world rather than + hiding it in noinst_HEADERS. Modified: trunk/SpecTcl/DecoderRing/Makefile.am =================================================================== --- trunk/SpecTcl/DecoderRing/Makefile.am 2010-01-28 12:08:39 UTC (rev 1653) +++ trunk/SpecTcl/DecoderRing/Makefile.am 2010-02-02 21:02:03 UTC (rev 1654) @@ -2,10 +2,11 @@ libDecoderRing_la_SOURCES = CRingBufferDecoder.cpp -noinst_HEADERS = CRingBufferDecoder.h \ - DataFormat.h +noinst_HEADERS = DataFormat.h +include_HEADERS = CRingBufferDecoder.h + INCLUDES = -I@top_srcdir@/Utility \ -I@top_srcdir@/Events \ -I@top_srcdir@/NSCLException \ This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <ro...@us...> - 2010-02-11 14:30:52
|
Revision: 1656 http://nsclspectcl.svn.sourceforge.net/nsclspectcl/?rev=1656&view=rev Author: ron-fox Date: 2010-02-11 14:30:17 +0000 (Thu, 11 Feb 2010) Log Message: ----------- - Support specifying the data source can produce variable length data. - Modify the data source GUI so that data format can be selected specifically so the GUI can be used to attach to Ringbuffers and files from the ringbuffer daq. Modified Paths: -------------- trunk/SpecTcl/CHANGELOG trunk/SpecTcl/EventSource/File.cpp trunk/SpecTcl/EventSource/File.h trunk/SpecTcl/EventSource/PipeFile.h trunk/SpecTcl/Gui/datasource.tcl trunk/SpecTcl/SpecTcl/AttachCommand.cpp Modified: trunk/SpecTcl/CHANGELOG =================================================================== --- trunk/SpecTcl/CHANGELOG 2010-02-08 15:36:08 UTC (rev 1655) +++ trunk/SpecTcl/CHANGELOG 2010-02-11 14:30:17 UTC (rev 1656) @@ -891,5 +891,9 @@ no suitable fonts can be found in text.cc:LoadFonts February 2, 2010 - Export CRingBufferDecoder.h to the world rather than - hiding it in noinst_HEADERS. + hiding it in noinst_HEADERS. +Feburary 11, 2010 - Modify data source GUI elements to include a data + format selector that includes support for ring so people + can attach to ring buffers or event files from the ring + buffer system. Modified: trunk/SpecTcl/EventSource/File.cpp =================================================================== --- trunk/SpecTcl/EventSource/File.cpp 2010-02-08 15:36:08 UTC (rev 1655) +++ trunk/SpecTcl/EventSource/File.cpp 2010-02-11 14:30:17 UTC (rev 1656) @@ -346,6 +346,30 @@ } + +///////////////////////////////////////////////////////////////////////////// +// +// Control whether or not the records from the data source are fixed length +// or variable: + +/*! + Sets the record type to variable. If this is set the Read function + is allowed to return data to the call if the buffer was not completely filled. +*/ +void +CFile::setVariableRecord() +{ + m_fixedLength = false; +} +/*! + Sets the record type to fixed. In this case Read can only return if it has + filled the buffer or if the end of file was encountered on the input source. +*/ +void +CFile::setFixedRecord() +{ + m_fixedLength = true; +} ////////////////////////////////////////////////////////////////////////////// // // Function: Modified: trunk/SpecTcl/EventSource/File.h =================================================================== --- trunk/SpecTcl/EventSource/File.h 2010-02-08 15:36:08 UTC (rev 1655) +++ trunk/SpecTcl/EventSource/File.h 2010-02-11 14:30:17 UTC (rev 1656) @@ -115,6 +115,9 @@ virtual void Close () ; virtual Bool_t IsReadable(UInt_t nMs) const; + void setVariableRecord(); + void setFixedRecord(); + // Utility functions available to derived classes: protected: Modified: trunk/SpecTcl/EventSource/PipeFile.h =================================================================== --- trunk/SpecTcl/EventSource/PipeFile.h 2010-02-08 15:36:08 UTC (rev 1655) +++ trunk/SpecTcl/EventSource/PipeFile.h 2010-02-11 14:30:17 UTC (rev 1656) @@ -98,7 +98,7 @@ virtual void Open (const STD(string)& rsConnection, UInt_t nAccess, bool fullBlocks = true) ; - virtual void Close () ; + virtual void Close () ; virtual Bool_t IsReadable (UInt_t nMs) const ; // Protected utilities. Modified: trunk/SpecTcl/Gui/datasource.tcl =================================================================== --- trunk/SpecTcl/Gui/datasource.tcl 2010-02-08 15:36:08 UTC (rev 1655) +++ trunk/SpecTcl/Gui/datasource.tcl 2010-02-11 14:30:17 UTC (rev 1656) @@ -23,6 +23,7 @@ namespace eval datasource { variable daqroot [list /usr/opt/daq/current /usr/opt/daq/8.1 /usr/opt/daq/8.0 /usr/opt/daq]; # Where the DAQ software is installed. variable lasthost localhost; # Most recent online host. + variable lastformat nscl variable lasteventfile {} variable lastpipecommand {} variable lastpipeargs {} @@ -49,7 +50,7 @@ set datasource::actualSpecTclDaq $candidate return } - + } foreach root $datasource::daqroot { @@ -83,21 +84,25 @@ # proc attachOnline {} { hostprompt .hostprompt -host $::datasource::lasthost \ - -buffersize $::GuiPrefs::preferences(defaultBuffersize) + -format $::datasource::lastformat \ + -buffersize $::GuiPrefs::preferences(defaultBuffersize) .hostprompt modal if {[winfo exists .hostprompt]} { set host [.hostprompt cget -host] + if {$host != ""} { - set $::datasource::lasthost $host - set url [format "tcp://%s:2602/" $host] + set format [.hostprompt cget -format] + + set ::datasource::lasthost $host + set ::datasource::lastformat $format set size [.hostprompt cget -buffersize] - catch stop; # In case analysis is active. - datasource::findSpecTclDaq - if {$datasource::actualSpecTclDaq ne ""} { - attach -size $size -pipe $datasource::actualSpecTclDaq $url - set ::GuiPrefs::preferences(defaultBuffersize) $size - start - } + + set helper [.hostprompt onlinehelper $host] + + catch stop + attach -format $format -size $size -pipe $helper + set ::GuiPrefs::preferences(defaultBuffersize) $size + start } destroy .hostprompt } @@ -115,19 +120,22 @@ -defaultextension .evt \ -initialfile $::datasource::lasteventfile \ -initialdir [file dirname $::datasource::lasteventfile] \ - -buffersize $::GuiPrefs::preferences(defaultBuffersize) + -buffersize $::GuiPrefs::preferences(defaultBuffersize) \ + -format $::datasource::lastformat .prompt modal set file [.prompt cget -initialfile] set size [.prompt cget -buffersize] + set format [.prompt cget -format] destroy .prompt if {$file != ""} { if {[file readable $file]} { catch stop - attach -size $size -file $file + attach -size $size -format $format -file $file set ::GuiPrefs::preferences(defaultBuffersize) $size start set ::datasource::lasteventfile $file + set ::datasource::lastformat $format } else { tk_messageBox -icon error -title {Can't read file} \ -message "Could not read the file $file permission problem or file does not exist" @@ -300,7 +308,107 @@ catch stop attach -file /dev/null } + # +# This radio box can be used within the various prompters to select the +# format of the data source. For now this is restricted to three hard coded +# choices: +# nscl - NSCL standard buffers with event sizes < 32K and buffersize < 32K +# jumbo - NSCL standard buffers with events/buffers sizes potentially > 32k +# ring - Data from NSCLDAQ 10.0 and later (ringbuffer data). +# + +# +# OPTIONS: +# -format - get set the radio button value which can be nscl, jumbo, ring +# Methods: +# helptext - Get help text that describes the formats. +# pipehelper- Given a node, provides the helper to be used for a pipe data +# source for the current format. The directory is assumed to be +# provided by the caller, or in the path. +# For ring buffers, the assumption is that the +# ring for the current user is desired. +# +# + +snit::widget formatChooser { + variable formats {nscl jumbo ring}; # Valid options + option -format nscl; # Default option. + + constructor args { + $self configurelist $args + + set col 0 + foreach format $formats { + radiobutton $win.$format -variable ${selfns}::options(-format) \ + -value $format -text $format + grid $win.$format -sticky w -row 0 -column $col + incr col + } + + } + # + # Return help text for the formats + # + method helptext {} { + append result "Format Meaning\n" + append result "nscl nscl buffers/events < 32K words (< 10.0)\n" + append result "jumbo nscl buffers/events >= 32KWords (< 10.0)\n" + append result "ring Ring buffer data from nscldaq 10.0 and later\n" + + return $result + } + # + # Method to return the correct helper command for online attaches. + # The assumption is that for each format there's a method + # by that name.. The assumption is also that the + # caller will figure out the directory part of the path. + # + method onlinehelper {host} { + return [$self $options(-format) $host] + } + + #----------------------------------------------------------------- + # + # Private methods + # + + # Construct the helper program line for spectrodaq online + + method spectrodaq {host} { + # + # Really dirty: + + set url tcp://$host:2602 + datasource::findSpecTclDaq + return "$datasource::actualSpecTclDaq $url" + } + + # Construct the helper program for nscl format + + method nscl {host} { + return [$self spectrodaq $host] + } + # Construct the helper program for jumbo format: + + method jumbo {host} { + return [$self spectrodaq $host] + } + + # Construct the helper program for ring buffers. + # We are going to assum the current user is the + # owner of the target ring. + + method ring {host} { + set url "tcp://$host/$::tcl_platform(user)" + set selection "--sample=PHYSICS_EVENT" + + return "/usr/opt/daq/10.0/bin/ringselector --source=$url $selection" + } + +} + +# # Prompter for a host for the attachonline. # snit::widget hostprompt { @@ -310,6 +418,11 @@ option -cancelcommand {} option -buffersize 8192 + delegate option -format to format + + delegate method onlinehelper to format + + variable hidden {} constructor args { label $win.hostlabel -text Host: @@ -318,6 +431,9 @@ label $win.buflabel -text {Buffer size in bytes: } $win.buffersize set $options(-buffersize) + label $win.fmtlabel -text {Data format} + install format using formatChooser $win.format + button $win.ok -text Ok -command [mymethod onOk] button $win.cancel -text Cancel -command [mymethod onCancel] button $win.help -text Help -command [list spectclGuiDisplayHelpTopic hostPrompt] @@ -325,6 +441,8 @@ grid $win.hostlabel $win.host grid $win.buflabel $win.buffersize + grid $win.fmtlabel + grid $win.format grid $win.ok $win.cancel $win.help $self configurelist $args @@ -544,6 +662,8 @@ option -command {} option -cancel {} + delegate option -format to format + variable hidden {} constructor args { @@ -557,11 +677,15 @@ spinbox $win.size -values {512 1024 2048 4096 8192 16384 32768 65536} $win.size set $options(-buffersize) + label $win.formatlabel -text {Format:} + install format using formatChooser $win.format + button $win.ok -text Ok -command [mymethod onOk] button $win.cancel -text Cancel -command [mymethod onCancel] grid $win.fsb - grid $win.sizelabel $win.size + grid $win.format grid $win.ok $win.cancel $self configurelist $args @@ -666,4 +790,5 @@ oncget -buffersize { return [$win.size get] } -} \ No newline at end of file +} + Modified: trunk/SpecTcl/SpecTcl/AttachCommand.cpp =================================================================== --- trunk/SpecTcl/SpecTcl/AttachCommand.cpp 2010-02-08 15:36:08 UTC (rev 1655) +++ trunk/SpecTcl/SpecTcl/AttachCommand.cpp 2010-02-11 14:30:17 UTC (rev 1656) @@ -50,6 +50,7 @@ #include <histotypes.h> #include <Globals.h> +#include <File.h> #include "AttachCommand.h" #include "TCLInterpreter.h" @@ -309,7 +310,17 @@ assert(0); // Let me know noisily if I'm wrong. } + // Set the block/nonblock mode on the event source depending on what the + // decoder needs: + if(gpBufferDecoder->blockMode()) { + gpEventSource->setFixedRecord(); + } + else { + gpEventSource->setVariableRecord(); + } + + // Iterate through the event processing pipeline, invoking the // each event processor's OnEventSourceOpen function: This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <ro...@us...> - 2010-05-14 18:03:20
|
Revision: 1668 http://nsclspectcl.svn.sourceforge.net/nsclspectcl/?rev=1668&view=rev Author: ron-fox Date: 2010-05-14 18:03:14 +0000 (Fri, 14 May 2010) Log Message: ----------- Remove dependency on memswap everywhere. Modified Paths: -------------- trunk/SpecTcl/CHANGELOG trunk/SpecTcl/SpecTcl/IntegrateCommand.cpp Modified: trunk/SpecTcl/CHANGELOG =================================================================== --- trunk/SpecTcl/CHANGELOG 2010-05-06 13:50:18 UTC (rev 1667) +++ trunk/SpecTcl/CHANGELOG 2010-05-14 18:03:14 UTC (rev 1668) @@ -900,3 +900,4 @@ pre6: May 6, 2010 - Fold in KSU fix for tkcon problems on ubuntu 10.?? May 6, 2010 - Update to gri-2.12.20 +May 14, 2010- Remove memswap usage in CIntegrateCommand.cpp. \ No newline at end of file Modified: trunk/SpecTcl/SpecTcl/IntegrateCommand.cpp =================================================================== --- trunk/SpecTcl/SpecTcl/IntegrateCommand.cpp 2010-05-06 13:50:18 UTC (rev 1667) +++ trunk/SpecTcl/SpecTcl/IntegrateCommand.cpp 2010-05-14 18:03:14 UTC (rev 1668) @@ -38,6 +38,15 @@ void memswap(void* block1, void* block2, size_t n); } +static void swapdbl(double& d1, double& d2) +{ + double tmp; + tmp = d1; + d1 = d2; + d2 = tmp; + +} + static const double fwhmgamma(2.354); // sigma*fwhmgamma = fwhm for gaussians. /////////////////////////////////////////////////////////////////////////// @@ -403,7 +412,7 @@ double low = list[0]; double hi = list[1]; - if (low > hi) memswap(&hi, &low, sizeof(double)); + if (low > hi) swapdbl(hi, low); // Fill result now: This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <ro...@us...> - 2010-05-18 13:47:24
|
Revision: 1687 http://nsclspectcl.svn.sourceforge.net/nsclspectcl/?rev=1687&view=rev Author: ron-fox Date: 2010-05-18 13:47:17 +0000 (Tue, 18 May 2010) Log Message: ----------- Fix error in GUI spectrum usage calculation was undercalculating summary spectrum usage. Modified Paths: -------------- trunk/SpecTcl/CHANGELOG trunk/SpecTcl/Gui/newGui.tcl trunk/SpecTcl/configure.in Modified: trunk/SpecTcl/CHANGELOG =================================================================== --- trunk/SpecTcl/CHANGELOG 2010-05-18 13:43:53 UTC (rev 1686) +++ trunk/SpecTcl/CHANGELOG 2010-05-18 13:47:17 UTC (rev 1687) @@ -903,3 +903,6 @@ May 14, 2010- Remove memswap usage in CIntegrateCommand.cpp. - Remove all -lpub's from Makefile.am and includes. - Fix buffer overflow (BZ 404) in griprint.c +pre7: +May 18, 2010 - Fix error in GUI spectrum usage calculation. Was under + calcluating summary spectrum usage. \ No newline at end of file Modified: trunk/SpecTcl/Gui/newGui.tcl =================================================================== --- trunk/SpecTcl/Gui/newGui.tcl 2010-05-18 13:43:53 UTC (rev 1686) +++ trunk/SpecTcl/Gui/newGui.tcl 2010-05-18 13:47:17 UTC (rev 1687) @@ -893,11 +893,15 @@ set axes [lindex $spectrum 4] set dtype [lindex $spectrum 5] + set stype [lindex $spectrum 2] - set xChannels [lindex [lindex $axes 0] 2] if {[llength $axes] == 1} { set channels $xChannels + if {$stype == "s"} { + set paramcount [llength [lindex $spectrum 3]] + set channels [expr $paramcount * $xChannels] + } } else { set yChannels [lindex [lindex $axes 1] 2] set channels [expr $xChannels * $yChannels] Modified: trunk/SpecTcl/configure.in =================================================================== --- trunk/SpecTcl/configure.in 2010-05-18 13:43:53 UTC (rev 1686) +++ trunk/SpecTcl/configure.in 2010-05-18 13:47:17 UTC (rev 1687) @@ -4,7 +4,7 @@ AC_CONFIG_AUX_DIR(config) AM_CONFIG_HEADER(config.h) AC_CANONICAL_HOST -AM_INIT_AUTOMAKE(SpecTcl, 3.3pre6) +AM_INIT_AUTOMAKE(SpecTcl, 3.3pre7) AC_EXEEXT This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <ro...@us...> - 2010-06-02 14:21:03
|
Revision: 1692 http://nsclspectcl.svn.sourceforge.net/nsclspectcl/?rev=1692&view=rev Author: ron-fox Date: 2010-06-02 14:20:56 +0000 (Wed, 02 Jun 2010) Log Message: ----------- - Fix treegui problems: * Gate dependencies not calculated right if only one gate. * mclistbox now clean for tcl 8.5[1]+ Done Modified Paths: -------------- trunk/SpecTcl/CHANGELOG trunk/SpecTcl/TreeParam/SpectrumGenerator.tcl trunk/SpecTcl/TreeParam/mclistbox.tcl Modified: trunk/SpecTcl/CHANGELOG =================================================================== --- trunk/SpecTcl/CHANGELOG 2010-05-27 09:55:07 UTC (rev 1691) +++ trunk/SpecTcl/CHANGELOG 2010-06-02 14:20:56 UTC (rev 1692) @@ -905,4 +905,7 @@ - Fix buffer overflow (BZ 404) in griprint.c pre7: May 18, 2010 - Fix error in GUI spectrum usage calculation. Was under - calcluating summary spectrum usage. \ No newline at end of file + calcluating summary spectrum usage. + - Fix treegui problems: + * Gate dependencies not calculated right if only one gate. + * mclistbox now clean for tcl 8.5 \ No newline at end of file Modified: trunk/SpecTcl/TreeParam/SpectrumGenerator.tcl =================================================================== --- trunk/SpecTcl/TreeParam/SpectrumGenerator.tcl 2010-05-27 09:55:07 UTC (rev 1691) +++ trunk/SpecTcl/TreeParam/SpectrumGenerator.tcl 2010-06-02 14:20:56 UTC (rev 1692) @@ -596,7 +596,6 @@ if {[lsearch $SpectrumList $Name] == -1} { spectrum $Name $spectrumType $ParameterList $ResolutionList $spectrumDatatype - puts "Spectrum $Name created" } else { # if {[string match [tk_messageBox -icon warning -message "The spectrum $Name already exists. Do you want to overwrite it?" \ -title Warning -type yesno -parent .gui] yes]} { @@ -606,7 +605,7 @@ if {![string equal $gate -TRUE-]} { apply $gate $Name } - puts "Spectrum $Name replaced" + # } } } @@ -1378,6 +1377,7 @@ } } } + return false } } Modified: trunk/SpecTcl/TreeParam/mclistbox.tcl =================================================================== --- trunk/SpecTcl/TreeParam/mclistbox.tcl 2010-05-27 09:55:07 UTC (rev 1691) +++ trunk/SpecTcl/TreeParam/mclistbox.tcl 2010-06-02 14:20:56 UTC (rev 1692) @@ -110,6 +110,7 @@ -selectforeground {selectForeground Background} \ -selectmode {selectMode SelectMode} \ -setgrid {setGrid SetGrid} \ + -state {state State} \ -takefocus {takeFocus TakeFocus} \ -width {width Width} \ -xscrollcommand {xScrollCommand ScrollCommand} \ @@ -1098,6 +1099,7 @@ proc ::mclistbox::WidgetProc {w command args} { variable widgetOptions + upvar ::mclistbox::${w}::widgets widgets upvar ::mclistbox::${w}::options options upvar ::mclistbox::${w}::misc misc @@ -1309,6 +1311,7 @@ if {[llength $args] != 1} { error "wrong # args: should be $w cget option" } + set opt [::mclistbox::Canonize $w option [lindex $args 0]] set result $options($opt) @@ -1775,6 +1778,7 @@ variable columnCommands variable labelCommands + switch $object { command { if {[lsearch -exact $widgetCommands $opt] >= 0} { @@ -1831,6 +1835,7 @@ } set list [array names widgetOptions] set matches [array names widgetOptions ${opt}*] + } {column option} { @@ -2454,6 +2459,7 @@ upvar ::mclistbox::${w}::misc misc upvar ::mclistbox::${w}::columnID columnID + # if the widget doesn't allow resizable cursors, there's # nothing here to do... if {!$options(-resizablecolumns)} { This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <ro...@us...> - 2010-06-03 12:36:15
|
Revision: 1694 http://nsclspectcl.svn.sourceforge.net/nsclspectcl/?rev=1694&view=rev Author: ron-fox Date: 2010-06-03 12:36:07 +0000 (Thu, 03 Jun 2010) Log Message: ----------- Improve histogramming performance via parameter scoreboarding. Modified Paths: -------------- trunk/SpecTcl/CHANGELOG trunk/SpecTcl/Events/Event.cpp trunk/SpecTcl/Events/Event.h trunk/SpecTcl/Events/Makefile.am trunk/SpecTcl/Events/ValidValue.h trunk/SpecTcl/Sorter/CSpectrumByParameter.cpp Added Paths: ----------- trunk/SpecTcl/Events/DopeVector.cpp trunk/SpecTcl/Events/DopeVector.h Modified: trunk/SpecTcl/CHANGELOG =================================================================== --- trunk/SpecTcl/CHANGELOG 2010-06-02 14:24:03 UTC (rev 1693) +++ trunk/SpecTcl/CHANGELOG 2010-06-03 12:36:07 UTC (rev 1694) @@ -906,6 +906,11 @@ pre7: May 18, 2010 - Fix error in GUI spectrum usage calculation. Was under calcluating summary spectrum usage. +June 2, 2010 - Fix treegui problems: * Gate dependencies not calculated right if only one gate. - * mclistbox now clean for tcl 8.5 \ No newline at end of file + * mclistbox now clean for tcl 8.5 +June 3, 2010 + - WO 2529-005-CP-005 - Add an extra layer of indirection + (parameter scoreboarding) to improve the performance + of histogramming when spectra and parameters are sparse. Added: trunk/SpecTcl/Events/DopeVector.cpp =================================================================== --- trunk/SpecTcl/Events/DopeVector.cpp (rev 0) +++ trunk/SpecTcl/Events/DopeVector.cpp 2010-06-03 12:36:07 UTC (rev 1694) @@ -0,0 +1,121 @@ +/* + This software is Copyright by the Board of Trustees of Michigan + State University (c) Copyright 2008 + + You may use this software under the terms of the GNU public license + (GPL). The terms of this license are described at: + + http://www.gnu.org/licenses/gpl.txt + + Author: + Ron Fox + NSCL + Michigan State University + East Lansing, MI 48824-1321 +*/ +#include <config.h> +#include "DopeVector.h" +#include <RangeError.h> + +///////////////////////////////////////////////////////////////////////////// +// +// Implementation of canonicals: + +/*! + Construction.. we just need to start the dope vector out with no elements: +*/ +DopeVector::DopeVector() +{ + reset(); +} +/*! + Copy construction, need to copy both the size and vector. + @param rhs - Dope vector we are creating a clone of +*/ +DopeVector::DopeVector(const DopeVector& rhs) : + m_dopeSize(rhs.m_dopeSize), + m_indices(rhs.m_indices) + +{ +} +/*! + Destruction .. no op +*/ +DopeVector::~DopeVector() +{ +} + +/*! + Assignment: + @param rhs reference to the the guy we are copying into this. + @return DopeVector& + @retval *this +*/ +DopeVector& +DopeVector::operator=(const DopeVector& rhs) +{ + if (this != &rhs) { + m_dopeSize = rhs.m_dopeSize; + m_indices = rhs.m_indices; + } + return *this; +} + +///////////////////////////////////////////////////////////////////////////// +// +// Implementation of object operations. + +/*! + Reset the dope vector to empty. In order to avoid continually resizeing + the vector, we just reset the m_dopeSize value: + +*/ +void +DopeVector::reset() +{ + m_dopeSize = 0; +} +/*! + Add a new element to the end of the dope vector. + @param index - new index to add. + @note if necessary the vector will be expanded to hold the new element. +*/ +void +DopeVector::append(unsigned int index) +{ + if (m_dopeSize < m_indices.size()) { + m_indices[m_dopeSize] = index; + } + else { + m_indices.push_back(index); + } + m_dopeSize++; + +} +/*! + Return the number of elements in the dope vector. + This is m_dopeSize rather than m_indices.size() + @return unsigned int + @retval m_dopeSize +*/ +unsigned int +DopeVector::size() const +{ + return m_dopeSize; +} +/*! + Indexing operator. + @param index -- which element to grab. + @return unsigned int& + @retval reference to the indexed element of the dope vector. + @throws CRangeError if the indwex is out of range +*/ +unsigned int& +DopeVector::operator[](int index) +{ + if ((index < 0) || (index >= m_dopeSize)) { + throw CRangeError(0, m_dopeSize-1, index, + "Indexing in a Dope Vector"); + } + return m_indices[index]; +} Added: trunk/SpecTcl/Events/DopeVector.h =================================================================== --- trunk/SpecTcl/Events/DopeVector.h (rev 0) +++ trunk/SpecTcl/Events/DopeVector.h 2010-06-03 12:36:07 UTC (rev 1694) @@ -0,0 +1,68 @@ +/* + This software is Copyright by the Board of Trustees of Michigan + State University (c) Copyright 2008 + + You may use this software under the terms of the GNU public license + (GPL). The terms of this license are described at: + + http://www.gnu.org/licenses/gpl.txt + + Author: + Ron Fox + NSCL + Michigan State University + East Lansing, MI 48824-1321 +*/ + + +#ifndef __DOPEVECTOR_H +#define __DOPEVECTOR_H +#ifndef __STL_VECTOR +#include <vector> +#ifndef __STL_VECTOR +#define __STL_VECTOR +#endif +#endif + + + +/*! + This class encapsulates a dope vector. + Dope vectors are used in SpecTcl to keep track of the set of parameters + that are present in an event. Dope vectors are typically associated + with an event. +*/ +class DopeVector { + // local data: +private: + unsigned int m_dopeSize; + std::vector<unsigned int> m_indices; + + // Canonicals +public: + DopeVector(); + DopeVector(const DopeVector& rhs); + virtual ~DopeVector(); + DopeVector& operator=(const DopeVector& rhs); + + + int operator==(const DopeVector& rhs) const { + return (m_dopeSize == rhs.m_dopeSize) && + (m_indices == rhs.m_indices); + } + int operator!=(const DopeVector& rhs) const { + return !(*this == rhs); + } + + + + // Operations. +public: + void reset(); // Clear the dope vector to zero length. + void append(unsigned int index); // Append element. + unsigned int size() const; // How many entries in the vector: + unsigned int& operator[](int index); // Get an element. + +}; + +#endif Modified: trunk/SpecTcl/Events/Event.cpp =================================================================== --- trunk/SpecTcl/Events/Event.cpp 2010-06-02 14:24:03 UTC (rev 1693) +++ trunk/SpecTcl/Events/Event.cpp 2010-06-03 12:36:07 UTC (rev 1694) @@ -63,7 +63,7 @@ // CEvent::CEvent() : m_rvParameters(), - m_nSize(m_rvParameters.size()), + m_nSize(0), m_nSerial(0) {} @@ -79,7 +79,9 @@ // vector(size, value) seems to recurse and // exhaust memory. CEvent::CEvent(UInt_t nInitialSize) - : m_rvParameters() + : m_rvParameters(), + m_nSize(0), + m_nSerial(0) { Resize(nInitialSize); m_nSize = m_rvParameters.size(); @@ -213,10 +215,10 @@ { // Expands the size of an array by knExpandSize - CParameterValue undefined(&m_nSerial); // Enlarge pointing to common serial no. for(UInt_t i = 0; i < knExpandSize; i++) { - m_rvParameters.push_back(undefined); + int index = m_nSize + i; + m_rvParameters.push_back(CParameterValue(m_dopeVector, index, &m_nSerial)); } m_nSize = m_rvParameters.size(); } Modified: trunk/SpecTcl/Events/Event.h =================================================================== --- trunk/SpecTcl/Events/Event.h 2010-06-02 14:24:03 UTC (rev 1693) +++ trunk/SpecTcl/Events/Event.h 2010-06-03 12:36:07 UTC (rev 1694) @@ -48,12 +48,13 @@ #endif typedef DFloat_t ParamType; -typedef STD(vector)<CValidValue<ParamType> > CParameterVector; -typedef CValidValue<ParamType> CParameterValue; -typedef CParameterVector::iterator CEventIterator; +typedef STD(vector)<DopedValidValue<ParamType> > CParameterVector; +typedef DopedValidValue<ParamType> CParameterValue; +typedef CParameterVector::iterator CEventIterator; class CEvent { private: + DopeVector m_dopeVector; CParameterVector m_rvParameters; // The data parameters. Int_t m_nSize; // Current vector size (optimization). ULong_t m_nSerial; // Serial number for bulk validity. @@ -90,8 +91,13 @@ } void clear() { m_nSerial++; + m_dopeVector.reset(); } + DopeVector& getDopeVector() { + return m_dopeVector; + } + // Utility protected functions: protected: void DoAssign(const CEvent& anEvent); Modified: trunk/SpecTcl/Events/Makefile.am =================================================================== --- trunk/SpecTcl/Events/Makefile.am 2010-06-02 14:24:03 UTC (rev 1693) +++ trunk/SpecTcl/Events/Makefile.am 2010-06-03 12:36:07 UTC (rev 1694) @@ -14,12 +14,12 @@ libAnalysis_la_SOURCES = Analyzer.cpp BufferDecoder.cpp BufferTranslator.cpp \ Event.cpp EventFormatError.cpp EventList.cpp NSCLBufferDecoder.cpp \ RunControl.cpp TCLRunFileHandler.cpp TKRunControl.cpp EventSink.cpp \ - EventSinkPipeline.cpp NSCLJumboBufferDecoder.cpp + EventSinkPipeline.cpp NSCLJumboBufferDecoder.cpp DopeVector.cpp include_HEADERS = Analyzer.h BufferDecoder.h BufferTranslator.h Event.h \ EventFormatError.h EventList.h EventSink.h EventUnpacker.h \ NSCLBufferDecoder.h RunControl.h TCLRunFileHandler.h TKRunControl.h \ TranslatorPointer.h ValidValue.h EventSinkPipeline.h \ - NSCLJumboBufferDecoder.h + NSCLJumboBufferDecoder.h DopeVector.h EXTRA_DIST = ClassBreakdown.WC ClassBreakdown.omt Modified: trunk/SpecTcl/Events/ValidValue.h =================================================================== --- trunk/SpecTcl/Events/ValidValue.h 2010-06-02 14:24:03 UTC (rev 1693) +++ trunk/SpecTcl/Events/ValidValue.h 2010-06-03 12:36:07 UTC (rev 1694) @@ -129,5 +129,74 @@ return m_Value; } }; +/*! + Class that implements a valid value with an associated index and dope + vector. This allows one to maintain a dope vector of + the valid values in a vector that have been assigned a value. +*/ +#ifndef __DOPEVECTOR_H +#include "DopeVector.h" +#endif +template <class T> +class DopedValidValue : public CValidValue<T> +{ + // data: +private: + DopeVector& m_dope; // Dope vector to fill in. + unsigned int m_index; // My index to set in the dope vector. + + // Canonicals +public: + DopedValidValue(DopeVector& dope, unsigned int index) : + CValidValue<T>(), + m_dope(dope), + m_index(index) {} + DopedValidValue(DopeVector& dope, unsigned int index, + T& initValue, Bool_t isValid = kfFALSE) : + CValidValue<T>(initValue, isValid), + m_dope(dope), + m_index(index) {} + + DopedValidValue(DopeVector& dope, unsigned int index, + ULong_t* sharedSerial) : + CValidValue<T>(sharedSerial), + m_dope(dope), + m_index(index) {} + + DopedValidValue(const DopedValidValue& rhs) : + CValidValue<T>(rhs), + m_dope(rhs.m_dope), + m_index(rhs.m_index) {} + + DopedValidValue& operator=(const DopedValidValue& rhs) { + m_dope = rhs.m_dope; + m_index = rhs.m_index; + return *this; + } + + + int operator==(const DopedValidValue& rhs) const { + return (m_dope == rhs.m_dope) && + (m_index == rhs.m_index) && + CValidValue<T>::operator==(rhs); + } + int operator!=(const DopedValidValue& rhs) const { + return !(*this == rhs); + } + +public: + DopedValidValue<T>& operator=(const T& rhs) { + // add to dope vector if not yet set: + + if (!CValidValue<T>::isValid()) { + m_dope.append(m_index); + } + return reinterpret_cast<DopedValidValue&>(CValidValue<T>::operator=(rhs)); + } + + +}; + + #endif Modified: trunk/SpecTcl/Sorter/CSpectrumByParameter.cpp =================================================================== --- trunk/SpecTcl/Sorter/CSpectrumByParameter.cpp 2010-06-02 14:24:03 UTC (rev 1693) +++ trunk/SpecTcl/Sorter/CSpectrumByParameter.cpp 2010-06-03 12:36:07 UTC (rev 1694) @@ -115,12 +115,22 @@ // We have to do all lists for which a parameter is present.. until // either we run out of parameters or run out of spectrumlists. - for (UInt_t i = 0; (i < event.size()) && (i < m_spectraByParameter.size()); i++) { - if (e[i].isValid() && m_spectraByParameter[i]) { - CSpectrum** aList = m_spectraByParameter[i]->getList(); - incrementList(event, aList); + + DopeVector& dope = e.getDopeVector(); + unsigned int numParameters = dope.size(); + + for (int i =0; i < numParameters; i++) { + unsigned int parameterNumber = dope[i]; + if (parameterNumber < m_spectraByParameter.size()) { + SpectrumList *sList = m_spectraByParameter[parameterNumber]; + if (sList) { + CSpectrum** aList = sList->getList(); + incrementList(event, aList); + } } } + + } /*! This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <ro...@us...> - 2010-07-13 18:18:15
|
Revision: 1704 http://nsclspectcl.svn.sourceforge.net/nsclspectcl/?rev=1704&view=rev Author: ron-fox Date: 2010-07-13 18:18:09 +0000 (Tue, 13 Jul 2010) Log Message: ----------- Fix some memoery double deallocs found by Coupland. Modified Paths: -------------- trunk/SpecTcl/CHANGELOG trunk/SpecTcl/Display/Makefile.am trunk/SpecTcl/Display/XMCallback.cc trunk/SpecTcl/Display/XMWidget.cc trunk/SpecTcl/Display/grafinput.cc trunk/SpecTcl/Display/guintegrate.cc Modified: trunk/SpecTcl/CHANGELOG =================================================================== --- trunk/SpecTcl/CHANGELOG 2010-07-12 12:50:33 UTC (rev 1703) +++ trunk/SpecTcl/CHANGELOG 2010-07-13 18:18:09 UTC (rev 1704) @@ -914,3 +914,5 @@ - WO 2529-005-CP-005 - Add an extra layer of indirection (parameter scoreboarding) to improve the performance of histogramming when spectra and parameters are sparse. +pre8: +July 13, 2010 - Fix some memory double deallocations found by Coupland. \ No newline at end of file Modified: trunk/SpecTcl/Display/Makefile.am =================================================================== --- trunk/SpecTcl/Display/Makefile.am 2010-07-12 12:50:33 UTC (rev 1703) +++ trunk/SpecTcl/Display/Makefile.am 2010-07-13 18:18:09 UTC (rev 1704) @@ -13,7 +13,7 @@ Xamine_LDFLAGS= -g Xamine_LDADD= $(PARSEOBJECTS) @XLIBSW@ @MOTIF_LIBSW@ @XTLIBSW@ @GDLDSW@ \ $(TCL_LDFLAGS) \ - -lXm -lXt -lX11 -lm -lfl $(X11EXTRA_LDFLAGS) + -lXm -lXt -lX11 -lm -lfl $(X11EXTRA_LDFLAGS) # Xamine_LDADD = $(PARSEOBJECTS) -lXm -lXt -lX11 -lm -lfl $(X11EXTRA_LDFLAGS) # @LD_EXTRA_FLAGS@ Modified: trunk/SpecTcl/Display/XMCallback.cc =================================================================== --- trunk/SpecTcl/Display/XMCallback.cc 2010-07-12 12:50:33 UTC (rev 1703) +++ trunk/SpecTcl/Display/XMCallback.cc 2010-07-13 18:18:09 UTC (rev 1704) @@ -402,8 +402,9 @@ ** Then delete the callback data structure since it was the source of ** memory leaks else where. */ - delete [] cbd->reason; - delete cbd; /* Prevent memory leaks. */ + // Fuzzy thinking will eventually get deleted by XMWidget's destructor. + // delete [] cbd->reason; + // delete cbd; /* Prevent memory leaks. */ } Modified: trunk/SpecTcl/Display/XMWidget.cc =================================================================== --- trunk/SpecTcl/Display/XMWidget.cc 2010-07-12 12:50:33 UTC (rev 1703) +++ trunk/SpecTcl/Display/XMWidget.cc 2010-07-13 18:18:09 UTC (rev 1704) @@ -135,6 +135,7 @@ } // std::list can clean up after itself now. + m_callbacks.clear(); } Widget @@ -212,6 +213,8 @@ XMRemoveCallback(cbd); // This deletes cbd and the string m_callbacks.erase(i); // Get rid of the list element. + delete []cbd->reason; + delete cbd; // Get rid of the dynamic storage. return; } Modified: trunk/SpecTcl/Display/grafinput.cc =================================================================== --- trunk/SpecTcl/Display/grafinput.cc 2010-07-12 12:50:33 UTC (rev 1703) +++ trunk/SpecTcl/Display/grafinput.cc 2010-07-13 18:18:09 UTC (rev 1704) @@ -654,7 +654,10 @@ ClearState(); ClearDialog(); ClearStandardCallbacks(); - UnManage(); + XtCallCallbacks(getid(), XmNpopdownCallback, call_d); + + // UnManage(); + } /* @@ -683,10 +686,7 @@ void GraphicalInput::OkCallback(XtPointer call_d) { if(DoAccept()) { - ClearDialog(); - ClearState(); - ClearStandardCallbacks(); - UnManage(); + CancelCallback(call_d); } } @@ -755,7 +755,7 @@ pInput->RemoveCallback(XmNpopdownCallback, Xamine_DestroyGraphicalInput, pClientData); - pInput->CancelCallback(NULL); // Doing this here prevents recursion. + // pInput->CancelCallback(NULL); // Doing this here prevents recursion. NullPointer(pWidget, pClientData, pEvent); Modified: trunk/SpecTcl/Display/guintegrate.cc =================================================================== --- trunk/SpecTcl/Display/guintegrate.cc 2010-07-12 12:50:33 UTC (rev 1703) +++ trunk/SpecTcl/Display/guintegrate.cc 2010-07-13 18:18:09 UTC (rev 1704) @@ -91,6 +91,7 @@ ~IntegrationDisplay() { XMRemoveCallback(cd); delete text; + text = 0; } /* Manipulation: */ This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <ro...@us...> - 2010-08-19 11:34:44
|
Revision: 1712 http://nsclspectcl.svn.sourceforge.net/nsclspectcl/?rev=1712&view=rev Author: ron-fox Date: 2010-08-19 11:34:35 +0000 (Thu, 19 Aug 2010) Log Message: ----------- 1. -> pre8 2. opportunistic header reduction. 3. Fix error in user multibutton input that makes it not popdown Modified Paths: -------------- trunk/SpecTcl/Display/buttonreq.cc trunk/SpecTcl/Display/grafinput.cc trunk/SpecTcl/Display/grobjinput.cc trunk/SpecTcl/Display/grobjinput.h trunk/SpecTcl/Display/ptlist.cc trunk/SpecTcl/Display/ptlist.h trunk/SpecTcl/Display/sumregion.cc trunk/SpecTcl/configure.in Modified: trunk/SpecTcl/Display/buttonreq.cc =================================================================== --- trunk/SpecTcl/Display/buttonreq.cc 2010-08-19 10:57:15 UTC (rev 1711) +++ trunk/SpecTcl/Display/buttonreq.cc 2010-08-19 11:34:35 UTC (rev 1712) @@ -1,280 +1,20 @@ /* - GNU GENERAL PUBLIC LICENSE - Version 2, June 1991 + This software is Copyright by the Board of Trustees of Michigan + State University (c) Copyright 2008 - Copyright (C) 1989, 1991 Free Software Foundation, Inc. - 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA - Everyone is permitted to copy and distribute verbatim copies - of this license document, but changing it is not allowed. + You may use this software under the terms of the GNU public license + (GPL). The terms of this license are described at: - Preamble + http://www.gnu.org/licenses/gpl.txt - The licenses for most software are designed to take away your -freedom to share and change it. By contrast, the GNU General Public -License is intended to guarantee your freedom to share and change free -software--to make sure the software is free for all its users. This -General Public License applies to most of the Free Software -Foundation's software and to any other program whose authors commit to -using it. (Some other Free Software Foundation software is covered by -the GNU Library General Public License instead.) You can apply it to -your programs, too. + Author: + Ron Fox + NSCL + Michigan State University + East Lansing, MI 48824-1321 +*/ - When we speak of free software, we are referring to freedom, not -price. Our General Public Licenses are designed to make sure that you -have the freedom to distribute copies of free software (and charge for -this service if you wish), that you receive source code or can get it -if you want it, that you can change the software or use pieces of it -in new free programs; and that you know you can do these things. - To protect your rights, we need to make restrictions that forbid -anyone to deny you these rights or to ask you to surrender the rights. -These restrictions translate to certain responsibilities for you if you -distribute copies of the software, or if you modify it. - - For example, if you distribute copies of such a program, whether -gratis or for a fee, you must give the recipients all the rights that -you have. You must make sure that they, too, receive or can get the -source code. And you must show them these terms so they know their -rights. - - We protect your rights with two steps: (1) copyright the software, and -(2) offer you this license which gives you legal permission to copy, -distribute and/or modify the software. - - Also, for each author's protection and ours, we want to make certain -that everyone understands that there is no warranty for this free -software. If the software is modified by someone else and passed on, we -want its recipients to know that what they have is not the original, so -that any problems introduced by others will not reflect on the original -authors' reputations. - - Finally, any free program is threatened constantly by software -patents. We wish to avoid the danger that redistributors of a free -program will individually obtain patent licenses, in effect making the -program proprietary. To prevent this, we have made it clear that any -patent must be licensed for everyone's free use or not licensed at all. - - The precise terms and conditions for copying, distribution and -modification follow. - - GNU GENERAL PUBLIC LICENSE - TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION - - 0. This License applies to any program or other work which contains -a notice placed by the copyright holder saying it may be distributed -under the terms of this General Public License. The "Program", below, -refers to any such program or work, and a "work based on the Program" -means either the Program or any derivative work under copyright law: -that is to say, a work containing the Program or a portion of it, -either verbatim or with modifications and/or translated into another -language. (Hereinafter, translation is included without limitation in -the term "modification".) Each licensee is addressed as "you". - -Activities other than copying, distribution and modification are not -covered by this License; they are outside its scope. The act of -running the Program is not restricted, and the output from the Program -is covered only if its contents constitute a work based on the -Program (independent of having been made by running the Program). -Whether that is true depends on what the Program does. - - 1. You may copy and distribute verbatim copies of the Program's -source code as you receive it, in any medium, provided that you -conspicuously and appropriately publish on each copy an appropriate -copyright notice and disclaimer of warranty; keep intact all the -notices that refer to this License and to the absence of any warranty; -and give any other recipients of the Program a copy of this License -along with the Program. - -You may charge a fee for the physical act of transferring a copy, and -you may at your option offer warranty protection in exchange for a fee. - - 2. You may modify your copy or copies of the Program or any portion -of it, thus forming a work based on the Program, and copy and -distribute such modifications or work under the terms of Section 1 -above, provided that you also meet all of these conditions: - - a) You must cause the modified files to carry prominent notices - stating that you changed the files and the date of any change. - - b) You must cause any work that you distribute or publish, that in - whole or in part contains or is derived from the Program or any - part thereof, to be licensed as a whole at no charge to all third - parties under the terms of this License. - - c) If the modified program normally reads commands interactively - when run, you must cause it, when started running for such - interactive use in the most ordinary way, to print or display an - announcement including an appropriate copyright notice and a - notice that there is no warranty (or else, saying that you provide - a warranty) and that users may redistribute the program under - these conditions, and telling the user how to view a copy of this - License. (Exception: if the Program itself is interactive but - does not normally print such an announcement, your work based on - the Program is not required to print an announcement.) - -These requirements apply to the modified work as a whole. If -identifiable sections of that work are not derived from the Program, -and can be reasonably considered independent and separate works in -themselves, then this License, and its terms, do not apply to those -sections when you distribute them as separate works. But when you -distribute the same sections as part of a whole which is a work based -on the Program, the distribution of the whole must be on the terms of -this License, whose permissions for other licensees extend to the -entire whole, and thus to each and every part regardless of who wrote it. - -Thus, it is not the intent of this section to claim rights or contest -your rights to work written entirely by you; rather, the intent is to -exercise the right to control the distribution of derivative or -collective works based on the Program. - -In addition, mere aggregation of another work not based on the Program -with the Program (or with a work based on the Program) on a volume of -a storage or distribution medium does not bring the other work under -the scope of this License. - - 3. You may copy and distribute the Program (or a work based on it, -under Section 2) in object code or executable form under the terms of -Sections 1 and 2 above provided that you also do one of the following: - - a) Accompany it with the complete corresponding machine-readable - source code, which must be distributed under the terms of Sections - 1 and 2 above on a medium customarily used for software interchange; or, - - b) Accompany it with a written offer, valid for at least three - years, to give any third party, for a charge no more than your - cost of physically performing source distribution, a complete - machine-readable copy of the corresponding source code, to be - distributed under the terms of Sections 1 and 2 above on a medium - customarily used for software interchange; or, - - c) Accompany it with the information you received as to the offer - to distribute corresponding source code. (This alternative is - allowed only for noncommercial distribution and only if you - received the program in object code or executable form with such - an offer, in accord with Subsection b above.) - -The source code for a work means the preferred form of the work for -making modifications to it. For an executable work, complete source -code means all the source code for all modules it contains, plus any -associated interface definition files, plus the scripts used to -control compilation and installation of the executable. However, as a -special exception, the source code distributed need not include -anything that is normally distributed (in either source or binary -form) with the major components (compiler, kernel, and so on) of the -operating system on which the executable runs, unless that component -itself accompanies the executable. - -If distribution of executable or object code is made by offering -access to copy from a designated place, then offering equivalent -access to copy the source code from the same place counts as -distribution of the source code, even though third parties are not -compelled to copy the source along with the object code. - - 4. You may not copy, modify, sublicense, or distribute the Program -except as expressly provided under this License. Any attempt -otherwise to copy, modify, sublicense or distribute the Program is -void, and will automatically terminate your rights under this License. -However, parties who have received copies, or rights, from you under -this License will not have their licenses terminated so long as such -parties remain in full compliance. - - 5. You are not required to accept this License, since you have not -signed it. However, nothing else grants you permission to modify or -distribute the Program or its derivative works. These actions are -prohibited by law if you do not accept this License. Therefore, by -modifying or distributing the Program (or any work based on the -Program), you indicate your acceptance of this License to do so, and -all its terms and conditions for copying, distributing or modifying -the Program or works based on it. - - 6. Each time you redistribute the Program (or any work based on the -Program), the recipient automatically receives a license from the -original licensor to copy, distribute or modify the Program subject to -these terms and conditions. You may not impose any further -restrictions on the recipients' exercise of the rights granted herein. -You are not responsible for enforcing compliance by third parties to -this License. - - 7. If, as a consequence of a court judgment or allegation of patent -infringement or for any other reason (not limited to patent issues), -conditions are imposed on you (whether by court order, agreement or -otherwise) that contradict the conditions of this License, they do not -excuse you from the conditions of this License. If you cannot -distribute so as to satisfy simultaneously your obligations under this -License and any other pertinent obligations, then as a consequence you -may not distribute the Program at all. For example, if a patent -license would not permit royalty-free redistribution of the Program by -all those who receive copies directly or indirectly through you, then -the only way you could satisfy both it and this License would be to -refrain entirely from distribution of the Program. - -If any portion of this section is held invalid or unenforceable under -any particular circumstance, the balance of the section is intended to -apply and the section as a whole is intended to apply in other -circumstances. - -It is not the purpose of this section to induce you to infringe any -patents or other property right claims or to contest validity of any -such claims; this section has the sole purpose of protecting the -integrity of the free software distribution system, which is -implemented by public license practices. Many people have made -generous contributions to the wide range of software distributed -through that system in reliance on consistent application of that -system; it is up to the author/donor to decide if he or she is willing -to distribute software through any other system and a licensee cannot -impose that choice. - -This section is intended to make thoroughly clear what is believed to -be a consequence of the rest of this License. - - 8. If the distribution and/or use of the Program is restricted in -certain countries either by patents or by copyrighted interfaces, the -original copyright holder who places the Program under this License -may add an explicit geographical distribution limitation excluding -those countries, so that distribution is permitted only in or among -countries not thus excluded. In such case, this License incorporates -the limitation as if written in the body of this License. - - 9. The Free Software Foundation may publish revised and/or new versions of the General Public License from time to time. Such new versions will be similar in spirit to the present version, but may differ in detail to address new problems or concerns. - -Each version is given a distinguishing version number. If the Program -specifies a version number of this License which applies to it and "any -later version", you have the option of following the terms and conditions -either of that version or of any later version published by the Free Software -Foundation. If the Program does not specify a version number of this License, - you may choose any version ever published by the Free Software Foundation. - - 10. If you wish to incorporate parts of the Program into other free -programs whose distribution conditions are different, write to the author to -ask for permission. For software which is copyrighted by the Free Software -Foundation, write to the Free Software Foundation; we sometimes make -exceptions for this. Our decision will be guided by the two goals of -preserving the free status of all derivatives of our free software and of -promoting the sharing and reuse of software generally. - - NO WARRANTY - - 11. BECAUSE THE PROGRAM IS LICENSED FREE OF CHARGE, THERE IS NO WARRANTY FOR -THE PROGRAM, TO THE EXTENT PERMITTED BY APPLICABLE LAW. EXCEPT WHEN -OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR OTHER PARTIES PROVIDE -THE PROGRAM "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED OR IMPLIED, -INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND -FITNESS FOR A PARTICULAR PURPOSE. THE ENTIRE RISK AS TO THE QUALITY AND -PERFORMANCE OF THE PROGRAM IS WITH YOU. SHOULD THE PROGRAM PROVE DEFECTIVE, -YOU ASSUME THE COST OF ALL NECESSARY SERVICING, REPAIR OR CORRECTION. - - 12. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING -WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY AND/OR -REDISTRIBUTE THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, -INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING -OUT OF THE USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED TO -LOSS OF DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR -THIRD PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER PROGRAMS), -EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH -DAMAGES. - - END OF TERMS AND CONDITIONS ' -*/ static const char* Copyright = "(C) Copyright Michigan State University 1994, All rights reserved"; /* ** Facility: Modified: trunk/SpecTcl/Display/grafinput.cc =================================================================== --- trunk/SpecTcl/Display/grafinput.cc 2010-08-19 10:57:15 UTC (rev 1711) +++ trunk/SpecTcl/Display/grafinput.cc 2010-08-19 11:34:35 UTC (rev 1712) @@ -1,308 +1,19 @@ /* - GNU GENERAL PUBLIC LICENSE - Version 2, June 1991 + This software is Copyright by the Board of Trustees of Michigan + State University (c) Copyright 2005. - Copyright (C) 1989, 1991 Free Software Foundation, Inc. - 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA - Everyone is permitted to copy and distribute verbatim copies - of this license document, but changing it is not allowed. + You may use this software under the terms of the GNU public license + (GPL). The terms of this license are described at: - Preamble + http://www.gnu.org/licenses/gpl.txt - The licenses for most software are designed to take away your -freedom to share and change it. By contrast, the GNU General Public -License is intended to guarantee your freedom to share and change free -software--to make sure the software is free for all its users. This -General Public License applies to most of the Free Software -Foundation's software and to any other program whose authors commit to -using it. (Some other Free Software Foundation software is covered by -the GNU Library General Public License instead.) You can apply it to -your programs, too. - - When we speak of free software, we are referring to freedom, not -price. Our General Public Licenses are designed to make sure that you -have the freedom to distribute copies of free software (and charge for -this service if you wish), that you receive source code or can get it -if you want it, that you can change the software or use pieces of it -in new free programs; and that you know you can do these things. - - To protect your rights, we need to make restrictions that forbid -anyone to deny you these rights or to ask you to surrender the rights. -These restrictions translate to certain responsibilities for you if you -distribute copies of the software, or if you modify it. - - For example, if you distribute copies of such a program, whether -gratis or for a fee, you must give the recipients all the rights that -you have. You must make sure that they, too, receive or can get the -source code. And you must show them these terms so they know their -rights. - - We protect your rights with two steps: (1) copyright the software, and -(2) offer you this license which gives you legal permission to copy, -distribute and/or modify the software. - - Also, for each author's protection and ours, we want to make certain -that everyone understands that there is no warranty for this free -software. If the software is modified by someone else and passed on, we -want its recipients to know that what they have is not the original, so -that any problems introduced by others will not reflect on the original -authors' reputations. - - Finally, any free program is threatened constantly by software -patents. We wish to avoid the danger that redistributors of a free -program will individually obtain patent licenses, in effect making the -program proprietary. To prevent this, we have made it clear that any -patent must be licensed for everyone's free use or not licensed at all. - - The precise terms and conditions for copying, distribution and -modification follow. - - GNU GENERAL PUBLIC LICENSE - TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION - - 0. This License applies to any program or other work which contains -a notice placed by the copyright holder saying it may be distributed -under the terms of this General Public License. The "Program", below, -refers to any such program or work, and a "work based on the Program" -means either the Program or any derivative work under copyright law: -that is to say, a work containing the Program or a portion of it, -either verbatim or with modifications and/or translated into another -language. (Hereinafter, translation is included without limitation in -the term "modification".) Each licensee is addressed as "you". - -Activities other than copying, distribution and modification are not -covered by this License; they are outside its scope. The act of -running the Program is not restricted, and the output from the Program -is covered only if its contents constitute a work based on the -Program (independent of having been made by running the Program). -Whether that is true depends on what the Program does. - - 1. You may copy and distribute verbatim copies of the Program's -source code as you receive it, in any medium, provided that you -conspicuously and appropriately publish on each copy an appropriate -copyright notice and disclaimer of warranty; keep intact all the -notices that refer to this License and to the absence of any warranty; -and give any other recipients of the Program a copy of this License -along with the Program. - -You may charge a fee for the physical act of transferring a copy, and -you may at your option offer warranty protection in exchange for a fee. - - 2. You may modify your copy or copies of the Program or any portion -of it, thus forming a work based on the Program, and copy and -distribute such modifications or work under the terms of Section 1 -above, provided that you also meet all of these conditions: - - a) You must cause the modified files to carry prominent notices - stating that you changed the files and the date of any change. - - b) You must cause any work that you distribute or publish, that in - whole or in part contains or is derived from the Program or any - part thereof, to be licensed as a whole at no charge to all third - parties under the terms of this License. - - c) If the modified program normally reads commands interactively - when run, you must cause it, when started running for such - interactive use in the most ordinary way, to print or display an - announcement including an appropriate copyright notice and a - notice that there is no warranty (or else, saying that you provide - a warranty) and that users may redistribute the program under - these conditions, and telling the user how to view a copy of this - License. (Exception: if the Program itself is interactive but - does not normally print such an announcement, your work based on - the Program is not required to print an announcement.) - -These requirements apply to the modified work as a whole. If -identifiable sections of that work are not derived from the Program, -and can be reasonably considered independent and separate works in -themselves, then this License, and its terms, do not apply to those -sections when you distribute them as separate works. But when you -distribute the same sections as part of a whole which is a work based -on the Program, the distribution of the whole must be on the terms of -this License, whose permissions for other licensees extend to the -entire whole, and thus to each and every part regardless of who wrote it. - -Thus, it is not the intent of this section to claim rights or contest -your rights to work written entirely by you; rather, the intent is to -exercise the right to control the distribution of derivative or -collective works based on the Program. - -In addition, mere aggregation of another work not based on the Program -with the Program (or with a work based on the Program) on a volume of -a storage or distribution medium does not bring the other work under -the scope of this License. - - 3. You may copy and distribute the Program (or a work based on it, -under Section 2) in object code or executable form under the terms of -Sections 1 and 2 above provided that you also do one of the following: - - a) Accompany it with the complete corresponding machine-readable - source code, which must be distributed under the terms of Sections - 1 and 2 above on a medium customarily used for software interchange; or, - - b) Accompany it with a written offer, valid for at least three - years, to give any third party, for a charge no more than your - cost of physically performing source distribution, a complete - machine-readable copy of the corresponding source code, to be - distributed under the terms of Sections 1 and 2 above on a medium - customarily used for software interchange; or, - - c) Accompany it with the information you received as to the offer - to distribute corresponding source code. (This alternative is - allowed only for noncommercial distribution and only if you - received the program in object code or executable form with such - an offer, in accord with Subsection b above.) - -The source code for a work means the preferred form of the work for -making modifications to it. For an executable work, complete source -code means all the source code for all modules it contains, plus any -associated interface definition files, plus the scripts used to -control compilation and installation of the executable. However, as a -special exception, the source code distributed need not include -anything that is normally distributed (in either source or binary -form) with the major components (compiler, kernel, and so on) of the -operating system on which the executable runs, unless that component -itself accompanies the executable. - -If distribution of executable or object code is made by offering -access to copy from a designated place, then offering equivalent -access to copy the source code from the same place counts as -distribution of the source code, even though third parties are not -compelled to copy the source along with the object code. - - 4. You may not copy, modify, sublicense, or distribute the Program -except as expressly provided under this License. Any attempt -otherwise to copy, modify, sublicense or distribute the Program is -void, and will automatically terminate your rights under this License. -However, parties who have received copies, or rights, from you under -this License will not have their licenses terminated so long as such -parties remain in full compliance. - - 5. You are not required to accept this License, since you have not -signed it. However, nothing else grants you permission to modify or -distribute the Program or its derivative works. These actions are -prohibited by law if you do not accept this License. Therefore, by -modifying or distributing the Program (or any work based on the -Program), you indicate your acceptance of this License to do so, and -all its terms and conditions for copying, distributing or modifying -the Program or works based on it. - - 6. Each time you redistribute the Program (or any work based on the -Program), the recipient automatically receives a license from the -original licensor to copy, distribute or modify the Program subject to -these terms and conditions. You may not impose any further -restrictions on the recipients' exercise of the rights granted herein. -You are not responsible for enforcing compliance by third parties to -this License. - - 7. If, as a consequence of a court judgment or allegation of patent -infringement or for any other reason (not limited to patent issues), -conditions are imposed on you (whether by court order, agreement or -otherwise) that contradict the conditions of this License, they do not -excuse you from the conditions of this License. If you cannot -distribute so as to satisfy simultaneously your obligations under this -License and any other pertinent obligations, then as a consequence you -may not distribute the Program at all. For example, if a patent -license would not permit royalty-free redistribution of the Program by -all those who receive copies directly or indirectly through you, then -the only way you could satisfy both it and this License would be to -refrain entirely from distribution of the Program. - -If any portion of this section is held invalid or unenforceable under -any particular circumstance, the balance of the section is intended to -apply and the section as a whole is intended to apply in other -circumstances. - -It is not the purpose of this section to induce you to infringe any -patents or other property right claims or to contest validity of any -such claims; this section has the sole purpose of protecting the -integrity of the free software distribution system, which is -implemented by public license practices. Many people have made -generous contributions to the wide range of software distributed -through that system in reliance on consistent application of that -system; it is up to the author/donor to decide if he or she is willing -to distribute software through any other system and a licensee cannot -impose that choice. - -This section is intended to make thoroughly clear what is believed to -be a consequence of the rest of this License. - - 8. If the distribution and/or use of the Program is restricted in -certain countries either by patents or by copyrighted interfaces, the -original copyright holder who places the Program under this License -may add an explicit geographical distribution limitation excluding -those countries, so that distribution is permitted only in or among -countries not thus excluded. In such case, this License incorporates -the limitation as if written in the body of this License. - - 9. The Free Software Foundation may publish revised and/or new versions of the General Public License from time to time. Such new versions will be similar in spirit to the present version, but may differ in detail to address new problems or concerns. - -Each version is given a distinguishing version number. If the Program -specifies a version number of this License which applies to it and "any -later version", you have the option of following the terms and conditions -either of that version or of any later version published by the Free Software -Foundation. If the Program does not specify a version number of this License, - you may choose any version ever published by the Free Software Foundation. - - 10. If you wish to incorporate parts of the Program into other free -programs whose distribution conditions are different, write to the author to -ask for permission. For software which is copyrighted by the Free Software -Foundation, write to the Free Software Foundation; we sometimes make -exceptions for this. Our decision will be guided by the two goals of -preserving the free status of all derivatives of our free software and of -promoting the sharing and reuse of software generally. - - NO WARRANTY - - 11. BECAUSE THE PROGRAM IS LICENSED FREE OF CHARGE, THERE IS NO WARRANTY FOR -THE PROGRAM, TO THE EXTENT PERMITTED BY APPLICABLE LAW. EXCEPT WHEN -OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR OTHER PARTIES PROVIDE -THE PROGRAM "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED OR IMPLIED, -INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND -FITNESS FOR A PARTICULAR PURPOSE. THE ENTIRE RISK AS TO THE QUALITY AND -PERFORMANCE OF THE PROGRAM IS WITH YOU. SHOULD THE PROGRAM PROVE DEFECTIVE, -YOU ASSUME THE COST OF ALL NECESSARY SERVICING, REPAIR OR CORRECTION. - - 12. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING -WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY AND/OR -REDISTRIBUTE THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, -INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING -OUT OF THE USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED TO -LOSS OF DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR -THIRD PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER PROGRAMS), -EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH -DAMAGES. - - END OF TERMS AND CONDITIONS ' + Author: + Ron Fox + NSCL + Michigan State University + East Lansing, MI 48824-1321 */ -/* Change log: - $Log$ - Revision 5.3 2005/09/22 12:41:47 ron-fox - 2dl spectra in Xamine and other misc stuff.. including making - void functions return values in all paths, including exception - exits since g++3.x and higher likes that. - - Revision 5.2 2005/06/03 15:18:56 ron-fox - Part of breaking off /merging branch to start 3.1 development - - Revision 5.1.2.1 2004/12/21 17:51:14 ron-fox - Port to gcc 3.x compilers. - - Revision 5.1 2004/11/29 16:55:35 ron-fox - Begin port to 3.x compilers calling this 3.0 - - Revision 4.4.4.1 2004/10/20 15:47:42 ron-fox - Misc changes resulting from update merges and pedantic finds. - - Revision 4.4 2003/08/28 18:04:37 ron-fox - Fix Bug68: point acceptors can provide invalid channel coordinates. Fixed by changing clipping so that it clips to the edges of the displayed part of the spectrum. Clips used return -1 as an indicator that the clip had happened. This is no good because with mapped spectra, -1 is valid, so just clip to the edges. - - Revision 4.3 2003/04/04 17:44:21 ron-fox - Catch dialog destruction for cached widgets so that the destroyed dialog is re-created when it's needed. Prior behavior would usually crash Xamine because deleted widgets would be referenced. - -*/ - static const char* Copyright = "(C) Copyright Michigan State University 1994, All rights reserved"; /* ** Facility: @@ -656,8 +367,8 @@ ClearStandardCallbacks(); XtCallCallbacks(getid(), XmNpopdownCallback, call_d); - // UnManage(); - + UnManage(); + } /* Modified: trunk/SpecTcl/Display/grobjinput.cc =================================================================== --- trunk/SpecTcl/Display/grobjinput.cc 2010-08-19 10:57:15 UTC (rev 1711) +++ trunk/SpecTcl/Display/grobjinput.cc 2010-08-19 11:34:35 UTC (rev 1712) @@ -1,280 +1,19 @@ /* - GNU GENERAL PUBLIC LICENSE - Version 2, June 1991 + This software is Copyright by the Board of Trustees of Michigan + State University (c) Copyright 2008 - Copyright (C) 1989, 1991 Free Software Foundation, Inc. - 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA - Everyone is permitted to copy and distribute verbatim copies - of this license document, but changing it is not allowed. + You may use this software under the terms of the GNU public license + (GPL). The terms of this license are described at: - Preamble + http://www.gnu.org/licenses/gpl.txt - The licenses for most software are designed to take away your -freedom to share and change it. By contrast, the GNU General Public -License is intended to guarantee your freedom to share and change free -software--to make sure the software is free for all its users. This -General Public License applies to most of the Free Software -Foundation's software and to any other program whose authors commit to -using it. (Some other Free Software Foundation software is covered by -the GNU Library General Public License instead.) You can apply it to -your programs, too. - - When we speak of free software, we are referring to freedom, not -price. Our General Public Licenses are designed to make sure that you -have the freedom to distribute copies of free software (and charge for -this service if you wish), that you receive source code or can get it -if you want it, that you can change the software or use pieces of it -in new free programs; and that you know you can do these things. - - To protect your rights, we need to make restrictions that forbid -anyone to deny you these rights or to ask you to surrender the rights. -These restrictions translate to certain responsibilities for you if you -distribute copies of the software, or if you modify it. - - For example, if you distribute copies of such a program, whether -gratis or for a fee, you must give the recipients all the rights that -you have. You must make sure that they, too, receive or can get the -source code. And you must show them these terms so they know their -rights. - - We protect your rights with two steps: (1) copyright the software, and -(2) offer you this license which gives you legal permission to copy, -distribute and/or modify the software. - - Also, for each author's protection and ours, we want to make certain -that everyone understands that there is no warranty for this free -software. If the software is modified by someone else and passed on, we -want its recipients to know that what they have is not the original, so -that any problems introduced by others will not reflect on the original -authors' reputations. - - Finally, any free program is threatened constantly by software -patents. We wish to avoid the danger that redistributors of a free -program will individually obtain patent licenses, in effect making the -program proprietary. To prevent this, we have made it clear that any -patent must be licensed for everyone's free use or not licensed at all. - - The precise terms and conditions for copying, distribution and -modification follow. - - GNU GENERAL PUBLIC LICENSE - TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION - - 0. This License applies to any program or other work which contains -a notice placed by the copyright holder saying it may be distributed -under the terms of this General Public License. The "Program", below, -refers to any such program or work, and a "work based on the Program" -means either the Program or any derivative work under copyright law: -that is to say, a work containing the Program or a portion of it, -either verbatim or with modifications and/or translated into another -language. (Hereinafter, translation is included without limitation in -the term "modification".) Each licensee is addressed as "you". - -Activities other than copying, distribution and modification are not -covered by this License; they are outside its scope. The act of -running the Program is not restricted, and the output from the Program -is covered only if its contents constitute a work based on the -Program (independent of having been made by running the Program). -Whether that is true depends on what the Program does. - - 1. You may copy and distribute verbatim copies of the Program's -source code as you receive it, in any medium, provided that you -conspicuously and appropriately publish on each copy an appropriate -copyright notice and disclaimer of warranty; keep intact all the -notices that refer to this License and to the absence of any warranty; -and give any other recipients of the Program a copy of this License -along with the Program. - -You may charge a fee for the physical act of transferring a copy, and -you may at your option offer warranty protection in exchange for a fee. - - 2. You may modify your copy or copies of the Program or any portion -of it, thus forming a work based on the Program, and copy and -distribute such modifications or work under the terms of Section 1 -above, provided that you also meet all of these conditions: - - a) You must cause the modified files to carry prominent notices - stating that you changed the files and the date of any change. - - b) You must cause any work that you distribute or publish, that in - whole or in part contains or is derived from the Program or any - part thereof, to be licensed as a whole at no charge to all third - parties under the terms of this License. - - c) If the modified program normally reads commands interactively - when run, you must cause it, when started running for such - interactive use in the most ordinary way, to print or display an - announcement including an appropriate copyright notice and a - notice that there is no warranty (or else, saying that you provide - a warranty) and that users may redistribute the program under - these conditions, and telling the user how to view a copy of this - License. (Exception: if the Program itself is interactive but - does not normally print such an announcement, your work based on - the Program is not required to print an announcement.) - -These requirements apply to the modified work as a whole. If -identifiable sections of that work are not derived from the Program, -and can be reasonably considered independent and separate works in -themselves, then this License, and its terms, do not apply to those -sections when you distribute them as separate works. But when you -distribute the same sections as part of a whole which is a work based -on the Program, the distribution of the whole must be on the terms of -this License, whose permissions for other licensees extend to the -entire whole, and thus to each and every part regardless of who wrote it. - -Thus, it is not the intent of this section to claim rights or contest -your rights to work written entirely by you; rather, the intent is to -exercise the right to control the distribution of derivative or -collective works based on the Program. - -In addition, mere aggregation of another work not based on the Program -with the Program (or with a work based on the Program) on a volume of -a storage or distribution medium does not bring the other work under -the scope of this License. - - 3. You may copy and distribute the Program (or a work based on it, -under Section 2) in object code or executable form under the terms of -Sections 1 and 2 above provided that you also do one of the following: - - a) Accompany it with the complete corresponding machine-readable - source code, which must be distributed under the terms of Sections - 1 and 2 above on a medium customarily used for software interchange; or, - - b) Accompany it with a written offer, valid for at least three - years, to give any third party, for a charge no more than your - cost of physically performing source distribution, a complete - machine-readable copy of the corresponding source code, to be - distributed under the terms of Sections 1 and 2 above on a medium - customarily used for software interchange; or, - - c) Accompany it with the information you received as to the offer - to distribute corresponding source code. (This alternative is - allowed only for noncommercial distribution and only if you - received the program in object code or executable form with such - an offer, in accord with Subsection b above.) - -The source code for a work means the preferred form of the work for -making modifications to it. For an executable work, complete source -code means all the source code for all modules it contains, plus any -associated interface definition files, plus the scripts used to -control compilation and installation of the executable. However, as a -special exception, the source code distributed need not include -anything that is normally distributed (in either source or binary -form) with the major components (compiler, kernel, and so on) of the -operating system on which the executable runs, unless that component -itself accompanies the executable. - -If distribution of executable or object code is made by offering -access to copy from a designated place, then offering equivalent -access to copy the source code from the same place counts as -distribution of the source code, even though third parties are not -compelled to copy the source along with the object code. - - 4. You may not copy, modify, sublicense, or distribute the Program -except as expressly provided under this License. Any attempt -otherwise to copy, modify, sublicense or distribute the Program is -void, and will automatically terminate your rights under this License. -However, parties who have received copies, or rights, from you under -this License will not have their licenses terminated so long as such -parties remain in full compliance. - - 5. You are not required to accept this License, since you have not -signed it. However, nothing else grants you permission to modify or -distribute the Program or its derivative works. These actions are -prohibited by law if you do not accept this License. Therefore, by -modifying or distributing the Program (or any work based on the -Program), you indicate your acceptance of this License to do so, and -all its terms and conditions for copying, distributing or modifying -the Program or works based on it. - - 6. Each time you redistribute the Program (or any work based on the -Program), the recipient automatically receives a license from the -original licensor to copy, distribute or modify the Program subject to -these terms and conditions. You may not impose any further -restrictions on the recipients' exercise of the rights granted herein. -You are not responsible for enforcing compliance by third parties to -this License. - - 7. If, as a consequence of a court judgment or allegation of patent -infringement or for any other reason (not limited to patent issues), -conditions are imposed on you (whether by court order, agreement or -otherwise) that contradict the conditions of this License, they do not -excuse you from the conditions of this License. If you cannot -distribute so as to satisfy simultaneously your obligations under this -License and any other pertinent obligations, then as a consequence you -may not distribute the Program at all. For example, if a patent -license would not permit royalty-free redistribution of the Program by -all those who receive copies directly or indirectly through you, then -the only way you could satisfy both it and this License would be to -refrain entirely from distribution of the Program. - -If any portion of this section is held invalid or unenforceable under -any particular circumstance, the balance of the section is intended to -apply and the section as a whole is intended to apply in other -circumstances. - -It is not the purpose of this section to induce you to infringe any -patents or other property right claims or to contest validity of any -such claims; this section has the sole purpose of protecting the -integrity of the free software distribution system, which is -implemented by public license practices. Many people have made -generous contributions to the wide range of software distributed -through that system in reliance on consistent application of that -system; it is up to the author/donor to decide if he or she is willing -to distribute software through any other system and a licensee cannot -impose that choice. - -This section is intended to make thoroughly clear what is believed to -be a consequence of the rest of this License. - - 8. If the distribution and/or use of the Program is restricted in -certain countries either by patents or by copyrighted interfaces, the -original copyright holder who places the Program under this License -may add an explicit geographical distribution limitation excluding -those countries, so that distribution is permitted only in or among -countries not thus excluded. In such case, this License incorporates -the limitation as if written in the body of this License. - - 9. The Free Software Foundation may publish revised and/or new versions of the General Public License from time to time. Such new versions will be similar in spirit to the present version, but may differ in detail to address new problems or concerns. - -Each version is given a distinguishing version number. If the Program -specifies a version number of this License which applies to it and "any -later version", you have the option of following the terms and conditions -either of that version or of any later version published by the Free Software -Foundation. If the Program does not specify a version number of this License, - you may choose any version ever published by the Free Software Foundation. - - 10. If you wish to incorporate parts of the Program into other free -programs whose distribution conditions are different, write to the author to -ask for permission. For software which is copyrighted by the Free Software -Foundation, write to the Free Software Foundation; we sometimes make -exceptions for this. Our decision will be guided by the two goals of -preserving the free status of all derivatives of our free software and of -promoting the sharing and reuse of software generally. - - NO WARRANTY - - 11. BECAUSE THE PROGRAM IS LICENSED FREE OF CHARGE, THERE IS NO WARRANTY FOR -THE PROGRAM, TO THE EXTENT PERMITTED BY APPLICABLE LAW. EXCEPT WHEN -OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR OTHER PARTIES PROVIDE -THE PROGRAM "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED OR IMPLIED, -INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND -FITNESS FOR A PARTICULAR PURPOSE. THE ENTIRE RISK AS TO THE QUALITY AND -PERFORMANCE OF THE PROGRAM IS WITH YOU. SHOULD THE PROGRAM PROVE DEFECTIVE, -YOU ASSUME THE COST OF ALL NECESSARY SERVICING, REPAIR OR CORRECTION. - - 12. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING -WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY AND/OR -REDISTRIBUTE THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, -INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING -OUT OF THE USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED TO -LOSS OF DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR -THIRD PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER PROGRAMS), -EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH -DAMAGES. - - END OF TERMS AND CONDITIONS ' + Author: + Ron Fox + NSCL + Michigan State University + East Lansing, MI 48824-1321 */ + static const char* Copyright = "(C) Copyright Michigan State University 1994, All rights reserved"; /* ** Facility: Modified: trunk/SpecTcl/Display/grobjinput.h =================================================================== --- trunk/SpecTcl/Display/grobjinput.h 2010-08-19 10:57:15 UTC (rev 1711) +++ trunk/SpecTcl/Display/grobjinput.h 2010-08-19 11:34:35 UTC (rev 1712) @@ -1,280 +1,19 @@ /* - GNU GENERAL PUBLIC LICENSE - Version 2, June 1991 + This software is Copyright by the Board of Trustees of Michigan + State University (c) Copyright 2008 - Copyright (C) 1989, 1991 Free Software Foundation, Inc. - 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA - Everyone is permitted to copy and distribute verbatim copies - of this license document, but changing it is not allowed. + You may use this software under the terms of the GNU public license + (GPL). The terms of this license are described at: - Preamble + http://www.gnu.org/licenses/gpl.txt - The licenses for most software are designed to take away your -freedom to share and change it. By contrast, the GNU General Public -License is intended to guarantee your freedom to share and change free -software--to make sure the software is free for all its users. This -General Public License applies to most of the Free Software -Foundation's software and to any other program whose authors commit to -using it. (Some other Free Software Foundation software is covered by -the GNU Library General Public License instead.) You can apply it to -your programs, too. - - When we speak of free software, we are referring to freedom, not -price. Our General Public Licenses are designed to make sure that you -have the freedom to distribute copies of free software (and charge for -this service if you wish), that you receive source code or can get it -if you want it, that you can change the software or use pieces of it -in new free programs; and that you know you can do these things. - - To protect your rights, we need to make restrictions that forbid -anyone to deny you these rights or to ask you to surrender the rights. -These restrictions translate to certain responsibilities for you if you -distribute copies of the software, or if you modify it. - - For example, if you distribute copies of such a program, whether -gratis or for a fee, you must give the recipients all the rights that -you have. You must make sure that they, too, receive or can get the -source code. And you must show them these terms so they know their -rights. - - We protect your rights with two steps: (1) copyright the software, and -(2) offer you this license which gives you legal permission to copy, -distribute and/or modify the software. - - Also, for each author's protection and ours, we want to make certain -that everyone understands that there is no warranty for this free -software. If the software is modified by someone else and passed on, we -want its recipients to know that what they have is not the original, so -that any problems introduced by others will not reflect on the original -authors' reputations. - - Finally, any free program is threatened constantly by software -patents. We wish to avoid the danger that redistributors of a free -program will individually obtain patent licenses, in effect making the -program proprietary. To prevent this, we have made it clear that any -patent must be licensed for everyone's free use or not licensed at all. - - The precise terms and conditions for copying, distribution and -modification follow. - - GNU GENERAL PUBLIC LICENSE - TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION - - 0. This License applies to any program or other work which contains -a notice placed by the copyright holder saying it may be distributed -under the terms of this General Public License. The "Program", below, -refers to any such program or work, and a "work based on the Program" -means either the Program or any derivative work under copyright law: -that is to say, a work containing the Program or a portion of it, -either verbatim or with modifications and/or translated into another -language. (Hereinafter, translation is included without limitation in -the term "modification".) Each licensee is addressed as "you". - -Activities other than copying, distribution and modification are not -covered by this License; they are outside its scope. The act of -running the Program is not restricted, and the output from the Program -is covered only if its contents constitute a work based on the -Program (independent of having been made by running the Program). -Whether that is true depends on what the Program does. - - 1. You may copy and distribute verbatim copies of the Program's -source code as you receive it, in any medium, provided that you -conspicuously and appropriately publish on each copy an appropriate -copyright notice and disclaimer of warranty; keep intact all the -notices that refer to this License and to the absence of any warranty; -and give any other recipients of the Program a copy of this License -along with the Program. - -You may charge a fee for the physical act of transferring a copy, and -you may at your option offer warranty protection in exchange for a fee. - - 2. You may modify your copy or copies of the Program or any portion -of it, thus forming a work based on the Program, and copy and -distribute such modifications or work under the terms of Section 1 -above, provided that you also meet all of these conditions: - - a) You must cause the modified files to carry prominent notices - stating that you changed the files and the date of any change. - - b) You must cause any work that you distribute or publish, that in - whole or in part contains or is derived from the Program or any - part thereof, to be licensed as a whole at no charge to all third - parties under the terms of this License. - - c) If the modified program normally reads commands interactively - when run, you must cause it, when started running for such - interactive use in the most ordinary way, to print or display an - announcement including an appropriate copyright notice and a - notice that there is no warranty (or else, saying that you provide - a warranty) and that users may redistribute the program under - these conditions, and telling the user how to view a copy of this - License. (Exception: if the Program itself is interactive but - does not normally print such an announcement, your work based on - the Program is not required to print an announcement.) - -These requirements apply to the modified work as a whole. If -identifiable sections of that work are not derived from the Program, -and can be reasonably considered independent and separate works in -themselves, then this License, and its terms, do not apply to those -sections when you distribute them as separate works. But when you -distribute the same sections as part of a whole which is a work based -on the Program, the distribution of the whole must be on the terms of -this License, whose permissions for other licensees extend to the -entire whole, and thus to each and every part regardless of who wrote it. - -Thus, it is not the intent of this section to claim rights or contest -your rights to work written entirely by you; rather, the intent is to -exercise the right to control the distribution of derivative or -collective works based on the Program. - -In addition, mere aggregation of another work not based on the Program -with the Program (or with a work based on the Program) on a volume of -a storage or distribution medium does not bring the other work under -the scope of this License. - - 3. You may copy and distribute the Program (or a work based on it, -under Section 2) in object code or executable form under the terms of -Sections 1 and 2 above provided that you also do one of the following: - - a) Accompany it with the complete corresponding machine-readable - source code, which must be distributed under the terms of Sections - 1 and 2 above on a medium customarily used for software interchange; or, - - b) Accompany it with a written offer, valid for at least three - years, to give any third party, for a charge no more than your - cost of physically performing source distribution, a complete - machine-readable copy of the corresponding source code, to be - distributed under the terms of Sections 1 and 2 above on a medium - customarily used for software interchange; or, - - c) Accompany it with the information you received as to the offer - to distribute corresponding source code. (This alternative is - allowed only for noncommercial distribution and only if you - received the program in object code or executable form with such - an offer, in accord with Subsection b above.) - -The source code for a work means the preferred form of the work for -making modifications to it. For an executable work, complete source -code means all the source code for all modules it contains, plus any -associated interface definition files, plus the scripts used to -control compilation and installation of the executable. However, as a -special exception, the source code distributed need not include -anything that is normally distributed (in either source or binary -form) with the major components (compiler, kernel, and so on) of the -operating system on which the executable runs, unless that component -itself accompanies the executable. - -If distribution of executable or object code is made by offering -access to copy from a designated place, then offering equivalent -access to copy the source code from the same place counts as -distribution of the source code, even though third parties are not -compelled to copy the source along with the object code. - - 4. You may not copy, modify, sublicense, or distribute the Program -ex... [truncated message content] |
From: <ro...@us...> - 2011-01-21 21:09:44
|
Revision: 1795 http://nsclspectcl.svn.sourceforge.net/nsclspectcl/?rev=1795&view=rev Author: ron-fox Date: 2011-01-21 21:09:36 +0000 (Fri, 21 Jan 2011) Log Message: ----------- Remove debugging if that would kill SpecTcl if it thought an event was bigger than 500bytes and spanned a buffer boundary. Modified Paths: -------------- trunk/SpecTcl/DecoderRing/CRingBufferDecoder.cpp trunk/SpecTcl/configure.in trunk/SpecTcl/gri-2.12.20/doc/gri.info trunk/SpecTcl/gri-2.12.20/doc/gri.info-1 trunk/SpecTcl/gri-2.12.20/doc/gri.info-2 trunk/SpecTcl/gri-2.12.20/doc/gri.info-3 trunk/SpecTcl/gri-2.12.20/doc/index.html Modified: trunk/SpecTcl/DecoderRing/CRingBufferDecoder.cpp =================================================================== --- trunk/SpecTcl/DecoderRing/CRingBufferDecoder.cpp 2011-01-21 11:10:47 UTC (rev 1794) +++ trunk/SpecTcl/DecoderRing/CRingBufferDecoder.cpp 2011-01-21 21:09:36 UTC (rev 1795) @@ -547,11 +547,8 @@ pRingItemHeader pHeader = reinterpret_cast<pRingItemHeader>(m_pBufferCursor); uint32_t size = m_pTranslator->TranslateLong(pHeader->s_size); - if (size > 512) { - cerr << "Size really big!!\n"; + - } - m_pPartialEvent = reinterpret_cast<uint32_t*>(malloc(size)); m_nPartialEventSize = size; Modified: trunk/SpecTcl/configure.in =================================================================== --- trunk/SpecTcl/configure.in 2011-01-21 11:10:47 UTC (rev 1794) +++ trunk/SpecTcl/configure.in 2011-01-21 21:09:36 UTC (rev 1795) @@ -4,7 +4,7 @@ AC_CONFIG_AUX_DIR(config) AM_CONFIG_HEADER(config.h) AC_CANONICAL_HOST -AM_INIT_AUTOMAKE(SpecTcl, 3.3pre8) +AM_INIT_AUTOMAKE(SpecTcl, 3.3-001) AC_EXEEXT Modified: trunk/SpecTcl/gri-2.12.20/doc/gri.info =================================================================== --- trunk/SpecTcl/gri-2.12.20/doc/gri.info 2011-01-21 11:10:47 UTC (rev 1794) +++ trunk/SpecTcl/gri-2.12.20/doc/gri.info 2011-01-21 21:09:36 UTC (rev 1795) @@ -1,4 +1,4 @@ -This is gri.info, produced by makeinfo version 4.11 from gri.texi. +This is gri.info, produced by makeinfo version 4.13 from gri.texi. INFO-DIR-SECTION Scientific Applications START-INFO-DIR-ENTRY Modified: trunk/SpecTcl/gri-2.12.20/doc/gri.info-1 =================================================================== --- trunk/SpecTcl/gri-2.12.20/doc/gri.info-1 2011-01-21 11:10:47 UTC (rev 1794) +++ trunk/SpecTcl/gri-2.12.20/doc/gri.info-1 2011-01-21 21:09:36 UTC (rev 1795) @@ -1,4 +1,4 @@ -This is gri.info, produced by makeinfo version 4.11 from gri.texi. +This is gri.info, produced by makeinfo version 4.13 from gri.texi. INFO-DIR-SECTION Scientific Applications START-INFO-DIR-ENTRY Modified: trunk/SpecTcl/gri-2.12.20/doc/gri.info-2 =================================================================== --- trunk/SpecTcl/gri-2.12.20/doc/gri.info-2 2011-01-21 11:10:47 UTC (rev 1794) +++ trunk/SpecTcl/gri-2.12.20/doc/gri.info-2 2011-01-21 21:09:36 UTC (rev 1795) @@ -1,4 +1,4 @@ -This is gri.info, produced by makeinfo version 4.11 from gri.texi. +This is gri.info, produced by makeinfo version 4.13 from gri.texi. INFO-DIR-SECTION Scientific Applications START-INFO-DIR-ENTRY Modified: trunk/SpecTcl/gri-2.12.20/doc/gri.info-3 =================================================================== (Binary files differ) Modified: trunk/SpecTcl/gri-2.12.20/doc/index.html =================================================================== --- trunk/SpecTcl/gri-2.12.20/doc/index.html 2011-01-21 11:10:47 UTC (rev 1794) +++ trunk/SpecTcl/gri-2.12.20/doc/index.html 2011-01-21 21:09:36 UTC (rev 1795) @@ -8,7 +8,7 @@ <meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1"></head> <body bgcolor="#FFFFFF" text="#000000" link="#0000EE" vlink="#551A8B" alink="FF0000"> <!-- Created automatically from texinfo source --> -<!-- Thu May 6 8:54:56 2010 --> +<!-- Wed Oct 13 6:51:29 2010 --> This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <ro...@us...> - 2011-06-02 11:55:26
|
Revision: 1870 http://nsclspectcl.svn.sourceforge.net/nsclspectcl/?rev=1870&view=rev Author: ron-fox Date: 2011-06-02 11:55:18 +0000 (Thu, 02 Jun 2011) Log Message: ----------- - Changes indicated by cppcheck - use mkstemp instead of tmpname for wsywig printing. - Get rid of some misc. warnings. Modified Paths: -------------- trunk/SpecTcl/CHANGELOG trunk/SpecTcl/Display/XMMenus.cc trunk/SpecTcl/Display/Xamine.cc trunk/SpecTcl/Display/clientgates.c trunk/SpecTcl/Display/colormgr.cc trunk/SpecTcl/Display/colorset.cc trunk/SpecTcl/Display/dfltmgr.cc trunk/SpecTcl/Display/expand.cc trunk/SpecTcl/Display/griprint.cc trunk/SpecTcl/Display/info.cc trunk/SpecTcl/Display/shared.cc trunk/SpecTcl/Display/spcdisplay.cc trunk/SpecTcl/Display/spectra.cc trunk/SpecTcl/Display/sumregion.cc trunk/SpecTcl/Display/wysiwygPrint.cc trunk/SpecTcl/Filter/FilterBufferDecoder.cpp trunk/SpecTcl/SpecTcl/SpectrumPackage.cpp trunk/SpecTcl/SpecTcl/TclGrammerApp.cpp trunk/SpecTcl/SpectrumIO/NSCLAsciiSpectrumFormatter.cpp trunk/SpecTcl/TCL/TCLChannel.cpp trunk/SpecTcl/Tape/mtblock.c trunk/SpecTcl/TestFiles/testfile.cpp trunk/SpecTcl/configure.in trunk/SpecTcl/contrib/scriptable/CIntArrayParam.cpp trunk/SpecTcl/filtsplit/filtsplit.cpp Modified: trunk/SpecTcl/CHANGELOG =================================================================== --- trunk/SpecTcl/CHANGELOG 2011-04-29 20:44:26 UTC (rev 1869) +++ trunk/SpecTcl/CHANGELOG 2011-06-02 11:55:18 UTC (rev 1870) @@ -914,5 +914,10 @@ - WO 2529-005-CP-005 - Add an extra layer of indirection (parameter scoreboarding) to improve the performance of histogramming when spectra and parameters are sparse. -pre8: -July 13, 2010 - Fix some memory double deallocations found by Coupland. \ No newline at end of file + +July 13, 2010 - Fix some memory double deallocations found by Coupland. + +3.3-002 + - Fixes pointed out by cppcheck static analyzer. + - Misc. warning removals. + - Use mkstemp rather than tmpnam in wsyswig printing. Modified: trunk/SpecTcl/Display/XMMenus.cc =================================================================== --- trunk/SpecTcl/Display/XMMenus.cc 2011-04-29 20:44:26 UTC (rev 1869) +++ trunk/SpecTcl/Display/XMMenus.cc 2011-06-02 11:55:18 UTC (rev 1870) @@ -104,14 +104,18 @@ ** the XmNsubMenuId resource. */ pd_button = new XMCascadeButton(name, parent); - pd_button->Label(name); - pd_button->SetAssociatedMenu(id); - pd_button->SetMnemonic(name[0]); - if(pd_button == NULL) { fprintf(stderr, "XMPulldown constructor error...Could not make new cascade button\n"); + } + else { + + pd_button->Label(name); + pd_button->SetAssociatedMenu(id); + pd_button->SetMnemonic(name[0]); + } + } /* Modified: trunk/SpecTcl/Display/Xamine.cc =================================================================== --- trunk/SpecTcl/Display/Xamine.cc 2011-04-29 20:44:26 UTC (rev 1869) +++ trunk/SpecTcl/Display/Xamine.cc 2011-06-02 11:55:18 UTC (rev 1870) @@ -104,7 +104,7 @@ int a; fprintf(stderr, "Xamine -- Memory allocation failed... coredumping\n"); fflush(stderr); // Ensure we see the output. - a = *(int *)(NULL); + a = *(int *)(NULL); // This error is supposed to be here...it forces the core dump. } /* Modified: trunk/SpecTcl/Display/clientgates.c =================================================================== --- trunk/SpecTcl/Display/clientgates.c 2011-04-29 20:44:26 UTC (rev 1869) +++ trunk/SpecTcl/Display/clientgates.c 2011-06-02 11:55:18 UTC (rev 1870) @@ -584,7 +584,7 @@ */ ctx = (GateContextPtr)malloc(sizeof(GateContext)); if(ctx == (GateContextPtr)NULL) { - *status = CheckErrno; + *status = CheckErrno; /* not a memory leak because malloc failed here. */ return 0; } /* If there are no objects, then return NoSuchObject status: */ Modified: trunk/SpecTcl/Display/colormgr.cc =================================================================== --- trunk/SpecTcl/Display/colormgr.cc 2011-04-29 20:44:26 UTC (rev 1869) +++ trunk/SpecTcl/Display/colormgr.cc 2011-06-02 11:55:18 UTC (rev 1870) @@ -350,7 +350,12 @@ ** match the number of entries implied by the number of planes: */ int entries; - fscanf(ctblfile, "%d\n", &entries); + int status = fscanf(ctblfile, "%d\n", &entries); + if (status != 1) { + fprintf(stderr, "%s", + "Scan of color table entry count failed!\n"); + exit(-1); + } if(entries != (1 << planes)) { fclose(ctblfile); fprintf(stderr, @@ -600,7 +605,12 @@ // by the plane count. // int entries; - fscanf(fp, "%d\n", &entries); + int status = fscanf(fp, "%d\n", &entries); + if (status != 1) { + fprintf(stderr, "%s", + "Failed to read color table file entry count\n"); + exit(-1); + } if (entries != (numcolors)) { fclose(fp); @@ -697,7 +707,7 @@ ConvertMask(&mymap.red_max, &mymap.red_mult, vis->red_mask); ConvertMask(&mymap.blue_max, &mymap.blue_mult, vis->blue_mask); ConvertMask(&mymap.green_max, &mymap.green_mult, vis->green_mask); - fprintf(stderr, "red_max = %d blue_max = %d green_max = %d\n", + fprintf(stderr, "red_max = %lu blue_max = %lu green_max = %lu\n", mymap.red_max, mymap.blue_max, mymap.green_max); // // Then ReadDirectMap does the remainder of the job: Modified: trunk/SpecTcl/Display/colorset.cc =================================================================== --- trunk/SpecTcl/Display/colorset.cc 2011-04-29 20:44:26 UTC (rev 1869) +++ trunk/SpecTcl/Display/colorset.cc 2011-06-02 11:55:18 UTC (rev 1870) @@ -838,9 +838,14 @@ for(i = 0; i < entries; i ++) { XColor colorcell; - fscanf(fp, "%d %d %d %d %d\n", - &button_table[i].low, &button_table[i].hi, - &button_table[i].red, &button_table[i].green, &button_table[i].blue); + int status = fscanf(fp, "%d %d %d %d %d\n", + &button_table[i].low, &button_table[i].hi, + &button_table[i].red, &button_table[i].green, &button_table[i].blue); + if (status != 5) { + fprintf(stderr, "%s", + "Unable to read the color from button table\n"); + exit (-1); + } sprintf(button_label, "%d\n\n%d", button_table[i].hi, button_table[i].low); button_table[i].button->Label(button_label); colorcell.red = pcttored(button_table[i].red); Modified: trunk/SpecTcl/Display/dfltmgr.cc =================================================================== --- trunk/SpecTcl/Display/dfltmgr.cc 2011-04-29 20:44:26 UTC (rev 1869) +++ trunk/SpecTcl/Display/dfltmgr.cc 2011-06-02 11:55:18 UTC (rev 1870) @@ -171,7 +171,8 @@ win_1d *p = new win_1d(GenericDefaults); p->setrend(rend1d); - memcpy(properties, p, sizeof(win_1d)); + // memcpy(properties, p, sizeof(win_1d)); + properties = p; // instead of the memcpy above. properties->setmapped(GenericDefaults.ismapped()); delete p; } @@ -188,7 +189,8 @@ win_2d *p = new win_2d(GenericDefaults); p->setrend(rend2d); - memcpy(properties, p, sizeof(win_2d)); + // memcpy(properties, p, sizeof(win_2d)); + properties = p; // instead of memcpy above. properties->setmapped(GenericDefaults.ismapped()); delete p; } Modified: trunk/SpecTcl/Display/expand.cc =================================================================== --- trunk/SpecTcl/Display/expand.cc 2011-04-29 20:44:26 UTC (rev 1869) +++ trunk/SpecTcl/Display/expand.cc 2011-06-02 11:55:18 UTC (rev 1870) @@ -644,16 +644,17 @@ */ void Expand::AddPoint(point &pt) { + win_attributed *att = Xamine_GetDisplayAttributes(row, col); + if(att == NULL) { /* If the window nulled out on us. */ + CancelCallback(NULL); /* Treat it like the user cancelled. */ + return; + } /* Get the display attributes since they determine if we need to ** use a 1-d or 2-d format for the display */ - win_attributed *att = Xamine_GetDisplayAttributes(row, col); float fpx1, fpx2, fpy1, fpy2; int specno = att->spectrum(); - if(att == NULL) { /* If the window nulled out on us. */ - CancelCallback(NULL); /* Treat it like the user cancelled. */ - return; - } + if(pt1_accepted) { pt2 = pt; pt2_accepted = True; Modified: trunk/SpecTcl/Display/griprint.cc =================================================================== --- trunk/SpecTcl/Display/griprint.cc 2011-04-29 20:44:26 UTC (rev 1869) +++ trunk/SpecTcl/Display/griprint.cc 2011-06-02 11:55:18 UTC (rev 1870) @@ -1642,7 +1642,11 @@ waitpid(-1, &x, WNOHANG); } else { - system(GriCmd); + int status = system(GriCmd); + if (status == -1) { + perror("Unable to execute gri command in child process!"); + exit(-1); + } printf("Finished\n"); exit(0); } Modified: trunk/SpecTcl/Display/info.cc =================================================================== --- trunk/SpecTcl/Display/info.cc 2011-04-29 20:44:26 UTC (rev 1869) +++ trunk/SpecTcl/Display/info.cc 2011-06-02 11:55:18 UTC (rev 1870) @@ -760,7 +760,7 @@ FormatGateInfo(int specno) { char *result; - char element[20]; + char element[100]; int nobjects = Xamine_GetSpectrumGateCount(specno); grobj_generic** objects = new grobj_generic*[nobjects]; Modified: trunk/SpecTcl/Display/shared.cc =================================================================== --- trunk/SpecTcl/Display/shared.cc 2011-04-29 20:44:26 UTC (rev 1869) +++ trunk/SpecTcl/Display/shared.cc 2011-06-02 11:55:18 UTC (rev 1870) @@ -470,7 +470,7 @@ static void PrintOffsets() { - spec_shared *pShape(0); + spec_shared *pShape(0); // dirty way to get offests. printf("(Xamine) offsets into shared mem: \n"); printf(" dsp_xy = %x\n", pShape->dsp_xy); printf(" dsp_titles = %x\n", pShape->dsp_titles); Modified: trunk/SpecTcl/Display/spcdisplay.cc =================================================================== --- trunk/SpecTcl/Display/spcdisplay.cc 2011-04-29 20:44:26 UTC (rev 1869) +++ trunk/SpecTcl/Display/spcdisplay.cc 2011-06-02 11:55:18 UTC (rev 1870) @@ -171,7 +171,7 @@ printf(" Spectrum: %d\n", spno); printf(" xdim = %d\n", xamine_shared->dsp_xy[spno].xchans); printf(" ydim = %d\n", xamine_shared->dsp_xy[spno].ychans); - printf(" offset = %d\n", offset); + printf(" offset = %ld\n", offset); Modified: trunk/SpecTcl/Display/spectra.cc =================================================================== --- trunk/SpecTcl/Display/spectra.cc 2011-04-29 20:44:26 UTC (rev 1869) +++ trunk/SpecTcl/Display/spectra.cc 2011-06-02 11:55:18 UTC (rev 1870) @@ -447,7 +447,7 @@ search[sizeof(search)-1] = '\0'; upcase(search); /* Make an upper case version of the name */ - for(id = 0; id < XAMINE_MAXSPEC; id++) { + for (id = 0; id < XAMINE_MAXSPEC; id++) { if(dsp_types[id] != undefined) { cvttitle(current, dsp_titles[id], 1); if(strncmp(current, search, sizeof(spec_title)) == 0) return id+1; Modified: trunk/SpecTcl/Display/sumregion.cc =================================================================== --- trunk/SpecTcl/Display/sumregion.cc 2011-04-29 20:44:26 UTC (rev 1869) +++ trunk/SpecTcl/Display/sumregion.cc 2011-06-02 11:55:18 UTC (rev 1870) @@ -765,7 +765,9 @@ xlow = pt2->getx(); } } - + else { + return; // Can't draw a cut with < 2 points + } // start by assuming pt1 is left and pt2 is right, then correct // as needed: Modified: trunk/SpecTcl/Display/wysiwygPrint.cc =================================================================== --- trunk/SpecTcl/Display/wysiwygPrint.cc 2011-04-29 20:44:26 UTC (rev 1869) +++ trunk/SpecTcl/Display/wysiwygPrint.cc 2011-06-02 11:55:18 UTC (rev 1870) @@ -15,6 +15,7 @@ */ #include <config.h> +#include <stdlib.h> #include "wysiwygPrint.h" @@ -484,7 +485,14 @@ // char filebase[PATH_MAX+1]; - string pngFile(tmpnam(filebase)); + strcpy(filebase, "SpecTclPNGFILEXXXXXX"); + int fd = mkstemp(filebase); + if (fd == -1) { + perror("Could not create output filename via mkstemp"); + return; + } + close(fd); // we just wanted the name of the file. + string pngFile(filebase); string psFile = pngFile; pngFile += ".png"; psFile += ".ps"; Modified: trunk/SpecTcl/Filter/FilterBufferDecoder.cpp =================================================================== --- trunk/SpecTcl/Filter/FilterBufferDecoder.cpp 2011-04-29 20:44:26 UTC (rev 1869) +++ trunk/SpecTcl/Filter/FilterBufferDecoder.cpp 2011-06-02 11:55:18 UTC (rev 1870) @@ -581,7 +581,7 @@ string type; xdr >> type; // 'header' - ProcessHeader(xdr, *(reinterpret_cast<CAnalyzer*>(NULL))); // Skip the header. + ProcessHeader(xdr, *(reinterpret_cast<CAnalyzer*>(NULL))); // Skip the header. legal null deref. xdr >> type; // 'event' int nBitmasks = numBitmasks(m_nParamCount); Modified: trunk/SpecTcl/SpecTcl/SpectrumPackage.cpp =================================================================== --- trunk/SpecTcl/SpecTcl/SpectrumPackage.cpp 2011-04-29 20:44:26 UTC (rev 1869) +++ trunk/SpecTcl/SpecTcl/SpectrumPackage.cpp 2011-06-02 11:55:18 UTC (rev 1870) @@ -1369,7 +1369,7 @@ // char sChan[20]; - sprintf(sChan, "%u", nChan); + sprintf(sChan, "%lu", nChan); rResult += sChan; } @@ -1425,7 +1425,7 @@ // Result code will be the old value. char sValue[20]; - sprintf(sValue, "%d", nOldValue); + sprintf(sValue, "%ld", nOldValue); rResult += sValue; } Modified: trunk/SpecTcl/SpecTcl/TclGrammerApp.cpp =================================================================== --- trunk/SpecTcl/SpecTcl/TclGrammerApp.cpp 2011-04-29 20:44:26 UTC (rev 1869) +++ trunk/SpecTcl/SpecTcl/TclGrammerApp.cpp 2011-06-02 11:55:18 UTC (rev 1870) @@ -697,7 +697,7 @@ const char* pValue(rVar.Get(TCL_LEAVE_ERR_MSG|TCL_GLOBAL_ONLY)); if(pValue) { - if(sscanf(pValue, "%ud", &nResult) > 0) { + if(sscanf(pValue, "%d", &nResult) > 0) { rValue = nResult; } else { // Value not unsigned complain and no update Modified: trunk/SpecTcl/SpectrumIO/NSCLAsciiSpectrumFormatter.cpp =================================================================== --- trunk/SpecTcl/SpectrumIO/NSCLAsciiSpectrumFormatter.cpp 2011-04-29 20:44:26 UTC (rev 1869) +++ trunk/SpecTcl/SpectrumIO/NSCLAsciiSpectrumFormatter.cpp 2011-06-02 11:55:18 UTC (rev 1870) @@ -536,6 +536,9 @@ Delimeter = ' '; } rStream << ") -1\n"; + delete []pLows; + delete []pHis; + delete []pIdx; } //////////////////////////////////////////////////////////////////////////// // @@ -749,7 +752,7 @@ DecodeParenList(strString, Dims); for(UInt_t i = 0; i < Dims.size(); i++) { UInt_t idim; - if(sscanf(Dims[i].c_str(), "%d", &idim) != 1) { + if(sscanf(Dims[i].c_str(), "%u", &idim) != 1) { throw CSpectrumFormatError(CSpectrumFormatError::InvalidHeader, "Decoding a spectrum dimension"); } @@ -1026,7 +1029,7 @@ delete [] IndexArray; return; // End of the data. } - if(sscanf(IndexList[i].c_str(), "%d", &n) != 1) { // File format corrupt + if(sscanf(IndexList[i].c_str(), "%u", &n) != 1) { // File format corrupt throw CSpectrumFormatError(CSpectrumFormatError::FileFormatCorrupt, "Decoding index string"); } @@ -1052,7 +1055,7 @@ } } catch (...) { - delete []IndexArray; + return; } // If control passes here we hit the eof prior to the end of the data. Modified: trunk/SpecTcl/TCL/TCLChannel.cpp =================================================================== --- trunk/SpecTcl/TCL/TCLChannel.cpp 2011-04-29 20:44:26 UTC (rev 1869) +++ trunk/SpecTcl/TCL/TCLChannel.cpp 2011-06-02 11:55:18 UTC (rev 1870) @@ -567,7 +567,11 @@ unsigned char* pDataRead = Tcl_GetByteArrayFromObj(pObject, &nBytesRead); char* pUserBuffer = new char[nBytesRead]; memcpy(pUserBuffer, pDataRead, nBytesRead); + *pData = pUserBuffer; } + else { + *pData = reinterpret_cast<void*>(NULL); + } Tcl_DecrRefCount(pObject); return nRead; } Modified: trunk/SpecTcl/Tape/mtblock.c =================================================================== --- trunk/SpecTcl/Tape/mtblock.c 2011-04-29 20:44:26 UTC (rev 1869) +++ trunk/SpecTcl/Tape/mtblock.c 2011-06-02 11:55:18 UTC (rev 1870) @@ -472,7 +472,7 @@ char *string; #endif { - fprintf(stderr, string); + fprintf(stderr, "%s", string); exit(-1); } /* Modified: trunk/SpecTcl/TestFiles/testfile.cpp =================================================================== --- trunk/SpecTcl/TestFiles/testfile.cpp 2011-04-29 20:44:26 UTC (rev 1869) +++ trunk/SpecTcl/TestFiles/testfile.cpp 2011-06-02 11:55:18 UTC (rev 1870) @@ -358,7 +358,11 @@ for(UInt_t block = 0; block < nRecords; block++) { Char_t Buffer[nRecordSize]; fT.Read(Buffer, nRecordSize); - write(fd, Buffer, sizeof(Buffer)); + ssize_t status = write(fd, Buffer, sizeof(Buffer)); + if (status != sizeof(Buffer)) { + perror("Failed to write a block to the test file"); + exit (-1); + } if( (block % nProgressCounter) == 0) { cout << block << '\r'; cout.flush(); Modified: trunk/SpecTcl/configure.in =================================================================== --- trunk/SpecTcl/configure.in 2011-04-29 20:44:26 UTC (rev 1869) +++ trunk/SpecTcl/configure.in 2011-06-02 11:55:18 UTC (rev 1870) @@ -4,7 +4,7 @@ AC_CONFIG_AUX_DIR(config) AM_CONFIG_HEADER(config.h) AC_CANONICAL_HOST -AM_INIT_AUTOMAKE(SpecTcl, 3.3-001) +AM_INIT_AUTOMAKE(SpecTcl, 3.3-002) AC_EXEEXT Modified: trunk/SpecTcl/contrib/scriptable/CIntArrayParam.cpp =================================================================== --- trunk/SpecTcl/contrib/scriptable/CIntArrayParam.cpp 2011-04-29 20:44:26 UTC (rev 1869) +++ trunk/SpecTcl/contrib/scriptable/CIntArrayParam.cpp 2011-06-02 11:55:18 UTC (rev 1870) @@ -519,7 +519,7 @@ nLong = strtoll(values[i].c_str(), (char**) NULL, 0); if( (nLong == 0) && (errno == EINVAL) ) { char value[100]; - sprintf(value, "%d", Values[i]); + sprintf(value, "%ld", Values[i]); rResult += "Configuration parameter array : "; rResult += getSwitch(); rResult += " element: "; @@ -530,7 +530,7 @@ if(m_fCheckRange) { if((nLong < m_nLow) || (nLong > m_nHigh)) { char value[100]; - sprintf(value, "%d", Values[i]); + sprintf(value, "%ld", Values[i]); rResult += "Array configuration parameter "; rResult += getSwitch(); rResult += " Parameter "; Modified: trunk/SpecTcl/filtsplit/filtsplit.cpp =================================================================== --- trunk/SpecTcl/filtsplit/filtsplit.cpp 2011-04-29 20:44:26 UTC (rev 1869) +++ trunk/SpecTcl/filtsplit/filtsplit.cpp 2011-06-02 11:55:18 UTC (rev 1870) @@ -298,7 +298,7 @@ if (verbose) { fprintf(stderr, "Splitting: %s\n", inputFile.c_str()); - fprintf(stderr, "Into %d block chunks\n", blocksPerFile); + fprintf(stderr, "Into %ld block chunks\n", blocksPerFile); fprintf(stderr, "Ouptut filenames of the form %snnn.flt\n", filenameStem.c_str()); } This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <ro...@us...> - 2011-11-07 17:45:17
|
Revision: 1900 http://nsclspectcl.svn.sourceforge.net/nsclspectcl/?rev=1900&view=rev Author: ron-fox Date: 2011-11-07 17:45:10 +0000 (Mon, 07 Nov 2011) Log Message: ----------- Enlarge limit on number of spectra supported. Modified Paths: -------------- trunk/SpecTcl/Display/aedshare.f trunk/SpecTcl/Display/xamineDataTypes.h trunk/SpecTcl/Display/xamineshare.for trunk/SpecTcl/configure.in trunk/SpecTcl/gri-2.12.20/doc/index.html Modified: trunk/SpecTcl/Display/aedshare.f =================================================================== --- trunk/SpecTcl/Display/aedshare.f 2011-10-15 21:31:18 UTC (rev 1899) +++ trunk/SpecTcl/Display/aedshare.f 2011-11-07 17:45:10 UTC (rev 1900) @@ -2,7 +2,7 @@ C THE COMMON AREA FOR THE AED DISPLAY PROGRAM C C - PARAMETER AED_ISMAX=5000 + PARAMETER AED_ISMAX=20000 PARAMETER AED_BYTES=1048576*8 PARAMETER AED_WORDS=AED_BYTES/2 PARAMETER AED_LONGS=AED_BYTES/4 Modified: trunk/SpecTcl/Display/xamineDataTypes.h =================================================================== --- trunk/SpecTcl/Display/xamineDataTypes.h 2011-10-15 21:31:18 UTC (rev 1899) +++ trunk/SpecTcl/Display/xamineDataTypes.h 2011-11-07 17:45:10 UTC (rev 1900) @@ -67,7 +67,7 @@ -#define XAMINE_MAXSPEC 5000 /* Maximum spectrum count. */ +#define XAMINE_MAXSPEC 10000 /* Maximum spectrum count. */ #ifndef XAMINE_SPECBYTES #define XAMINE_SPECBYTES 8*MEG /* Default number of bytes in spectra. */ #endif Modified: trunk/SpecTcl/Display/xamineshare.for =================================================================== --- trunk/SpecTcl/Display/xamineshare.for 2011-10-15 21:31:18 UTC (rev 1899) +++ trunk/SpecTcl/Display/xamineshare.for 2011-11-07 17:45:10 UTC (rev 1900) @@ -21,7 +21,7 @@ C C INTEGER XAMINE_ISMAX, XAMINE_SPECBYTES, XAMINE_WORDS, XAMINE_LONGS - PARAMETER (XAMINE_ISMAX = 5000) + PARAMETER (XAMINE_ISMAX = 20000) PARAMETER (XAMINE_SPECBYTES = 1048576 * 8) PARAMETER (XAMINE_WORDS = XAMINE_SPECBYTES / 2) PARAMETER (XAMINE_LONGS = XAMINE_SPECBYTES / 4) Modified: trunk/SpecTcl/configure.in =================================================================== --- trunk/SpecTcl/configure.in 2011-10-15 21:31:18 UTC (rev 1899) +++ trunk/SpecTcl/configure.in 2011-11-07 17:45:10 UTC (rev 1900) @@ -4,7 +4,7 @@ AC_CONFIG_AUX_DIR(config) AM_CONFIG_HEADER(config.h) AC_CANONICAL_HOST -AM_INIT_AUTOMAKE(SpecTcl, 3.3-003) +AM_INIT_AUTOMAKE(SpecTcl, 3.3-004) AC_EXEEXT Modified: trunk/SpecTcl/gri-2.12.20/doc/index.html =================================================================== --- trunk/SpecTcl/gri-2.12.20/doc/index.html 2011-10-15 21:31:18 UTC (rev 1899) +++ trunk/SpecTcl/gri-2.12.20/doc/index.html 2011-11-07 17:45:10 UTC (rev 1900) @@ -8,7 +8,7 @@ <meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1"></head> <body bgcolor="#FFFFFF" text="#000000" link="#0000EE" vlink="#551A8B" alink="FF0000"> <!-- Created automatically from texinfo source --> -<!-- Wed Oct 13 6:51:29 2010 --> +<!-- Tue Oct 4 7:17:31 2011 --> This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <ro...@us...> - 2011-11-14 15:52:23
|
Revision: 1902 http://nsclspectcl.svn.sourceforge.net/nsclspectcl/?rev=1902&view=rev Author: ron-fox Date: 2011-11-14 15:52:17 +0000 (Mon, 14 Nov 2011) Log Message: ----------- Make the guintegrate widget in Xamine have a 50,000 char capacity (was 5,000) from Carpino request. Modified Paths: -------------- trunk/SpecTcl/CHANGELOG trunk/SpecTcl/Display/guintegrate.cc Modified: trunk/SpecTcl/CHANGELOG =================================================================== --- trunk/SpecTcl/CHANGELOG 2011-11-14 15:47:13 UTC (rev 1901) +++ trunk/SpecTcl/CHANGELOG 2011-11-14 15:52:17 UTC (rev 1902) @@ -923,5 +923,9 @@ - Use mkstemp rather than tmpnam in wsyswig printing. 3.3-003 June 30, 2011 - - Fix error in CRingBufferDecoder - premature free of glued buffer. + - Fix error in CRingBufferDecoder - premature free of glued buffer +3.3-004 +November 14, 2011 + - Increase the capacity of the integration widget in Xamine to + 50,000 chars (Carpino request). \ No newline at end of file Modified: trunk/SpecTcl/Display/guintegrate.cc =================================================================== --- trunk/SpecTcl/Display/guintegrate.cc 2011-11-14 15:47:13 UTC (rev 1901) +++ trunk/SpecTcl/Display/guintegrate.cc 2011-11-14 15:52:17 UTC (rev 1902) @@ -67,7 +67,7 @@ ** Constants: */ #define GAMMA 2.354 /* Number of sigmas in FWHM for Gaussian. */ -#define SCROLL_WINDOW_CHARS 5000 /* Max chars allowed in scrolled window. */ +#define SCROLL_WINDOW_CHARS 50000 /* Max chars allowed in scrolled window. */ /* ** External References: */ This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <ro...@us...> - 2011-11-30 20:35:40
|
Revision: 1903 http://nsclspectcl.svn.sourceforge.net/nsclspectcl/?rev=1903&view=rev Author: ron-fox Date: 2011-11-30 20:35:31 +0000 (Wed, 30 Nov 2011) Log Message: ----------- Tree parameter editor widget (policy free view only) Added Paths: ----------- trunk/SpecTcl/treegui/ trunk/SpecTcl/treegui/treeParameterWidget.tcl Added: trunk/SpecTcl/treegui/treeParameterWidget.tcl =================================================================== --- trunk/SpecTcl/treegui/treeParameterWidget.tcl (rev 0) +++ trunk/SpecTcl/treegui/treeParameterWidget.tcl 2011-11-30 20:35:31 UTC (rev 1903) @@ -0,0 +1,87 @@ +# This software is Copyright by the Board of Trustees of Michigan +# State University (c) Copyright 2009. +# +# You may use this software under the terms of the GNU public license +# (GPL). The terms of this license are described at: +# +# http://www.gnu.org/licenses/gpl.txt +# +# Author: +# Ron Fox +# NSCL +# Michigan State University +# East Lansing, MI 48824-1321 + + + +package require Tk +package require snit + +## +# Provide a snit megawidget that allows for the display of a single +# tree parameter. +# The tree parameter looks like this: +# +------------------------------------------------------------------------------------+ +# | [parameter name] [low value] [high value] [units] <Load> <Set> <Change Spectra> | +# +------------------------------------------------------------------------------------+ +# +# +# OPTIONS: +# -name name of parameter to have in spectrum. +# -low get/set low value of parameter in widget. +# -high get/set high value of parameter in widget. +# -units get/set units of parameter in widget. +# -loadcmd Script executed on load button click, supports %W substitution +# -setcmd Script executed on set button click supports %W substitution. +# -changecmd Script executed on Change spectra button click supports %W substitution. +# +# METHODS: +# resetChanged - Turn off changed flag (this can be done by save). +# +# + +snit::widget treeParameterEditor { + option -name + option -low + option -high + option -units + option -loadcmd [list] + option -setcmd [list] + option -changecmd [list] + + + ## + # Constructor + # + + constructor args { + $self configurelist $args + + # Build the widgets: + + # First the labels: + + foreach label [list .name .low .high .unit] optionname [list -name -low -high -units] \ + width [list 32 5 5 10] { + ::ttk::label $win$label -textvariable ${selfns}::options($optionname) -relief sunken \ + -width $width -borderwidth 3 -anchor w + } + + # then the buttons: + + foreach button [list .load .set .changespectra] \ + label [list Load Set "Change Spectra"] \ + option [list -loadcmd -setcmd -changecmd] width [list 6 6 14] { + ::ttk::button $win$button -text $label -width $width \ + -command [mymethod callback $option] + } + + # Now grid them from left to right: + + set col 0 + foreach widget [list .name .low .high .unit .load .set .changespectra] { + grid $win$widget -row 0 -column $col + incr col + } + } +} \ No newline at end of file This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <ro...@us...> - 2011-12-05 13:35:58
|
Revision: 1912 http://nsclspectcl.svn.sourceforge.net/nsclspectcl/?rev=1912&view=rev Author: ron-fox Date: 2011-12-05 13:35:47 +0000 (Mon, 05 Dec 2011) Log Message: ----------- TR 6912 fix: Specific issues and resolutions: - assignment operator of win_*d infinitely recurses - use memcpy instead which causes ccpcheck to complain about memcpy-ing objects circumventing assignment. Must still see why the recursion occurs. - The earlier assignment was ill motivated and did not actually change the caller's win_xd for Xamine_CreatexdDefault.... functions as it just did pointer assignment rather than actually transferring the attributes to the caller. This resulted in unconditionally using a scatter plot rendition rather than the more usual color. Modified Paths: -------------- trunk/SpecTcl/CHANGELOG trunk/SpecTcl/Display/Xamine.cc trunk/SpecTcl/Display/dfltmgr.cc trunk/SpecTcl/Display/dispwind.h trunk/SpecTcl/configure.in trunk/SpecTcl/treegui/parametersTabActions.tcl Modified: trunk/SpecTcl/CHANGELOG =================================================================== --- trunk/SpecTcl/CHANGELOG 2011-12-02 22:19:59 UTC (rev 1911) +++ trunk/SpecTcl/CHANGELOG 2011-12-05 13:35:47 UTC (rev 1912) @@ -928,4 +928,17 @@ November 14, 2011 - Increase the capacity of the integration widget in Xamine to 50,000 chars (Carpino request). + +3.3-005 +December 5, 2011 + - TR 6912 - undo changes in dfltmgr.cc suggested by cppcheck specifically: + - assignment operator of win_*d infinitely recurses + - use memcpy instead which causes ccpcheck to complain about memcpy-ing objects + circumventing assignment. Must still see why the recursion occurs. + - The earlier assignment was ill motivated and did not actually change the caller's + win_xd for Xamine_CreatexdDefault.... functions as it just did pointer assignment + rather than actually transferring the attributes to the caller. This resulted in + unconditionally using a scatter plot rendition rather than the more usual color. + + \ No newline at end of file Modified: trunk/SpecTcl/Display/Xamine.cc =================================================================== --- trunk/SpecTcl/Display/Xamine.cc 2011-12-02 22:19:59 UTC (rev 1911) +++ trunk/SpecTcl/Display/Xamine.cc 2011-12-05 13:35:47 UTC (rev 1912) @@ -37,6 +37,7 @@ #include <stdio.h> #include <string.h> +#include <stdlib.h> #include <sys/types.h> #include <fcntl.h> @@ -199,6 +200,9 @@ int main(int argc, char **argv) { + + // sleep(30); // 30 seconds to attach a debugger. + XMApplication top("Xamine", reinterpret_cast<Cardinal*>(&argc), argv); /* Top level/init ap. */ XMMainWindow main_win("MainWindow", top, NULL, 0); /* Main window widget. */ XMForm work_area("WorkArea", main_win); Modified: trunk/SpecTcl/Display/dfltmgr.cc =================================================================== --- trunk/SpecTcl/Display/dfltmgr.cc 2011-12-02 22:19:59 UTC (rev 1911) +++ trunk/SpecTcl/Display/dfltmgr.cc 2011-12-05 13:35:47 UTC (rev 1912) @@ -168,12 +168,12 @@ */ void Xamine_Construct1dDefaultProperties(win_1d *properties) { - win_1d *p = new win_1d(GenericDefaults); + win_1d* p = new win_1d(GenericDefaults); + memcpy(properties, p, sizeof(win_1d)); - p->setrend(rend1d); - // memcpy(properties, p, sizeof(win_1d)); - properties = p; // instead of the memcpy above. + properties->setrend(rend1d); properties->setmapped(GenericDefaults.ismapped()); + delete p; } /* @@ -186,11 +186,11 @@ */ void Xamine_Construct2dDefaultProperties(win_2d *properties) { - win_2d *p = new win_2d(GenericDefaults); + win_2d* p = new win_2d(GenericDefaults); + memcpy (properties, p, sizeof(win_2d)); - p->setrend(rend2d); - // memcpy(properties, p, sizeof(win_2d)); - properties = p; // instead of memcpy above. + + properties->setrend(rend2d); properties->setmapped(GenericDefaults.ismapped()); delete p; } Modified: trunk/SpecTcl/Display/dispwind.h =================================================================== --- trunk/SpecTcl/Display/dispwind.h 2011-12-02 22:19:59 UTC (rev 1911) +++ trunk/SpecTcl/Display/dispwind.h 2011-12-05 13:35:47 UTC (rev 1912) @@ -67,6 +67,7 @@ public: win_geometry(int nx=1, int ny=1) { setgeometry(nx,ny); } + virtual ~win_geometry() {} int nx() {return win_nx;} int ny() {return win_ny;} void setx(int nx) { win_nx = nx; } Modified: trunk/SpecTcl/configure.in =================================================================== --- trunk/SpecTcl/configure.in 2011-12-02 22:19:59 UTC (rev 1911) +++ trunk/SpecTcl/configure.in 2011-12-05 13:35:47 UTC (rev 1912) @@ -4,7 +4,7 @@ AC_CONFIG_AUX_DIR(config) AM_CONFIG_HEADER(config.h) AC_CANONICAL_HOST -AM_INIT_AUTOMAKE(SpecTcl, 3.3-004) +AM_INIT_AUTOMAKE(SpecTcl, 3.3-005) AC_EXEEXT Modified: trunk/SpecTcl/treegui/parametersTabActions.tcl =================================================================== --- trunk/SpecTcl/treegui/parametersTabActions.tcl 2011-12-02 22:19:59 UTC (rev 1911) +++ trunk/SpecTcl/treegui/parametersTabActions.tcl 2011-12-05 13:35:47 UTC (rev 1912) @@ -95,6 +95,8 @@ return $result } + + #----------------------------------------------------------------------------- # Dialogs: @@ -241,7 +243,7 @@ if {[llength $spectra] > 0} { if {[promptChangeOk $spectra]} { - return + modifySpectra $spectra $path $bins $low $hi } } else { This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <ro...@us...> - 2011-12-19 21:53:41
|
Revision: 1949 http://nsclspectcl.svn.sourceforge.net/nsclspectcl/?rev=1949&view=rev Author: ron-fox Date: 2011-12-19 21:53:33 +0000 (Mon, 19 Dec 2011) Log Message: ----------- Fix error in spectrum definition that can ask Tcl to free storage it never allocated. Modified Paths: -------------- trunk/SpecTcl/CHANGELOG trunk/SpecTcl/SpecTcl/SpectrumCommand.cpp trunk/SpecTcl/configure.in trunk/SpecTcl/gri-2.12.20/doc/index.html Modified: trunk/SpecTcl/CHANGELOG =================================================================== --- trunk/SpecTcl/CHANGELOG 2011-12-19 21:52:29 UTC (rev 1948) +++ trunk/SpecTcl/CHANGELOG 2011-12-19 21:53:33 UTC (rev 1949) @@ -941,4 +941,12 @@ unconditionally using a scatter plot rendition rather than the more usual color. - \ No newline at end of file +3.3-006 +November 30-?? 2011 + - Added flag to guistate.tcl so that new/treegui can ask it to + save without spectrum -delete and thus support the 'cumulate' + (sic) checkbutton. + - Fix errors in Stripchart spectrum shifting and channel caculation. + - Fix case in spectrum definition where we might ask Tcl to delete + storage we never allocated. + Modified: trunk/SpecTcl/SpecTcl/SpectrumCommand.cpp =================================================================== --- trunk/SpecTcl/SpecTcl/SpectrumCommand.cpp 2011-12-19 21:52:29 UTC (rev 1948) +++ trunk/SpecTcl/SpecTcl/SpectrumCommand.cpp 2011-12-19 21:53:33 UTC (rev 1949) @@ -448,8 +448,8 @@ rResult += "\n"; Usage(rResult); - Tcl_Free((char*)ppAxisElements); - Tcl_Free((char*)ppListElements); + if (*ppAxisElements) Tcl_Free((char*)ppAxisElements); + if (*ppListElements) Tcl_Free((char*)ppListElements); return TCL_ERROR; } Modified: trunk/SpecTcl/configure.in =================================================================== --- trunk/SpecTcl/configure.in 2011-12-19 21:52:29 UTC (rev 1948) +++ trunk/SpecTcl/configure.in 2011-12-19 21:53:33 UTC (rev 1949) @@ -4,7 +4,7 @@ AC_CONFIG_AUX_DIR(config) AM_CONFIG_HEADER(config.h) AC_CANONICAL_HOST -AM_INIT_AUTOMAKE(SpecTcl, 3.3-005) +AM_INIT_AUTOMAKE(SpecTcl, 3.3-006) AC_EXEEXT Modified: trunk/SpecTcl/gri-2.12.20/doc/index.html =================================================================== --- trunk/SpecTcl/gri-2.12.20/doc/index.html 2011-12-19 21:52:29 UTC (rev 1948) +++ trunk/SpecTcl/gri-2.12.20/doc/index.html 2011-12-19 21:53:33 UTC (rev 1949) @@ -8,7 +8,7 @@ <meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1"></head> <body bgcolor="#FFFFFF" text="#000000" link="#0000EE" vlink="#551A8B" alink="FF0000"> <!-- Created automatically from texinfo source --> -<!-- Tue Oct 4 7:17:31 2011 --> +<!-- Mon Dec 5 8:36:28 2011 --> This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <ro...@us...> - 2011-12-30 20:08:05
|
Revision: 1954 http://nsclspectcl.svn.sourceforge.net/nsclspectcl/?rev=1954&view=rev Author: ron-fox Date: 2011-12-30 20:07:58 +0000 (Fri, 30 Dec 2011) Log Message: ----------- Build notebook and installer for new tree guil Modified Paths: -------------- trunk/SpecTcl/Gui/folderGui.tcl trunk/SpecTcl/Makefile.am trunk/SpecTcl/configure.in Modified: trunk/SpecTcl/Gui/folderGui.tcl =================================================================== --- trunk/SpecTcl/Gui/folderGui.tcl 2011-12-30 20:07:47 UTC (rev 1953) +++ trunk/SpecTcl/Gui/folderGui.tcl 2011-12-30 20:07:58 UTC (rev 1954) @@ -1114,12 +1114,16 @@ pack $parent.b -fill both -expand 1 - label $parent.statusline1 -justify left -text {Title: N/A Run Number: N/A} - label $parent.statusline2 -justify left -text {Data Source: Test (inactive) 0 buffers analyzed 100% efficient} - pack $parent.statusline1 -fill x -expand 0 -anchor w - pack $parent.statusline2 -fill x -expand 0 -anchor w + if {$top eq ""} { + + label $parent.statusline1 -justify left -text {Title: N/A Run Number: N/A} + label $parent.statusline2 -justify left -text {Data Source: Test (inactive) 0 buffers analyzed 100% efficient} + pack $parent.statusline1 -fill x -expand 0 -anchor w + pack $parent.statusline2 -fill x -expand 0 -anchor w + + updateStatus 1000 + } + set ::SpecTclIODwellMax 100 - set ::SpecTclIODwellMax 100 - updateStatus 1000 preferences::readPrefs } Modified: trunk/SpecTcl/Makefile.am =================================================================== --- trunk/SpecTcl/Makefile.am 2011-12-30 20:07:47 UTC (rev 1953) +++ trunk/SpecTcl/Makefile.am 2011-12-30 20:07:58 UTC (rev 1954) @@ -3,7 +3,7 @@ TCL Events Gates Sorter SpectrumIO Filter Analysis\ DecoderRing TreeParam \ Fits SpecTcl \ - contrib TestFiles Gui splash filtsplit calibratedparams + contrib TestFiles Gui splash filtsplit calibratedparams treegui # Gri TestFiles need to be figured out still.. Modified: trunk/SpecTcl/configure.in =================================================================== --- trunk/SpecTcl/configure.in 2011-12-30 20:07:47 UTC (rev 1953) +++ trunk/SpecTcl/configure.in 2011-12-30 20:07:58 UTC (rev 1954) @@ -923,5 +923,7 @@ SpecTcl/Makefile \ contrib/Makefile contrib/scriptable/Makefile \ TestFiles/Makefile \ - Gui/Makefile splash/Makefile filtsplit/Makefile doc/Makefile \ + Gui/Makefile splash/Makefile \ + treegui/Makefile \ + filtsplit/Makefile doc/Makefile \ calibratedparams/Makefile) This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <ro...@us...> - 2011-12-30 20:23:17
|
Revision: 1955 http://nsclspectcl.svn.sourceforge.net/nsclspectcl/?rev=1955&view=rev Author: ron-fox Date: 2011-12-30 20:23:11 +0000 (Fri, 30 Dec 2011) Log Message: ----------- Integrate folder gui with tree gui Modified Paths: -------------- trunk/SpecTcl/Gui/folderGui.tcl trunk/SpecTcl/treegui/treeGui.tcl Modified: trunk/SpecTcl/Gui/folderGui.tcl =================================================================== --- trunk/SpecTcl/Gui/folderGui.tcl 2011-12-30 20:07:58 UTC (rev 1954) +++ trunk/SpecTcl/Gui/folderGui.tcl 2011-12-30 20:23:11 UTC (rev 1955) @@ -41,6 +41,7 @@ namespace eval ::FolderGui { variable folderGuiParent {} + variable folderGuiStatusFrame {} variable folderGuiBrowser {} } @@ -945,8 +946,8 @@ # It's always possible the user destroyed the window so conditionalize # the update on the window's existence. - if {[winfo exists $::FolderGui::folderGuiParent.statusline1] - && [winfo exists $::FolderGui::folderGuiParent.statusline2]} { + if {[winfo exists $::FolderGui::folderGuiStatusFrame.statusline1] + && [winfo exists $::FolderGui::folderGuiStatusFrame.statusline2]} { after $nms [list updateStatus $nms]; # Reschedule. @@ -969,7 +970,7 @@ } - $::FolderGui::folderGuiParent.statusline1 configure -text \ + $::FolderGui::folderGuiStatusFrame.statusline1 configure -text \ [format "Display memory: %s%s MB Title %s Run Number: %s" $spectrumMemory $outOf $RunTitle $RunNumber] set source [attach -list] if {$LastSequence > 0} { @@ -1002,7 +1003,7 @@ - $::FolderGui::folderGuiParent.statusline2 configure -text \ + $::FolderGui::folderGuiStatusFrame.statusline2 configure -text \ [format "Data Source: %s (%s) %d Buffers Analyzed %.2f%% efficient" $source $state $BuffersAnalyzed $efficiency] } @@ -1022,15 +1023,16 @@ if {$top eq ""} { toplevel .gui -menu .topmenu set parent .gui - + set ::FolderGui::folderGuiStatusFrame $parent } else { if {$parent eq ""} { error "folderGUI - providing a top level requires a parent as well" } $top configure -menu .topmenu + set ::FolderGui::folderGuiStatusFrame [ttk::frame $top.spectclstatus] } - set ::FolderGui::folderGuiParent $parent + set ::FolderGui::folderGuiParent $parent set ::FolderGui::folderGuiBrowser $parent.b @@ -1114,15 +1116,16 @@ pack $parent.b -fill both -expand 1 - if {$top eq ""} { + + ttk::label $::FolderGui::folderGuiStatusFrame.statusline1 \ + -justify left -text {Title: N/A Run Number: N/A} + ttk::label $::FolderGui::folderGuiStatusFrame.statusline2 \ + -justify left -text {Data Source: Test (inactive) 0 buffers analyzed 100% efficient} + + pack $::FolderGui::folderGuiStatusFrame.statusline1 -fill x -expand 0 -anchor w + pack $::FolderGui::folderGuiStatusFrame.statusline2 -fill x -expand 0 -anchor w - label $parent.statusline1 -justify left -text {Title: N/A Run Number: N/A} - label $parent.statusline2 -justify left -text {Data Source: Test (inactive) 0 buffers analyzed 100% efficient} - pack $parent.statusline1 -fill x -expand 0 -anchor w - pack $parent.statusline2 -fill x -expand 0 -anchor w - - updateStatus 1000 - } + updateStatus 1000 set ::SpecTclIODwellMax 100 preferences::readPrefs Modified: trunk/SpecTcl/treegui/treeGui.tcl =================================================================== --- trunk/SpecTcl/treegui/treeGui.tcl 2011-12-30 20:07:58 UTC (rev 1954) +++ trunk/SpecTcl/treegui/treeGui.tcl 2011-12-30 20:23:11 UTC (rev 1955) @@ -59,3 +59,4 @@ $treenotebook add $::FolderGui::folderGuiBrowser -text Folders -sticky nsew pack $treenotebook -expand 1 -fill both +pack $::FolderGui::folderGuiStatusFrame -expand 1 -fill x This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <ro...@us...> - 2012-01-02 13:25:06
|
Revision: 1960 http://nsclspectcl.svn.sourceforge.net/nsclspectcl/?rev=1960&view=rev Author: ron-fox Date: 2012-01-02 13:24:59 +0000 (Mon, 02 Jan 2012) Log Message: ----------- Work item 208 - Support save/restore of the mcgui rewrite parameter tab. Note that this uses the observer pattern in both the folder gui (which is used to save state) and the mcgui's restoration). Modified Paths: -------------- trunk/SpecTcl/Gui/guistate.tcl trunk/SpecTcl/treegui/autosave.tcl trunk/SpecTcl/treegui/parametersTabActions.tcl trunk/SpecTcl/treegui/spectrumTabActions.tcl Added Paths: ----------- trunk/SpecTcl/treegui/restore.tcl Modified: trunk/SpecTcl/Gui/guistate.tcl =================================================================== --- trunk/SpecTcl/Gui/guistate.tcl 2012-01-01 16:45:21 UTC (rev 1959) +++ trunk/SpecTcl/Gui/guistate.tcl 2012-01-02 13:24:59 UTC (rev 1960) @@ -240,6 +240,8 @@ variable pseudostatus variable writeDeletes 1; # If true commands are emitted to delete spectra. + variable observers; # List of scripts that are executed during saves.` + array set observers [list]; # Initialized to empty. } # getDependentGates description @@ -592,6 +594,12 @@ writeGateDefinitions $fd writeGateApplications $fd writeFilters $fd + + # Now execute the observers at the global level: + + foreach observerName [array names ::guistate::observers] { + uplevel #0 $::guistate::observers($observerName) $fd + } } # @@ -702,3 +710,28 @@ close $fd } } +#----------------------------------------------------------------------- +# +# Observer management code: +# + +## +# Add a save state observer. These are run in arbitrary order +# after the main state is saved. +# @param name - Name of the observer (should be unique). +# @param script - Script to run. The file descriptor to which the +# save is being done is appended to the script. +# +proc addSaveObserver {name script} { + set ::guistate::observers($name) $script +} +## +# Remove a save state observer. +# @name - Name of the observer to remove. It is a no-op to remove an +# observer that does not exist (not an error). +# +proc removeSaveObserver name { + if {[array names ::guistate::observers $name] eq $name} { + array unset ::guistate::observers $name + } +} \ No newline at end of file Modified: trunk/SpecTcl/treegui/autosave.tcl =================================================================== --- trunk/SpecTcl/treegui/autosave.tcl 2012-01-01 16:45:21 UTC (rev 1959) +++ trunk/SpecTcl/treegui/autosave.tcl 2012-01-02 13:24:59 UTC (rev 1960) @@ -12,9 +12,10 @@ # Michigan State University # East Lansing, MI 48824-1321 -package require treeUtilities package require Itcl +package require guistate + package provide autosave 1.0 ## @@ -74,6 +75,9 @@ # In the singleton pattern, the construtor is labeled private # so that it can only be invoked, if needed by the getInstance # common method. + # Unfortunately itcl does not honor private restrictions on constructors. + # hence the check for instance below. + # private constructor {} { if {$instance ne [list]} { error "Singleton-ness violated for autoSave" Modified: trunk/SpecTcl/treegui/parametersTabActions.tcl =================================================================== --- trunk/SpecTcl/treegui/parametersTabActions.tcl 2012-01-01 16:45:21 UTC (rev 1959) +++ trunk/SpecTcl/treegui/parametersTabActions.tcl 2012-01-02 13:24:59 UTC (rev 1960) @@ -16,6 +16,7 @@ package require Itcl package require treeParametersContainer package require treeUtilities +package require restore package provide parametersTabActions 1.0 @@ -301,6 +302,15 @@ -change [list $this changeSpectra %S] \ -namechanged [list $this nameChanged %S] + # Register an observer for the save so that we can + # Save our state too: + + addSaveObserver parameterTabLayout [list $this saveLayout] + + + # Register an observer to restore the state of the editors etc.: + + [Restore::getInstance] addObserver ParameterTab [list $this restoreLayout] } @@ -311,6 +321,95 @@ # interface. ## + # Restore the layout after a read from file. + # See saveLayout for how the layout is saved. + # + public method restoreLayout {} { + + # First load the layout, clearing any unset slots: + + + set lines [$widget cget -number] + for {set i 1} {$i <= $lines} {incr i} { + + set name "" + set low "" + set hi "" + set units "" + + # Fill the slot if it has values.. assume the file is well formed: + + if {[array names ::parameter Name$i] eq "Name$i"} { + set name $::parameter(Name$i) + set low $::parameter(Start$i) + set hi $::parameter(Stop$i) + set units $::parameter(Unit$i) + } + $widget load $i $name $low $hi $units + + } + # Set the array/selection: + + if {[array names ::parameter select] eq "select"} { + $widget configure -current $::parameter(select) + } + + # Set the array checkbox: + + if {[array names ::parameter Array] eq "Array"} { + # Ensure we get the exact value right even for old files: + + if {$::parameter(Array) } { + set value true + } else { + set value false + } + $widget configure -array $value + } + + + } + + ## + # Save the layout of the tab to a save file. + # This is done by adding a bunch of 'set parameter' elements. + # - Namei - the name of the parameter in the i'th line if not empty. + # - Starti - The low limit of the i'th line if not empty. + # - Stopi - The high limit of the i'th line if not empty. + # - Uniti - The units of the i'th line if not empty. + # - select - The index of the selected line (radio button). + # - Array - State of the array check button. + # + # @param fd - File descriptor open on the save file. + # + public method saveLayout fd { + set lines [$widget cget -number]; # Number of parameter lines to interrogate/save: + + puts $fd "# - Parameter tab layout: " + + # Contents of the editors: + + for {set i 1} {$i <= $lines} {incr i} { + set lineInfo [$widget get $i] + set name [lindex $lineInfo 0] + if {$name ne ""} { + set low [lindex $lineInfo 1] + set hi [lindex $lineInfo 2] + set units [lindex $lineInfo 3] + foreach index [list Name Start Stop Unit] value [list $name $low $hi $units] { + puts $fd "set parameter($index$i) [list $value]"; # list does quoting if needed + } + } + } + # Selection and array values: + + puts $fd "set parameter(select) [$widget cget -current]" + puts $fd "set parameter(Array) [$widget cget -array]" + + + } + + ## # Load the currently selected editor with a specific tree parameter # selected from the parameter pull right menu: # Added: trunk/SpecTcl/treegui/restore.tcl =================================================================== --- trunk/SpecTcl/treegui/restore.tcl (rev 0) +++ trunk/SpecTcl/treegui/restore.tcl 2012-01-02 13:24:59 UTC (rev 1960) @@ -0,0 +1,93 @@ +# +# http://www.gnu.org/licenses/gpl.txt +# +# Author: +# Ron Fox +# NSCL +# Michigan State University +# East Lansing, MI 48824-1321 + +package require Itcl + +package provide restore 1.0 + +## +# Itcl singleton class that manages restoring state with observers. +# state restoration is really a source at global level. +# For the mcGUI Rewrite this is used to provide the tabaction classes/objects +# a hook to find the arrays their save observers may have placed in the files +# to restore their visual state. +# +# Public methods provided are: +# - getInstance - Get the singleton instance +# - addObserver - Adds an observer that is called after the state restore. +# - removeObserver - Remove an observer that has been added via addObserver. +# - restore - Restore state of the software. +# +# + +itcl::class Restore { + private common instance [list] + private variable observers + + #-------------------------------------------------------------------- + # + # Public interface + + ## + # Return the instance variable, creating the singleton if needed: + # + public proc getInstance {} { + if {$instance == [list]} { + Restore ::#auto + } + return $instance + } + ## + # In the singleton pattern, normally constructors are private, + # unfortunately, itcl does not honor private-ness of constructors hence the + # intance check below + + private constructor {} { + if {$instance ne [list]} { + error "Singleton-ness violated for autoSave" + } + array set observers [list] + set instance $this + } + + ## + # Add an observer to the set of observers invoked on a restore. + # + # @param name - Name of the observer (must be unique). + # @param script- Observers script. + # + public method addObserver {name script} { + set observers($name) $script + } + ## + # Remove an observer by name. It is a no-op to remove an observer that + # does not exist. + # + # @param name - Name of observer to remove. + # + public method removeObserver name { + if {[array names observers $name] eq $name} { + array unset observers $name + } + } + ## + # restore the program state from a file by sourceing the designated script at + # global level and then invoking all defined observers at global level. + # + # @param name - filename to be sourced. + # + public method restore name { + uplevel #0 source $name + + foreach observerName [array names observers] { + uplevel #0 $observers($observerName) + } + } + +} Modified: trunk/SpecTcl/treegui/spectrumTabActions.tcl =================================================================== --- trunk/SpecTcl/treegui/spectrumTabActions.tcl 2012-01-01 16:45:21 UTC (rev 1959) +++ trunk/SpecTcl/treegui/spectrumTabActions.tcl 2012-01-02 13:24:59 UTC (rev 1960) @@ -19,6 +19,7 @@ package require guistate package require autosave +package require restore package provide spectrumTabActions 1.0 @@ -212,8 +213,9 @@ } # Now we can read the file: # - uplevel #0 source $name + [Restore::getInstance] restore $name + [autoSave::getInstance] failsafeSave } This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <ro...@us...> - 2012-02-06 15:34:00
|
Revision: 1977 http://nsclspectcl.svn.sourceforge.net/nsclspectcl/?rev=1977&view=rev Author: ron-fox Date: 2012-02-06 15:33:48 +0000 (Mon, 06 Feb 2012) Log Message: ----------- Fixes as a result of the 3.3-006-beta2 test period. Modified Paths: -------------- trunk/SpecTcl/TreeParam/SpectrumGenerator.tcl trunk/SpecTcl/treegui/gateTabActions.tcl trunk/SpecTcl/treegui/spectrumAxis.tcl trunk/SpecTcl/treegui/spectrumContainer.tcl trunk/SpecTcl/treegui/spectrumManipulation.tcl trunk/SpecTcl/treegui/spectrumTabActions.tcl trunk/SpecTcl/treegui/treeUtilities.tcl Modified: trunk/SpecTcl/TreeParam/SpectrumGenerator.tcl =================================================================== --- trunk/SpecTcl/TreeParam/SpectrumGenerator.tcl 2012-01-26 10:55:30 UTC (rev 1976) +++ trunk/SpecTcl/TreeParam/SpectrumGenerator.tcl 2012-02-06 15:33:48 UTC (rev 1977) @@ -912,7 +912,7 @@ Modified } -proc GenerateGateMenu {parent command} { +proc GenerateGateMenu {parent command} { # Generate a menu containing all available gates and attaches it to the parent widget destroy $parent.menu set wymax [winfo vrootheight .] Modified: trunk/SpecTcl/treegui/gateTabActions.tcl =================================================================== --- trunk/SpecTcl/treegui/gateTabActions.tcl 2012-01-26 10:55:30 UTC (rev 1976) +++ trunk/SpecTcl/treegui/gateTabActions.tcl 2012-02-06 15:33:48 UTC (rev 1977) @@ -38,10 +38,31 @@ private variable gateDeleteChain; # prior gate delete trace. private variable gateChangeChain; # prior gate change trace. + private variable menuUpdateAfterId -1; # after item for scheduling a load request. + #------------------------------------------------------------------------------ # Private methods: + ## + # Schedule an execution of the loadMenu command for .5 seconds from now. + # if the update is already scheduled don't schedule again + # + + private method scheduleLoadUpdate {} { + if {$menuUpdateAfterId == -1} { + set menuUpdateAfterId [after 500 [itcl::code $this doScheduledLoadUpdate]] + } + } + ## + # Called to do a scheduled loadUpdate...resets the menuUpdateAfterId to -1 again + # + private method doScheduledLoadUpdate {} { + set menuUpdateAfterId -1 + loadGateMenu + } + + ## # Return the type code of a gate: # @param gate - the gate to parse. # @@ -108,21 +129,33 @@ # @name is the name of the gate that fired the trace. # private method gateAdded name { - loadGateMenu + set status [catch { + scheduleLoadUpdate if {$gateAddChain ne ""} { - uplevel #0 $gateAddChain $name + uplevel #0 [list $gateAddChain $name] + }} msg] + if {$status} { + puts "gateAdded failed: $msg $name" } } private method gateDeleted name { - loadGateMenu + set status [catch { + scheduleLoadUpdate if {$gateDeleteChain ne ""} { - uplevel #0 $gateDeleteChain $name + uplevel #0 [list $gateDeleteChain $name] + }} msg] + if {$status} { + puts "gateDeleted failed: $msg $name" } } private method gateChanged name { - loadGateMenu + set status [catch { + scheduleLoadUpdate if {$gateChangeChain ne ""} { - uplevel #0 $gateChangeChain $name + uplevel #0 [list $gateChangeChain $name] + }} msg] + if {$status} { + puts "gateChanged failed: $msg $status" } } ## Modified: trunk/SpecTcl/treegui/spectrumAxis.tcl =================================================================== --- trunk/SpecTcl/treegui/spectrumAxis.tcl 2012-01-26 10:55:30 UTC (rev 1976) +++ trunk/SpecTcl/treegui/spectrumAxis.tcl 2012-02-06 15:33:48 UTC (rev 1977) @@ -37,13 +37,15 @@ # -units - Units of the parameter. # -state - State of the Parameter, low, high and bins entries. # -command - Script executed when a parameter is selected from the menu. +# -changed - Script executed when the parameter name has changed (typing). # # @note The low, high, bins are constrained to hold either an empty string # or a valid integer (e.g. string isvalid must hold). # @note substitutions are: # - %W - widget ($self) -# - %L - Label of menu item clicked. -# - %N - Full path to the item selected in the menu hierarchy. +# - %L - Label of menu item clicked. [-command] +# - %N - Full path to the item selected in the menu hierarchy. [-command] +# - %T - Value of parameter name entry [-changed] # snit::widget spectrumAxis { @@ -58,6 +60,7 @@ option -state -default normal -configuremethod StateChange option -command -default [list] + option -changed -default [list] ## # Construct and layout the component widgets. @@ -83,10 +86,10 @@ ttk::entry $win.parameter -textvariable ${selfns}::options(-parameter) \ -takefocus 1 ttk::entry $win.low -textvariable ${selfns}::options(-low) \ - -validate key -validatecommand [list string is double %P] -width 7 \ + -validate key -validatecommand [mymethod validateAxis %P] -width 7 \ -takefocus 1 ttk::entry $win.high -textvariable ${selfns}::options(-high) \ - -validate key -validatecommand [list string is double %P] -width 7 \ + -validate key -validatecommand [mymethod validateAxis %P] -width 7 \ -takefocus 1 ttk::entry $win.bins -textvariable ${selfns}::options(-bins) \ -validate key -validatecommand [list string is integer %P] -width 7 \ @@ -100,6 +103,8 @@ $self configurelist $args + + bind $win.parameter <Key> [list after idle [mymethod Keystroke]] } #--------------------------------------------------------------------------------- # Configuration management @@ -139,6 +144,12 @@ #-------------------------------------------------------------------------------------- # Action handlers + ## + # Called in response to a keystroke in the parameter name entry widget: + # + method Keystroke {} { + ::treeutility::dispatch $options(-changed) [list %W %T] [list $self [$win.parameter get]] + } ## ## @@ -151,5 +162,22 @@ ::treeutility::dispatch $options($option) [list %W %L %N] [list $self [list $label] [list $name]] } + ## + # Validation command for axes...a leading minus is allowed as well as a floating point. + # just a minus is allowed since someone might type in order -1.234 + # + # @param value - Current value of the entry. + # + # @return int + # @retval 0 - invalid value + # @retval 1 - valid value. + # + method validateAxis value { + set value [string trim $value] + if {$value eq "-"} { + return 1 + } + return [string is double $value] + } } \ No newline at end of file Modified: trunk/SpecTcl/treegui/spectrumContainer.tcl =================================================================== --- trunk/SpecTcl/treegui/spectrumContainer.tcl 2012-01-26 10:55:30 UTC (rev 1976) +++ trunk/SpecTcl/treegui/spectrumContainer.tcl 2012-02-06 15:33:48 UTC (rev 1977) @@ -82,6 +82,8 @@ delegate option -xbins to spectrum delegate option -xunits to spectrum delegate option -xparamselected to spectrum + delegate option -xchanged to spectrum + delegate option -ychanged to spectrum delegate option -yparameter to spectrum Modified: trunk/SpecTcl/treegui/spectrumManipulation.tcl =================================================================== --- trunk/SpecTcl/treegui/spectrumManipulation.tcl 2012-01-26 10:55:30 UTC (rev 1976) +++ trunk/SpecTcl/treegui/spectrumManipulation.tcl 2012-02-06 15:33:48 UTC (rev 1977) @@ -78,6 +78,7 @@ delegate option -xunits to xaxis as -units delegate option -xbins to xaxis as -bins delegate option -xparamselected to xaxis as -command + delegate option -xchanged to xaxis as -changed # Y: @@ -88,6 +89,7 @@ delegate option -ybins to yaxis as -bins delegate option -yparamselected to yaxis as -command delegate option -ystate to yaxis as -state + delegate option -ychanged to yaxis as -changed delegate option -arraystate to array as -state Modified: trunk/SpecTcl/treegui/spectrumTabActions.tcl =================================================================== --- trunk/SpecTcl/treegui/spectrumTabActions.tcl 2012-01-26 10:55:30 UTC (rev 1976) +++ trunk/SpecTcl/treegui/spectrumTabActions.tcl 2012-02-06 15:33:48 UTC (rev 1977) @@ -38,11 +38,29 @@ private variable promptSpectrumOverwrite 0 + private variable gatesUpdateAfterId -1; # after id for scheduling a re-pop of the gate menu. - #------------------------------------------------------------------------- # Private utility methods + ## + # Schedule an update of the gate menu .5 seconds from now. + # addtional schedule prior the execution are no-op. + # + private method scheduleGateUpdate {} { + if {$gatesUpdateAfterId == -1} { + set gatesUpdateAfterId [after 500 [itcl::code $this doScheduledGateUpdate]] + } + } + ## + # Perform a scheduled gate update operation: + # + private method doScheduledGateUpdate {} { + puts "In spectrum gate update function" + set gatesUpdateAfterId -1 + LoadGateMenu + } + ## Given a number if it turns out the number is an integer, # just return the integerized string. If not trailing 0's # are trimmed from the fp string (assuming not 1.0E10 notation). @@ -406,25 +424,63 @@ # @param name - the name of the gate affected. private method gateAdded name { - LoadGateMenu + set status [catch { + scheduleGateUpdate if {$gateAddChain ne ""} { - uplevel #0 $gateAddChain $name + uplevel #0 [list $gateAddChain $name] + }} msg] + if {$status} { + puts "gateAdded failed: $msg $name" } } private method gateDeleted name { - LoadGateMenu + set status [catch { + scheduleGateUpdate if {$gateDeleteChain ne ""} { - uplevel #0 $gateDeleteChain $name + uplevel #0 [list $gateDeleteChain $name] + }} msg] + if {$status} { + puts "gateDeleted failed: $msg $name" } } private method gateChanged name { - LoadGateMenu + set status [catch { + scheduleGateUpdate if {$gateChangeChain ne ""} { - uplevel #0 $gateChangeChain $name + uplevel #0 [list $gateChangeChain $name] + }} msg] + puts "gateChanged failed: $msg $name" + } + ## + # For a given spectrum return the applied gate or an empty string if no gate is applied. + # + # @param name - spectrum name + # + # @return string + # @retval possibly empty string of the applied gate. + # + private method AppliedGate name { + set list [apply -list $name] + if {[llength $list] != 0} { + set applied [lindex $list 0] + return [lindex [lindex $applied 1] 0]; # gate name. + } else { + return "" } } + ## + # Given a spectrum name and a gate name, apply the gate the the spectrum. + # If the gate name is an empty string, this is a no-op. + # + # @param specName - spectrum name. + # @param gate - Gate name. + # + private method ApplyGate {specName gate} { + if {$gate ne ""} { + apply $gate $specName + } + } - ## # Whenever a gate is selected its full path is put in the entry below the menu: # @param name - full name of the gate. @@ -613,20 +669,33 @@ set xbins [$widget cget -xbins] - + # Do nothing if any of the above are empty: if {[anyNulls [list $type $datatype $name $xname $xlow $xhi $xbins]]} { return } + if {![string is double -strict $xlow] || + ![string is double -strict $xhi]} { + ::treeutility::errorMessage \ + "Invalid X axis specification. Both low and high must be valid floats were: $xlow $xhi" + return + } + + + # Bins must be integers: if {![string is integer $xbins]} { - error "The number of bins on the x axis must be an integer was: $xbins" + ::treeutility::errorMessage "The number of bins on the x axis must be an integer was: $xbins" + return } + if {$xbins < 0} { + ::treeutility::errorMessage "The number of bins on the x axis must be positive was $xbins" + return + } - # What happens next depends entirely on the spectrum type # Bitmask and 1d define essentially the same. # 2d and Stripchart need different defs. @@ -659,16 +728,20 @@ if {([llength $existingSpectra] == 0) || [::treeutility::okToReplaceSpectra $existingSpectra]} { foreach parameter $parameterList spectrum $spectrumList { + set gateName [AppliedGate $spectrum] catch {spectrum -delete $spectrum} spectrum $spectrum $type $parameter \ [list [list $xlow $xhi $xbins]] $datatype + ApplyGate $spectrum $gateName sbind $spectrum } } } else { if {[okToReplaceSpectrum $name]} { + set gateName [AppliedGate $name] catch {spectrum -delete $name}; # get rid of any prior spectrum. spectrum $name $type $xname [list [list $xlow $xhi $xbins]] $datatype + ApplyGate $name $gateName sbind $name } } @@ -679,8 +752,10 @@ set yname [$widget cget -yparameter] if {($yname ne "") && [okToReplaceSpectrum $name]} { + set gateName [AppliedGate $name] catch {spectrum -delete $name} spectrum $name $type [list $xname $yname] [list [list $xlow $xhi $xbins]] $datatype + ApplyGate $name $gateName sbind $name } } @@ -694,11 +769,25 @@ if {![anyNulls [list $yname $ylow $yhi $ybins]] && [okToReplaceSpectrum $name]} { if {![string is integer $ybins]} { - error "Bins on y axis must be an integer was: $ybins" + ::treeutility::errorMessage "Bins on y axis must be an integer was: $ybins" + return } + if {$ybins < 0} { + ::treeutility::errorMessage "Y bins must be a positive integer, was: $ybins" + return + } + if {![string is double -strict $ylow] || + ![string is double -strict $yhi]} { + ::treeutility::errorMessage \ + "Invalid Y axis specification. Both low and high must be valid floats were: $ylow $yhi" + return + } + + set gate [AppliedGate $name] catch {spectrum -delete $name} spectrum $name $type [list $xname $yname] \ [list [list $xlow $xhi $xbins] [list $ylow $yhi $ybins]] $datatype + ApplyGate $name $gate sbind $name } } @@ -707,8 +796,10 @@ if {[okToReplaceSpectrum $name]} { set parameterList [::treeutility::listArrayElements $xname ::treeutility::parameterList] + set gate [AppliedGate $name] catch {spectrum -delete $name} spectrum $name $type $parameterList [list [list $xlow $xhi $xbins]] + ApplyGate $name $gate sbind $name } } @@ -718,9 +809,11 @@ if {[okToReplaceSpectrum $name]} { set parameterList [::treeutility::listArrayElements $xname ::treeutility::parameterList] + set gate [AppliedGate $name] catch {spectrum -delete $name} spectrum $name $type $parameterList \ [list [list $xlow $xhi $xbins] [list $xlow $xhi $xbins]] + ApplyGate $name $gate sbind $name } @@ -753,6 +846,30 @@ } } + ## + # Called when a parameter name has been typed into in an axis + # If the new entry field defines a parameter, its low/high/bins/units are + # loaded into the widget otherwise, ?'s are put in those field.s + # + # @param wid - spectrumAxis widget that changed. + # @param name - New value of the parameter. + # + private method SetParameterInfo {wid name} { + set info [treeparameter -list $name] + + + if {[llength $info] == 0} { + $wid configure -low ? -high ? -bins ? -units ? + } else { + set info [lindex $info 0]; # hopefully no wildcards in the name..if so get the first match. + + $wid configure -low [lindex $info 2] \ + -high [lindex $info 3] \ + -bins [lindex $info 1] \ + -units [lindex $info 5] + } + } + #--------------------------------------------------------------------------- # True public interface. There are other public methods but they # require that exposure to be used as callbacks. @@ -790,7 +907,9 @@ -xparamselected [itcl::code $this LoadParameter x %N] \ -yparamselected [itcl::code $this LoadParameter y %N] \ -createcmd [itcl::code $this CreateSpectrum] \ - -failsafechanged [itcl::code $this ChangeFailsafe] + -failsafechanged [itcl::code $this ChangeFailsafe] \ + -xchanged [itcl::code $this SetParameterInfo %W %T] \ + -ychanged [itcl::code $this SetParameterInfo %W %T] Modified: trunk/SpecTcl/treegui/treeUtilities.tcl =================================================================== --- trunk/SpecTcl/treegui/treeUtilities.tcl 2012-01-26 10:55:30 UTC (rev 1976) +++ trunk/SpecTcl/treegui/treeUtilities.tcl 2012-02-06 15:33:48 UTC (rev 1977) @@ -133,3 +133,11 @@ return [expr $answer eq "yes"] } +## +# Report an error message via tk_messageBox: +# +# @param message +# +proc ::treeutility::errorMessage message { + tk_messageBox -type ok -icon error -message $message -title ERROR +} \ No newline at end of file This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <ro...@us...> - 2012-03-26 17:24:02
|
Revision: 1984 http://nsclspectcl.svn.sourceforge.net/nsclspectcl/?rev=1984&view=rev Author: ron-fox Date: 2012-03-26 17:23:50 +0000 (Mon, 26 Mar 2012) Log Message: ----------- Port to wheezy. Modified Paths: -------------- trunk/SpecTcl/Display/clientops.h trunk/SpecTcl/Display/colorset.cc trunk/SpecTcl/Display/printer.cc trunk/SpecTcl/SpecTcl/ScalerProcessorCallbacks.cpp trunk/SpecTcl/SpectrumIO/NSCLAsciiSpectrumFormatter.cpp Modified: trunk/SpecTcl/Display/clientops.h =================================================================== --- trunk/SpecTcl/Display/clientops.h 2012-03-14 01:25:32 UTC (rev 1983) +++ trunk/SpecTcl/Display/clientops.h 2012-03-26 17:23:50 UTC (rev 1984) @@ -51,6 +51,13 @@ #include <Xamine.h> +#ifndef __STDINT_H +#include <stdint.h> +#ifndef __STDINT_H +#define __STDINT_H +#endif +#endif + #define BUTTON_LABELSIZE 16 #define BUTTON_PROMPTSIZE 80 #define BUTTON_MAXTEXT 256 @@ -166,7 +173,7 @@ typedef struct { /* Describe a button. */ - int button_code; /* Code to return on activation. */ + uint64_t button_code; /* Code to return on activation. */ ButtonTitle label; /* Text written in button */ ButtonType type; /* Type of button. */ Logical state; /* Initial toggle state */ Modified: trunk/SpecTcl/Display/colorset.cc =================================================================== --- trunk/SpecTcl/Display/colorset.cc 2012-03-14 01:25:32 UTC (rev 1983) +++ trunk/SpecTcl/Display/colorset.cc 2012-03-26 17:23:50 UTC (rev 1984) @@ -1,280 +1,20 @@ /* - GNU GENERAL PUBLIC LICENSE - Version 2, June 1991 + This software is Copyright by the Board of Trustees of Michigan + State University (c) Copyright 2008 - Copyright (C) 1989, 1991 Free Software Foundation, Inc. - 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA - Everyone is permitted to copy and distribute verbatim copies - of this license document, but changing it is not allowed. + You may use this software under the terms of the GNU public license + (GPL). The terms of this license are described at: - Preamble + http://www.gnu.org/licenses/gpl.txt - The licenses for most software are designed to take away your -freedom to share and change it. By contrast, the GNU General Public -License is intended to guarantee your freedom to share and change free -software--to make sure the software is free for all its users. This -General Public License applies to most of the Free Software -Foundation's software and to any other program whose authors commit to -using it. (Some other Free Software Foundation software is covered by -the GNU Library General Public License instead.) You can apply it to -your programs, too. + Author: + Ron Fox + NSCL + Michigan State University + East Lansing, MI 48824-1321 +*/ - When we speak of free software, we are referring to freedom, not -price. Our General Public Licenses are designed to make sure that you -have the freedom to distribute copies of free software (and charge for -this service if you wish), that you receive source code or can get it -if you want it, that you can change the software or use pieces of it -in new free programs; and that you know you can do these things. - To protect your rights, we need to make restrictions that forbid -anyone to deny you these rights or to ask you to surrender the rights. -These restrictions translate to certain responsibilities for you if you -distribute copies of the software, or if you modify it. - - For example, if you distribute copies of such a program, whether -gratis or for a fee, you must give the recipients all the rights that -you have. You must make sure that they, too, receive or can get the -source code. And you must show them these terms so they know their -rights. - - We protect your rights with two steps: (1) copyright the software, and - (2) offer you this license which gives you legal permission to copy, -distribute and/or modify the software. - - Also, for each author's protection and ours, we want to make certain -that everyone understands that there is no warranty for this free -software. If the software is modified by someone else and passed on, we -want its recipients to know that what they have is not the original, so -that any problems introduced by others will not reflect on the original -authors' reputations. - - Finally, any free program is threatened constantly by software -patents. We wish to avoid the danger that redistributors of a free -program will individually obtain patent licenses, in effect making the -program proprietary. To prevent this, we have made it clear that any -patent must be licensed for everyone's free use or not licensed at all. - - The precise terms and conditions for copying, distribution and -modification follow. - - GNU GENERAL PUBLIC LICENSE - TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION - - 0. This License applies to any program or other work which contains -a notice placed by the copyright holder saying it may be distributed -under the terms of this General Public License. The "Program", below, -refers to any such program or work, and a "work based on the Program" -means either the Program or any derivative work under copyright law: -that is to say, a work containing the Program or a portion of it, -either verbatim or with modifications and/or translated into another -language. (Hereinafter, translation is included without limitation in -the term "modification".) Each licensee is addressed as "you". - -Activities other than copying, distribution and modification are not -covered by this License; they are outside its scope. The act of -running the Program is not restricted, and the output from the Program -is covered only if its contents constitute a work based on the -Program (independent of having been made by running the Program). -Whether that is true depends on what the Program does. - - 1. You may copy and distribute verbatim copies of the Program's -source code as you receive it, in any medium, provided that you -conspicuously and appropriately publish on each copy an appropriate -copyright notice and disclaimer of warranty; keep intact all the -notices that refer to this License and to the absence of any warranty; -and give any other recipients of the Program a copy of this License -along with the Program. - -You may charge a fee for the physical act of transferring a copy, and -you may at your option offer warranty protection in exchange for a fee. - - 2. You may modify your copy or copies of the Program or any portion -of it, thus forming a work based on the Program, and copy and -distribute such modifications or work under the terms of Section 1 -above, provided that you also meet all of these conditions: - - a) You must cause the modified files to carry prominent notices - stating that you changed the files and the date of any change. - - b) You must cause any work that you distribute or publish, that in - whole or in part contains or is derived from the Program or any - part thereof, to be licensed as a whole at no charge to all third - parties under the terms of this License. - - c) If the modified program normally reads commands interactively - when run, you must cause it, when started running for such - interactive use in the most ordinary way, to print or display an - announcement including an appropriate copyright notice and a - notice that there is no warranty (or else, saying that you provide - a warranty) and that users may redistribute the program under - these conditions, and telling the user how to view a copy of this - License. (Exception: if the Program itself is interactive but - does not normally print such an announcement, your work based on - the Program is not required to print an announcement.) - -These requirements apply to the modified work as a whole. If -identifiable sections of that work are not derived from the Program, -and can be reasonably considered independent and separate works in -themselves, then this License, and its terms, do not apply to those -sections when you distribute them as separate works. But when you -distribute the same sections as part of a whole which is a work based -on the Program, the distribution of the whole must be on the terms of -this License, whose permissions for other licensees extend to the -entire whole, and thus to each and every part regardless of who wrote it. - -Thus, it is not the intent of this section to claim rights or contest -your rights to work written entirely by you; rather, the intent is to -exercise the right to control the distribution of derivative or -collective works based on the Program. - -In addition, mere aggregation of another work not based on the Program -with the Program (or with a work based on the Program) on a volume of -a storage or distribution medium does not bring the other work under -the scope of this License. - - 3. You may copy and distribute the Program (or a work based on it, -under Section 2) in object code or executable form under the terms of -Sections 1 and 2 above provided that you also do one of the following: - - a) Accompany it with the complete corresponding machine-readable - source code, which must be distributed under the terms of Sections - 1 and 2 above on a medium customarily used for software interchange; or, - - b) Accompany it with a written offer, valid for at least three - years, to give any third party, for a charge no more than your - cost of physically performing source distribution, a complete - machine-readable copy of the corresponding source code, to be - distributed under the terms of Sections 1 and 2 above on a medium - customarily used for software interchange; or, - - c) Accompany it with the information you received as to the offer - to distribute corresponding source code. (This alternative is - allowed only for noncommercial distribution and only if you - received the program in object code or executable form with such - an offer, in accord with Subsection b above.) - -The source code for a work means the preferred form of the work for -making modifications to it. For an executable work, complete source -code means all the source code for all modules it contains, plus any -associated interface definition files, plus the scripts used to -control compilation and installation of the executable. However, as a -special exception, the source code distributed need not include -anything that is normally distributed (in either source or binary -form) with the major components (compiler, kernel, and so on) of the -operating system on which the executable runs, unless that component -itself accompanies the executable. - -If distribution of executable or object code is made by offering -access to copy from a designated place, then offering equivalent -access to copy the source code from the same place counts as -distribution of the source code, even though third parties are not -compelled to copy the source along with the object code. - - 4. You may not copy, modify, sublicense, or distribute the Program -except as expressly provided under this License. Any attempt -otherwise to copy, modify, sublicense or distribute the Program is -void, and will automatically terminate your rights under this License. -However, parties who have received copies, or rights, from you under -this License will not have their licenses terminated so long as such -parties remain in full compliance. - - 5. You are not required to accept this License, since you have not -signed it. However, nothing else grants you permission to modify or -distribute the Program or its derivative works. These actions are -prohibited by law if you do not accept this License. Therefore, by -modifying or distributing the Program (or any work based on the -Program), you indicate your acceptance of this License to do so, and -all its terms and conditions for copying, distributing or modifying -the Program or works based on it. - - 6. Each time you redistribute the Program (or any work based on the -Program), the recipient automatically receives a license from the -original licensor to copy, distribute or modify the Program subject to -these terms and conditions. You may not impose any further -restrictions on the recipients' exercise of the rights granted herein. -You are not responsible for enforcing compliance by third parties to -this License. - - 7. If, as a consequence of a court judgment or allegation of patent -infringement or for any other reason (not limited to patent issues), -conditions are imposed on you (whether by court order, agreement or -otherwise) that contradict the conditions of this License, they do not -excuse you from the conditions of this License. If you cannot -distribute so as to satisfy simultaneously your obligations under this -License and any other pertinent obligations, then as a consequence you -may not distribute the Program at all. For example, if a patent -license would not permit royalty-free redistribution of the Program by -all those who receive copies directly or indirectly through you, then -the only way you could satisfy both it and this License would be to -refrain entirely from distribution of the Program. - -If any portion of this section is held invalid or unenforceable under -any particular circumstance, the balance of the section is intended to -apply and the section as a whole is intended to apply in other -circumstances. - -It is not the purpose of this section to induce you to infringe any -patents or other property right claims or to contest validity of any -such claims; this section has the sole purpose of protecting the -integrity of the free software distribution system, which is -implemented by public license practices. Many people have made -generous contributions to the wide range of software distributed -through that system in reliance on consistent application of that -system; it is up to the author/donor to decide if he or she is willing -to distribute software through any other system and a licensee cannot -impose that choice. - -This section is intended to make thoroughly clear what is believed to -be a consequence of the rest of this License. - - 8. If the distribution and/or use of the Program is restricted in -certain countries either by patents or by copyrighted interfaces, the -original copyright holder who places the Program under this License -may add an explicit geographical distribution limitation excluding -those countries, so that distribution is permitted only in or among -countries not thus excluded. In such case, this License incorporates -the limitation as if written in the body of this License. - - 9. The Free Software Foundation may publish revised and/or new versions of the General Public License from time to time. Such new versions will be similar in spirit to the present version, but may differ in detail to address new problems or concerns. - -Each version is given a distinguishing version number. If the Program -specifies a version number of this License which applies to it and "any -later version", you have the option of following the terms and conditions -either of that version or of any later version published by the Free Software -Foundation. If the Program does not specify a version number of this License, - you may choose any version ever published by the Free Software Foundation. - - 10. If you wish to incorporate parts of the Program into other free -programs whose distribution conditions are different, write to the author to -ask for permission. For software which is copyrighted by the Free Software -Foundation, write to the Free Software Foundation; we sometimes make -exceptions for this. Our decision will be guided by the two goals of -preserving the free status of all derivatives of our free software and of -promoting the sharing and reuse of software generally. - - NO WARRANTY - - 11. BECAUSE THE PROGRAM IS LICENSED FREE OF CHARGE, THERE IS NO WARRANTY FOR -THE PROGRAM, TO THE EXTENT PERMITTED BY APPLICABLE LAW. EXCEPT WHEN -OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR OTHER PARTIES PROVIDE -THE PROGRAM "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED OR IMPLIED, -INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND -FITNESS FOR A PARTICULAR PURPOSE. THE ENTIRE RISK AS TO THE QUALITY AND -PERFORMANCE OF THE PROGRAM IS WITH YOU. SHOULD THE PROGRAM PROVE DEFECTIVE, -YOU ASSUME THE COST OF ALL NECESSARY SERVICING, REPAIR OR CORRECTION. - - 12. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING -WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY AND/OR -REDISTRIBUTE THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, -INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING -OUT OF THE USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED TO -LOSS OF DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR -THIRD PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER PROGRAMS), -EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH -DAMAGES. - - END OF TERMS AND CONDITIONS ' -*/ static const char* Copyright = "(C) Copyright Michigan State University 1994, All rights reserved"; /* ** Facility: @@ -317,6 +57,8 @@ #include <Xm/Scale.h> #include <Xm/Separator.h> #include <Xm/Text.h> +#include <stdint.h> + /* XM C++ includes. */ #include "XMDialogs.h" #include "XMWidget.h" @@ -1476,7 +1218,7 @@ increment = 100.0/((float)mapsize); - for(int i = 0; i < mapsize; i++) { + for(uint64_t i = 0; i < mapsize; i++) { XMPushButton *button; XmString label; unsigned long defpixel; Modified: trunk/SpecTcl/Display/printer.cc =================================================================== --- trunk/SpecTcl/Display/printer.cc 2012-03-14 01:25:32 UTC (rev 1983) +++ trunk/SpecTcl/Display/printer.cc 2012-03-26 17:23:50 UTC (rev 1984) @@ -1,277 +1,20 @@ /* - GNU GENERAL PUBLIC LICENSE - Version 2, June 1991 + This software is Copyright by the Board of Trustees of Michigan + State University (c) Copyright 2008 - Copyright (C) 1989, 1991 Free Software Foundation, Inc. - 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA - Everyone is permitted to copy and distribute verbatim copies - of this license document, but changing it is not allowed. + You may use this software under the terms of the GNU public license + (GPL). The terms of this license are described at: - Preamble + http://www.gnu.org/licenses/gpl.txt - The licenses for most software are designed to take away your -freedom to share and change it. By contrast, the GNU General Public -License is intended to guarantee your freedom to share and change free -software--to make sure the software is free for all its users. This -General Public License applies to most of the Free Software -Foundation's software and to any other program whose authors commit to -using it. (Some other Free Software Foundation software is covered by -the GNU Library General Public License instead.) You can apply it to -your programs, too. + Author: + Ron Fox + NSCL + Michigan State University + East Lansing, MI 48824-1321 +*/ - When we speak of free software, we are referring to freedom, not -price. Our General Public Licenses are designed to make sure that you -have the freedom to distribute copies of free software (and charge for -this service if you wish), that you receive source code or can get it -if you want it, that you can change the software or use pieces of it -in new free programs; and that you know you can do these things. - To protect your rights, we need to make restrictions that forbid -anyone to deny you these rights or to ask you to surrender the rights. -These restrictions translate to certain responsibilities for you if you -distribute copies of the software, or if you modify it. - - For example, if you distribute copies of such a program, whether -gratis or for a fee, you must give the recipients all the rights that -you have. You must make sure that they, too, receive or can get the -source code. And you must show them these terms so they know their -rights. - - We protect your rights with two steps: (1) copyright the software, and - (2) offer you this license which gives you legal permission to copy, -distribute and/or modify the software. - - Also, for each author's protection and ours, we want to make certain -that everyone understands that there is no warranty for this free -software. If the software is modified by someone else and passed on, we -want its recipients to know that what they have is not the original, so -that any problems introduced by others will not reflect on the original -authors' reputations. - - Finally, any free program is threatened constantly by software -patents. We wish to avoid the danger that redistributors of a free -program will individually obtain patent licenses, in effect making the -program proprietary. To prevent this, we have made it clear that any -patent must be licensed for everyone's free use or not licensed at all. - - The precise terms and conditions for copying, distribution and -modification follow. - - GNU GENERAL PUBLIC LICENSE - TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION - - 0. This License applies to any program or other work which contains -a notice placed by the copyright holder saying it may be distributed -under the terms of this General Public License. The "Program", below, -refers to any such program or work, and a "work based on the Program" -means either the Program or any derivative work under copyright law: -that is to say, a work containing the Program or a portion of it, -either verbatim or with modifications and/or translated into another -language. (Hereinafter, translation is included without limitation in -the term "modification".) Each licensee is addressed as "you". - -Activities other than copying, distribution and modification are not -covered by this License; they are outside its scope. The act of -running the Program is not restricted, and the output from the Program -is covered only if its contents constitute a work based on the -Program (independent of having been made by running the Program). -Whether that is true depends on what the Program does. - - 1. You may copy and distribute verbatim copies of the Program's -source code as you receive it, in any medium, provided that you -conspicuously and appropriately publish on each copy an appropriate -copyright notice and disclaimer of warranty; keep intact all the -notices that refer to this License and to the absence of any warranty; -and give any other recipients of the Program a copy of this License -along with the Program. - -You may charge a fee for the physical act of transferring a copy, and -you may at your option offer warranty protection in exchange for a fee. - - 2. You may modify your copy or copies of the Program or any portion -of it, thus forming a work based on the Program, and copy and -distribute such modifications or work under the terms of Section 1 -above, provided that you also meet all of these conditions: - - a) You must cause the modified files to carry prominent notices - stating that you changed the files and the date of any change. - - b) You must cause any work that you distribute or publish, that in - whole or in part contains or is derived from the Program or any - part thereof, to be licensed as a whole at no charge to all third - parties under the terms of this License. - - c) If the modified program normally reads commands interactively - when run, you must cause it, when started running for such - interactive use in the most ordinary way, to print or display an - announcement including an appropriate copyright notice and a - notice that there is no warranty (or else, saying that you provide - a warranty) and that users may redistribute the program under - these conditions, and telling the user how to view a copy of this - License. (Exception: if the Program itself is interactive but - does not normally print such an announcement, your work based on - the Program is not required to print an announcement.) - -These requirements apply to the modified work as a whole. If -identifiable sections of that work are not derived from the Program, -and can be reasonably considered independent and separate works in -themselves, then this License, and its terms, do not apply to those -sections when you distribute them as separate works. But when you -distribute the same sections as part of a whole which is a work based -on the Program, the distribution of the whole must be on the terms of -this License, whose permissions for other licensees extend to the -entire whole, and thus to each and every part regardless of who wrote it. - -Thus, it is not the intent of this section to claim rights or contest -your rights to work written entirely by you; rather, the intent is to -exercise the right to control the distribution of derivative or -collective works based on the Program. - -In addition, mere aggregation of another work not based on the Program -with the Program (or with a work based on the Program) on a volume of -a storage or distribution medium does not bring the other work under -the scope of this License. - - 3. You may copy and distribute the Program (or a work based on it, -under Section 2) in object code or executable form under the terms of -Sections 1 and 2 above provided that you also do one of the following: - - a) Accompany it with the complete corresponding machine-readable - source code, which must be distributed under the terms of Sections - 1 and 2 above on a medium customarily used for software interchange; or, - - b) Accompany it with a written offer, valid for at least three - years, to give any third party, for a charge no more than your - cost of physically performing source distribution, a complete - machine-readable copy of the corresponding source code, to be - distributed under the terms of Sections 1 and 2 above on a medium - customarily used for software interchange; or, - - c) Accompany it with the information you received as to the offer - to distribute corresponding source code. (This alternative is - allowed only for noncommercial distribution and only if you - received the program in object code or executable form with such - an offer, in accord with Subsection b above.) - -The source code for a work means the preferred form of the work for -making modifications to it. For an executable work, complete source -code means all the source code for all modules it contains, plus any -associated interface definition files, plus the scripts used to -control compilation and installation of the executable. However, as a -special exception, the source code distributed need not include -anything that is normally distributed (in either source or binary -form) with the major components (compiler, kernel, and so on) of the -operating system on which the executable runs, unless that component -itself accompanies the executable. - -If distribution of executable or object code is made by offering -access to copy from a designated place, then offering equivalent -access to copy the source code from the same place counts as -distribution of the source code, even though third parties are not -compelled to copy the source along with the object code. - - 4. You may not copy, modify, sublicense, or distribute the Program -except as expressly provided under this License. Any attempt -otherwise to copy, modify, sublicense or distribute the Program is -void, and will automatically terminate your rights under this License. -However, parties who have received copies, or rights, from you under -this License will not have their licenses terminat this License, since you have not -signed it. However, nothing else grants you permission to modify or -distribute the Program or its derivative works. These actions are -prohibited by law if you do not accept this License. Therefore, by -modifying or distributing the Program (or any work based on the -Program), you indicate your acceptance of this License to do so, and -all its terms and conditions for copying, distributing or modifying -the Program or works based on it. - - 6. Each time you redistribute the Program (or any work based on the -Program), the recipient automatically receives a license from the -original licensor to copy, distribute or modify the Program subject to -these terms and conditions. You may not impose any further -restrictions on the recipients' exercise of the rights granted herein. -You are not responsible for enforcing compliance by third parties to -this License. - - 7. If, as a consequence of a court judgment or allegation of patent -infringement or for any other reason (not limited to patent issues), -conditions are imposed on you (whether by court order, agreement or -otherwise) that contradict the conditions of this License, they do not -excuse you from the conditions of this License. If you cannot -distribute so as to satisfy simultaneously your obligations under this -License and any other pertinent obligations, then as a consequence you -may not distribute the Program at all. For example, if a patent -license would not permit royalty-free redistribution of the Program by -all those who receive copies directly or indirectly through you, then -the only way you could satisfy both it and this License would be to -refrain entirely from distribution of the Program. - -If any portion of this section is held invalid or unenforceable under -any particular circumstance, the balance of the section is intended to -apply and the section as a whole is intended to apply in other -circumstances. - -It is not the purpose of this section to induce you to infringe any -patents or other property right claims or to contest validity of any -such claims; this section has the sole purpose of protecting the -integrity of the free software distribution system, which is -implemented by public license practices. Many people have made -generous contributions to the wide range of software distributed -through that system in reliance on consistent application of that -system; it is up to the author/donor to decide if he or she is willing -to distribute software through any other system and a licensee cannot -impose that choice. - -This section is intended to make thoroughly clear what is believed to -be a consequence of the rest of this License. - - 8. If the distribution and/or use of the Program is restricted in -certain countries either by patents or by copyrighted interfaces, the -original copyright holder who places the Program under this License -may add an explicit geographical distribution limitation excluding -those countries, so that distribution is permitted only in or among -countries not thus excluded. In such case, this License incorporates -the limitation as if written in the body of this License. - - 9. The Free Software Foundation may publish revised and/or new versions of the General Public License from time to time. Such new versions will be similar in spirit to the present version, but may differ in detail to address new problems or concerns. - -Each version is given a distinguishing version number. If the Program -specifies a version number of this License which applies to it and "any -later version", you have the option of following the terms and conditions -either of that version or of any later version published by the Free Software -Foundation. If the Program does not specify a version number of this License, - you may choose any version ever published by the Free Software Foundation. - - 10. If you wish to incorporate parts of the Program into other free -programs whose distribution conditions are different, write to the author to -ask for permission. For software which is copyrighted by the Free Software -Foundation, write to the Free Software Foundation; we sometimes make -exceptions for this. Our decision will be guided by the two goals of -preserving the free status of all derivatives of our free software and of -promoting the sharing and reuse of software generally. - - NO WARRANTY - - 11. BECAUSE THE PROGRAM IS LICENSED FREE OF CHARGE, THERE IS NO WARRANTY FOR -THE PROGRAM, TO THE EXTENT PERMITTED BY APPLICABLE LAW. EXCEPT WHEN -OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR OTHER PARTIES PROVIDE -THE PROGRAM "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED OR IMPLIED, -INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND -FITNESS FOR A PARTICULAR PURPOSE. THE ENTIRE RISK AS TO THE QUALITY AND -PERFORMANCE OF THE PROGRAM IS WITH YOU. SHOULD THE PROGRAM PROVE DEFECTIVE, -YOU ASSUME THE COST OF ALL NECESSARY SERVICING, REPAIR OR CORRECTION. - - 12. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING -WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY AND/OR -REDISTRIBUTE THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, -INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING -OUT OF THE USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED TO -LOSS OF DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR -THIRD PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER PROGRAMS), -EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH -DAMAGES. - - END OF TERMS AND CONDITIONS ' -*/ static const char* Copyright = "(C) Copyright Michigan State University 1994, All rights reserved"; /* ** Facility: @@ -288,75 +31,6 @@ ** Michigan State University ** East Lansing, MI 48824-1321 */ -/* - $Log$ - Revision 5.7 2006/11/17 16:08:39 ron-fox - Defect 228 fix: Printer defaults could wind up only partially - initialized.. this resulted in bad Xamine.Default files and - could cause printing to fail or crash Xamine. - - Revision 5.5.2.2 2006/11/17 14:41:55 ron-fox - Defect 228 - Xamine can make bad Xamine.Default files which can cause printing - to fail because the print defauts can be set to whacky values. - - Revision 5.5.2.1 2006/09/21 15:32:46 ron-fox - Fix regression error with printer title size not being long enough - causing segflts. - - Revision 5.5 2006/05/22 19:59:16 ron-fox - -Fix issues with printing: gri used an EPSF header which - caused printers to squash multiple pages onto one. - - Evidently the print setup dialog had a duplicate widget name with some - disastrous results. - - Revision 5.1.2.2 2005/05/02 20:14:40 ron-fox - Little changes to support gcc 3.4 compiler which is a bit stricter even. - - Revision 5.1.2.1 2004/12/21 17:51:15 ron-fox - Port to gcc 3.x compilers. - - Revision 5.1 2004/11/29 16:55:37 ron-fox - Begin port to 3.x compilers calling this 3.0 - - Revision 4.14 2003/08/25 16:25:30 ron-fox - Initial starting point for merge with filtering -- this probably does not - generate a goo spectcl build. - - Revision 4.13 2003/04/04 17:44:21 ron-fox - Catch dialog destruction for cached widgets so that the destroyed dialog is re-created when it's needed. Prior behavior would usually crash Xamine because deleted widgets would be referenced. - - Revision 4.12 2003/04/02 18:36:12 ron-fox - Connect the options->Setup Printer... dialog appropriately with the defaults file and the default information used by Jason's printer dialogs. - - Revision 4.11.2.1 2003/03/21 17:16:56 venema - Added support for GNU autotools, and fixed a problem with mapped spectrum which caused Xamine to crash on Tru64 on 1d spectra. - - Revision 4.11 2003/01/02 16:13:00 venema - Major version upgrade to SpecTcl 2.0. This version adds arbitrary user-coordinate mapping to Xamine using, and a special mapping button on the Xamine GUI. Also, print options are now sticky and are maintained in the Xamine.Defaults file. - - Revision 4.10 2002/11/05 18:40:27 ron-fox - Fix issues with library updates and prototypes, so that this compiles - on g++ 2.96. - - Revision 4.9 2002/08/15 18:23:17 ron-fox - griprint.cc - Remove extra temp.ps on print command since it's - put in to replace %s. Also simplify logic to put filename in - print command. - print.cc - Put %s in unix print command, change Cygwin print command to use - /'s not \'s. - - Revision 4.8 2002/08/14 20:22:25 venema - Added support for Cygwin to print using its own print syntax. - - Revision 4.7 2002/07/29 18:59:53 venema - Removed printing functions and placed them in griprint.cc. Implemented new tabs widget used for selecting print options for Xamine using the Gri plotting package. - - Revision 4.6 2002/07/11 13:50:03 ron-fox - - Ignore prior log entry. - - Change -transparency switch on import invocation to -transparent to bring it - in line with newer versions of image magick. - - */ /* ** Include files required: Modified: trunk/SpecTcl/SpecTcl/ScalerProcessorCallbacks.cpp =================================================================== --- trunk/SpecTcl/SpecTcl/ScalerProcessorCallbacks.cpp 2012-03-14 01:25:32 UTC (rev 1983) +++ trunk/SpecTcl/SpecTcl/ScalerProcessorCallbacks.cpp 2012-03-26 17:23:50 UTC (rev 1984) @@ -25,6 +25,7 @@ #include <string> #include <buftypes.h> #include <buffer.h> +#include <stdint.h> #include <histotypes.h> @@ -214,7 +215,7 @@ // All the other stuff comes from the buffer: - SetVariable(RunNumber, "%d", (void*)m_pProcessor->runNumber()); + SetVariable(RunNumber, "%d", (void*)static_cast<uint64_t>(m_pProcessor->runNumber())); SetVariable(RunTitle, "%s", (void*)m_pProcessor->Title().c_str()); Modified: trunk/SpecTcl/SpectrumIO/NSCLAsciiSpectrumFormatter.cpp =================================================================== --- trunk/SpecTcl/SpectrumIO/NSCLAsciiSpectrumFormatter.cpp 2012-03-14 01:25:32 UTC (rev 1983) +++ trunk/SpecTcl/SpectrumIO/NSCLAsciiSpectrumFormatter.cpp 2012-03-26 17:23:50 UTC (rev 1984) @@ -123,9 +123,11 @@ char c; while(!rStream.eof()) { rStream.read(&c,1); - if(!isspace(c) || (c == '\n')) { - rStream.putback(c); - reseteof(rStream); + if(!(isspace(c) || (c == '\n'))) { + if(!rStream.eof()) { + rStream.putback(c); + reseteof(rStream); + } return; } } @@ -1209,6 +1211,7 @@ char c; string List; // One item. rStream.read(&c,1); // Should be a paren... + if (rStream.eof()) break; // In some C++ get eof after read. ThrowStreamError(rStream,"Reading what should be a paren"); if(c != paren) { throw This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <ro...@us...> - 2012-05-01 19:15:32
|
Revision: 1985 http://nsclspectcl.svn.sourceforge.net/nsclspectcl/?rev=1985&view=rev Author: ron-fox Date: 2012-05-01 19:15:24 +0000 (Tue, 01 May 2012) Log Message: ----------- informal release 3.3-007 Modified Paths: -------------- trunk/SpecTcl/CHANGELOG trunk/SpecTcl/configure.in Modified: trunk/SpecTcl/CHANGELOG =================================================================== --- trunk/SpecTcl/CHANGELOG 2012-03-26 17:23:50 UTC (rev 1984) +++ trunk/SpecTcl/CHANGELOG 2012-05-01 19:15:24 UTC (rev 1985) @@ -950,4 +950,6 @@ - Fix case in spectrum definition where we might ask Tcl to delete storage we never allocated. - Remove use of TkTable which disappears eventually in Tcl. - \ No newline at end of file +3.3-007 +?? - Ensure this all works on ring buffers. + Modified: trunk/SpecTcl/configure.in =================================================================== --- trunk/SpecTcl/configure.in 2012-03-26 17:23:50 UTC (rev 1984) +++ trunk/SpecTcl/configure.in 2012-05-01 19:15:24 UTC (rev 1985) @@ -4,7 +4,7 @@ AC_CONFIG_AUX_DIR(config) AM_CONFIG_HEADER(config.h) AC_CANONICAL_HOST -AM_INIT_AUTOMAKE(SpecTcl, 3.3-006-beta4) +AM_INIT_AUTOMAKE(SpecTcl, 3.3-007) AC_EXEEXT This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <ro...@us...> - 2012-05-02 17:50:54
|
Revision: 1997 http://nsclspectcl.svn.sourceforge.net/nsclspectcl/?rev=1997&view=rev Author: ron-fox Date: 2012-05-02 17:50:46 +0000 (Wed, 02 May 2012) Log Message: ----------- Initial merge of 3.3-003 dev work. Modified Paths: -------------- trunk/SpecTcl/CHANGELOG trunk/SpecTcl/Display/integrate.cc trunk/SpecTcl/Gui/datasource.tcl trunk/SpecTcl/Gui/folderGui.tcl trunk/SpecTcl/Gui/savespectrum.html trunk/SpecTcl/Gui/spectrum.tcl trunk/SpecTcl/SpecTcl/IntegrateCommand.cpp trunk/SpecTcl/treegui/treeGui.tcl Removed Paths: ------------- trunk/SpecTcl/configure.in Property Changed: ---------------- trunk/SpecTcl/ Property changes on: trunk/SpecTcl ___________________________________________________________________ Added: svn:mergeinfo + /branches/3.3-007-dev:1983-1986 /branches/3.3-008-dev:1987-1996 Modified: trunk/SpecTcl/CHANGELOG =================================================================== --- trunk/SpecTcl/CHANGELOG 2012-05-02 17:47:26 UTC (rev 1996) +++ trunk/SpecTcl/CHANGELOG 2012-05-02 17:50:46 UTC (rev 1997) @@ -953,3 +953,10 @@ 3.3-007 ?? - Ensure this all works on ring buffers. +3.3-008 + - issue 107 Fix SpecTcl-2d integration command (gives wrong answers) + - issue 108 Support Xamine builds if OpenMotif is the motif version installed. + - issue 105 In folder gui make spectrum save a 2-step wizard so that it fits + on small screens better. + - issue 973 Do a smart search for the ring buffer clients in data source tcl. + - issue 866 Protect GUIs (folder standalone and tree) from multiple startups. \ No newline at end of file Modified: trunk/SpecTcl/Display/integrate.cc =================================================================== --- trunk/SpecTcl/Display/integrate.cc 2012-05-02 17:47:26 UTC (rev 1996) +++ trunk/SpecTcl/Display/integrate.cc 2012-05-02 17:50:46 UTC (rev 1997) @@ -697,19 +697,20 @@ for(int l = 0; l < nlines; l++) { /* Loop over scan lines. */ MergeEdgeTable(&active, e, l); /* Merge with next scan line. */ for(int j = 0; j < active.num_edges; j += 2) { /* scan over all pairs */ - int lo = (int)active.bases[j].xnow; - int hi = (int)active.bases[j+1].xnow; /* sum limits. */ - unsigned int *s = line + lo; - for(int k = lo; k <= hi; k ++) { /* Sum over one interior region. */ - double xchannel = XChannel(k); - double ychannel = YChannel(y); - float ch = (float)*s++; - sum += ch; - xsum += ch * xchannel; - ysum += ch * ychannel; - xsqsum += ch * (xchannel*xchannel); - ysqsum += ch * (ychannel*ychannel); - + if (j+1 < active.num_edges) { // Deal with stuff coming to a point. + int lo = (int)active.bases[j].xnow; + int hi = (int)active.bases[j+1].xnow; /* sum limits. */ + unsigned int *s = line + lo; + for(int k = lo; k <= hi; k ++) { /* Sum over one interior region. */ + double xchannel = XChannel(k); + double ychannel = YChannel(y); + float ch = (float)*s++; + sum += ch; + xsum += ch * xchannel; + ysum += ch * ychannel; + xsqsum += ch * (xchannel*xchannel); + ysqsum += ch * (ychannel*ychannel); + } } /* Sum over one interior region. */ } /* Scan over all pairs. */ /* Now on to the next scan line: */ Modified: trunk/SpecTcl/Gui/datasource.tcl =================================================================== --- trunk/SpecTcl/Gui/datasource.tcl 2012-05-02 17:47:26 UTC (rev 1996) +++ trunk/SpecTcl/Gui/datasource.tcl 2012-05-02 17:50:46 UTC (rev 1997) @@ -398,12 +398,38 @@ # Construct the helper program for ring buffers. # We are going to assum the current user is the # owner of the target ring. - + # + # The following strategy is used to locate ringselector: + # - Look for it in /usr/opt/daq/current/bin : if present use that one. + # - Look for it in /usr/opt/daq/1*.* sorted descdending and take the first one. + # method ring {host} { set url "tcp://$host/$::tcl_platform(user)" set selection "--sample=PHYSICS_EVENT" - return "/usr/opt/daq/10.0/bin/ringselector --source=$url $selection" + set ringselector /usr/opt/daq/current/bin/ringselector + if {![file executable $ringselector]} { + set ringselector "" + set dirs [glob -directory /usr/opt/daq 1*.*]; # These are full dirnames. + foreach dir $dirs { + lappend dirtails [file tail $dir] + } + set dirtail [lsort -decreasing -real $dirtails]; # sorted by decreasing version... + foreach dir $dirtail { + set ringselector [file join /usr/opt/daq $dir bin ringselector] + if {[file executable $ringselector]} { + break + } + } + } + if {$ringselector eq ""} { + tk_messageBox -title "No Ringdaq" -icon error \ + -message {Unable to find an installation of NSCL ringdaq - contact your sysadmin.} + + return ""; # ensure stuff fails. + } else { + return "$ringselector --source=$url $selection" + } } } Modified: trunk/SpecTcl/Gui/folderGui.tcl =================================================================== --- trunk/SpecTcl/Gui/folderGui.tcl 2012-05-02 17:47:26 UTC (rev 1996) +++ trunk/SpecTcl/Gui/folderGui.tcl 2012-05-02 17:50:46 UTC (rev 1997) @@ -1024,6 +1024,9 @@ proc ::FolderGui::startFolderGui {{top {}} {parent {}}} { if {$top eq ""} { + if {[winfo exists .gui]} { + return; # Don't start twice. + } toplevel .gui -menu .topmenu set parent .gui set ::FolderGui::folderGuiStatusFrame $parent @@ -1031,6 +1034,9 @@ if {$parent eq ""} { error "folderGUI - providing a top level requires a parent as well" } + if {[winfo exists $parent.b]} { + return; # Don't start twice. + } $top configure -menu .topmenu set ::FolderGui::folderGuiStatusFrame [ttk::frame $top.spectclstatus] } Modified: trunk/SpecTcl/Gui/savespectrum.html =================================================================== --- trunk/SpecTcl/Gui/savespectrum.html 2012-05-02 17:47:26 UTC (rev 1996) +++ trunk/SpecTcl/Gui/savespectrum.html 2012-05-02 17:50:46 UTC (rev 1997) @@ -6,17 +6,10 @@ <h1>Save spectrum contents</h1> <p> This dialog allows you to save the contents of one or more spectra - to file. The dialog is divided into three parts + to file. </p> <p> - The top part of the dialog allows you to select file into which you will - save the data. The left pane allows you to navigate the directory hierachy. - The right pane allows you to select existing files. You can type the full - file name in the <b>Selection</b> entry. You can adjust which files will be visible - by entering a filter in the <b>Filter</b> entry. - </p> - <p> - The bottom part of the dialog contains an object browser limited to spectra and a list + The top part of the dialog contains an object browser limited to spectra and a list of the spectra you have chosen to write. To add a spectrum to the list, double click it in the browser. To remove a spectrum from the list, double click it in the list labelled <b>Spectra to Write</b> @@ -24,7 +17,7 @@ <p> The bottom of the dialog contains the following buttons: <ul> - <li><b>Ok</b> Write the spectra and dismiss the dialog</li> + <li><b>Ok</b> Prompt for a filename in which to write the spectra</li> <li><b>Cancel</b> Dismiss the dialog without taking any action</li> <li><b>Help</b> Display this dialog</li> </ul> Modified: trunk/SpecTcl/Gui/spectrum.tcl =================================================================== --- trunk/SpecTcl/Gui/spectrum.tcl 2012-05-02 17:47:26 UTC (rev 1996) +++ trunk/SpecTcl/Gui/spectrum.tcl 2012-05-02 17:50:46 UTC (rev 1997) @@ -477,8 +477,13 @@ } # saveSpectrumDialog # This dialog allows the user to save a bunch of spectra. -# The dialog is divided into a file selector from iwidgets -# and a spectrum selector using the browser and a list box. +# The dialog consists of a spectrum selector using the browser +# and a list box. +# Once the users selects the spectra, they can +# - Ok - which prompts for a filename and when one is provided +# invokes the -okcommand else if that's cancelled, the -cancelcommand. +# - Cancel -which invoke the -cancelcommand. +# # Layout: # Options: # - All those for ::iwidgets::fileselectionbox @@ -486,25 +491,21 @@ # -okcommand # -cancelcommand # methods: -# get,filter - delegated to the fileselectionbox. +# get - Get the selected filename. # # # snit::widget saveSpectrumDialog { hulltype toplevel - delegate method get to filebox - delegate method filter to filebox - delegate option * to filebox - option -spectra option -okcommand option -cancelcommand variable hidden {} + variable filename "" constructor args { - install filebox using ::iwidgets::fileselectionbox $win.fbox -mask *.spec label $win.speclabel -text {Spectra to Write} listbox $win.spectra -yscrollcommand [list $win.scrollbar set] @@ -519,7 +520,6 @@ button $win.command.cancel -text Cancel -command [mymethod onCancel] button $win.command.help -text Help -command [list spectclGuiDisplayHelpTopic savespectrum] - grid $win.fbox - - grid $win.b x x grid ^ $win.speclabel x -sticky s grid ^ $win.spectra $win.scrollbar -sticky ns @@ -549,14 +549,23 @@ # Called when the Ok Button is clicked. # method onOk {} { - set script $options(-okcommand) - if {$script != ""} { - eval $script - } - if {$hidden != ""} { - destroy $hidden - set hidden {} - } + set filename [tk_getSaveFile -defaultextension .spec \ + -parent $win \ + -filetypes [list \ + [list "Spectrum Files" .spec] \ + [list "All Files" *]]] + if {$filename eq ""} { + $self onCancel + } else { + set script $options(-okcommand) + if {$script != ""} { + eval $script + } + if {$hidden != ""} { + destroy $hidden + set hidden {} + } + } } # onCancel @@ -564,8 +573,8 @@ # method onCancel {} { $self configure -spectra {} - setEntry $win.fbox.selection {} + set script $options(-cancelcommand) if {$script != ""} { eval $script @@ -576,6 +585,12 @@ } } + # + # Return the selected filename. + # + method get {} { + return $filename + } # spectrumFilter # Works with the browser to ensure that only the unselected # spectra appear in the browser. @@ -611,12 +626,6 @@ $win.spectra delete $index $win.b update } - # getFilter - # Returns the current value of the filebox filter string. - # - method getFilter {} { - return [$win.fbox.filter get] - } # configure -spectra list # Sets the current set of spectra selected to the # list supplied. Modified: trunk/SpecTcl/SpecTcl/IntegrateCommand.cpp =================================================================== --- trunk/SpecTcl/SpecTcl/IntegrateCommand.cpp 2012-05-02 17:47:26 UTC (rev 1996) +++ trunk/SpecTcl/SpecTcl/IntegrateCommand.cpp 2012-05-02 17:50:46 UTC (rev 1997) @@ -654,9 +654,13 @@ ((float)m_xTop - (float)m_xBottom); } + // Use the point slope form to locate the x position of + // a point on the edge specifically: + // y-y0 = m(x-x0) => x = (y-y0)/m + x0 Arbitrarily use m_xTop,m_yTop as x0/y0. + virtual void addEdgePoint(vector<int>& existingPoints, int height) { if ((height >= m_yBottom) && (height <= m_yTop)) { - int point = (int)(m_xBottom + m_slope*(height - m_xBottom)); + int point = (int)(m_xTop + (height - m_yTop)/m_slope); existingPoints.push_back(point); } } Deleted: trunk/SpecTcl/configure.in =================================================================== --- trunk/SpecTcl/configure.in 2012-05-02 17:47:26 UTC (rev 1996) +++ trunk/SpecTcl/configure.in 2012-05-02 17:50:46 UTC (rev 1997) @@ -1,929 +0,0 @@ -# Process this file with autoconf to produce a configure script. - -AC_INIT(SpecTcl/MySpecTclApp.cpp) -AC_CONFIG_AUX_DIR(config) -AM_CONFIG_HEADER(config.h) -AC_CANONICAL_HOST -AM_INIT_AUTOMAKE(SpecTcl, 3.3-007) - - -AC_EXEEXT -AC_OBJEXT - -# This should track the version in -# AM_INIT_AUTOMAKE it will be used to -# define the version information in shared -# images. - -SOVERSION="3:2" -# -# This symbol describes where the bundled Gri graphics package lives. -# Gri is used to help Xamine do printing. -# -MYGRIDIR="gri-2.12.20" - -# Checks for programs. - - -AC_PROG_AWK -AC_PROG_CXX -AC_PROG_CC -AC_PROG_CPP -AC_PROG_INSTALL -AC_PROG_LN_S -AC_PROG_MAKE_SET -AM_PROG_LEX -AC_PROG_YACC -AC_PROG_GCC_TRADITIONAL -AC_PROG_LIBTOOL - - -# The following are for doctools things: - -AC_PATH_PROG(HCDOCBOOK, docbook2dvi, echo) -AC_PATH_PROG(HTMLDOCBOOK, docbook2html, echo) -AC_PATH_PROG(DVIPDF, dvipdf, echo) -AC_PATH_PROG(MANDOCBOOK, xmlto, echo) - - - -# Checks for header files. -AC_HEADER_STDC -AC_HEADER_SYS_WAIT -AC_CHECK_HEADER(time.h) -AC_CHECK_HEADERS([fcntl.h limits.h malloc.h memory.h stddef.h stdlib.h strings.h string.h sys/file.h sys/ioctl.h sys/socket.h sys/time.h unistd.h values.h windows.h machine/hal_sysinfo.h sys/proc.h sys/mtio.h sys/mman.h sys/ipc.h sys/shm.h machine/param.h sys/un.h]) - -# Checks for typedefs, structures, and compiler characteristics. -AC_HEADER_STAT -AC_HEADER_TIME -AC_STRUCT_TM -AC_C_CONST -AC_C_INLINE -AC_TYPE_OFF_T -AC_TYPE_PID_T -AC_TYPE_SIZE_T -AC_TYPE_SIGNAL - -# Checks for library functions. -AC_FUNC_MMAP -AC_REPLACE_FUNCS([atexit dup2 ftruncate getpagesize memset putenv]) -AC_REPLACE_FUNCS([strchr strcspn strerror strrchr bzero mkstemp stat]) -AC_REPLACE_FUNCS([malloc memcmp strftime alloca vfork strtok_r]) -AC_CHECK_FUNCS([select socket strspn fork drand48 seed48]) -AC_CHECK_FUNCS([pipe sbrk shm_open shmget fcntl]) -AC_CHECK_FUNCS([floor getcwd gethostname gettimeofday mbrlen]) -AC_CHECK_FUNCS(time) -AC_CHECK_LIB(m, pow) -AC_CHECK_LIB(m, sqrt) -AC_CHECK_LIB(m, logb) -AC_CHECK_FUNCS([strdup strstr strtol tzset mktime strtod timezone]) - - -# The following are needed for strict ANSI c++ compilers The major features -# are whether or not there are .h -less headers and if there's an std -# namespace we'll need to import. - -# See if the C runtime libs have .h's on them or -# if h-less versions can be used for what we need: -# - -AC_LANG_PUSH(C++) -AC_CHECK_HEADER(iostream, [AC_DEFINE([HAVE_HLESS_IOSTREAM],1,[<iostream> exists])],[]) -AC_CHECK_HEADER(istream, [AC_DEFINE([HAVE_HLESS_ISTREAM],1,[<istream> exists])],[]) -AC_CHECK_HEADER(ostream, [AC_DEFINE([HAVE_HLESS_OSTREAM],1,[<ostream> exists])],[]) -AC_CHECK_HEADER(streambuf,[AC_DEFINE([HAVE_HLESS_STREAMBUF],1,[<streambuf> exists])],[]) -AC_CHECK_HEADER(fstream, [AC_DEFINE([HAVE_HLESS_FSTREAM],1,[<fstream> exists])],[]) -AC_CHECK_HEADER(iomanip, [AC_DEFINE([HAVE_HLESS_IOMANIP],1,[<iomanip> exists])],[]) -AC_CHECK_HEADER(sstream, [AC_DEFINE([HAVE_HLESS_SSTREAM],1,[<sstream> exists])],[]) -AC_CHECK_HEADER(typeinfo, [AC_DEFINE([HAVE_HLESS_TYPEINFO],1,[<typeinfo> exists])],[]) - - - -# Is there an std namespace to import from? - -AC_COMPILE_IFELSE([using namespace std;], [AC_DEFINE([HAVE_STD_NAMESPACE],[1],[1 if std namespace defined])]) -AH_VERBATIM([VHAVE_STD_NAMESPACE],[ -/* Define STD macro according to HAVE_STD_NAMESPACE value */ -#ifdef HAVE_STD_NAMESPACE -#define STD(name) std::name -#else -#define STD(name) name -#endif]) - - - -AC_LANG_POP(C++) - -# -------------------- X11 tests - -# Locate the X11 header files and the X11 library archive. Try the -# ac_path_x macro first, but if it doesn't find the X stuff then check -# a list of possible directories. - -AC_PATH_X -AC_PATH_XTRA - -if test "$x_includes" != "" -then - XINCLUDES="-I$x_includes" -else - XINCLUDES="" -fi -if test "$x_libraries" != "" -then - XLIBSW="-L$x_libraries" -else - XLIBSW="" -fi - - -# -# Locate motif headers and libraries. (Xm.h and libXm.{so,dylib,a}). -# -motif_headerdir="" -motif_h_found="no" -AC_MSG_CHECKING([for Xm/Xm.h]) - -AC_ARG_WITH(motif-header-dir, - [ --with-motif-header-dir=path Path to Xm header directory], - [motif_headerdir="$withval"; motif_h_found="yes"]) - -# first try is for the headers in the same dir as the X headers: - -if test $motif_h_found = no -then - # Special case: if it's in x_includes, no extra sws. - - mdir="$x_includes" - if test "$mdir" = "" - then - mdir="/usr/include" - fi - AC_CHECK_FILE([${mdir}/Xm/Xm.h], - [motif_h_found="yes"], - [motif_h_found="no"]) -fi - -# Next search: -# /usr/include/X11 -# /usr/include/X11R6 -# /usr/X11/include -# /usr/X11R6/include -# /usr/include/Xm -# /sw/include (Darwin lesstif). -# /usr/local/include (default lesstif installation). -# - -# If in /usr/include we don't need anything: - - -if test $motif_h_found = no -then - motif_header_dirs="/usr/include/X11 /usr/include/X11R6 /usr/X11/include /usr/X11R6/include /usr/include /sw/include /usr/local/include" - for d in ${motif_header_dirs} - do - AC_CHECK_FILE([${d}/Xm/Xm.h], - [motif_h_found="yes"; \ - motif_headerdir="$d"]) - if test $motif_h_found = yes - then - break - fi - done -fi - -# -# If motif_h_found and nonblank motif_headerdir prepend -# with -I to make MOTIF_INCLUDES (blank means XINCLUDES has it -# covered. If not motif_h_found error and ask for help. -# -if test $motif_h_found = yes -then - if test "$motif_headerdir" = "" - then - AC_MSG_RESULT([Xm/Xm.h is relative to $x_includes]) - else - AC_MSG_RESULT([Xm/Xm.h is relative to $motif_headerdir]) - MOTIF_INCLUDES="-I$motif_headerdir" - fi -else - AC_MSG_ERROR([ Can't find Xm/Xm.h try using --with-motif-header-dir=path]) -fi - -# -# Look for libXm.{so,dylib,a} -# Our search order is: -# --with-motif-lib=path (user always can override). -# $x_libraries (Pretty normal place e.g. openmotif). -# /usr/lib (e.g. OSF1). -# /sw/lib (Darwin lesstif installation). -# /usr/local/lesstif/lib (normal lesstif install wo links?). -# - -libexts=".so .dylib .a" # prefer shared libs to static. -motiflibdirs="/usr/X11/lib /usr/X11R6/lib /sw/lib /usr/local/lesstif/lib" -motif_libdir="" -motif_lib_found="no" - -AC_MSG_CHECKING([for libXm]) -AC_ARG_WITH(motif-lib, - [ --with-motif-lib=path Path to libXm], - [motif_libdir="" - motif_lib_found="yes"] - ) - -# If necessary, try in $x_libraries: - -for ext in $libexts -do - if test $motif_lib_found = "no" - then - if "$x_libraries" != "" - then - AC_CHECK_FILE([$x_libraries/libXm${ext}], -x [motif_lib_found="yes"]) - else - AC_CHECK_FILE([/usr/lib/libXm${ext}], - [motif_lib_found="yes"]) - fi - fi -done - -# If necessary try in the list of good directories: - -for lib in $motiflibdirs -do - for ext in $libexts - do - if test $motif_lib_found = "no" - then - AC_CHECK_FILE([$lib/libXm${ext}], - [motif_lib_found="yes" - motif_libdir="$lib"]) - fi - done -done - -# If found set MOTIF_LIBSW accordingly. Note this will be -# empty if found in with the x libraries. -# - -if test $motif_lib_found = "yes" -then - if test "$motif_libdir" = "" - then - AC_MSG_RESULT([Found libXm in $x_libraries]) - else - AC_MSG_RESULT([Found libXm in $motif_libdir]) - MOTIF_LIBSW="-L$motif_libdir" - fi -else - AC_MSG_ERROR([Can't fine libXm give me a hand with --with-motif-lib]) -fi - - -# Checks for include declarations - - -# These checks are for declarations within specific system headers. For -# instance, MTSETBLK is not declared in sys/mtio.h on all platforms, but -# is needed on Linux. - - # MTSETBLK in sys/mtio.h -AC_MSG_CHECKING([for MTSETBLK in sys/mtio.h]) - AC_TRY_COMPILE([ -#include <sys/mtio.h> -#ifndef MTSETBLK -# error mtsetblk not defined -#endif -], , my_cv_have_mtsetblk=yes, my_cv_have_mtsetblk=no) - if test $my_cv_have_mtsetblk = yes ; then - AC_DEFINE(HAVE_DECL_MTSETBLK, 1, [True if MTSETBLK defined in sys/mtio.h]) - fi -AC_MSG_RESULT($my_cv_have_mtsetblk) - - # MTOVERRUN in sys/mtio.h -AC_MSG_CHECKING([for MTOVERRUN in sys/mtio.h]) - AC_TRY_COMPILE([ -#include <sys/mtio.h> -#ifndef MTOVERRUN -# error overrun not defined -#endif -], , my_cv_have_mtoverrun=yes, my_cv_have_mtoverrun=no) - if test $my_cv_have_mtoverrun = yes ; then - AC_DEFINE(HAVE_DECL_MTOVERRUN, 1, [True if MTOVERRUN defined in sys/mtio.h]) - fi -AC_MSG_RESULT($my_cv_have_mtoverrun) - - - # MTCSE in sys/mtio.h -AC_MSG_CHECKING([for MTCSE in sys/mtio.h]) - AC_TRY_COMPILE([ -#include <sys/mtio.h> -#ifndef MTCSE -# error mtcse not defined -#endif -], , my_cv_have_mtcse=yes, my_cv_have_mtcse=no) - if test $my_cv_have_mtcse = yes ; then - AC_DEFINE(HAVE_DECL_MTCSE, 1, [True if MTCSE defined in sys/mtio.h]) - fi -AC_MSG_RESULT($my_cv_have_mtcse) - - # PAGESIZE in limits.h -AC_MSG_CHECKING([for PAGESIZE in limits.h]) - AC_TRY_COMPILE([ -#include <limits.h> -#ifndef PAGESIZE -# error pagesize not defined -#endif -], , my_cv_have_pagesize=yes, my_cv_have_pagesize=no) - if test $my_cv_have_pagesize = yes ; then - AC_DEFINE(HAVE_DECL_PAGESIZE, 1, [True if PAGESIZE is defined in limits.h as on HP-UX]) - fi -AC_MSG_RESULT($my_cv_have_pagesize) - - # PADSIZE in limits.h -AC_MSG_CHECKING([for PADSIZE in limits.h]) - AC_TRY_COMPILE([ -#include <limits.h> -#ifndef PADSIZE -# error padsize not defined -#endif -], , my_cv_have_padsize=yes, my_cv_have_padsize=no) - if test $my_cv_have_padsize = yes ; then - AC_DEFINE(HAVE_DECL_PADSIZE, 1, [True if PADSIZE defined in limits.h]) - fi -AC_MSG_RESULT($my_cv_have_padsize) - - # INT_MAX in limits.h -AC_MSG_CHECKING([for INT_MAX in limits.h]) - AC_TRY_COMPILE([ -#include <limits.h> -#ifndef INT_MAX -# error intmax not defined -#endif -], , my_cv_have_int_max=yes, my_cv_have_int_max=no) - if test $my_cv_have_int_max = yes ; then - AC_DEFINE(HAVE_DECL_INT_MAX, 1, [True if INT_MAX defined in limits.h]) - fi -AC_MSG_RESULT($my_cv_have_int_max) - - # MAXINT in values.h -AC_MSG_CHECKING([for MAXINT in values.h]) - AC_TRY_COMPILE([ -#include <values.h> -#ifndef MAXINT -# error maxint not defined -#endif -], , my_cv_have_maxint=yes, my_cv_have_maxint=no) - if test $my_cv_have_maxint = yes ; then - AC_DEFINE(HAVE_DECL_MAXINT, 1, [True if MAXINT defined in values.h]) - fi -AC_MSG_RESULT($my_cv_have_maxint) - - # Check for 64 bit longs -AC_MSG_CHECKING([whether long int is 64 bits]) - AC_TRY_RUN([ -int main(int argc, char **argv) { - if(sizeof(long) == 8) - return 0; - else - return 1; -} -], [AC_DEFINE(HAVE_TRUE_SIXTY_FOUR, 1, [True if long int is 8 bits]) AC_MSG_RESULT(yes)], AC_MSG_RESULT(no), AC_MSG_RESULT(assuming not on target machine)) - -# Determine the particular platform we are running on. Specifically, -# we need to know if we are running on a SPARC processor, so that we -# can do the tape reading appropriately. - -AC_MSG_CHECKING([for SPARC processor type]) -case $host in - *sparc*) - AC_DEFINE(SPARC, 1, [Set to 1 if SPARC Processor]) - echo "yes" - ;; - *) echo "no" ;; -esac - -# Determine what OS we are running so we know whether or not to -# declare some things extern "C". Also helpful for some Cygwin -# and Ultrix specific calls. - -LD_EXTRA_FLAGS="" -X11EXTRA_LDFLAGS="" -AC_MSG_CHECKING([for supported OS]) -OS="$host_os" # Default guess. -case $host_os in - *cygwin* ) - AC_DEFINE(CYGWIN, 1, [Set to 1 if Cygwin environment]) - AC_MSG_RESULT([Cygwin... xdr.h broken for c++]) - - # cygwin we have doesn't seem to get the object extension - # quite right: - - OBJEXT="o" - AC_SUBST(OBJEXT) - AC_DEFINE(BROKEN_XDR_H, 1, - [defined if xdr.h unusuable for c++]) - - - # Windows doesn't allow undefined symbols at link time - # - LD_EXTRA_FLAGS="$LD_EXTRA_FLAGS -no-undefined -lrpc" - X11EXTRA_LDFLAGS="-lSM -lICE" - ;; - *linux* ) - AC_DEFINE(LINUX, 1, [Set to 1 if Linux environment]) - AC_MSG_RESULT([Linux]) - ;; - *ultrix* ) - AC_DEFINE(ULTRIX, 1, [Set to 1 if Ultrix environment]) - AC_MSG_RESULT([Ultrix]) - ;; - *osf* ) - AC_DEFINE(OSF, 1, [Set to 1 if OSF environment]) - AC_MSG_RESULT([OSF1]) - WCHAR_T_DEF=-D_WCHAR_T - OBJEXT=o - - # Missing on OSF1 for some reason - AC_SUBST(OBJEXT) - - # This does away with "weak symbol" warnings - LD_EXTRA_FLAGS="$LD_EXTRA_FLAGS -Wl,\"-S\"" - ;; - *darwin* ) - OBJEXT="o" - AC_SUBST(OBJEXT) - AC_DEFINE(DARWIN, 1, [Set to 1 if Darwin environment]) - AC_DEFINE(BROKEN_XDR_H, 1, - [defined if xdr.h is unusable for c++]) - AC_MSG_RESULT([Darwin .. xdr.h broken for c++]) - OS="darwin" # It's crapped up with versions otherwise. - ;; - * ) - AC_MSG_RESULT([ok]) - ;; -esac - -# Locate Tcl/Tk and setup compile/link switches for them too: - -# TCL headers: -# We know of a few places the headers can live: -# /usr/include redhat linux. -# /usr/include/tcl debian dude that made link to default tcl. -# /usr/include/tcl<version> debian linux -# /usr/local/include default for source based install. -# Whatever the user specifies. -# For now, the versions we look for are determined by the -# variable tcl_versions that variable is a list of version -# number specifiers. -# - -tcl_versions="8.5 8.4 8.3 8.2 8.1 8.0" # First match; so order new -> old. - - -# The TCL Shell - used to run tests... must be in path. -# First check for a version qualified command: -# - -AC_MSG_CHECKING([for tcl shell command...]) -for version in $tcl_versions -do - name=tclsh${version} - AC_CHECK_PROG(TCLSH_CMD, $name, $name) -done - - -tcl_header_dir="" -AC_MSG_CHECKING([for tcl header directory]) - -AC_ARG_WITH(tcl-header-dir, - [ --with-tcl-header-dir=path Path to tcl headers], - [tcl_header_dir=$withval ; - tcl_headers_found="yes"],[tcl_headers_found="no"]) - - -# -# Look for tcl.h in the following places: -# Note that the order is important for Darwin and OSF1. - # - # /sw/include (Best for darwin). - # /usr/local/tcl/include (Best for NSCL Cygwin). - # /usr/local/include (Best for NSCL OSF1) - # /usr/include (Best for e.g. Linux). - # - # For all of these directories, - # look for tcl.h in: - # - the directory itself. - # - a tcl subdirectory to the directory. - # - subdirectories of the form tcl${version} where - # version is chosein from tcl_versions. - # - -tcl_h_testdirs="/sw/include /usr/local/tcl/include /usr/local/include \ - /usr/include" - -if test $tcl_headers_found = "no" -then - for d in $tcl_h_testdirs - do - for v in ${tcl_versions}; - do - if test $tcl_headers_found = "no" - then - AC_CHECK_FILE([${d}/tcl${v}/tcl.h], - [tcl_header_dir=${d}/tcl${v} - tcl_headers_found="yes"]) - fi - done - if test $tcl_headers_found = "no" - then - AC_CHECK_FILE([${d}/tcl.h], - [tcl_header_dir=$d - tcl_headers_found="yes"]) - fi - if test $tcl_headers_found = "no" - then - AC_CHECK_FILE([${d}/tcl/tcl.h], - [tcl_header_dir=${d}/tcl - tcl_headers_found="yes"]) - fi - done -fi - -if test $tcl_headers_found = "yes"; then - TCL_FLAGS=-I${tcl_header_dir} - AC_MSG_RESULT(Using path $tcl_header_dir) -else - AC_MSG_ERROR([can't find tcl.h try using --with-tcl-header-dir to help me]) -fi - -# Tcl libraries: -# We look for the following -# /sw/lib -# /usr/lib/libtcl.{so,dylib,a} - link to a default lib. -# /usr/lib/libtcl<version>.{so,dylib,a} - link to a specific lib. -# If --with-tcl-libdir=dir is supplied, that directory is -# searched first. -# ASSUMPTIONS: libtcl and libtk will have the same naming conventions. -# - -tcl_libsearchpath="" -tcl_libfound="no" -AC_MSG_CHECKING([Tcl/Tk library to use]) - - # Does the user want us to look somewhere in particular: - -AC_ARG_WITH(tcl-libdir, - [ --with-tcl-libdir=dir Specify where the tcl libraries live.], - [tcl_libsearchpath=$withval]) - -tcl_libsearchpath="$tcl_libsearchpath /sw/lib /usr/lib /usr/local/lib" - -tcl_libfiles="" -for v in ${tcl_versions} -do - tcl_libfiles="$tcl_libfiles libtcl${v}.so libtcl${v}.dylib libtcl${v}.a" -done -tcl_libfiles="$tcl_libfiles libtcl.so libtcl.dylib libtcl.a" - - -for dir in ${tcl_libsearchpath} -do - for file in ${tcl_libfiles} - do - fname=$dir/$file - if test $tcl_libfound = "no" - then - AC_CHECK_FILE($fname, - [tcl_libdir=$dir - tcl_libname=$file - tcl_libfound="yes" - ]) - fi - done -done - -if test $tcl_libfound = "yes" ; then - # Find the lib basename: - - - - tcl_libname=$(echo $tcl_libname|cut -c 4- ) # trim off lib - - # The suffix now is either .so, .dylib or .a; basename can get rid of that: - - tcl_libname=$(basename $(basename $(basename $tcl_libname .a) .so) .dylib) - - # Rather than repeat this mess for tk, we require the same version and - # just replace the tcl with tk. - - tk_libname=tk$(echo $tcl_libname|cut -c 4-) # trim off tc...and use tk - TCL_LDFLAGS="-L${tcl_libdir} -l${tk_libname} -l${tcl_libname}" - AC_MSG_RESULT([Using directory $tcl_libdir]) - -else - AC_MSG_ERROR([Unable to find the tcl library, help me out with --with-tcl-libdir]) -fi - -# Look for image magick convert - -# Try to find ImageMagick's convert program, used for converting postscript -# files created by Gri into JPEGs or PNGs. This is only useful if Gri is -# present as well. - -AC_CHECK_PROG(have_convert, convert, "yes", "no") -if test $have_convert = "no" ; then - AC_MSG_WARN(Cannot print to JPG or PNG files without ImageMagick convert.) -else - AC_DEFINE(HAVE_CONVERT, 1, [True if ImageMagick's convert is present]) -fi - -# libgd: We'll only hunt for the headers in /usr/include /usr/local/include -# which I >think< will be automatically searched by the compiler. -# libs we will also only look for in /usr/lib and /usr/local/lib -# If not found we invite the user to use --with-gd-headerdir -# and --with-gd-libdir -# - -AC_MSG_CHECKING([ libgd used to do wysiwyg printing in Xamine]) - -AC_ARG_WITH(gd-headerdir, - [ --with-gd-headerdir=path Path to the gd.h header], - [gdheaderdir=$withval], - [gdheaderdir=""]) -AC_ARG_WITH(gd-libdir, - [ --with-gd-headerdir=path Path to libgd], - [gdlibdir=$withval], - [gdlibdri=""]) - - -# If user supplied a directory for gd.h, keep them honest: - -if test "$gdheaderdir" != "" -then - AC_MSG_RESULT([ User provided --with-gd-headerdir=$gdheaderdir]) - if test -e $gdheaderdir/gd.h - then - GDINCLUDES="-I$gdheaderdir" - else - AC_MSG_ERROR([ User provided --with-gd-headerdir=$gdheaderdir does not contain gd.h]) - fi -else -# Need to hunt in 'normal places'. - - AC_CHECK_HEADER(gd.h, [gdheaderdir="found in -I path"]) - - if test "$gdheaderdir" != "" - then - AC_MSG_RESULT([gd.h $gdheaderdir]) - GDINCLUDES="" - else - AC_MSG_ERROR([Unable to locate gd.h, try --with-gd-headerdir to help me out]) - fi -fi - -# if user supplied a directory for libgd keep them honest. We'll look for the -# static lib libgd.a - since .so is not the only shared object header supported. -# - -if test "$gdlibdir" != "" -then - AC_MSG_RESULT([ User providied --with-gd-libdir=$gdlibdir]) - if test -e $gdlibdir/libgd.a - then - GDLDSW="-L$gdlibdir -lgd" - else - AC_MSG_ERROR([ User provided --with-gd-libdir=$gdlibdir does not contain libgd.a]) - fi -else -# Need to hunt in the normal places. - - AC_CHECK_LIB(gd, gdImageCreate, [gdlibdir="found in -L path"]) - if test "$gdlibdir" != "" - then - AC_MSG_RESULT([libgd $gdlibdir]) - GDLDSW="-lgd" - else - AC_MSG_ERROR([Unable to locate libgd try --with-gd-libdir to help me out]) - fi -fi - - -# Look for Gri to allow production quality printing - -# If Gri is present, then printing will be enabled. Also required is the -# file gri.cmd, which tell's gri how to behave on command files. If Gri -# is not present, printing will simply be disabled. - -# regardless, in order to build the distro, we need to configure -# our version of gri. - - -AC_ARG_WITH(gri-dir, - [ --with-gri-dir=path Path to Gri binary], - [gri_dir=$withval ; gri_found="yes"], - [gri_found="no"]) - - -if test $gri_found = "no" ; then - AC_MSG_CHECKING([for gri...]) -fi - - # /usr/bin -if test $gri_found = "no" ; then - AC_CHECK_FILE([/usr/bin/gri], - [gri_dir="/usr/bin"; - gri_found="yes"]) -fi - - # /usr/local/bin -if test $gri_found = "no" ; then - AC_CHECK_FILE([/usr/local/bin/gri], - [gri_dir="/usr/local/bin"; - gri_found="yes"]) -fi - # Installed with SpecTcl: - -if test $gri_found = "no" ; then - AC_CHECK_FILE([$prefix/share/gri], - [gri_dir=$prefix/bin; - gri_found="yes"]) -fi - - # I give up at this point, if necessary the Gri packaged with SpecTcl is - # configured here and built. -if test $gri_found = "yes" ; then - AC_MSG_RESULT([yes]) - mygri="no" - GRI="" -else - # - # Configure GRI and build it into SpecTcl's directories: - AC_MSG_NOTICE([Cannot find GRI so I'll build my copy of it]) - # - - # this so CXX etc. propagates at the risk we wind up stranded - # in the Gri directory on failure or ^C - # - - (cd ${MYGRIDIR}; \ - rm -f Makefile; \ - ./configure --prefix=$prefix ; \ - make ;\ - make install ;\ - ) - AC_MSG_NOTICE([Now that GRI is build I know where I put stuff]) - - gri_dir=$prefix/bin - mygri="yes" - gri_found="yes" - GRI="" - -fi - - - -if test $gri_found = "yes" -then - AC_DEFINE(HAVE_GRI, 1, [True if Gri is available]) -fi - - - - -# If cppunit is available we can try to bundle some tests. -# CPPUNIT will be defined to makefiles and CPPUNIT_INCLUDES -# CPPUNIT_LDFLAGS will be about what you'd expect them to be. - - -AC_ARG_ENABLE(cppunit, - AS_HELP_STRING([--enable-cppunit],[build cppunit based tests]), - [havecppunit="check"], [havecppunit="no"]) - -if test "$havecppunit" != "no" -then - AC_LANG_PUSH(C++) - AC_MSG_CHECKING([for cppunit unit testing framework]) - - AC_CHECK_HEADERS([cppunit/Test.h], [havecppunit="yes"], [havecppunit="no"]) - AC_MSG_RESULT([$havecppunit]) - if test "$havecppunit" == "yes" - then - CPPUNIT_INCLUDES="" - CPPUNIT_LDFLAGS="-lcppunit" - AC_SUBST(CPPUNIT_INCLUDES) - AC_SUBST(CPPUNIT_LDFLAGS) - fi - -AC_LANG_POP(C++) - -# We also want the 'check' package for C language unit tests. - -# AM_PATH_CHECK() - -fi - -AM_CONDITIONAL(CPPUNIT, test $havecppunit == "yes") - - -# We use mandb to index the man pages if it exists... not sure what the -# alternatives are on other systems so transform mandb -> echo if -# we can't find it: - -AC_CHECK_PROG(MANDB, mandb, mandb, echo) - -# -# We'd like to compile with -pedantic if supported -# Intel looks like gcc so we check explicitly for a gcc -# named compiler -# - -AC_MSG_CHECKING([gcc so use -pedantic?]) - -if `echo $CC | grep -q gcc` -then - CFLAGS="$CFLAGS -pedantic -Wno-long-long" - CXXFLAGS="$CXXFLAGS -pedantic -Wno-long-long" - AC_MSG_RESULT(yes) -else - AC_MSG_RESULT(no) -fi - -# mandb: - -AC_SUBST(MANDB) - -# tcl/tk -AC_SUBST(TCL_FLAGS) -AC_SUBST(TCL_LDFLAGS) -AC_SUBST(TCLSH_CMD) - -# X flags - -AC_SUBST(X11EXTRA_LDFLAGS) - -AC_SUBST(XINCLUDES) -AC_SUBST(XLIBSW) -AC_SUBST(CFLAGS) - -# Motif flags -AC_SUBST(MOTIF_INCLUDES) -AC_SUBST(MOTIF_LIBSW) -AC_SUBST(XTLIBSW) - -# Gri directories -AC_SUBST(gri_dir) -AC_SUBST(MYGRIDIR) - -# Tru64 specific -AC_SUBST(WCHAR_T_DEF) -AC_SUBST(LD_EXTRA_FLAGS) - -AC_SUBST(ac_aux_dir) - -# LIBOBJS and LTLILBOBJS set -AC_SUBST(LTLIBOBJS) - -# Operating system designator: - -AC_SUBST(OS) - -# .so version information. - -AC_SUBST(SOVERSION) - -# docbook tools: - -AC_SUBST(HCDOCBOOK) -AC_SUBST(HTMLDOCBOOK) -AC_SUBST(DVIPDF) -AC_SUBST(MANDOCBOOK) - -# Xamine uses libgd for wysiwyg printing: - - AC_SUBST(GDINCLUDES) - AC_SUBST(GDLDSW) - - -# create output files. - - -AC_OUTPUT(Makefile Replace/Makefile Scripts/Makefile Utility/Makefile \ - factories/Makefile \ - Display/Makefile NSCLException/Makefile \ - Xamine/Makefile Tape/Makefile \ - EventSource/Makefile TCL/Makefile Events/Makefile Gates/Makefile \ - Sorter/Makefile SpectrumIO/Makefile Filter/Makefile \ - Analysis/Makefile \ - DecoderRing/Makefile \ - TreeParam/Makefile \ - Fits/Makefile \ - SpecTcl/Makefile \ - contrib/Makefile contrib/scriptable/Makefile \ - TestFiles/Makefile \ - Gui/Makefile splash/Makefile \ - treegui/Makefile \ - filtsplit/Makefile doc/Makefile \ - calibratedparams/Makefile) Modified: trunk/SpecTcl/treegui/treeGui.tcl =================================================================== --- trunk/SpecTcl/treegui/treeGui.tcl 2012-05-02 17:47:26 UTC (rev 1996) +++ trunk/SpecTcl/treegui/treeGui.tcl 2012-05-02 17:50:46 UTC (rev 1997) @@ -28,39 +28,42 @@ package require spectrumTabActions package require SpecTclGui -# -# Build the top level and a notebook: -# -toplevel .treegui -set treenotebook [ttk::notebook .treegui.notebook] - -# -# Now builds and load the widgets into the notebook: -# - - -# First the MC Rewrite widgets: - -spectrumTabActions spectrum_tab -widget $treenotebook.spectra -$treenotebook add $treenotebook.spectra -text Spectra -sticky nsew - -parametersTabActions parameters -widget $treenotebook.parameters -$treenotebook add $treenotebook.parameters -text Parameters -sticky nsew - -variableTabActions variables -widget $treenotebook.variables -$treenotebook add $treenotebook.variables -text Variables -sticky nsew - -gateTabActions gates -widget $treenotebook.gates -$treenotebook add $treenotebook.gates -text Gates -sticky nsew - -# Now the folder gui as a new tab: - -::FolderGui::startFolderGui .treegui $treenotebook -$treenotebook add $::FolderGui::folderGuiBrowser -text Folders -sticky nsew - -grid $treenotebook -sticky nsew -grid $::FolderGui::folderGuiStatusFrame -sticky sew - -grid columnconfigure .treegui all -weight 1 -grid rowconfigure .treegui 0 -weight 1 -grid rowconfigure .treegui 1 -weight 0 +if {![winfo exists .treegui]} { # Don't do it twice! + + # + # Build the top level and a notebook: + # + toplevel .treegui + set treenotebook [ttk::notebook .treegui.notebook] + + # + # Now builds and load the widgets into the notebook: + # + + + # First the MC Rewrite widgets: + + spectrumTabActions spectrum_tab -widget $treenotebook.spectra + $treenotebook add $treenotebook.spectra -text Spectra -sticky nsew + + parametersTabActions parameters -widget $treenotebook.parameters + $treenotebook add $treenotebook.parameters -text Parameters -sticky nsew + + variableTabActions variables -widget $treenotebook.variables + $treenotebook add $treenotebook.variables -text Variables -sticky nsew + + gateTabActions gates -widget $treenotebook.gates + $treenotebook add $treenotebook.gates -text Gates -sticky nsew + + # Now the folder gui as a new tab: + + ::FolderGui::startFolderGui .treegui $treenotebook + $treenotebook add $::FolderGui::folderGuiBrowser -text Folders -sticky nsew + + grid $treenotebook -sticky nsew + grid $::FolderGui::folderGuiStatusFrame -sticky sew + + grid columnconfigure .treegui all -weight 1 + grid rowconfigure .treegui 0 -weight 1 + grid rowconfigure .treegui 1 -weight 0 +} \ No newline at end of file This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <ro...@us...> - 2012-05-02 17:53:31
|
Revision: 1998 http://nsclspectcl.svn.sourceforge.net/nsclspectcl/?rev=1998&view=rev Author: ron-fox Date: 2012-05-02 17:53:24 +0000 (Wed, 02 May 2012) Log Message: ----------- More in keeping with current autoconf conventions Modified Paths: -------------- trunk/SpecTcl/gri-2.12.20/doc/index.html Added Paths: ----------- trunk/SpecTcl/configure.ac Added: trunk/SpecTcl/configure.ac =================================================================== --- trunk/SpecTcl/configure.ac (rev 0) +++ trunk/SpecTcl/configure.ac 2012-05-02 17:53:24 UTC (rev 1998) @@ -0,0 +1,929 @@ +# Process this file with autoconf to produce a configure script. + +AC_INIT(SpecTcl/MySpecTclApp.cpp) +AC_CONFIG_AUX_DIR(config) +AM_CONFIG_HEADER(config.h) +AC_CANONICAL_HOST +AM_INIT_AUTOMAKE(SpecTcl, 3.3-008) +AC_CONFIG_MACRO_DIR([m4]) + +AC_EXEEXT +AC_OBJEXT + +# This should track the version in +# AM_INIT_AUTOMAKE it will be used to +# define the version information in shared +# images. + +SOVERSION="3:2" +# +# This symbol describes where the bundled Gri graphics package lives. +# Gri is used to help Xamine do printing. +# +MYGRIDIR="gri-2.12.20" + +# Checks for programs. + + +AC_PROG_AWK +AC_PROG_CXX +AC_PROG_CC +AC_PROG_CPP +AC_PROG_INSTALL +AC_PROG_LN_S +AC_PROG_MAKE_SET +AM_PROG_LEX +AC_PROG_YACC +AC_PROG_GCC_TRADITIONAL +AC_PROG_LIBTOOL + + +# The following are for doctools things: + +AC_PATH_PROG(HCDOCBOOK, docbook2dvi, echo) +AC_PATH_PROG(HTMLDOCBOOK, docbook2html, echo) +AC_PATH_PROG(DVIPDF, dvipdf, echo) +AC_PATH_PROG(MANDOCBOOK, xmlto, echo) + + + +# Checks for header files. +AC_HEADER_STDC +AC_HEADER_SYS_WAIT +AC_CHECK_HEADER(time.h) +AC_CHECK_HEADERS([fcntl.h limits.h malloc.h memory.h stddef.h stdlib.h strings.h string.h sys/file.h sys/ioctl.h sys/socket.h sys/time.h unistd.h values.h windows.h machine/hal_sysinfo.h sys/proc.h sys/mtio.h sys/mman.h sys/ipc.h sys/shm.h machine/param.h sys/un.h]) + +# Checks for typedefs, structures, and compiler characteristics. +AC_HEADER_STAT +AC_HEADER_TIME +AC_STRUCT_TM +AC_C_CONST +AC_C_INLINE +AC_TYPE_OFF_T +AC_TYPE_PID_T +AC_TYPE_SIZE_T +AC_TYPE_SIGNAL + +# Checks for library functions. +AC_FUNC_MMAP +AC_REPLACE_FUNCS([atexit dup2 ftruncate getpagesize memset putenv]) +AC_REPLACE_FUNCS([strchr strcspn strerror strrchr bzero mkstemp stat]) +AC_REPLACE_FUNCS([malloc memcmp strftime alloca vfork strtok_r]) +AC_CHECK_FUNCS([select socket strspn fork drand48 seed48]) +AC_CHECK_FUNCS([pipe sbrk shm_open shmget fcntl]) +AC_CHECK_FUNCS([floor getcwd gethostname gettimeofday mbrlen]) +AC_CHECK_FUNCS(time) +AC_CHECK_LIB(m, pow) +AC_CHECK_LIB(m, sqrt) +AC_CHECK_LIB(m, logb) +AC_CHECK_FUNCS([strdup strstr strtol tzset mktime strtod timezone]) + + +# The following are needed for strict ANSI c++ compilers The major features +# are whether or not there are .h -less headers and if there's an std +# namespace we'll need to import. + +# See if the C runtime libs have .h's on them or +# if h-less versions can be used for what we need: +# + +AC_LANG_PUSH(C++) +AC_CHECK_HEADER(iostream, [AC_DEFINE([HAVE_HLESS_IOSTREAM],1,[<iostream> exists])],[]) +AC_CHECK_HEADER(istream, [AC_DEFINE([HAVE_HLESS_ISTREAM],1,[<istream> exists])],[]) +AC_CHECK_HEADER(ostream, [AC_DEFINE([HAVE_HLESS_OSTREAM],1,[<ostream> exists])],[]) +AC_CHECK_HEADER(streambuf,[AC_DEFINE([HAVE_HLESS_STREAMBUF],1,[<streambuf> exists])],[]) +AC_CHECK_HEADER(fstream, [AC_DEFINE([HAVE_HLESS_FSTREAM],1,[<fstream> exists])],[]) +AC_CHECK_HEADER(iomanip, [AC_DEFINE([HAVE_HLESS_IOMANIP],1,[<iomanip> exists])],[]) +AC_CHECK_HEADER(sstream, [AC_DEFINE([HAVE_HLESS_SSTREAM],1,[<sstream> exists])],[]) +AC_CHECK_HEADER(typeinfo, [AC_DEFINE([HAVE_HLESS_TYPEINFO],1,[<typeinfo> exists])],[]) + + + +# Is there an std namespace to import from? + +AC_COMPILE_IFELSE([using namespace std;], [AC_DEFINE([HAVE_STD_NAMESPACE],[1],[1 if std namespace defined])]) +AH_VERBATIM([VHAVE_STD_NAMESPACE],[ +/* Define STD macro according to HAVE_STD_NAMESPACE value */ +#ifdef HAVE_STD_NAMESPACE +#define STD(name) std::name +#else +#define STD(name) name +#endif]) + + + +AC_LANG_POP(C++) + +# -------------------- X11 tests + +# Locate the X11 header files and the X11 library archive. Try the +# ac_path_x macro first, but if it doesn't find the X stuff then check +# a list of possible directories. + +AC_PATH_X +AC_PATH_XTRA + +if test "$x_includes" != "" +then + XINCLUDES="-I$x_includes" +else + XINCLUDES="" +fi +if test "$x_libraries" != "" +then + XLIBSW="-L$x_libraries" +else + XLIBSW="" +fi + + +# +# Locate motif headers and libraries. (Xm.h and libXm.{so,dylib,a}). +# +motif_headerdir="" +motif_h_found="no" +AC_MSG_CHECKING([for Xm/Xm.h]) + +AC_ARG_WITH(motif-header-dir, + [ --with-motif-header-dir=path Path to Xm header directory], + [motif_headerdir="$withval"; motif_h_found="yes"]) + +# first try is for the headers in the same dir as the X headers: + +if test $motif_h_found = no +then + # Special case: if it's in x_includes, no extra sws. + + mdir="$x_includes" + if test "$mdir" = "" + then + mdir="/usr/include" + fi + AC_CHECK_FILE([${mdir}/Xm/Xm.h], + [motif_h_found="yes"], + [motif_h_found="no"]) +fi + +# Next search: +# /usr/include/X11 +# /usr/include/X11R6 +# /usr/X11/include +# /usr/X11R6/include +# /usr/include/Xm +# /sw/include (Darwin lesstif). +# /usr/local/include (default lesstif installation). +# + +# If in /usr/include we don't need anything: + + +if test $motif_h_found = no +then + motif_header_dirs="/usr/include/X11 /usr/include/X11R6 /usr/X11/include /usr/X11R6/include /usr/include /sw/include /usr/local/include" + for d in ${motif_header_dirs} + do + AC_CHECK_FILE([${d}/Xm/Xm.h], + [motif_h_found="yes"; \ + motif_headerdir="$d"]) + if test $motif_h_found = yes + then + break + fi + done +fi + +# +# If motif_h_found and nonblank motif_headerdir prepend +# with -I to make MOTIF_INCLUDES (blank means XINCLUDES has it +# covered. If not motif_h_found error and ask for help. +# +if test $motif_h_found = yes +then + if test "$motif_headerdir" = "" + then + AC_MSG_RESULT([Xm/Xm.h is relative to $x_includes]) + else + AC_MSG_RESULT([Xm/Xm.h is relative to $motif_headerdir]) + MOTIF_INCLUDES="-I$motif_headerdir" + fi +else + AC_MSG_ERROR([ Can't find Xm/Xm.h try using --with-motif-header-dir=path]) +fi + +# +# Look for libXm.{so,dylib,a} +# Our search order is: +# --with-motif-lib=path (user always can override). +# $x_libraries (Pretty normal place e.g. openmotif). +# /usr/lib (e.g. OSF1). +# /sw/lib (Darwin lesstif installation). +# /usr/local/lesstif/lib (normal lesstif install wo links?). +# + +libexts=".so .dylib .a" # prefer shared libs to static. +motiflibdirs="/usr/X11/lib /usr/X11R6/lib /sw/lib /usr/local/lesstif/lib /usr/lib" +motif_libdir="" +motif_lib_found="no" + +AC_MSG_CHECKING([for libXm]) +AC_ARG_WITH(motif-lib, + [ --with-motif-lib=path Path to libXm], + [motif_libdir="" + motif_lib_found="yes"] + ) + +# If necessary, try in $x_libraries: + +for ext in $libexts +do + if test $motif_lib_found = "no" + then + if "$x_libraries" != "" + then + AC_CHECK_FILE([$x_libraries/libXm${ext}], +x [motif_lib_found="yes"]) + else + AC_CHECK_FILE([/usr/lib/libXm${ext}], + [motif_lib_found="yes"]) + fi + fi +done + +# If necessary try in the list of good directories: + +for lib in $motiflibdirs +do + for ext in $libexts + do + if test $motif_lib_found = "no" + then + AC_CHECK_FILE([$lib/libXm${ext}], + [motif_lib_found="yes" + motif_libdir="$lib"]) + fi + done +done + +# If found set MOTIF_LIBSW accordingly. Note this will be +# empty if found in with the x libraries. +# + +if test $motif_lib_found = "yes" +then + if test "$motif_libdir" = "" + then + AC_MSG_RESULT([Found libXm in $x_libraries]) + else + AC_MSG_RESULT([Found libXm in $motif_libdir]) + MOTIF_LIBSW="-L$motif_libdir" + fi +else + AC_MSG_ERROR([Can't fine libXm give me a hand with --with-motif-lib]) +fi + + +# Checks for include declarations + + +# These checks are for declarations within specific system headers. For +# instance, MTSETBLK is not declared in sys/mtio.h on all platforms, but +# is needed on Linux. + + # MTSETBLK in sys/mtio.h +AC_MSG_CHECKING([for MTSETBLK in sys/mtio.h]) + AC_TRY_COMPILE([ +#include <sys/mtio.h> +#ifndef MTSETBLK +# error mtsetblk not defined +#endif +], , my_cv_have_mtsetblk=yes, my_cv_have_mtsetblk=no) + if test $my_cv_have_mtsetblk = yes ; then + AC_DEFINE(HAVE_DECL_MTSETBLK, 1, [True if MTSETBLK defined in sys/mtio.h]) + fi +AC_MSG_RESULT($my_cv_have_mtsetblk) + + # MTOVERRUN in sys/mtio.h +AC_MSG_CHECKING([for MTOVERRUN in sys/mtio.h]) + AC_TRY_COMPILE([ +#include <sys/mtio.h> +#ifndef MTOVERRUN +# error overrun not defined +#endif +], , my_cv_have_mtoverrun=yes, my_cv_have_mtoverrun=no) + if test $my_cv_have_mtoverrun = yes ; then + AC_DEFINE(HAVE_DECL_MTOVERRUN, 1, [True if MTOVERRUN defined in sys/mtio.h]) + fi +AC_MSG_RESULT($my_cv_have_mtoverrun) + + + # MTCSE in sys/mtio.h +AC_MSG_CHECKING([for MTCSE in sys/mtio.h]) + AC_TRY_COMPILE([ +#include <sys/mtio.h> +#ifndef MTCSE +# error mtcse not defined +#endif +], , my_cv_have_mtcse=yes, my_cv_have_mtcse=no) + if test $my_cv_have_mtcse = yes ; then + AC_DEFINE(HAVE_DECL_MTCSE, 1, [True if MTCSE defined in sys/mtio.h]) + fi +AC_MSG_RESULT($my_cv_have_mtcse) + + # PAGESIZE in limits.h +AC_MSG_CHECKING([for PAGESIZE in limits.h]) + AC_TRY_COMPILE([ +#include <limits.h> +#ifndef PAGESIZE +# error pagesize not defined +#endif +], , my_cv_have_pagesize=yes, my_cv_have_pagesize=no) + if test $my_cv_have_pagesize = yes ; then + AC_DEFINE(HAVE_DECL_PAGESIZE, 1, [True if PAGESIZE is defined in limits.h as on HP-UX]) + fi +AC_MSG_RESULT($my_cv_have_pagesize) + + # PADSIZE in limits.h +AC_MSG_CHECKING([for PADSIZE in limits.h]) + AC_TRY_COMPILE([ +#include <limits.h> +#ifndef PADSIZE +# error padsize not defined +#endif +], , my_cv_have_padsize=yes, my_cv_have_padsize=no) + if test $my_cv_have_padsize = yes ; then + AC_DEFINE(HAVE_DECL_PADSIZE, 1, [True if PADSIZE defined in limits.h]) + fi +AC_MSG_RESULT($my_cv_have_padsize) + + # INT_MAX in limits.h +AC_MSG_CHECKING([for INT_MAX in limits.h]) + AC_TRY_COMPILE([ +#include <limits.h> +#ifndef INT_MAX +# error intmax not defined +#endif +], , my_cv_have_int_max=yes, my_cv_have_int_max=no) + if test $my_cv_have_int_max = yes ; then + AC_DEFINE(HAVE_DECL_INT_MAX, 1, [True if INT_MAX defined in limits.h]) + fi +AC_MSG_RESULT($my_cv_have_int_max) + + # MAXINT in values.h +AC_MSG_CHECKING([for MAXINT in values.h]) + AC_TRY_COMPILE([ +#include <values.h> +#ifndef MAXINT +# error maxint not defined +#endif +], , my_cv_have_maxint=yes, my_cv_have_maxint=no) + if test $my_cv_have_maxint = yes ; then + AC_DEFINE(HAVE_DECL_MAXINT, 1, [True if MAXINT defined in values.h]) + fi +AC_MSG_RESULT($my_cv_have_maxint) + + # Check for 64 bit longs +AC_MSG_CHECKING([whether long int is 64 bits]) + AC_TRY_RUN([ +int main(int argc, char **argv) { + if(sizeof(long) == 8) + return 0; + else + return 1; +} +], [AC_DEFINE(HAVE_TRUE_SIXTY_FOUR, 1, [True if long int is 8 bits]) AC_MSG_RESULT(yes)], AC_MSG_RESULT(no), AC_MSG_RESULT(assuming not on target machine)) + +# Determine the particular platform we are running on. Specifically, +# we need to know if we are running on a SPARC processor, so that we +# can do the tape reading appropriately. + +AC_MSG_CHECKING([for SPARC processor type]) +case $host in + *sparc*) + AC_DEFINE(SPARC, 1, [Set to 1 if SPARC Processor]) + echo "yes" + ;; + *) echo "no" ;; +esac + +# Determine what OS we are running so we know whether or not to +# declare some things extern "C". Also helpful for some Cygwin +# and Ultrix specific calls. + +LD_EXTRA_FLAGS="" +X11EXTRA_LDFLAGS="" +AC_MSG_CHECKING([for supported OS]) +OS="$host_os" # Default guess. +case $host_os in + *cygwin* ) + AC_DEFINE(CYGWIN, 1, [Set to 1 if Cygwin environment]) + AC_MSG_RESULT([Cygwin... xdr.h broken for c++]) + + # cygwin we have doesn't seem to get the object extension + # quite right: + + OBJEXT="o" + AC_SUBST(OBJEXT) + AC_DEFINE(BROKEN_XDR_H, 1, + [defined if xdr.h unusuable for c++]) + + + # Windows doesn't allow undefined symbols at link time + # + LD_EXTRA_FLAGS="$LD_EXTRA_FLAGS -no-undefined -lrpc" + X11EXTRA_LDFLAGS="-lSM -lICE" + ;; + *linux* ) + AC_DEFINE(LINUX, 1, [Set to 1 if Linux environment]) + AC_MSG_RESULT([Linux]) + ;; + *ultrix* ) + AC_DEFINE(ULTRIX, 1, [Set to 1 if Ultrix environment]) + AC_MSG_RESULT([Ultrix]) + ;; + *osf* ) + AC_DEFINE(OSF, 1, [Set to 1 if OSF environment]) + AC_MSG_RESULT([OSF1]) + WCHAR_T_DEF=-D_WCHAR_T + OBJEXT=o + + # Missing on OSF1 for some reason + AC_SUBST(OBJEXT) + + # This does away with "weak symbol" warnings + LD_EXTRA_FLAGS="$LD_EXTRA_FLAGS -Wl,\"-S\"" + ;; + *darwin* ) + OBJEXT="o" + AC_SUBST(OBJEXT) + AC_DEFINE(DARWIN, 1, [Set to 1 if Darwin environment]) + AC_DEFINE(BROKEN_XDR_H, 1, + [defined if xdr.h is unusable for c++]) + AC_MSG_RESULT([Darwin .. xdr.h broken for c++]) + OS="darwin" # It's crapped up with versions otherwise. + ;; + * ) + AC_MSG_RESULT([ok]) + ;; +esac + +# Locate Tcl/Tk and setup compile/link switches for them too: + +# TCL headers: +# We know of a few places the headers can live: +# /usr/include redhat linux. +# /usr/include/tcl debian dude that made link to default tcl. +# /usr/include/tcl<version> debian linux +# /usr/local/include default for source based install. +# Whatever the user specifies. +# For now, the versions we look for are determined by the +# variable tcl_versions that variable is a list of version +# number specifiers. +# + +tcl_versions="8.5 8.4 8.3 8.2 8.1 8.0" # First match; so order new -> old. + + +# The TCL Shell - used to run tests... must be in path. +# First check for a version qualified command: +# + +AC_MSG_CHECKING([for tcl shell command...]) +for version in $tcl_versions +do + name=tclsh${version} + AC_CHECK_PROG(TCLSH_CMD, $name, $name) +done + + +tcl_header_dir="" +AC_MSG_CHECKING([for tcl header directory]) + +AC_ARG_WITH(tcl-header-dir, + [ --with-tcl-header-dir=path Path to tcl headers], + [tcl_header_dir=$withval ; + tcl_headers_found="yes"],[tcl_headers_found="no"]) + + +# +# Look for tcl.h in the following places: +# Note that the order is important for Darwin and OSF1. + # + # /sw/include (Best for darwin). + # /usr/local/tcl/include (Best for NSCL Cygwin). + # /usr/local/include (Best for NSCL OSF1) + # /usr/include (Best for e.g. Linux). + # + # For all of these directories, + # look for tcl.h in: + # - the directory itself. + # - a tcl subdirectory to the directory. + # - subdirectories of the form tcl${version} where + # version is chosein from tcl_versions. + # + +tcl_h_testdirs="/sw/include /usr/local/tcl/include /usr/local/include \ + /usr/include" + +if test $tcl_headers_found = "no" +then + for d in $tcl_h_testdirs + do + for v in ${tcl_versions}; + do + if test $tcl_headers_found = "no" + then + AC_CHECK_FILE([${d}/tcl${v}/tcl.h], + [tcl_header_dir=${d}/tcl${v} + tcl_headers_found="yes"]) + fi + done + if test $tcl_headers_found = "no" + then + AC_CHECK_FILE([${d}/tcl.h], + [tcl_header_dir=$d + tcl_headers_found="yes"]) + fi + if test $tcl_headers_found = "no" + then + AC_CHECK_FILE([${d}/tcl/tcl.h], + [tcl_header_dir=${d}/tcl + tcl_headers_found="yes"]) + fi + done +fi + +if test $tcl_headers_found = "yes"; then + TCL_FLAGS=-I${tcl_header_dir} + AC_MSG_RESULT(Using path $tcl_header_dir) +else + AC_MSG_ERROR([can't find tcl.h try using --with-tcl-header-dir to help me]) +fi + +# Tcl libraries: +# We look for the following +# /sw/lib +# /usr/lib/libtcl.{so,dylib,a} - link to a default lib. +# /usr/lib/libtcl<version>.{so,dylib,a} - link to a specific lib. +# If --with-tcl-libdir=dir is supplied, that directory is +# searched first. +# ASSUMPTIONS: libtcl and libtk will have the same naming conventions. +# + +tcl_libsearchpath="" +tcl_libfound="no" +AC_MSG_CHECKING([Tcl/Tk library to use]) + + # Does the user want us to look somewhere in particular: + +AC_ARG_WITH(tcl-libdir, + [ --with-tcl-libdir=dir Specify where the tcl libraries live.], + [tcl_libsearchpath=$withval]) + +tcl_libsearchpath="$tcl_libsearchpath /sw/lib /usr/lib /usr/local/lib" + +tcl_libfiles="" +for v in ${tcl_versions} +do + tcl_libfiles="$tcl_libfiles libtcl${v}.so libtcl${v}.dylib libtcl${v}.a" +done +tcl_libfiles="$tcl_libfiles libtcl.so libtcl.dylib libtcl.a" + + +for dir in ${tcl_libsearchpath} +do + for file in ${tcl_libfiles} + do + fname=$dir/$file + if test $tcl_libfound = "no" + then + AC_CHECK_FILE($fname, + [tcl_libdir=$dir + tcl_libname=$file + tcl_libfound="yes" + ]) + fi + done +done + +if test $tcl_libfound = "yes" ; then + # Find the lib basename: + + + + tcl_libname=$(echo $tcl_libname|cut -c 4- ) # trim off lib + + # The suffix now is either .so, .dylib or .a; basename can get rid of that: + + tcl_libname=$(basename $(basename $(basename $tcl_libname .a) .so) .dylib) + + # Rather than repeat this mess for tk, we require the same version and + # just replace the tcl with tk. + + tk_libname=tk$(echo $tcl_libname|cut -c 4-) # trim off tc...and use tk + TCL_LDFLAGS="-L${tcl_libdir} -l${tk_libname} -l${tcl_libname}" + AC_MSG_RESULT([Using directory $tcl_libdir]) + +else + AC_MSG_ERROR([Unable to find the tcl library, help me out with --with-tcl-libdir]) +fi + +# Look for image magick convert + +# Try to find ImageMagick's convert program, used for converting postscript +# files created by Gri into JPEGs or PNGs. This is only useful if Gri is +# present as well. + +AC_CHECK_PROG(have_convert, convert, "yes", "no") +if test $have_convert = "no" ; then + AC_MSG_WARN(Cannot print to JPG or PNG files without ImageMagick convert.) +else + AC_DEFINE(HAVE_CONVERT, 1, [True if ImageMagick's convert is present]) +fi + +# libgd: We'll only hunt for the headers in /usr/include /usr/local/include +# which I >think< will be automatically searched by the compiler. +# libs we will also only look for in /usr/lib and /usr/local/lib +# If not found we invite the user to use --with-gd-headerdir +# and --with-gd-libdir +# + +AC_MSG_CHECKING([ libgd used to do wysiwyg printing in Xamine]) + +AC_ARG_WITH(gd-headerdir, + [ --with-gd-headerdir=path Path to the gd.h header], + [gdheaderdir=$withval], + [gdheaderdir=""]) +AC_ARG_WITH(gd-libdir, + [ --with-gd-headerdir=path Path to libgd], + [gdlibdir=$withval], + [gdlibdri=""]) + + +# If user supplied a directory for gd.h, keep them honest: + +if test "$gdheaderdir" != "" +then + AC_MSG_RESULT([ User provided --with-gd-headerdir=$gdheaderdir]) + if test -e $gdheaderdir/gd.h + then + GDINCLUDES="-I$gdheaderdir" + else + AC_MSG_ERROR([ User provided --with-gd-headerdir=$gdheaderdir does not contain gd.h]) + fi +else +# Need to hunt in 'normal places'. + + AC_CHECK_HEADER(gd.h, [gdheaderdir="found in -I path"]) + + if test "$gdheaderdir" != "" + then + AC_MSG_RESULT([gd.h $gdheaderdir]) + GDINCLUDES="" + else + AC_MSG_ERROR([Unable to locate gd.h, try --with-gd-headerdir to help me out]) + fi +fi + +# if user supplied a directory for libgd keep them honest. We'll look for the +# static lib libgd.a - since .so is not the only shared object header supported. +# + +if test "$gdlibdir" != "" +then + AC_MSG_RESULT([ User providied --with-gd-libdir=$gdlibdir]) + if test -e $gdlibdir/libgd.a + then + GDLDSW="-L$gdlibdir -lgd" + else + AC_MSG_ERROR([ User provided --with-gd-libdir=$gdlibdir does not contain libgd.a]) + fi +else +# Need to hunt in the normal places. + + AC_CHECK_LIB(gd, gdImageCreate, [gdlibdir="found in -L path"]) + if test "$gdlibdir" != "" + then + AC_MSG_RESULT([libgd $gdlibdir]) + GDLDSW="-lgd" + else + AC_MSG_ERROR([Unable to locate libgd try --with-gd-libdir to help me out]) + fi +fi + + +# Look for Gri to allow production quality printing + +# If Gri is present, then printing will be enabled. Also required is the +# file gri.cmd, which tell's gri how to behave on command files. If Gri +# is not present, printing will simply be disabled. + +# regardless, in order to build the distro, we need to configure +# our version of gri. + + +AC_ARG_WITH(gri-dir, + [ --with-gri-dir=path Path to Gri binary], + [gri_dir=$withval ; gri_found="yes"], + [gri_found="no"]) + + +if test $gri_found = "no" ; then + AC_MSG_CHECKING([for gri...]) +fi + + # /usr/bin +if test $gri_found = "no" ; then + AC_CHECK_FILE([/usr/bin/gri], + [gri_dir="/usr/bin"; + gri_found="yes"]) +fi + + # /usr/local/bin +if test $gri_found = "no" ; then + AC_CHECK_FILE([/usr/local/bin/gri], + [gri_dir="/usr/local/bin"; + gri_found="yes"]) +fi + # Installed with SpecTcl: + +if test $gri_found = "no" ; then + AC_CHECK_FILE([$prefix/share/gri], + [gri_dir=$prefix/bin; + gri_found="yes"]) +fi + + # I give up at this point, if necessary the Gri packaged with SpecTcl is + # configured here and built. +if test $gri_found = "yes" ; then + AC_MSG_RESULT([yes]) + mygri="no" + GRI="" +else + # + # Configure GRI and build it into SpecTcl's directories: + AC_MSG_NOTICE([Cannot find GRI so I'll build my copy of it]) + # + + # this so CXX etc. propagates at the risk we wind up stranded + # in the Gri directory on failure or ^C + # + + (cd ${MYGRIDIR}; \ + rm -f Makefile; \ + ./configure --prefix=$prefix ; \ + make ;\ + make install ;\ + ) + AC_MSG_NOTICE([Now that GRI is build I know where I put stuff]) + + gri_dir=$prefix/bin + mygri="yes" + gri_found="yes" + GRI="" + +fi + + + +if test $gri_found = "yes" +then + AC_DEFINE(HAVE_GRI, 1, [True if Gri is available]) +fi + + + + +# If cppunit is available we can try to bundle some tests. +# CPPUNIT will be defined to makefiles and CPPUNIT_INCLUDES +# CPPUNIT_LDFLAGS will be about what you'd expect them to be. + + +AC_ARG_ENABLE(cppunit, + AS_HELP_STRING([--enable-cppunit],[build cppunit based tests]), + [havecppunit="check"], [havecppunit="no"]) + +if test "$havecppunit" != "no" +then + AC_LANG_PUSH(C++) + AC_MSG_CHECKING([for cppunit unit testing framework]) + + AC_CHECK_HEADERS([cppunit/Test.h], [havecppunit="yes"], [havecppunit="no"]) + AC_MSG_RESULT([$havecppunit]) + if test "$havecppunit" == "yes" + then + CPPUNIT_INCLUDES="" + CPPUNIT_LDFLAGS="-lcppunit" + AC_SUBST(CPPUNIT_INCLUDES) + AC_SUBST(CPPUNIT_LDFLAGS) + fi + +AC_LANG_POP(C++) + +# We also want the 'check' package for C language unit tests. + +# AM_PATH_CHECK() + +fi + +AM_CONDITIONAL(CPPUNIT, test $havecppunit == "yes") + + +# We use mandb to index the man pages if it exists... not sure what the +# alternatives are on other systems so transform mandb -> echo if +# we can't find it: + +AC_CHECK_PROG(MANDB, mandb, mandb, echo) + +# +# We'd like to compile with -pedantic if supported +# Intel looks like gcc so we check explicitly for a gcc +# named compiler +# + +AC_MSG_CHECKING([gcc so use -pedantic?]) + +if `echo $CC | grep -q gcc` +then + CFLAGS="$CFLAGS -pedantic -Wno-long-long" + CXXFLAGS="$CXXFLAGS -pedantic -Wno-long-long" + AC_MSG_RESULT(yes) +else + AC_MSG_RESULT(no) +fi + +# mandb: + +AC_SUBST(MANDB) + +# tcl/tk +AC_SUBST(TCL_FLAGS) +AC_SUBST(TCL_LDFLAGS) +AC_SUBST(TCLSH_CMD) + +# X flags + +AC_SUBST(X11EXTRA_LDFLAGS) + +AC_SUBST(XINCLUDES) +AC_SUBST(XLIBSW) +AC_SUBST(CFLAGS) + +# Motif flags +AC_SUBST(MOTIF_INCLUDES) +AC_SUBST(MOTIF_LIBSW) +AC_SUBST(XTLIBSW) + +# Gri directories +AC_SUBST(gri_dir) +AC_SUBST(MYGRIDIR) + +# Tru64 specific +AC_SUBST(WCHAR_T_DEF) +AC_SUBST(LD_EXTRA_FLAGS) + +AC_SUBST(ac_aux_dir) + +# LIBOBJS and LTLILBOBJS set +AC_SUBST(LTLIBOBJS) + +# Operating system designator: + +AC_SUBST(OS) + +# .so version information. + +AC_SUBST(SOVERSION) + +# docbook tools: + +AC_SUBST(HCDOCBOOK) +AC_SUBST(HTMLDOCBOOK) +AC_SUBST(DVIPDF) +AC_SUBST(MANDOCBOOK) + +# Xamine uses libgd for wysiwyg printing: + + AC_SUBST(GDINCLUDES) + AC_SUBST(GDLDSW) + + +# create output files. + + +AC_OUTPUT(Makefile Replace/Makefile Scripts/Makefile Utility/Makefile \ + factories/Makefile \ + Display/Makefile NSCLException/Makefile \ + Xamine/Makefile Tape/Makefile \ + EventSource/Makefile TCL/Makefile Events/Makefile Gates/Makefile \ + Sorter/Makefile SpectrumIO/Makefile Filter/Makefile \ + Analysis/Makefile \ + DecoderRing/Makefile \ + TreeParam/Makefile \ + Fits/Makefile \ + SpecTcl/Makefile \ + contrib/Makefile contrib/scriptable/Makefile \ + TestFiles/Makefile \ + Gui/Makefile splash/Makefile \ + treegui/Makefile \ + filtsplit/Makefile doc/Makefile \ + calibratedparams/Makefile) Modified: trunk/SpecTcl/gri-2.12.20/doc/index.html =================================================================== --- trunk/SpecTcl/gri-2.12.20/doc/index.html 2012-05-02 17:50:46 UTC (rev 1997) +++ trunk/SpecTcl/gri-2.12.20/doc/index.html 2012-05-02 17:53:24 UTC (rev 1998) @@ -8,7 +8,7 @@ <meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1"></head> <body bgcolor="#FFFFFF" text="#000000" link="#0000EE" vlink="#551A8B" alink="FF0000"> <!-- Created automatically from texinfo source --> -<!-- Mon Dec 5 8:36:28 2011 --> +<!-- Wed May 2 13:52:04 2012 --> This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |