r418: no message
authorKevin M. Rosenberg <kevin@rosenberg.net>
Thu, 18 Jan 2001 21:30:22 +0000 (21:30 +0000)
committerKevin M. Rosenberg <kevin@rosenberg.net>
Thu, 18 Jan 2001 21:30:22 +0000 (21:30 +0000)
doc/tex2rtf/ctsim.tex
include/ctglobals.h
libctsupport/syserror.cpp
msvc/ctsim/ctsim.plg
src/ctsim.cpp
src/views.cpp

index 1b15b07280995a0682b8b377cf8f0af49efa7ba9..05ddbf77c5e10914bc2ec6a801e06973a2f9eadd 100644 (file)
@@ -5,7 +5,7 @@
 
 \newcommand{\ctsim}{{\tt CTSim}}
 \newcommand{\ctsimtext}{{\tt CTSimText}}
-\newcommand{\usage}{{\bf Usage \par}}
+\newcommand{\usage}{{\bf Usage}{\par}}
 
 \newcommand{\commandref}[2]{\helpref{{\tt $\backslash$#1}}{#2}}%
 \newcommand{\commandrefn}[2]{\helprefn{{\tt $\backslash$#1}}{#2}\index{#1}}%
@@ -20,7 +20,7 @@
 \date{January 2001}%
 }%
 \winhelponly{\title{Manual for CTSim 3.0}%
-\author{by Kevin Rosenberg, M.D.\\$$\image{1cm;0cm}{logo-huge.bmp}$$}%
+\author{by Kevin Rosenberg, M.D.\\$$\image{3cm;3cm}{logo-huge.bmp}$$}%
 }%
 \makeindex%
 \begin{document}%
@@ -60,7 +60,7 @@ PERFORMANCE OF THIS SOFTWARE.
 \setheader{{\it CHAPTER \thechapter}}{}{}{}{}{{\it CHAPTER \thechapter}}%
 \setfooter{\thepage}{}{}{}{}{\thepage}%
 
-\winhelponly{\image{1cm;0cm}{logo-huge.bmp}\par}%
+\winhelponly{$$\image{3cm;3cm}{logo-huge}$$}%
 
 Computed Tomography is a technique for estimating the interior of an object 
 from measurement of radiation collected around the object. This radiation 
@@ -69,6 +69,8 @@ can be either projected through or emitted from the object.
 \rtfsp\ctsim\ can then reconstruct the interior of the object from the projections
 collected around the phantom object.
 
+The \ctsim\ package has two executable files: the graphical \helprefn{ctsim}{ctsim} and text \helprefn{ctsimtext}{ctsimtext} programs.
+
 \chapter{Installation}\index{Installation}%
 \setheader{{\it CHAPTER \thechapter}}{}{}{}{}{{\it CHAPTER \thechapter}}%
 \setfooter{\thepage}{}{}{}{}{\thepage}%
@@ -88,11 +90,11 @@ It is available in Windows 95/NT/2000 and Linux GUI versions and non-GUI version
 
 \section{Installing Windows Binary}\index{Installation,Windows}%
 
-\section{Build From Sources}%\index{Installation,Build}%
+\section{Build From Sources}\label{build}\index{Installation,Build}%
 
 See the INSTALL file included in the source distribution for instructions.
 
-\section{Requirements}\index{Installation,Requirements}%
+\section{Requirements}\label{installreq}\index{Installation,Requirements}%
   \begin{itemize}\itemsep=0pt
   \item zlib Library (optional)
         \par Used for PNG file export.
@@ -130,16 +132,16 @@ the command-line tool {\tt ctsimtext} as well as image processing and visualizat
 
 \ctsim\ can open projection files, image files, phantom definition files, and plotfiles.
 
-\usage\
+\usage
 ctsim [OPTIONS] [files to open...]
 
-\chapter{ctsimtext}\index{ctsimtext}%
+\chapter{ctsimtext}\label{ctsimtext}\index{ctsimtext}%
 \setheader{{\it CHAPTER \thechapter}}{}{}{}{}{{\it CHAPTER \thechapter}}%
 \setfooter{\thepage}{}{}{}{}{\thepage}%
 
 \ctsimtext\ is a master shell for all of the command-line utilities. 
 
-\usage\
+\usage
 \ctsimtext\ can be executed without any parameters. In that case, \ctsimtext
 offers a command-line to enter the function-names and their parameters. The output of the command is displayed. Further commands may be given to \ctsimtext. The shell is exited by the {\tt quit} command.
 
@@ -147,10 +149,20 @@ offers a command-line to enter the function-names and their parameters. The outp
 
 The following function names are available:
 
+\helprefn{if1}{if1}\par
+\helprefn{if2}{if2}\par
+\helprefn{ifexport}{ifexport}\par
+\helprefn{ifinfo}{ifinfo}\par
+\helprefn{phm2if}{phm2if}\par
+\helprefn{phm2pj}{phm2pj}\par
+\helprefn{pj2if}{pj2if}\par
+\helprefn{pjinfo}{pjinfo}\par
+\helprefn{pjrej}{pjrec}\par
+
 \subsection{if1}\label{if1}\index{ctsimtext,if1}%
 Perfoms math functions on a single image.
 
-\usage\
+\usage
 \begin{itemize}\itemsep=0pt
   \item --invert
   \item --log
@@ -159,10 +171,10 @@ Perfoms math functions on a single image.
   \item --sqrt
 \end{itemize}
 
-\subsection{if2}\index{ctsimtext,if2}%
+\subsection{if2}\label{if2}\index{ctsimtext,if2}%
 Perfoms math functions on a two images.
 
-\usage\
+\usage
 \begin{itemize}\itemsep=0pt
   \item --add
   \item --sub
@@ -172,23 +184,10 @@ Perfoms math functions on a two images.
   \item --row-plot
 \end{itemize}
 
-\subsection{ifinfo}\index{ctsimtext,ifinfo}%
-
-Displays information about an imagefile.
-
-\usage\
-\begin{itemize}\itemsep=0pt
-  \item --labels
-  \item --no-labels
-  \item --stats
-  \item --no-stats
-  \item --help
-\end{itemize}
-
-\subsection{ifexport}\index{ctsimtext,ifexport}%
+\subsection{ifexport}\label{ifexport}\index{ctsimtext,ifexport}%
 Export an imagefile to a standard graphics file.
 
-\usage\
+\usage
 \begin{itemize}\itemsep=0pt
   \item --format
   \begin{itemize}\itemsep=0pt
@@ -217,10 +216,23 @@ Export an imagefile to a standard graphics file.
   \item --max
 \end{itemize}
 
-\subsection{phm2pj}\index{ctsimtext,phm2pj}%
+\subsection{ifinfo}\label{ifinfo}\index{ctsimtext,ifinfo}%
+
+Displays information about an imagefile.
+
+\usage
+\begin{itemize}\itemsep=0pt
+  \item --labels
+  \item --no-labels
+  \item --stats
+  \item --no-stats
+  \item --help
+\end{itemize}
+
+\subsection{phm2pj}\label{phm2pj}\index{ctsimtext,phm2pj}%
 Simulates collection of X-rays data (projections) around a phantom object.
 
-\usage\
+\usage
 phm2pj projection-file-name number-of-detectors number-of-views [options...]
 \begin{itemize}\itemsep=0pt
   \item --phantom
@@ -258,27 +270,27 @@ a rotation angle of 1 and for equilinear and equiangular geometries use a rotati
 
 The Herman phantom is taken with permission from Gabor Hermans 1980 book\cite{HERMAN80}. The Shepp-Logan phantom was published in 1974\cite{SHEPP74}.
 
-\subsection{phm2if}\index{ctsimtext,phm2if}%
+\subsection{phm2if}\label{phm2if}\index{ctsimtext,phm2if}%
 Converts a geometric phantom object into an imagefile. The size of the
 imagefile in pixels must be specified as well as the number of samples
 to average per pixel.
 
-\usage\
+\usage
 \begin{itemize}\itemsep=0pt
   \item --nsamples
 \end{itemize}
 
-\subsection{pj2if}\index{ctsimtext,pj2if}%
+\subsection{pj2if}\label{pj2if}\index{ctsimtext,pj2if}%
 Convert a projection file into an imagefile.
 
-\usage\
+\usage
 \begin{itemize}\itemsep=0pt
 \end{itemize}
 
-\subsection{pjinfo}\index{ctsimtext,pjinfo}%
+\subsection{pjinfo}\label{pjinfo}\index{ctsimtext,pjinfo}%
 Displays information about a projection file.
 
-\usage\
+\usage
 \begin{itemize}\itemsep=0pt
   \item --binaryheader
   \item --binaryview
@@ -287,12 +299,12 @@ Displays information about a projection file.
   \item --dump
 \end{itemize}
 
-\subsection{pjrec}\index{ctsimtext,pjrec}%
+\subsection{pjrec}\label{pjrec}\index{ctsimtext,pjrec}%
 Reconstructs the interior of an object from a projection file.
 
-\usage\
+\usage
 \begin{itemize}\itemsep=0pt
-  \item Filter 
+  \item Filter \par
   Selects which filter to apply to each projection. To
   properly reconstruct an image, this filter should be multiplied 
   by the absolute value of distance from zero frequency.
@@ -302,8 +314,8 @@ Reconstructs the interior of an object from a projection file.
     \item abs_hamming
   \end{itemize}
 
-  \item Filter Parameter 
-  \par Sets the alpha level for Hamming
+  \item Filter Parameter \par
+  Sets the alpha level for Hamming
   window. At setting of 0.54, this equals the Hanning window.
 
   \item Filter Method
@@ -341,7 +353,7 @@ Reconstructs the interior of an object from a projection file.
   \item Preinterpolation Factor
 \end{itemize}
 
-\chapter{The Web Browser CGI Interface}\index{Web Interface}%
+\chapter{The Web Browser CGI Interface}\label{webinterface}\index{Web Interface}%
 \setheader{{\it CHAPTER \thechapter}}{}{}{}{}{{\it CHAPTER \thechapter}}%
 \setfooter{\thepage}{}{}{}{}{\thepage}%
 
@@ -376,4 +388,5 @@ statistics as described by Herman\cite{HERMAN80}.
 \setfooter{\thepage}{}{}{}{}{\thepage}%
 \printindex%
 
-\end{document} 
+\end{document}%
index 4e0da2e39186fcdeb41600ccfa33498a1611d830..4ba0fd8ce492803c2e21dd5b88d70f441d9cd592 100644 (file)
@@ -9,7 +9,7 @@
 **  This is part of the CTSim program
 **  Copyright (C) 1983-2001 Kevin Rosenberg
 **
-**  $Id: ctglobals.h,v 1.2 2001/01/13 03:51:35 kevin Exp $
+**  $Id: ctglobals.h,v 1.3 2001/01/18 21:30:22 kevin Exp $
 **
 **  This program is free software; you can redistribute it and/or modify
 **  it under the terms of the GNU General Public License (version 2) as
@@ -30,7 +30,6 @@
 #define __CTGLOBALS_H
 
 #ifdef HAVE_WXWINDOWS
-#include "../src/ctsim.h"
 class CTSimApp;
 extern bool g_bRunningWXWindows;   // variable defined in syserror.cpp
 extern CTSimApp* theApp;
index 623e6629d117a76bf8756b1ce855f662be8fcd20..8c28c3b6d5859a964f678fc543a55059ef4804ef 100644 (file)
@@ -2,7 +2,7 @@
 **  This is part of the CTSim program
 **  Copyright (C) 1983-2000 Kevin Rosenberg
 **
-**  $Id: syserror.cpp,v 1.15 2001/01/13 03:51:35 kevin Exp $
+**  $Id: syserror.cpp,v 1.16 2001/01/18 21:30:22 kevin Exp $
 **
 **  This program is free software; you can redistribute it and/or modify
 **  it under the terms of the GNU General Public License (version 2) as
@@ -25,7 +25,7 @@
 #include <ctype.h>
 #include <string>
 #include "ct.h"
-
+#include "../src/ctsim.h"
 
 /* NAME
 *   sys_error                  System error handler
index 5986eb9b7aa9dc45d8ff149e92bb37990ae88de5..5f5daf47de0a1cafcdfb3d59f5fcb61e45ae5d2b 100644 (file)
 <pre>
 <h1>Build Log</h1>
 <h3>
---------------------Configuration: libctsim - Win32 Debug--------------------
-</h3>
-<h3>Command Lines</h3>
-Creating temporary file "C:\DOCUME~1\kevin\LOCALS~1\Temp\RSP29.tmp" with contents
-[
-/nologo /G6 /MTd /W3 /Gm /GR /GX /ZI /Od /I "..\..\..\zlib" /I "..\..\INCLUDE" /I "..\..\getopt" /I "..\..\..\lpng108" /I "..\..\..\fftw-2.1.3\fftw" /I "..\..\..\fftw-2.1.3\rfftw" /I "..\..\..\wx2\include" /D "_DEBUG" /D "HAVE_WXWIN" /D "HAVE_STRING_H" /D "HAVE_GETOPT_H" /D "WIN32" /D "_MBCS" /D "_LIB" /D "MSVC" /D "HAVE_FFTW" /D "HAVE_PNG" /D "HAVE_SGP" /D "HAVE_WXWINDOWS" /D "__WXMSW__" /D "__WIN95__" /D "__WIN32__" /D WINVER=0x0400 /FR"Debug/" /Fp"Debug/libctsim.pch" /YX /Fo"Debug/" /Fd"Debug/" /FD /GZ /c 
-"C:\ctsim\libctsim\backprojectors.cpp"
-"C:\ctsim\libctgraphics\dlgezplot.cpp"
-"C:\ctsim\libctsim\filter.cpp"
-"C:\ctsim\libctsim\fourier.cpp"
-"C:\ctsim\libctsim\globalvars.cpp"
-"C:\ctsim\libctsupport\hashtable.cpp"
-"C:\ctsim\libctsim\imagefile.cpp"
-"C:\ctsim\libctsim\phantom.cpp"
-"C:\ctsim\libctsupport\plotfile.cpp"
-"C:\ctsim\libctgraphics\pol.cpp"
-"C:\ctsim\libctsim\procsignal.cpp"
-"C:\ctsim\libctsim\projections.cpp"
-"C:\ctsim\libctsim\reconstruct.cpp"
-"C:\ctsim\libctsim\scanner.cpp"
-"C:\ctsim\libctsupport\syserror.cpp"
-"C:\ctsim\libctsim\trace.cpp"
-]
-Creating command line "cl.exe @C:\DOCUME~1\kevin\LOCALS~1\Temp\RSP29.tmp" 
-Creating temporary file "C:\DOCUME~1\kevin\LOCALS~1\Temp\RSP2A.tmp" with contents
-[
-/nologo /out:"Debug\libctsim.lib" 
-.\Debug\array2dfile.obj
-.\Debug\backprojectors.obj
-.\Debug\clip.obj
-.\Debug\consoleio.obj
-.\Debug\dlgezplot.obj
-.\Debug\ezplot.obj
-.\Debug\ezset.obj
-.\Debug\ezsupport.obj
-.\Debug\filter.obj
-.\Debug\fnetorderstream.obj
-.\Debug\fourier.obj
-.\Debug\getopt.obj
-.\Debug\getopt1.obj
-.\Debug\globalvars.obj
-.\Debug\hashtable.obj
-.\Debug\imagefile.obj
-.\Debug\mathfuncs.obj
-.\Debug\phantom.obj
-.\Debug\plotfile.obj
-.\Debug\pol.obj
-.\Debug\procsignal.obj
-.\Debug\projections.obj
-.\Debug\reconstruct.obj
-.\Debug\scanner.obj
-.\Debug\sgp.obj
-.\Debug\strfuncs.obj
-.\Debug\syserror.obj
-.\Debug\trace.obj
-.\Debug\transformmatrix.obj
-.\Debug\xform.obj
-]
-Creating command line "link.exe -lib @C:\DOCUME~1\kevin\LOCALS~1\Temp\RSP2A.tmp"
-<h3>Output Window</h3>
-Compiling...
-backprojectors.cpp
-dlgezplot.cpp
-filter.cpp
-fourier.cpp
-globalvars.cpp
-hashtable.cpp
-imagefile.cpp
-phantom.cpp
-plotfile.cpp
-pol.cpp
-procsignal.cpp
-projections.cpp
-reconstruct.cpp
-scanner.cpp
-syserror.cpp
-trace.cpp
-Creating library...
-<h3>
---------------------Configuration: FFTW2st - Win32 Debug--------------------
-</h3>
-<h3>Command Lines</h3>
-<h3>
---------------------Configuration: zlib - Win32 DLL--------------------
-</h3>
-<h3>Command Lines</h3>
-<h3>
---------------------Configuration: libpng - Win32 DLL--------------------
-</h3>
-<h3>Command Lines</h3>
-<h3>
---------------------Configuration: RFFTW2st - Win32 Debug--------------------
-</h3>
-<h3>Command Lines</h3>
-<h3>
---------------------Configuration: wxvc - Win32 Debug--------------------
-</h3>
-<h3>Command Lines</h3>
-<h3>
---------------------Configuration: xpm - Win32 Debug--------------------
-</h3>
-<h3>Command Lines</h3>
-<h3>
 --------------------Configuration: ctsim - Win32 Debug--------------------
 </h3>
 <h3>Command Lines</h3>
-Creating temporary file "C:\DOCUME~1\kevin\LOCALS~1\Temp\RSP2B.tmp" with contents
+Creating temporary file "C:\DOCUME~1\kevin\LOCALS~1\Temp\RSP9D.tmp" with contents
 [
 /nologo /G6 /MTd /W3 /Gm /GR /GX /ZI /Od /I "\wx2\include" /I "." /I "..\..\include" /I "..\..\getopt" /I "..\..\..\lpng108" /I "..\..\..\zlib" /I "..\..\..\fftw-2.1.3\fftw" /I "..\..\..\fftw-2.1.3\rfftw" /D VERSION=\"2.5.0\" /D "_DEBUG" /D "__WXMSW__" /D "HAVE_SGP" /D "HAVE_PNG" /D "HAVE_WXWINDOWS" /D "WIN32" /D "_WINDOWS" /D "_MBCS" /D "HAVE_STRING_H" /D "HAVE_FFTW" /D "HAVE_RFFTW" /D "HAVE_GETOPT_H" /D "MSVC" /D "__WIN95__" /D "__WIN32__" /D WINVER=0x0400 /D "STRICT" /D CTSIMVERSION=\"3.0.0alpha5\" /FR"Debug/" /Fp"Debug/ctsim.pch" /YX /Fo"Debug/" /Fd"Debug/" /FD /GZ /c 
 "C:\ctsim\src\ctsim.cpp"
-"C:\ctsim\src\dialogs.cpp"
-"C:\ctsim\src\dlgprojections.cpp"
-"C:\ctsim\src\dlgreconstruct.cpp"
-"C:\ctsim\src\docs.cpp"
-"C:\ctsim\src\views.cpp"
 ]
-Creating command line "cl.exe @C:\DOCUME~1\kevin\LOCALS~1\Temp\RSP2B.tmp" 
-Creating temporary file "C:\DOCUME~1\kevin\LOCALS~1\Temp\RSP2C.tmp" with contents
+Creating command line "cl.exe @C:\DOCUME~1\kevin\LOCALS~1\Temp\RSP9D.tmp" 
+Creating temporary file "C:\DOCUME~1\kevin\LOCALS~1\Temp\RSP9E.tmp" with contents
 [
 comctl32.lib winmm.lib rpcrt4.lib ws2_32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib ../libctsim/Debug/libctsim.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib ..\..\..\lpng108\msvc\win32\libpng\lib_dbg\libpng.lib ..\..\..\lpng108\msvc\win32\zlib\lib_dbg\zlib.lib libcmtd.lib ..\..\..\fftw-2.1.3\Win32\FFTW2st\Debug\FFTW2st.lib ..\..\..\fftw-2.1.3\Win32\RFFTW2st\Debug\RFFTW2st.lib ../../../wx2/lib/wxd.lib xpmd.lib /nologo /subsystem:windows /incremental:yes /pdb:"Debug/ctsim.pdb" /debug /machine:I386 /out:"Debug/ctsim.exe" /pdbtype:sept /libpath:"..\..\..\lpng108\msvc\win32\libpng\lib" /libpath:"..\..\..\lpng108\msvc\win32\zlib\lib" /libpath:"..\..\..\wx2\lib" 
 .\Debug\ctsim.obj
@@ -136,15 +28,10 @@ comctl32.lib winmm.lib rpcrt4.lib ws2_32.lib kernel32.lib user32.lib gdi32.lib w
 \wx2\lib\wxd.lib
 \wx2\lib\xpmd.lib
 ]
-Creating command line "link.exe @C:\DOCUME~1\kevin\LOCALS~1\Temp\RSP2C.tmp"
+Creating command line "link.exe @C:\DOCUME~1\kevin\LOCALS~1\Temp\RSP9E.tmp"
 <h3>Output Window</h3>
 Compiling...
 ctsim.cpp
-dialogs.cpp
-dlgprojections.cpp
-dlgreconstruct.cpp
-docs.cpp
-views.cpp
 Linking...
 
 
index 5ce0a24829919a6679606d937913f853ce92105a..c52282b0493056063ff8b0d5a0e0850a6c00a4c5 100644 (file)
@@ -9,7 +9,7 @@
 **  This is part of the CTSim program
 **  Copyright (C) 1983-2000 Kevin Rosenberg
 **
-**  $Id: ctsim.cpp,v 1.34 2001/01/18 18:09:35 kevin Exp $
+**  $Id: ctsim.cpp,v 1.35 2001/01/18 21:30:22 kevin Exp $
 **
 **  This program is free software; you can redistribute it and/or modify
 **  it under the terms of the GNU General Public License (version 2) as
@@ -69,7 +69,7 @@
 #endif
 #endif
 
-static const char* rcsindent = "$Id: ctsim.cpp,v 1.34 2001/01/18 18:09:35 kevin Exp $";
+static const char* rcsindent = "$Id: ctsim.cpp,v 1.35 2001/01/18 21:30:22 kevin Exp $";
 
 struct option CTSimApp::ctsimOptions[] = 
 {
@@ -160,15 +160,7 @@ CTSimApp::OnInit()
   if (! m_pFrame->getHelpController().Initialize("ctsim"))
     ::wxMessageBox ("Cannot initialize the help system", "Error");
 
-  wxAcceleratorEntry accelEntries[5];
-  accelEntries[0].Set (wxACCEL_CTRL, (int) 'O', wxID_OPEN);
-  accelEntries[1].Set (wxACCEL_CTRL, (int) 'T', MAINMENU_HELP_TOPICS);
-  accelEntries[2].Set (wxACCEL_CTRL, (int) 'P', MAINMENU_FILE_CREATE_PHANTOM);
-  accelEntries[3].Set (wxACCEL_CTRL, (int) 'F', MAINMENU_FILE_CREATE_FILTER);
-  accelEntries[4].Set (wxACCEL_NORMAL, WXK_F1, MAINMENU_HELP_CONTENTS);
-  wxAcceleratorTable accelTable (5, accelEntries);
-  m_pFrame->SetAcceleratorTable (accelTable);
-
   return true;
 }
 
index 203636ef324d08640bcb702f9232c0da066e39a7..393e5f4f37fa1f046b03141a95866cccd5f91739 100644 (file)
@@ -9,7 +9,7 @@
 **  This is part of the CTSim program
 **  Copyright (C) 1983-2000 Kevin Rosenberg
 **
-**  $Id: views.cpp,v 1.65 2001/01/17 13:03:24 kevin Exp $
+**  $Id: views.cpp,v 1.66 2001/01/18 21:30:22 kevin Exp $
 **
 **  This program is free software; you can redistribute it and/or modify
 **  it under the terms of the GNU General Public License (version 2) as
@@ -773,10 +773,10 @@ ImageFileView::CreateChildFrame(wxDocument *doc, wxView *view)
 
   wxMenu *file_menu = new wxMenu;
   
-  file_menu->Append(MAINMENU_FILE_CREATE_PHANTOM, "Cr&eate Phantom...");
-  file_menu->Append(MAINMENU_FILE_CREATE_FILTER, "Create &Filter...");
-  file_menu->Append(wxID_OPEN, "&Open...");
-  file_menu->Append(wxID_SAVE, "&Save");
+  file_menu->Append(MAINMENU_FILE_CREATE_PHANTOM, "Cr&eate Phantom...\tCtrl-P");
+  file_menu->Append(MAINMENU_FILE_CREATE_FILTER, "Create &Filter...\tCtrl-F");
+  file_menu->Append(wxID_OPEN, "&Open...\tCtrl-O");
+  file_menu->Append(wxID_SAVE, "&Save\tCtrl-S");
   file_menu->Append(wxID_SAVEAS, "Save &As...");
   file_menu->Append(wxID_CLOSE, "&Close");
   
@@ -790,9 +790,9 @@ ImageFileView::CreateChildFrame(wxDocument *doc, wxView *view)
   file_menu->Append(wxID_PREVIEW, "Print Pre&view");
   
   wxMenu *view_menu = new wxMenu;
-  view_menu->Append(IFMENU_VIEW_SCALE_MINMAX, "Display Scale &Set...");
-  view_menu->Append(IFMENU_VIEW_SCALE_AUTO, "Display Scale &Auto...");
-  view_menu->Append(IFMENU_VIEW_SCALE_FULL, "Display &Full Scale");
+  view_menu->Append(IFMENU_VIEW_SCALE_MINMAX, "Display Scale S&et...\tCtrl-E");
+  view_menu->Append(IFMENU_VIEW_SCALE_AUTO, "Display Scale &Auto...\tCtrl-A");
+  view_menu->Append(IFMENU_VIEW_SCALE_FULL, "Display F&ull Scale\tCtrl-U");
   
   wxMenu* filter_menu = new wxMenu;
   filter_menu->Append (IFMENU_FILTER_INVERTVALUES, "&Invert Values");
@@ -840,8 +840,8 @@ ImageFileView::CreateChildFrame(wxDocument *doc, wxView *view)
   analyze_menu->Append (IFMENU_COMPARE_COL, "Compare &Column");
   
   wxMenu *help_menu = new wxMenu;
-  help_menu->Append(MAINMENU_HELP_CONTENTS, "&Contents");
-  help_menu->Append(MAINMENU_HELP_TOPICS, "&Topics");
+  help_menu->Append(MAINMENU_HELP_CONTENTS, "&Contents\tF1");
+  help_menu->Append(MAINMENU_HELP_TOPICS, "&Topics\tCtrl-T");
   help_menu->Append(MAINMENU_HELP_ABOUT, "&About");
   
   wxMenuBar *menu_bar = new wxMenuBar;
@@ -857,6 +857,19 @@ ImageFileView::CreateChildFrame(wxDocument *doc, wxView *view)
   
   subframe->Centre(wxBOTH);
   
+  wxAcceleratorEntry accelEntries[9];
+  accelEntries[0].Set (wxACCEL_CTRL, static_cast<int>('O'), wxID_OPEN);
+  accelEntries[1].Set (wxACCEL_CTRL, static_cast<int>('S'), wxID_SAVE);
+  accelEntries[2].Set (wxACCEL_CTRL, static_cast<int>('T'), MAINMENU_HELP_TOPICS);
+  accelEntries[3].Set (wxACCEL_CTRL, static_cast<int>('P'), MAINMENU_FILE_CREATE_PHANTOM);
+  accelEntries[4].Set (wxACCEL_CTRL, static_cast<int>('F'), MAINMENU_FILE_CREATE_FILTER);
+  accelEntries[5].Set (wxACCEL_NORMAL, WXK_F1, MAINMENU_HELP_CONTENTS);
+  accelEntries[6].Set (wxACCEL_CTRL, static_cast<int>('A'), IFMENU_VIEW_SCALE_AUTO);
+  accelEntries[7].Set (wxACCEL_CTRL, static_cast<int>('U'), IFMENU_VIEW_SCALE_FULL);
+  accelEntries[8].Set (wxACCEL_CTRL, static_cast<int>('E'), IFMENU_VIEW_SCALE_MINMAX);
+  wxAcceleratorTable accelTable (9, accelEntries);
+  subframe->SetAcceleratorTable (accelTable);
+
   return subframe;
 }