Release 0.8.3

This commit is contained in:
Matthias Toussaint 2014-04-12 09:56:44 +01:00 committed by Joel Holdsworth
parent 7b0f0653af
commit 563594d15c
75 changed files with 11835 additions and 2579 deletions

View File

@ -1,3 +1,5 @@
24/04/2005 0.8.3
- Finally ported to Qt-3.x
20/10/2002 0.8.2
- Added preset for Voltcraft M-3650D
- Removed performance bug in graph (manual scaling)
@ -74,7 +76,7 @@
15/04/2001 0.1
- Initial release version 0.1
-- 03/03/2002
-- 24/04/2005
Matthias Toussaint
<qtdmm@mtoussaint.de>

View File

@ -1,14 +0,0 @@
/.cvsignore/1.1/Tue Sep 4 14:41:46 2001//
/AUTHORS/1.1/Tue Sep 4 14:38:13 2001//
/CHANGELOG/1.12/Sun Oct 20 17:12:32 2002//
/COPYING/1.1/Tue Sep 4 14:38:13 2001//
/INSTALL/1.3/Sun Mar 3 22:43:32 2002//
/QtDMM.pro/1.1/Sat Nov 24 17:27:48 2001//
/README/1.2/Sun Mar 3 22:43:32 2002//
/configure/1.5/Sun Mar 3 22:43:32 2002//
/qtdmm-0.5.spec/1.1/Tue Sep 4 14:38:13 2001//
/qtdmm-16x16.xpm/1.2/Sun Oct 13 15:52:47 2002//
/qtdmm-32x32.xpm/1.2/Sun Oct 13 15:52:47 2002//
/qtdmm-48x48.xpm/1.2/Sun Oct 13 15:52:47 2002//
D/bin////
D/src////

View File

@ -1 +0,0 @@
QtDMM

View File

@ -1 +0,0 @@
/home/cvs

4
README
View File

@ -1,4 +1,4 @@
QtDMM 0.7 (c) 2001-2002 M.Toussaint
QtDMM 0.8.4 (c) 2001-2005 M.Toussaint
QtDMM is a simple DMM readout software including a configurable transient
recorder. A friend of mine asked me for a DMM readout software for Linux
@ -52,7 +52,7 @@ You'll find 3 'official' icon files for QtDMM in this directory:
The tab size of the sourcefiles is 2
-- 03/03/2002
-- 24/04/2005
Matthias Toussaint
<qtdmm@mtoussaint.de>

View File

@ -1 +0,0 @@
D

View File

@ -1 +0,0 @@
QtDMM/bin

View File

@ -1 +0,0 @@
/home/cvs

67
configure vendored
View File

@ -1,74 +1,57 @@
#! /bin/sh
if [ -z "$TMAKEPATH" ]
if [ -z "$QTDIR" ]
then
echo "*******************************************************************************"
echo " TMAKEPATH is not set. This package requires a correctly set up"
echo " tmake. To get tmake go to ftp://ftp.troll.no/freebies/tmake"
echo " QTDIR is not set. This package requires a correctly set up"
echo " qt. To get qt visit http://www.trolltech.com"
echo "*******************************************************************************"
exit -1
fi
if [ ! -f "$TMAKEPATH/../../bin/tmake" ]
QMAKE_TEST=`which qmake`
if [ ! -f "$QMAKE_TEST" ]
then
echo "*******************************************************************************"
echo " The tmake utility was not found. This package requires a correctly"
echo " set up tmake. To get tmake go to ftp://ftp.troll.no/freebies/tmake"
echo " The qmake utility was not found. This package requires a correctly"
echo " set up qmake. To get qmake visit http://www.trolltech.com or install"
echo " a qt development package from your distribution
echo "*******************************************************************************"
exit -1
fi
if [ ! -f "$QTDIR/bin/uic" ]
then
echo " uic seems not to be installed (part of Qt-Designer package)"
fi
for ac_option
do
case "$ac_option" in
--help)
echo "Usage: ./configure [--help]"
echo " --help: Print this message"
echo
cat INSTALL
exit 0
;;
esac
done
echo "Creating Makefiles..."
cd src
echo "Creating regular Makefile"
cd ..
$TMAKEPATH/../../bin/tmake -o Makefile QtDMM.pro
echo "Testing libraries & tools ..."
if [ -z "$QTDIR" ]
then
echo "*******************************************************************************"
echo " QTDIR is not set. This package requires a correctly set up"
echo " Qt. To get Qt, see http://www.trolltech.com"
echo " The uic utility was not found. This package requires a correctly"
echo " set up uic. To get uic visit http://www.trolltech.com or install"
echo " a qt development package from your distribution
echo "*******************************************************************************"
exit -1
fi
echo "Creating Makefiles..."
qmake QtDMM.pro -o Makefile
cd src
qmake src.pro -o Makefile
cd ..
echo "Testing libraries & tools ..."
echo "#include <qglobal.h>" > qttest.cpp
echo "#include <stdio.h>" >> qttest.cpp
echo "int main(int argc, char **argv) { fprintf( stderr, \"Found QT Version %s: \", QT_VERSION_STR );" >> qttest.cpp
echo "if (QT_VERSION >= 210 && QT_VERSION < 300) return 0; else return -1; }" >> qttest.cpp
gcc -I$QTDIR/include qttest.cpp
echo "int main(int argc, char **argv) { fprintf( stderr, \"Found Qt Version %s: \", QT_VERSION_STR );" >> qttest.cpp
echo "if (QT_VERSION >= 300) return 0; else return -1; }" >> qttest.cpp
g++ -I$QTDIR/include qttest.cpp
if ./a.out
then
echo "OK"
rm qttest.cpp 2>/dev/null
rm a.out 2>/dev/null
else
echo "QtDMM needs Qt 2.x"
echo "Please upgrade your Qt installation"
rm qttest.cpp 2>/dev/null
rm a.out 2>/dev/null
exit -1

View File

@ -1,52 +0,0 @@
/* XPM */
static char * qtdmm_16x16_xpm[] = {
"16 16 33 1",
" c None",
". c #020205",
"+ c #CEC646",
"@ c #848B89",
"# c #5A4F47",
"$ c #0C0E22",
"% c #FEFE06",
"& c #0E2CFE",
"* c #5A161A",
"= c #FEFE3E",
"- c #E86278",
"; c #0202FE",
"> c #1A1F20",
", c #FEFE4E",
"' c #FE8282",
") c #0202DE",
"! c #2A36E2",
"~ c #B46C6E",
"{ c #C7D5AE",
"] c #1C343B",
"^ c #C22E2E",
"/ c #969F96",
"( c #F1FCF2",
"_ c #606161",
": c #0216B2",
"< c #A9A6A1",
"[ c #313130",
"} c #7C86D2",
"| c #3E433E",
"1 c #4A464A",
"2 c #707579",
"3 c #AFBAB2",
"4 c #3C3C3E",
" ",
" @@@@@@@@@@2 ",
" [1[|[[4|||>#. ",
" [4{[(3@{4/@1. ",
" [[3.{3.@[@24. ",
" [[343(3@>/24. ",
" [4@1|[{(((<4. ",
" [4@//@/@@/_|. ",
" ]_*][4444412. ",
" ]'-#2[>>$>[1. ",
" >~^$$2/3%3&}. ",
" >]]/<3@</};!. ",
" $,<<{%(({{/<. ",
" .=/(_.../!{<. ",
" .=-_@>4>.)}<. ",
" >+~_2[[[.:22$ "};

View File

@ -1,49 +0,0 @@
/* XPM */
static char * qtdmm_32x32_xpm[] = {
"32 32 14 1",
" c None",
". c #000000",
"+ c #7F7F7F",
"@ c #595959",
"# c #3A3A3A",
"$ c #C0D8C1",
"% c #FF0000",
"& c #FFFFFF",
"* c #969696",
"= c #FFEE00",
"- c #0019FF",
"; c #C4C4C4",
"> c #0022FF",
", c #141414",
" ",
" ..................... ",
" .+++++++++++++++++++++. ",
" .+@@@@@@@@@@@@@@@@@@@@@#. ",
" .+@...................@#. ",
" .+@.$$$$$$$$$$$$$$$$$.@#. ",
" .+@.$...$$$.$.$...$.$.@#. ",
" .+@.$$$.$$$.$.$$$.$.$.@#. ",
" .+@.$...$$$...$...$.$.@#. ",
" .+@.$$$.$$$$$.$.$$$.$.@#. ",
" .+@.$...$.$$$.$...$.$.@#. ",
" .+@.$$$$$$$$$$$$$$$$$.@#. ",
" .+@.$.$.$.$.$$$$$$$$$.@#. ",
" .+@.$.$.$.$.$$$$$$$$$.@#. ",
" .+@.$$$$$$$$$$$$$$$$$.@#. ",
" .+@...................@#. ",
" .+@@@@@@@@@@@@@@@@@@@@@#. ",
" .+@%%@@@@@@@@@@@@@@@@@@@. ",
" .+%&%%@@@@@@@..........#. ",
" .+%&&%@@@@...**********#. ",
" .+@%%@@...******=***--*#. ",
" .@@@@..********===*----#. ",
" .+...*****;;**;****----#. ",
" .+*****;**********;*--*#. ",
" .+=******===;;;;**;****#. ",
" .+=*;**;;===;;;;;;*****#. ",
" .+=;**;;;.......;;>**;*#. ",
" .+=**;;;.........>>>*;*#. ",
" .+=**;;.&.#####...>>***#. ",
" .+=*%%..#&,#####...>>**#. ",
" .+=*%%..#,,,#####..>>**#. ",
" ######################### "};

View File

@ -1,84 +0,0 @@
/* XPM */
static char * qtdmm_48x48_xpm[] = {
"48 48 33 1",
" c None",
". c #050506",
"+ c #FDF206",
"@ c #828285",
"# c #656665",
"$ c #EF1010",
"% c #535152",
"& c #0319FE",
"* c #3E3E41",
"= c #DAD032",
"- c #0D26EF",
"; c #9F1C1C",
"> c #2A2A2D",
", c #CDC346",
"' c #1E1D1D",
") c #ACAAA1",
"! c #BCBAAA",
"~ c #FE7474",
"{ c #D1C956",
"] c #4050D7",
"^ c #141617",
"/ c #FE8888",
"( c #192FDE",
"_ c #5A69CB",
": c #959597",
"< c #9B5053",
"[ c #777971",
"} c #C4C3C2",
"| c #C6434E",
"1 c #FEEEEE",
"2 c #4755CD",
"3 c #0F1211",
"4 c #C3D9C2",
" ",
" ",
" ............................... ",
" '*******************************. ",
" .*@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@[^. ",
" 3################################%*^. ",
" .3[[%>''''''''''''''''''''''''''>*%*'. ",
" .3[[%..^^^^^^^^^^^^^^^^^^^^^^^^3.>%*'. ",
" .3[[%.444444444444444444444444443'%*'. ",
" .3[[%.44444444444444444444444444^'%*'. ",
" .3[[%.44>...44444.44.44>...44.44^'%*'. ",
" .3[[%.44444.44444.44344444.44.44^'%*'. ",
" .3[[%.44444.44444.44.44444.44.44^'%*'. ",
" .3[[%.44>.3.44444....44....44.44^'%*'. ",
" .3[[%.44444344444444.44.44444.44^'%*'. ",
" .3[[%.44444.44444444.44.44444.44^'%*'. ",
" .3[[%.44>...44.44444>44*...44>44^'%*'. ",
" .3[[%.44444444444444444444444444^'%*'. ",
" .3[[%.44444444444444444444444444^'%*'. ",
" .3[[%.44..4..4..4.44444444444444^'%*'. ",
" .3[[%.44..4..4..4.44444444444444^'%*'. ",
" .3[[%.44444444444444444444444444^'%*'. ",
" .3[[%.444444444444444444444444443'%*'. ",
" .3[[%..^^^^^^^^^^^^^^^^^^^^^^^^3.>%*'. ",
" .3[[%>>'''''''''''''''''''''''''>*%*'. ",
" .3[[%%%%##########################%*'. ",
" .3[[%$$$%#%%%%%%%%%%################>. ",
" .3[<|~|$;<#%%%%####%>'''''''''''''>%>. ",
" .3[|$1!$$;%%%%%%%.....33333333333.3*'. ",
" .3[|$11}$;%###.>...3[@@@@@@@@@@@@@[*^. ",
" .3[<|~//|<%>'.'..**%:)::!{):))@22@:%^. ",
" .3#[%$$$%..^...%))::::::=+):::]&&]@%^. ",
" ..%##%<.3..[@@@::::::::=+++,@(&&&&(*'. ",
" .3#.'>...*%:)::))))::)!,,,{!@&&&&&&*'. ",
" .3[....':):::::)}})::)!::::::(&&&&(*'. ",
" .3#@@@@@:::!)::::::::::::::)!:]&&]@%^. ",
" .3#){):::::)::,,,,!))))))::)})[22@:%^. ",
" .3#,+):::::::)++++=}}}}})::)!:::::@%^. ",
" .3#,+:)!:::!}}+++++}}444}!}):::::::%^. ",
" .3#,+!))::)}4}@[[[#####%:44:2:::))@%^. ",
" .3#,+})::)}}}:..........%!!_-[::}!@%^. ",
" .3#,+)::!}}4#............'(---_)4!@%^. ",
" .3#,+::)44}#[#..'''''''....&-&2)))@%^. ",
" .3#,+)@:)!:.[1*'*******3...3&&2::::%^. ",
" .3#,+)|$$;3.'#1@3*******^....&-(@):%^. ",
" ..#=+)|$$;..3*:%.'>*****>^...&&-:):%^. ",
" .3#,=:|$$;..'*33'^>*******3..--(@:@*'. ",
" >**%%%****>>***************>*********> "};

View File

@ -1,5 +0,0 @@
Makefile
moc_*
ui*.cpp
ui*.h

View File

@ -1,66 +0,0 @@
/.cvsignore/1.1/Tue Sep 4 14:41:46 2001//
/colorbutton.cpp/1.1/Tue Sep 4 14:38:13 2001//
/colorbutton.h/1.1/Tue Sep 4 14:38:13 2001//
/configdlg.cpp/1.21/Sun Oct 20 17:06:55 2002//
/configdlg.h/1.12/Sun Oct 20 17:06:55 2002//
/configitem.cpp/1.1/Sun Oct 20 16:03:52 2002//
/configitem.h/1.1/Sun Oct 20 16:03:52 2002//
/displaywid.cpp/1.8/Sat Oct 19 14:15:29 2002//
/displaywid.h/1.6/Sun Oct 13 15:48:41 2002//
/dmm.cpp/1.9/Tue Oct 15 21:28:30 2002//
/dmm.h/1.6/Sun Oct 13 15:48:41 2002//
/dmmbar.cpp/1.1/Tue Sep 4 14:38:13 2001//
/dmmbar.h/1.1/Tue Sep 4 14:38:13 2001//
/dmmgraph.cpp/1.19/Sun Oct 20 17:06:55 2002//
/dmmgraph.h/1.12/Sun Oct 20 17:06:55 2002//
/dmmprefs.cpp/1.3/Sun Oct 20 17:06:55 2002//
/dmmprefs.h/1.2/Sun Oct 20 10:12:01 2002//
/engnumbervalidator.cpp/1.4/Sun Oct 20 17:06:55 2002//
/engnumbervalidator.h/1.2/Sun Oct 20 16:03:17 2002//
/executeprefs.cpp/1.3/Sun Oct 20 16:03:17 2002//
/executeprefs.h/1.3/Sun Oct 20 16:03:17 2002//
/graphprefs.cpp/1.2/Sun Oct 20 10:12:01 2002//
/graphprefs.h/1.2/Sun Oct 20 10:12:01 2002//
/guiprefs.cpp/1.2/Sun Oct 20 10:12:01 2002//
/guiprefs.h/1.2/Sun Oct 20 10:12:01 2002//
/integrationprefs.cpp/1.3/Sun Oct 20 16:03:17 2002//
/integrationprefs.h/1.3/Sun Oct 20 16:03:17 2002//
/main.cpp/1.2/Fri Mar 1 23:24:17 2002//
/mainwid.cpp/1.16/Sun Oct 20 17:06:55 2002//
/mainwid.h/1.7/Sun Oct 20 17:06:55 2002//
/mainwin.cpp/1.14/Sun Oct 20 17:12:32 2002//
/mainwin.h/1.4/Sun Oct 20 10:12:01 2002//
/prefwidget.cpp/1.1/Sat Oct 19 14:15:29 2002//
/prefwidget.h/1.1/Sat Oct 19 14:15:29 2002//
/printdlg.cpp/1.1/Tue Sep 4 14:38:13 2001//
/printdlg.h/1.1/Tue Sep 4 14:38:13 2001//
/qcleanuphandler.h/1.1/Wed Sep 5 09:19:54 2001//
/qprocess.cpp/1.3/Fri Oct 11 20:08:59 2002//
/qprocess.h/1.3/Fri Oct 11 20:08:59 2002//
/qprocess_unix.cpp/1.4/Sun Oct 13 15:48:42 2002//
/qprocess_unix.h/1.3/Fri Oct 11 20:08:59 2002//
/readerthread.cpp/1.9/Sun Oct 13 15:48:42 2002//
/readerthread.h/1.5/Sun Oct 13 15:48:42 2002//
/readevent.cpp/1.1/Fri Oct 11 20:06:01 2002//
/readevent.h/1.5/Fri Oct 11 20:05:39 2002//
/recorderprefs.cpp/1.3/Sun Oct 20 16:03:17 2002//
/recorderprefs.h/1.3/Sun Oct 20 16:03:17 2002//
/scaleprefs.cpp/1.4/Sun Oct 20 17:06:55 2002//
/scaleprefs.h/1.3/Sun Oct 20 16:03:17 2002//
/simplecfg.cpp/1.1/Tue Sep 4 14:38:13 2001//
/simplecfg.h/1.1/Tue Sep 4 14:38:13 2001//
/src.pro/1.9/Sun Oct 20 10:12:01 2002//
/tipdlg.cpp/1.1/Sun Oct 13 16:00:54 2002//
/tipdlg.h/1.1/Sun Oct 13 16:00:54 2002//
/uiconfigdlg.ui/1.18/Sun Oct 20 10:12:01 2002//
/uidmmprefs.ui/1.3/Sun Oct 20 16:03:17 2002//
/uiexecuteprefs.ui/1.2/Sun Oct 20 10:12:02 2002//
/uigraphprefs.ui/1.2/Sun Oct 20 10:12:02 2002//
/uiguiprefs.ui/1.2/Sun Oct 20 10:12:02 2002//
/uiintegrationprefs.ui/1.2/Sun Oct 20 10:12:02 2002//
/uimainwid.ui/1.5/Sun Oct 20 17:06:55 2002//
/uiprintdlg.ui/1.1/Tue Sep 4 14:38:13 2001//
/uirecorderprefs.ui/1.3/Sun Oct 20 16:03:17 2002//
/uiscaleprefs.ui/1.3/Sun Oct 20 16:03:17 2002//
/uitipdlg.ui/1.1/Sun Oct 13 16:00:54 2002//
D/xpm////

View File

@ -1 +0,0 @@
QtDMM/src

View File

@ -1 +0,0 @@
/home/cvs

969
src/Doxyfile Normal file
View File

@ -0,0 +1,969 @@
# Doxyfile 1.2.17
# This file describes the settings to be used by the documentation system
# doxygen (www.doxygen.org) for a project
#
# All text after a hash (#) is considered a comment and will be ignored
# The format is:
# TAG = value [value, ...]
# For lists items can also be appended using:
# TAG += value [value, ...]
# Values that contain spaces should be placed between quotes (" ")
#---------------------------------------------------------------------------
# General configuration options
#---------------------------------------------------------------------------
# The PROJECT_NAME tag is a single word (or a sequence of words surrounded
# by quotes) that should identify the project.
PROJECT_NAME = QtDMM
# The PROJECT_NUMBER tag can be used to enter a project or revision number.
# This could be handy for archiving the generated documentation or
# if some version control system is used.
PROJECT_NUMBER = 0.8.3
# The OUTPUT_DIRECTORY tag is used to specify the (relative or absolute)
# base path where the generated documentation will be put.
# If a relative path is entered, it will be relative to the location
# where doxygen was started. If left blank the current directory will be used.
OUTPUT_DIRECTORY =
# The OUTPUT_LANGUAGE tag is used to specify the language in which all
# documentation generated by doxygen is written. Doxygen will use this
# information to generate all constant output in the proper language.
# The default language is English, other supported languages are:
# Brazilian, Chinese, Chinese-Traditional, Croatian, Czech, Danish, Dutch,
# Finnish, French, German, Greek, Hungarian, Italian, Japanese, Japanese-en
# (Japanese with english messages), Korean, Norwegian, Polish, Portuguese,
# Romanian, Russian, Serbian, Slovak, Slovene, Spanish, Swedish and Ukrainian.
OUTPUT_LANGUAGE = English
# If the EXTRACT_ALL tag is set to YES doxygen will assume all entities in
# documentation are documented, even if no documentation was available.
# Private class members and static file members will be hidden unless
# the EXTRACT_PRIVATE and EXTRACT_STATIC tags are set to YES
EXTRACT_ALL = YES
# If the EXTRACT_PRIVATE tag is set to YES all private members of a class
# will be included in the documentation.
EXTRACT_PRIVATE = NO
# If the EXTRACT_STATIC tag is set to YES all static members of a file
# will be included in the documentation.
EXTRACT_STATIC = NO
# If the EXTRACT_LOCAL_CLASSES tag is set to YES classes (and structs)
# defined locally in source files will be included in the documentation.
# If set to NO only classes defined in header files are included.
EXTRACT_LOCAL_CLASSES = YES
# If the HIDE_UNDOC_MEMBERS tag is set to YES, Doxygen will hide all
# undocumented members of documented classes, files or namespaces.
# If set to NO (the default) these members will be included in the
# various overviews, but no documentation section is generated.
# This option has no effect if EXTRACT_ALL is enabled.
HIDE_UNDOC_MEMBERS = NO
# If the HIDE_UNDOC_CLASSES tag is set to YES, Doxygen will hide all
# undocumented classes that are normally visible in the class hierarchy.
# If set to NO (the default) these class will be included in the various
# overviews. This option has no effect if EXTRACT_ALL is enabled.
HIDE_UNDOC_CLASSES = NO
# If the BRIEF_MEMBER_DESC tag is set to YES (the default) Doxygen will
# include brief member descriptions after the members that are listed in
# the file and class documentation (similar to JavaDoc).
# Set to NO to disable this.
BRIEF_MEMBER_DESC = YES
# If the REPEAT_BRIEF tag is set to YES (the default) Doxygen will prepend
# the brief description of a member or function before the detailed description.
# Note: if both HIDE_UNDOC_MEMBERS and BRIEF_MEMBER_DESC are set to NO, the
# brief descriptions will be completely suppressed.
REPEAT_BRIEF = YES
# If the ALWAYS_DETAILED_SEC and REPEAT_BRIEF tags are both set to YES then
# Doxygen will generate a detailed section even if there is only a brief
# description.
ALWAYS_DETAILED_SEC = NO
# If the INLINE_INHERITED_MEMB tag is set to YES, doxygen will show all inherited
# members of a class in the documentation of that class as if those members were
# ordinary class members. Constructors, destructors and assignment operators of
# the base classes will not be shown.
INLINE_INHERITED_MEMB = NO
# If the FULL_PATH_NAMES tag is set to YES then Doxygen will prepend the full
# path before files name in the file list and in the header files. If set
# to NO the shortest path that makes the file name unique will be used.
FULL_PATH_NAMES = NO
# If the FULL_PATH_NAMES tag is set to YES then the STRIP_FROM_PATH tag
# can be used to strip a user defined part of the path. Stripping is
# only done if one of the specified strings matches the left-hand part of
# the path. It is allowed to use relative paths in the argument list.
STRIP_FROM_PATH =
# The INTERNAL_DOCS tag determines if documentation
# that is typed after a \internal command is included. If the tag is set
# to NO (the default) then the documentation will be excluded.
# Set it to YES to include the internal documentation.
INTERNAL_DOCS = NO
# Setting the STRIP_CODE_COMMENTS tag to YES (the default) will instruct
# doxygen to hide any special comment blocks from generated source code
# fragments. Normal C and C++ comments will always remain visible.
STRIP_CODE_COMMENTS = YES
# If the CASE_SENSE_NAMES tag is set to NO then Doxygen will only generate
# file names in lower case letters. If set to YES upper case letters are also
# allowed. This is useful if you have classes or files whose names only differ
# in case and if your file system supports case sensitive file names. Windows
# users are adviced to set this option to NO.
CASE_SENSE_NAMES = YES
# If the SHORT_NAMES tag is set to YES, doxygen will generate much shorter
# (but less readable) file names. This can be useful is your file systems
# doesn't support long names like on DOS, Mac, or CD-ROM.
SHORT_NAMES = NO
# If the HIDE_SCOPE_NAMES tag is set to NO (the default) then Doxygen
# will show members with their full class and namespace scopes in the
# documentation. If set to YES the scope will be hidden.
HIDE_SCOPE_NAMES = NO
# If the VERBATIM_HEADERS tag is set to YES (the default) then Doxygen
# will generate a verbatim copy of the header file for each class for
# which an include is specified. Set to NO to disable this.
VERBATIM_HEADERS = YES
# If the SHOW_INCLUDE_FILES tag is set to YES (the default) then Doxygen
# will put list of the files that are included by a file in the documentation
# of that file.
SHOW_INCLUDE_FILES = YES
# If the JAVADOC_AUTOBRIEF tag is set to YES then Doxygen
# will interpret the first line (until the first dot) of a JavaDoc-style
# comment as the brief description. If set to NO, the JavaDoc
# comments will behave just like the Qt-style comments (thus requiring an
# explict @brief command for a brief description.
JAVADOC_AUTOBRIEF = NO
# The MULTILINE_CPP_IS_BRIEF tag can be set to YES to make Doxygen
# treat a multi-line C++ special comment block (i.e. a block of //! or ///
# comments) as a brief description. This used to be the default behaviour.
# The new default is to treat a multi-line C++ comment block as a detailed
# description. Set this tag to YES if you prefer the old behaviour instead.
MULTILINE_CPP_IS_BRIEF = NO
# If the DETAILS_AT_TOP tag is set to YES then Doxygen
# will output the detailed description near the top, like JavaDoc.
# If set to NO, the detailed description appears after the member
# documentation.
DETAILS_AT_TOP = NO
# If the INHERIT_DOCS tag is set to YES (the default) then an undocumented
# member inherits the documentation from any documented member that it
# reimplements.
INHERIT_DOCS = YES
# If the INLINE_INFO tag is set to YES (the default) then a tag [inline]
# is inserted in the documentation for inline members.
INLINE_INFO = YES
# If the SORT_MEMBER_DOCS tag is set to YES (the default) then doxygen
# will sort the (detailed) documentation of file and class members
# alphabetically by member name. If set to NO the members will appear in
# declaration order.
SORT_MEMBER_DOCS = YES
# If member grouping is used in the documentation and the DISTRIBUTE_GROUP_DOC
# tag is set to YES, then doxygen will reuse the documentation of the first
# member in the group (if any) for the other members of the group. By default
# all members of a group must be documented explicitly.
DISTRIBUTE_GROUP_DOC = NO
# The TAB_SIZE tag can be used to set the number of spaces in a tab.
# Doxygen uses this value to replace tabs by spaces in code fragments.
TAB_SIZE = 2
# The GENERATE_TODOLIST tag can be used to enable (YES) or
# disable (NO) the todo list. This list is created by putting \todo
# commands in the documentation.
GENERATE_TODOLIST = YES
# The GENERATE_TESTLIST tag can be used to enable (YES) or
# disable (NO) the test list. This list is created by putting \test
# commands in the documentation.
GENERATE_TESTLIST = YES
# The GENERATE_BUGLIST tag can be used to enable (YES) or
# disable (NO) the bug list. This list is created by putting \bug
# commands in the documentation.
GENERATE_BUGLIST = YES
# This tag can be used to specify a number of aliases that acts
# as commands in the documentation. An alias has the form "name=value".
# For example adding "sideeffect=\par Side Effects:\n" will allow you to
# put the command \sideeffect (or @sideeffect) in the documentation, which
# will result in a user defined paragraph with heading "Side Effects:".
# You can put \n's in the value part of an alias to insert newlines.
ALIASES =
# The ENABLED_SECTIONS tag can be used to enable conditional
# documentation sections, marked by \if sectionname ... \endif.
ENABLED_SECTIONS =
# The MAX_INITIALIZER_LINES tag determines the maximum number of lines
# the initial value of a variable or define consist of for it to appear in
# the documentation. If the initializer consists of more lines than specified
# here it will be hidden. Use a value of 0 to hide initializers completely.
# The appearance of the initializer of individual variables and defines in the
# documentation can be controlled using \showinitializer or \hideinitializer
# command in the documentation regardless of this setting.
MAX_INITIALIZER_LINES = 30
# Set the OPTIMIZE_OUTPUT_FOR_C tag to YES if your project consists of C sources
# only. Doxygen will then generate output that is more tailored for C.
# For instance some of the names that are used will be different. The list
# of all members will be omitted, etc.
OPTIMIZE_OUTPUT_FOR_C = NO
# Set the OPTIMIZE_OUTPUT_JAVA tag to YES if your project consists of Java sources
# only. Doxygen will then generate output that is more tailored for Java.
# For instance namespaces will be presented as packages, qualified scopes
# will look different, etc.
OPTIMIZE_OUTPUT_JAVA = NO
# Set the SHOW_USED_FILES tag to NO to disable the list of files generated
# at the bottom of the documentation of classes and structs. If set to YES the
# list will mention the files that were used to generate the documentation.
SHOW_USED_FILES = YES
#---------------------------------------------------------------------------
# configuration options related to warning and progress messages
#---------------------------------------------------------------------------
# The QUIET tag can be used to turn on/off the messages that are generated
# by doxygen. Possible values are YES and NO. If left blank NO is used.
QUIET = NO
# The WARNINGS tag can be used to turn on/off the warning messages that are
# generated by doxygen. Possible values are YES and NO. If left blank
# NO is used.
WARNINGS = YES
# If WARN_IF_UNDOCUMENTED is set to YES, then doxygen will generate warnings
# for undocumented members. If EXTRACT_ALL is set to YES then this flag will
# automatically be disabled.
WARN_IF_UNDOCUMENTED = YES
# The WARN_FORMAT tag determines the format of the warning messages that
# doxygen can produce. The string should contain the $file, $line, and $text
# tags, which will be replaced by the file and line number from which the
# warning originated and the warning text.
WARN_FORMAT = "$file:$line: $text"
# The WARN_LOGFILE tag can be used to specify a file to which warning
# and error messages should be written. If left blank the output is written
# to stderr.
WARN_LOGFILE =
#---------------------------------------------------------------------------
# configuration options related to the input files
#---------------------------------------------------------------------------
# The INPUT tag can be used to specify the files and/or directories that contain
# documented source files. You may enter file names like "myfile.cpp" or
# directories like "/usr/src/myproject". Separate the files or directories
# with spaces.
INPUT =
# If the value of the INPUT tag contains directories, you can use the
# FILE_PATTERNS tag to specify one or more wildcard pattern (like *.cpp
# and *.h) to filter out the source-files in the directories. If left
# blank the following patterns are tested:
# *.c *.cc *.cxx *.cpp *.c++ *.java *.ii *.ixx *.ipp *.i++ *.inl *.h *.hh *.hxx *.hpp
# *.h++ *.idl *.odl
FILE_PATTERNS =
# The RECURSIVE tag can be used to turn specify whether or not subdirectories
# should be searched for input files as well. Possible values are YES and NO.
# If left blank NO is used.
RECURSIVE = NO
# The EXCLUDE tag can be used to specify files and/or directories that should
# excluded from the INPUT source files. This way you can easily exclude a
# subdirectory from a directory tree whose root is specified with the INPUT tag.
EXCLUDE =
# The EXCLUDE_SYMLINKS tag can be used select whether or not files or directories
# that are symbolic links (a Unix filesystem feature) are excluded from the input.
EXCLUDE_SYMLINKS = NO
# If the value of the INPUT tag contains directories, you can use the
# EXCLUDE_PATTERNS tag to specify one or more wildcard patterns to exclude
# certain files from those directories.
EXCLUDE_PATTERNS =
# The EXAMPLE_PATH tag can be used to specify one or more files or
# directories that contain example code fragments that are included (see
# the \include command).
EXAMPLE_PATH =
# If the value of the EXAMPLE_PATH tag contains directories, you can use the
# EXAMPLE_PATTERNS tag to specify one or more wildcard pattern (like *.cpp
# and *.h) to filter out the source-files in the directories. If left
# blank all files are included.
EXAMPLE_PATTERNS =
# If the EXAMPLE_RECURSIVE tag is set to YES then subdirectories will be
# searched for input files to be used with the \include or \dontinclude
# commands irrespective of the value of the RECURSIVE tag.
# Possible values are YES and NO. If left blank NO is used.
EXAMPLE_RECURSIVE = NO
# The IMAGE_PATH tag can be used to specify one or more files or
# directories that contain image that are included in the documentation (see
# the \image command).
IMAGE_PATH =
# The INPUT_FILTER tag can be used to specify a program that doxygen should
# invoke to filter for each input file. Doxygen will invoke the filter program
# by executing (via popen()) the command <filter> <input-file>, where <filter>
# is the value of the INPUT_FILTER tag, and <input-file> is the name of an
# input file. Doxygen will then use the output that the filter program writes
# to standard output.
INPUT_FILTER =
# If the FILTER_SOURCE_FILES tag is set to YES, the input filter (if set using
# INPUT_FILTER) will be used to filter the input files when producing source
# files to browse.
FILTER_SOURCE_FILES = NO
#---------------------------------------------------------------------------
# configuration options related to source browsing
#---------------------------------------------------------------------------
# If the SOURCE_BROWSER tag is set to YES then a list of source files will
# be generated. Documented entities will be cross-referenced with these sources.
SOURCE_BROWSER = NO
# Setting the INLINE_SOURCES tag to YES will include the body
# of functions and classes directly in the documentation.
INLINE_SOURCES = NO
# If the REFERENCED_BY_RELATION tag is set to YES (the default)
# then for each documented function all documented
# functions referencing it will be listed.
REFERENCED_BY_RELATION = YES
# If the REFERENCES_RELATION tag is set to YES (the default)
# then for each documented function all documented entities
# called/used by that function will be listed.
REFERENCES_RELATION = YES
#---------------------------------------------------------------------------
# configuration options related to the alphabetical class index
#---------------------------------------------------------------------------
# If the ALPHABETICAL_INDEX tag is set to YES, an alphabetical index
# of all compounds will be generated. Enable this if the project
# contains a lot of classes, structs, unions or interfaces.
ALPHABETICAL_INDEX = YES
# If the alphabetical index is enabled (see ALPHABETICAL_INDEX) then
# the COLS_IN_ALPHA_INDEX tag can be used to specify the number of columns
# in which this list will be split (can be a number in the range [1..20])
COLS_IN_ALPHA_INDEX = 5
# In case all classes in a project start with a common prefix, all
# classes will be put under the same header in the alphabetical index.
# The IGNORE_PREFIX tag can be used to specify one or more prefixes that
# should be ignored while generating the index headers.
IGNORE_PREFIX =
#---------------------------------------------------------------------------
# configuration options related to the HTML output
#---------------------------------------------------------------------------
# If the GENERATE_HTML tag is set to YES (the default) Doxygen will
# generate HTML output.
GENERATE_HTML = YES
# The HTML_OUTPUT tag is used to specify where the HTML docs will be put.
# If a relative path is entered the value of OUTPUT_DIRECTORY will be
# put in front of it. If left blank `html' will be used as the default path.
HTML_OUTPUT = html
# The HTML_FILE_EXTENSION tag can be used to specify the file extension for
# each generated HTML page (for example: .htm,.php,.asp). If it is left blank
# doxygen will generate files with .html extension.
HTML_FILE_EXTENSION = .html
# The HTML_HEADER tag can be used to specify a personal HTML header for
# each generated HTML page. If it is left blank doxygen will generate a
# standard header.
HTML_HEADER =
# The HTML_FOOTER tag can be used to specify a personal HTML footer for
# each generated HTML page. If it is left blank doxygen will generate a
# standard footer.
HTML_FOOTER =
# The HTML_STYLESHEET tag can be used to specify a user defined cascading
# style sheet that is used by each HTML page. It can be used to
# fine-tune the look of the HTML output. If the tag is left blank doxygen
# will generate a default style sheet
HTML_STYLESHEET =
# If the HTML_ALIGN_MEMBERS tag is set to YES, the members of classes,
# files or namespaces will be aligned in HTML using tables. If set to
# NO a bullet list will be used.
HTML_ALIGN_MEMBERS = YES
# If the GENERATE_HTMLHELP tag is set to YES, additional index files
# will be generated that can be used as input for tools like the
# Microsoft HTML help workshop to generate a compressed HTML help file (.chm)
# of the generated HTML documentation.
GENERATE_HTMLHELP = NO
# If the GENERATE_HTMLHELP tag is set to YES, the CHM_FILE tag can
# be used to specify the file name of the resulting .chm file. You
# can add a path in front of the file if the result should not be
# written to the html output dir.
CHM_FILE =
# If the GENERATE_HTMLHELP tag is set to YES, the HHC_LOCATION tag can
# be used to specify the location (absolute path including file name) of
# the HTML help compiler (hhc.exe). If non empty doxygen will try to run
# the html help compiler on the generated index.hhp.
HHC_LOCATION =
# If the GENERATE_HTMLHELP tag is set to YES, the GENERATE_CHI flag
# controls if a separate .chi index file is generated (YES) or that
# it should be included in the master .chm file (NO).
GENERATE_CHI = NO
# If the GENERATE_HTMLHELP tag is set to YES, the BINARY_TOC flag
# controls whether a binary table of contents is generated (YES) or a
# normal table of contents (NO) in the .chm file.
BINARY_TOC = NO
# The TOC_EXPAND flag can be set to YES to add extra items for group members
# to the contents of the Html help documentation and to the tree view.
TOC_EXPAND = NO
# The DISABLE_INDEX tag can be used to turn on/off the condensed index at
# top of each HTML page. The value NO (the default) enables the index and
# the value YES disables it.
DISABLE_INDEX = NO
# This tag can be used to set the number of enum values (range [1..20])
# that doxygen will group on one line in the generated HTML documentation.
ENUM_VALUES_PER_LINE = 4
# If the GENERATE_TREEVIEW tag is set to YES, a side panel will be
# generated containing a tree-like index structure (just like the one that
# is generated for HTML Help). For this to work a browser that supports
# JavaScript and frames is required (for instance Mozilla, Netscape 4.0+,
# or Internet explorer 4.0+). Note that for large projects the tree generation
# can take a very long time. In such cases it is better to disable this feature.
# Windows users are probably better off using the HTML help feature.
GENERATE_TREEVIEW = NO
# If the treeview is enabled (see GENERATE_TREEVIEW) then this tag can be
# used to set the initial width (in pixels) of the frame in which the tree
# is shown.
TREEVIEW_WIDTH = 250
#---------------------------------------------------------------------------
# configuration options related to the LaTeX output
#---------------------------------------------------------------------------
# If the GENERATE_LATEX tag is set to YES (the default) Doxygen will
# generate Latex output.
GENERATE_LATEX = YES
# The LATEX_OUTPUT tag is used to specify where the LaTeX docs will be put.
# If a relative path is entered the value of OUTPUT_DIRECTORY will be
# put in front of it. If left blank `latex' will be used as the default path.
LATEX_OUTPUT = latex
# The LATEX_CMD_NAME tag can be used to specify the LaTeX command name to be invoked. If left blank `latex' will be used as the default command name.
LATEX_CMD_NAME = latex
# The MAKEINDEX_CMD_NAME tag can be used to specify the command name to
# generate index for LaTeX. If left blank `makeindex' will be used as the
# default command name.
MAKEINDEX_CMD_NAME = makeindex
# If the COMPACT_LATEX tag is set to YES Doxygen generates more compact
# LaTeX documents. This may be useful for small projects and may help to
# save some trees in general.
COMPACT_LATEX = NO
# The PAPER_TYPE tag can be used to set the paper type that is used
# by the printer. Possible values are: a4, a4wide, letter, legal and
# executive. If left blank a4wide will be used.
PAPER_TYPE = a4wide
# The EXTRA_PACKAGES tag can be to specify one or more names of LaTeX
# packages that should be included in the LaTeX output.
EXTRA_PACKAGES =
# The LATEX_HEADER tag can be used to specify a personal LaTeX header for
# the generated latex document. The header should contain everything until
# the first chapter. If it is left blank doxygen will generate a
# standard header. Notice: only use this tag if you know what you are doing!
LATEX_HEADER =
# If the PDF_HYPERLINKS tag is set to YES, the LaTeX that is generated
# is prepared for conversion to pdf (using ps2pdf). The pdf file will
# contain links (just like the HTML output) instead of page references
# This makes the output suitable for online browsing using a pdf viewer.
PDF_HYPERLINKS = NO
# If the USE_PDFLATEX tag is set to YES, pdflatex will be used instead of
# plain latex in the generated Makefile. Set this option to YES to get a
# higher quality PDF documentation.
USE_PDFLATEX = NO
# If the LATEX_BATCHMODE tag is set to YES, doxygen will add the \\batchmode.
# command to the generated LaTeX files. This will instruct LaTeX to keep
# running if errors occur, instead of asking the user for help.
# This option is also used when generating formulas in HTML.
LATEX_BATCHMODE = NO
#---------------------------------------------------------------------------
# configuration options related to the RTF output
#---------------------------------------------------------------------------
# If the GENERATE_RTF tag is set to YES Doxygen will generate RTF output
# The RTF output is optimised for Word 97 and may not look very pretty with
# other RTF readers or editors.
GENERATE_RTF = NO
# The RTF_OUTPUT tag is used to specify where the RTF docs will be put.
# If a relative path is entered the value of OUTPUT_DIRECTORY will be
# put in front of it. If left blank `rtf' will be used as the default path.
RTF_OUTPUT = rtf
# If the COMPACT_RTF tag is set to YES Doxygen generates more compact
# RTF documents. This may be useful for small projects and may help to
# save some trees in general.
COMPACT_RTF = NO
# If the RTF_HYPERLINKS tag is set to YES, the RTF that is generated
# will contain hyperlink fields. The RTF file will
# contain links (just like the HTML output) instead of page references.
# This makes the output suitable for online browsing using WORD or other
# programs which support those fields.
# Note: wordpad (write) and others do not support links.
RTF_HYPERLINKS = NO
# Load stylesheet definitions from file. Syntax is similar to doxygen's
# config file, i.e. a series of assigments. You only have to provide
# replacements, missing definitions are set to their default value.
RTF_STYLESHEET_FILE =
# Set optional variables used in the generation of an rtf document.
# Syntax is similar to doxygen's config file.
RTF_EXTENSIONS_FILE =
#---------------------------------------------------------------------------
# configuration options related to the man page output
#---------------------------------------------------------------------------
# If the GENERATE_MAN tag is set to YES (the default) Doxygen will
# generate man pages
GENERATE_MAN = NO
# The MAN_OUTPUT tag is used to specify where the man pages will be put.
# If a relative path is entered the value of OUTPUT_DIRECTORY will be
# put in front of it. If left blank `man' will be used as the default path.
MAN_OUTPUT = man
# The MAN_EXTENSION tag determines the extension that is added to
# the generated man pages (default is the subroutine's section .3)
MAN_EXTENSION = .3
# If the MAN_LINKS tag is set to YES and Doxygen generates man output,
# then it will generate one additional man file for each entity
# documented in the real man page(s). These additional files
# only source the real man page, but without them the man command
# would be unable to find the correct page. The default is NO.
MAN_LINKS = NO
#---------------------------------------------------------------------------
# configuration options related to the XML output
#---------------------------------------------------------------------------
# If the GENERATE_XML tag is set to YES Doxygen will
# generate an XML file that captures the structure of
# the code including all documentation. Note that this
# feature is still experimental and incomplete at the
# moment.
GENERATE_XML = NO
#---------------------------------------------------------------------------
# configuration options for the AutoGen Definitions output
#---------------------------------------------------------------------------
# If the GENERATE_AUTOGEN_DEF tag is set to YES Doxygen will
# generate an AutoGen Definitions (see autogen.sf.net) file
# that captures the structure of the code including all
# documentation. Note that this feature is still experimental
# and incomplete at the moment.
GENERATE_AUTOGEN_DEF = NO
#---------------------------------------------------------------------------
# Configuration options related to the preprocessor
#---------------------------------------------------------------------------
# If the ENABLE_PREPROCESSING tag is set to YES (the default) Doxygen will
# evaluate all C-preprocessor directives found in the sources and include
# files.
ENABLE_PREPROCESSING = YES
# If the MACRO_EXPANSION tag is set to YES Doxygen will expand all macro
# names in the source code. If set to NO (the default) only conditional
# compilation will be performed. Macro expansion can be done in a controlled
# way by setting EXPAND_ONLY_PREDEF to YES.
MACRO_EXPANSION = NO
# If the EXPAND_ONLY_PREDEF and MACRO_EXPANSION tags are both set to YES
# then the macro expansion is limited to the macros specified with the
# PREDEFINED and EXPAND_AS_PREDEFINED tags.
EXPAND_ONLY_PREDEF = NO
# If the SEARCH_INCLUDES tag is set to YES (the default) the includes files
# in the INCLUDE_PATH (see below) will be search if a #include is found.
SEARCH_INCLUDES = YES
# The INCLUDE_PATH tag can be used to specify one or more directories that
# contain include files that are not input files but should be processed by
# the preprocessor.
INCLUDE_PATH =
# You can use the INCLUDE_FILE_PATTERNS tag to specify one or more wildcard
# patterns (like *.h and *.hpp) to filter out the header-files in the
# directories. If left blank, the patterns specified with FILE_PATTERNS will
# be used.
INCLUDE_FILE_PATTERNS =
# The PREDEFINED tag can be used to specify one or more macro names that
# are defined before the preprocessor is started (similar to the -D option of
# gcc). The argument of the tag is a list of macros of the form: name
# or name=definition (no spaces). If the definition and the = are
# omitted =1 is assumed.
PREDEFINED =
# If the MACRO_EXPANSION and EXPAND_PREDEF_ONLY tags are set to YES then
# this tag can be used to specify a list of macro names that should be expanded.
# The macro definition that is found in the sources will be used.
# Use the PREDEFINED tag if you want to use a different macro definition.
EXPAND_AS_DEFINED =
# If the SKIP_FUNCTION_MACROS tag is set to YES (the default) then
# doxygen's preprocessor will remove all function-like macros that are alone
# on a line, have an all uppercase name, and do not end with a semicolon. Such
# function macros are typically used for boiler-plate code, and will confuse the
# parser if not removed.
SKIP_FUNCTION_MACROS = YES
#---------------------------------------------------------------------------
# Configuration::addtions related to external references
#---------------------------------------------------------------------------
# The TAGFILES tag can be used to specify one or more tagfiles.
TAGFILES =
# When a file name is specified after GENERATE_TAGFILE, doxygen will create
# a tag file that is based on the input files it reads.
GENERATE_TAGFILE =
# If the ALLEXTERNALS tag is set to YES all external classes will be listed
# in the class index. If set to NO only the inherited external classes
# will be listed.
ALLEXTERNALS = NO
# If the EXTERNAL_GROUPS tag is set to YES all external groups will be listed
# in the modules index. If set to NO, only the current project's groups will
# be listed.
EXTERNAL_GROUPS = YES
# The PERL_PATH should be the absolute path and name of the perl script
# interpreter (i.e. the result of `which perl').
PERL_PATH = /usr/bin/perl
#---------------------------------------------------------------------------
# Configuration options related to the dot tool
#---------------------------------------------------------------------------
# If the CLASS_DIAGRAMS tag is set to YES (the default) Doxygen will
# generate a inheritance diagram (in Html, RTF and LaTeX) for classes with base or
# super classes. Setting the tag to NO turns the diagrams off. Note that this
# option is superceded by the HAVE_DOT option below. This is only a fallback. It is
# recommended to install and use dot, since it yield more powerful graphs.
CLASS_DIAGRAMS = YES
# If set to YES, the inheritance and collaboration graphs will hide
# inheritance and usage relations if the target is undocumented
# or is not a class.
HIDE_UNDOC_RELATIONS = YES
# If you set the HAVE_DOT tag to YES then doxygen will assume the dot tool is
# available from the path. This tool is part of Graphviz, a graph visualization
# toolkit from AT&T and Lucent Bell Labs. The other options in this section
# have no effect if this option is set to NO (the default)
HAVE_DOT = YES
# If the CLASS_GRAPH and HAVE_DOT tags are set to YES then doxygen
# will generate a graph for each documented class showing the direct and
# indirect inheritance relations. Setting this tag to YES will force the
# the CLASS_DIAGRAMS tag to NO.
CLASS_GRAPH = YES
# If the COLLABORATION_GRAPH and HAVE_DOT tags are set to YES then doxygen
# will generate a graph for each documented class showing the direct and
# indirect implementation dependencies (inheritance, containment, and
# class references variables) of the class with other documented classes.
COLLABORATION_GRAPH = YES
# If set to YES, the inheritance and collaboration graphs will show the
# relations between templates and their instances.
TEMPLATE_RELATIONS = YES
# If the ENABLE_PREPROCESSING, SEARCH_INCLUDES, INCLUDE_GRAPH, and HAVE_DOT
# tags are set to YES then doxygen will generate a graph for each documented
# file showing the direct and indirect include dependencies of the file with
# other documented files.
INCLUDE_GRAPH = YES
# If the ENABLE_PREPROCESSING, SEARCH_INCLUDES, INCLUDED_BY_GRAPH, and
# HAVE_DOT tags are set to YES then doxygen will generate a graph for each
# documented header file showing the documented files that directly or
# indirectly include this file.
INCLUDED_BY_GRAPH = YES
# If the GRAPHICAL_HIERARCHY and HAVE_DOT tags are set to YES then doxygen
# will graphical hierarchy of all classes instead of a textual one.
GRAPHICAL_HIERARCHY = YES
# The DOT_IMAGE_FORMAT tag can be used to set the image format of the images
# generated by dot. Possible values are png, jpg, or gif
# If left blank png will be used.
DOT_IMAGE_FORMAT = png
# The tag DOT_PATH can be used to specify the path where the dot tool can be
# found. If left blank, it is assumed the dot tool can be found on the path.
DOT_PATH =
# The DOTFILE_DIRS tag can be used to specify one or more directories that
# contain dot files that are included in the documentation (see the
# \dotfile command).
DOTFILE_DIRS =
# The MAX_DOT_GRAPH_WIDTH tag can be used to set the maximum allowed width
# (in pixels) of the graphs generated by dot. If a graph becomes larger than
# this value, doxygen will try to truncate the graph, so that it fits within
# the specified constraint. Beware that most browsers cannot cope with very
# large images.
MAX_DOT_GRAPH_WIDTH = 1024
# The MAX_DOT_GRAPH_HEIGHT tag can be used to set the maximum allows height
# (in pixels) of the graphs generated by dot. If a graph becomes larger than
# this value, doxygen will try to truncate the graph, so that it fits within
# the specified constraint. Beware that most browsers cannot cope with very
# large images.
MAX_DOT_GRAPH_HEIGHT = 1024
# If the GENERATE_LEGEND tag is set to YES (the default) Doxygen will
# generate a legend page explaining the meaning of the various boxes and
# arrows in the dot generated graphs.
GENERATE_LEGEND = YES
# If the DOT_CLEANUP tag is set to YES (the default) Doxygen will
# remove the intermedate dot files that are used to generate
# the various graphs.
DOT_CLEANUP = YES
#---------------------------------------------------------------------------
# Configuration::addtions related to the search engine
#---------------------------------------------------------------------------
# The SEARCHENGINE tag specifies whether or not a search engine should be
# used. If set to NO the values of all tags below this one will be ignored.
SEARCHENGINE = NO
# The CGI_NAME tag should be the name of the CGI script that
# starts the search engine (doxysearch) with the correct parameters.
# A script with this name will be generated by doxygen.
CGI_NAME = search.cgi
# The CGI_URL tag should be the absolute URL to the directory where the
# cgi binaries are located. See the documentation of your http daemon for
# details.
CGI_URL =
# The DOC_URL tag should be the absolute URL to the directory where the
# documentation is located. If left blank the absolute path to the
# documentation, with file:// prepended to it, will be used.
DOC_URL =
# The DOC_ABSPATH tag should be the absolute path to the directory where the
# documentation is located. If left blank the directory on the local machine
# will be used.
DOC_ABSPATH =
# The BIN_ABSPATH tag must point to the directory where the doxysearch binary
# is installed.
BIN_ABSPATH = /usr/local/bin/
# The EXT_DOC_PATHS tag can be used to specify one or more paths to
# documentation generated for other projects. This allows doxysearch to search
# the documentation for these projects as well.
EXT_DOC_PATHS =

325
src/configdlg.old.cpp Normal file
View File

@ -0,0 +1,325 @@
//======================================================================
// File: configdlg.cpp
// Author: Matthias Toussaint
// Created: Tue Apr 10 17:24:08 CEST 2001
//----------------------------------------------------------------------
// Permission to use, copy, modify, and distribute this software and its
// documentation for any purpose and without fee is hereby granted,
// provided that below copyright notice appear in all copies and that
// both that copyright notice and this permission notice appear in
// supporting documentation.
//
// This file is provided AS IS with no warranties of any kind. The
// author shall have no liability with respect to the infringement of
// copyrights, trade secrets or any patents by this file or any part
// thereof. In no event will the author be liable for any lost revenue
// or profits or other special, indirect and consequential damages.
//----------------------------------------------------------------------
// (c) 2001 Matthias Toussaint
//======================================================================
#include <configdlg.h>
#include <qdir.h>
#include <qwhatsthis.h>
#include <qpushbutton.h>
#include <qlineedit.h>
#include <qspinbox.h>
#include <engnumbervalidator.h>
#include <qradiobutton.h>
#include <qbuttongroup.h>
#include <qtextview.h>
#include <qcheckbox.h>
#include <colorbutton.h>
#include <qcolordialog.h>
#include <qmessagebox.h>
#include <qprinter.h>
#include <qfiledialog.h>
#include <qtabwidget.h>
#include <qvalidator.h>
#include <qlabel.h>
#include <iostream.h>
#include <xpm/icon.xpm>
#define MINUTE_SECS 60
#define HOUR_SECS 60*60
#define DAY_SECS 60*60*24
// when all needed parameter are found this hardcoded version will
// be replaced by a file
// name
// baud (600=0,1200,1800,2400,4800,9600)
// protocol (14 bytes polling 'D'=0, 10 bytes continuous [PeakTech]
// 14 continuous, 15 continuous, 11 bin continuous)
// bits
// stopBits
// number of values (For DMM's that send several lines at once)
// parity (0,1,2 - None,Even,Odd)
// display digits (0,1,2,3 - 3 1/2, 3 3/4, 4 1/1, 4 3/4)
//
struct DMMInfo dmm_info[] = {
{"ELV M9803R", 5, 4, 7, 1, 1, 1, 1},
{"Metex M-3660D", 1, 0, 7, 2, 1, 0, 1},
{"Metex M-3830D", 1, 0, 7, 2, 4, 0, 1},
{"Metex M-3850D", 1, 0, 7, 2, 4, 0, 1},
{"Metex ME-11", 0, 0, 7, 2, 1, 0, 1},
{"Metex ME-22", 3, 0, 7, 2, 1, 0, 1},
{"Metex ME-32", 0, 0, 7, 2, 1, 0, 1},
{"Metex universal system 9160", 1, 0, 7, 2, 4, 0, 1},
{"PeakTech-4010", 5, 0, 7, 2, 1, 0, 1},
{"PeakTech-451", 0, 1, 7, 2, 1, 0, 1},
{"Radioshack 22-805 DMM", 0, 0, 7, 2, 1, 0, 1},
{"Voltcraft M-4660", 1, 0, 7, 2, 4, 0, 3},
{"Voltcraft ME-11", 0, 0, 7, 2, 1, 0, 1},
{"Voltcraft ME-22T", 3, 0, 7, 2, 1, 0, 1},
{"Voltcraft ME-32", 0, 0, 7, 2, 1, 0, 1},
{"Voltcraft VC 670", 4, 2, 7, 1, 1, 0, 3},
{"*Voltcraft ME-42", 0, 0, 7, 2, 1, 0, 1},
{"*Voltcraft M-3860", 5, 0, 7, 2, 4, 0, 2},
{"*Voltcraft M-4660A", 5, 0, 7, 2, 4, 0, 3},
{"*Voltcraft M-4660M", 5, 0, 7, 2, 4, 0, 3},
{"*Voltcraft MXD-4660A", 5, 0, 7, 2, 4, 0, 3},
{"*Voltcraft VC 630", 4, 2, 7, 1, 1, 0, 3},
{"*Voltcraft VC 650", 4, 2, 7, 1, 1, 0, 3},
{"*Voltcraft VC 635", 3, 3, 7, 1, 1, 0, 3},
{"*Voltcraft VC 655", 3, 3, 7, 1, 1, 0, 3},
{"",0,0,0,0,0,0,0} // End Of List
};
ConfigDlg::ConfigDlg( QWidget *parent, const char *name ) :
UIConfigDlg( parent, name, false )
{
EngNumberValidator *validator = new EngNumberValidator( this );
ui_raisingThreshold->setValidator( validator );
ui_fallingThreshold->setValidator( validator );
ui_execRaisingThreshold->setValidator( validator );
ui_execFallingThreshold->setValidator( validator );
ui_intScale->setValidator( validator );
ui_intThreshold->setValidator( validator );
ui_intOffset->setValidator( validator );
ui_scaleMin->setValidator( validator );
ui_scaleMax->setValidator( validator );
connect( helpBut, SIGNAL( clicked() ), this, SLOT( helpSLOT() ));
connect( ui_defaultRecorder, SIGNAL( clicked() ),
this, SLOT( recorderDefaultSLOT() ));
connect( ui_factoryRecorder, SIGNAL( clicked() ),
this, SLOT( recorderFactorySLOT() ));
connect( ui_defaultScale, SIGNAL( clicked() ),
this, SLOT( scaleDefaultSLOT() ));
connect( ui_factoryScale, SIGNAL( clicked() ),
this, SLOT( scaleFactorySLOT() ));
connect( ui_defaultDMM, SIGNAL( clicked() ),
this, SLOT( dmmDefaultSLOT() ));
connect( ui_factoryDMM, SIGNAL( clicked() ),
this, SLOT( dmmFactorySLOT() ));
connect( ui_defaultPreferences, SIGNAL( clicked() ),
this, SLOT( preferencesDefaultSLOT() ));
connect( ui_factoryPreferences, SIGNAL( clicked() ),
this, SLOT( preferencesFactorySLOT() ));
connect( ui_defaultExecute, SIGNAL( clicked() ),
this, SLOT( executeDefaultSLOT() ));
connect( ui_factoryExecute, SIGNAL( clicked() ),
this, SLOT( executeFactorySLOT() ));
connect( ui_defaultGraph, SIGNAL( clicked() ),
this, SLOT( graphDefaultSLOT() ));
connect( ui_factoryGraph, SIGNAL( clicked() ),
this, SLOT( graphFactorySLOT() ));
connect( tabWidget, SIGNAL( currentChanged( QWidget * )),
this, SLOT( descriptionSLOT( QWidget * ) ));
ui_defaultRecorder->hide();
ui_defaultScale->hide();
ui_defaultDMM->hide();
ui_defaultPreferences->hide();
ui_defaultExecute->hide();
ui_defaultGraph->hide();
cancelSLOT();
ui_description->setBackgroundColor( colorGroup().light() );
ui_pixmap->setBackgroundColor( colorGroup().light() );
ui_spacer->setBackgroundColor( colorGroup().light() );
connect( ui_tipOfTheDay, SIGNAL( toggled( bool ) ),
this, SIGNAL( showTips( bool ) ));
}
ConfigDlg::~ConfigDlg()
{
}
void
ConfigDlg::applySLOT()
{
// m_cfg->clear();
m_cfg->setInt( "QtDMM", "version", 0 );
m_cfg->setInt( "QtDMM", "revision", 62 );
m_cfg->setBool( "QtDMM", "show-tip", showTip() );
m_cfg->setInt( "Sample", "rate", sampleEvery->value() );
m_cfg->setInt( "Sample", "rate-unit", ui_sampleUnit->currentItem() );
m_cfg->setInt( "Sample", "time", sampleTime->value() );
m_cfg->setInt( "Sample", "time-unit", timeUnit->currentItem() );
m_cfg->setInt( "Start", "mode", sampleMode() );
m_cfg->setInt( "Start", "hour", hour->value() );
m_cfg->setInt( "Start", "minute", minute->value() );
m_cfg->setInt( "Start", "second", second->value() );
m_cfg->setString( "Start", "raising-threshold", ui_raisingThreshold->text() );
m_cfg->setString( "Start", "falling-threshold", ui_fallingThreshold->text() );
m_cfg->setBool( "Scale", "automatic", automaticScale() );
m_cfg->setString( "Scale", "minimum", ui_scaleMin->text() );
m_cfg->setString( "Scale", "maximum", ui_scaleMax->text() );
m_cfg->setInt( "Window", "size", ui_winSize->value() );
m_cfg->setInt( "Window", "size-unit", sizeUnit->currentItem() );
m_cfg->setInt( "Window", "length", winLength->value() );
m_cfg->setInt( "Window", "length-unit", lengthUnit->currentItem() );
m_cfg->setInt( "Port settings", "device", port->currentItem() );
m_cfg->setInt( "Port settings", "baud", baudRate->currentItem() );
m_cfg->setInt( "Port settings", "bits", bitsCombo->currentItem()+5 );
m_cfg->setInt( "Port settings", "stop-bits", stopBitsCombo->currentItem()+1 );
m_cfg->setInt( "Port settings", "parity", parityCombo->currentItem() );
m_cfg->setInt( "DMM", "display", displayCombo->currentItem() );
m_cfg->setInt( "DMM", "data-format", protocolCombo->currentItem() );
m_cfg->setInt( "DMM", "number-of-values", ui_numValues->value() );
m_cfg->setString( "DMM", "model",
(ui_model->currentItem() == 0 ? "Manual" : dmm_info[ui_model->currentItem()-1].name ));
m_cfg->setBool( "Save", "window", ui_saveWindowCheck->isChecked() );
m_cfg->setRGB( "Graph", "background", ui_bgColor->color().rgb() );
m_cfg->setRGB( "Graph", "grid", ui_gridColor->color().rgb() );
m_cfg->setRGB( "Graph", "data", ui_dataColor->color().rgb() );
m_cfg->setRGB( "Graph", "integration", ui_intColor->color().rgb() );
m_cfg->setRGB( "Graph", "integration-threshold", ui_intThresholdColor->color().rgb() );
m_cfg->setRGB( "Graph", "cursor", ui_cursorColor->color().rgb() );
m_cfg->setRGB( "Graph", "start-trigger", ui_startColor->color().rgb() );
m_cfg->setRGB( "Graph", "external-trigger", ui_extColor->color().rgb() );
m_cfg->setInt( "Graph", "line-width", ui_lineWidth->value() );
m_cfg->setInt( "Graph", "line-mode", ui_lineMode->currentItem() );
m_cfg->setInt( "Graph", "point-mode", ui_pointMode->currentItem() );
m_cfg->setInt( "Graph", "int-line-width", ui_intLineWidth->value() );
m_cfg->setInt( "Graph", "int-line-mode", ui_intLineMode->currentItem() );
m_cfg->setInt( "Graph", "int-point-mode", ui_intPointMode->currentItem() );
m_cfg->setBool( "Graph", "crosshair-cursor", ui_crosshair->isChecked() );
m_cfg->setBool( "Graph", "show-integration", ui_showInt->isChecked() );
m_cfg->setString( "Graph", "int-scale", ui_intScale->text() );
m_cfg->setString( "Graph", "int-offset", ui_intOffset->text() );
m_cfg->setString( "Graph", "int-threshold", ui_intThreshold->text() );
m_cfg->setRGB( "Graph", "display-background", ui_bgColorDisplay->color().rgb() );
m_cfg->setRGB( "Graph", "display-text", ui_textColor->color().rgb() );
m_cfg->setBool( "Graph", "display-bar", showBar() );
m_cfg->setBool( "Graph", "display-min-max", showMinMax() );
m_cfg->setInt( "Custom colors", "count", QColorDialog::customCount() );
m_cfg->setInt( "Printer", "page-size", (int)m_printer->pageSize() );
m_cfg->setInt( "Printer", "page-orientation", (int)m_printer->orientation() );
m_cfg->setInt( "Printer", "color", (int)m_printer->colorMode() );
m_cfg->setString( "Printer", "name", m_printer->printerName() );
m_cfg->setString( "Printer", "filename", m_printer->outputFileName() );
m_cfg->setBool( "Printer", "print-file", m_printer->outputToFile() );
m_cfg->setBool( "Alert", "unsaved-file", alertUnsavedData() );
m_cfg->setBool( "Icons", "text-label", useTextLabel() );
m_cfg->setBool( "External", "exec", startExternal() );
m_cfg->setBool( "External", "raising", !externalFalling() );
m_cfg->setString( "External", "raising-threshold", ui_execRaisingThreshold->text() );
m_cfg->setString( "External", "falling-threshold", ui_execFallingThreshold->text() );
m_cfg->setBool( "External", "disconnect", disconnectExternal() );
m_cfg->setString( "External", "command", externalCommand() );
for (int i=0; i<QColorDialog::customCount(); i++)
{
QString color;
color.sprintf( "color_%d", i );
m_cfg->setRGB( "Custom colors", color, QColorDialog::customColor( i ) );
}
if (saveWindowPosition())
{
m_cfg->setInt( "Position", "x", m_winRect.x() );
m_cfg->setInt( "Position", "y", m_winRect.y() );
m_cfg->setInt( "Position", "width", m_winRect.width() );
m_cfg->setInt( "Position", "height", m_winRect.height() );
}
else
{
m_cfg->remove( "Position" );
}
m_cfg->save();
emit accepted();
if (sender() == okBut)
{
hide();
}
}
void
ConfigDlg::helpSLOT()
{
QWhatsThis::enterWhatsThisMode();
}
void
ConfigDlg::descriptionSLOT( QWidget * )
{
switch (tabWidget->currentPageIndex())
{
case 0:
ui_description->setText( tr("Here you can configure the sampling"
" frequency and start options for the"
" recorder." ));
break;
case 1:
ui_description->setText( tr("Here you can configure the vertical scale"
" of the recorder and the length (in time)"
" of the window." ));
break;
case 2:
ui_description->setText( tr("Here you can configure the serial port"
" and protocol for your DMM. There is"
" also a number of predefined models." ));
break;
case 3:
ui_description->setText( tr("Here you can configure QtDMM's visual"
" appearance and behaviour." ));
break;
case 4:
ui_description->setText( tr("Here you can configure the colors and"
" drawing style for the graph." ));
break;
case 5:
ui_description->setText( tr("Here you can configure the parameter"
" for the integration curve." ));
break;
case 6:
ui_description->setText( tr("Here you can configure if an external"
" command is to be started and when." ));
break;
}
}

150
src/configdlg.old.h Normal file
View File

@ -0,0 +1,150 @@
//======================================================================
// File: configdlg.h
// Author: Matthias Toussaint
// Created: Tue Apr 10 17:22:30 CEST 2001
//----------------------------------------------------------------------
// Permission to use, copy, modify, and distribute this software and its
// documentation for any purpose and without fee is hereby granted,
// provided that below copyright notice appear in all copies and that
// both that copyright notice and this permission notice appear in
// supporting documentation.
//
// This file is provided AS IS with no warranties of any kind. The
// author shall have no liability with respect to the infringement of
// copyrights, trade secrets or any patents by this file or any part
// thereof. In no event will the author be liable for any lost revenue
// or profits or other special, indirect and consequential damages.
//----------------------------------------------------------------------
// (c) 2001 Matthias Toussaint
//======================================================================
#ifndef CONFIGDLG_HH
#define CONFIGDLG_HH
#include <uiconfigdlg.h>
#include <simplecfg.h>
#include <qcombobox.h>
#include <dmmgraph.h>
#include <readevent.h>
class QPrinter;
struct DMMInfo
{
char *name;
int baud;
int protocol;
int bits;
int stopBits;
int numValues;
int parity;
int display;
};
class ConfigDlg : public UIConfigDlg
{
Q_OBJECT
public:
ConfigDlg( QWidget *parent=0, const char *name=0 );
virtual ~ConfigDlg();
QString device() const { return port->currentText(); }
int speed() const;
int windowSeconds() const;
int totalSeconds() const;
QTime startTime() const;
DMMGraph::SampleMode sampleMode() const;
int sampleStep() const;
int sampleLength() const;
double raisingThreshold() const;
double fallingThreshold() const;
double scaleMin() const;
double scaleMax() const;
bool automaticScale() const;
bool showMinMax() const;
bool showBar() const;
ReadEvent::DataFormat format() const;
int parity() const;
int display() const;
int bits() const;
int stopBits() const;
int numValues() const;
QColor bgColor() const;
QColor gridColor() const;
QColor dataColor() const;
QColor cursorColor() const;
QColor displayBgColor() const;
QColor displayTextColor() const;
QColor startColor() const;
QColor externalColor() const;
QColor intColor() const;
QColor intThresholdColor() const;
int lineWidth() const;
int intLineWidth() const;
int lineMode() const;
int pointMode() const;
int intLineMode() const;
int intPointMode() const;
void writePrinter( QPrinter * );
void readPrinter( QPrinter * );
void setWinRect( const QRect & );
QRect winRect() const;
bool saveWindowPosition() const;
bool alertUnsavedData() const;
bool useTextLabel() const;
bool startExternal() const;
bool externalFalling() const;
double externalThreshold() const;
QString externalCommand() const;
bool disconnectExternal() const;
bool crosshair() const;
double intScale() const;
double intThreshold() const;
double intOffset() const;
bool showIntegration() const;
bool showTip() const;
int currentTipId() const;
QString dmmName() const;
public slots:
void connectSLOT( bool );
void applySLOT();
void setSampleTimeSLOT( int );
void setGraphSizeSLOT( int,int );
void setShowTipsSLOT( bool );
void setCurrentTipSLOT( int );
void zoomInSLOT( double );
void zoomOutSLOT( double );
signals:
void accepted();
void showTips( bool );
protected:
SimpleCfg *m_cfg;
QPrinter *m_printer;
QRect m_winRect;
protected slots:
void cancelSLOT();
void helpSLOT();
void modelSLOT( int );
void recorderDefaultSLOT();
void recorderFactorySLOT();
void scaleDefaultSLOT();
void scaleFactorySLOT();
void dmmDefaultSLOT();
void dmmFactorySLOT();
void preferencesDefaultSLOT();
void preferencesFactorySLOT();
void executeDefaultSLOT();
void executeFactorySLOT();
void graphDefaultSLOT();
void graphFactorySLOT();
void browseExecSLOT();
void descriptionSLOT( QWidget * );
};
#endif // CONFIGDLG_HH

93
src/displayprefs.cpp Normal file
View File

@ -0,0 +1,93 @@
//======================================================================
// File: displayprefs.cpp
// Author: Matthias Toussaint
// Created: Sun Nov 24 15:08:22 CET 2002
//----------------------------------------------------------------------
// Permission to use, copy, modify, and distribute this software and its
// documentation for any purpose and without fee is hereby granted,
// provided that below copyright notice appear in all copies and that
// both that copyright notice and this permission notice appear in
// supporting documentation.
//
// This file is provided AS IS with no warranties of any kind. The
// author shall have no liability with respect to the infringement of
// copyrights, trade secrets or any patents by this file or any part
// thereof. In no event will the author be liable for any lost revenue
// or profits or other special, indirect and consequential damages.
//----------------------------------------------------------------------
// (c) 2000-2002 Matthias Toussaint
//======================================================================
#include <qcheckbox.h>
#include <colorbutton.h>
#include <displayprefs.h>
#include <simplecfg.h>
#include <display.xpm>
DisplayPrefs::DisplayPrefs( QWidget *parent, const char *name ) :
UIDisplayPrefs( parent, name )
{
m_label = tr( "Display settings" );
m_description = tr( "<b>Here you can configure the visual"
" appearance of the DMM display.</b>" );
m_pixmap = new QPixmap( (const char **)display_xpm );
}
DisplayPrefs::~DisplayPrefs()
{
}
void
DisplayPrefs::defaultsSLOT()
{
ui_bgColorDisplay->setColor( QColor( m_cfg->getRGB( "Display", "display-background", QColor( 212,220,207 ).rgb() )));
ui_textColor->setColor( QColor( m_cfg->getRGB( "Display", "display-text", Qt::black.rgb() )));
ui_showBar->setChecked( m_cfg->getBool( "Display", "display-bar", true ));
ui_showMinMax->setChecked( m_cfg->getBool( "Display", "display-min-max", true ));
}
void
DisplayPrefs::factoryDefaultsSLOT()
{
ui_bgColorDisplay->setColor( QColor( 212,220,207 ) );
ui_textColor->setColor( Qt::black );
ui_showBar->setChecked( true );
ui_showMinMax->setChecked( true );
}
void
DisplayPrefs::applySLOT()
{
m_cfg->setRGB( "Display", "display-background", ui_bgColorDisplay->color().rgb() );
m_cfg->setRGB( "Display", "display-text", ui_textColor->color().rgb() );
m_cfg->setBool( "Display", "display-bar", showBar() );
m_cfg->setBool( "Display", "display-min-max", showMinMax() );
}
bool
DisplayPrefs::showBar() const
{
return ui_showBar->isChecked();
}
bool
DisplayPrefs::showMinMax() const
{
return ui_showMinMax->isChecked();
}
QColor
DisplayPrefs::displayBgColor() const
{
return ui_bgColorDisplay->color();
}
QColor
DisplayPrefs::displayTextColor() const
{
return ui_textColor->color();
}

46
src/displayprefs.h Normal file
View File

@ -0,0 +1,46 @@
//======================================================================
// File: displayprefs.h
// Author: Matthias Toussaint
// Created: Sun Nov 24 15:08:12 CET 2002
//----------------------------------------------------------------------
// Permission to use, copy, modify, and distribute this software and its
// documentation for any purpose and without fee is hereby granted,
// provided that below copyright notice appear in all copies and that
// both that copyright notice and this permission notice appear in
// supporting documentation.
//
// This file is provided AS IS with no warranties of any kind. The
// author shall have no liability with respect to the infringement of
// copyrights, trade secrets or any patents by this file or any part
// thereof. In no event will the author be liable for any lost revenue
// or profits or other special, indirect and consequential damages.
//----------------------------------------------------------------------
// (c) 2000-2002 Matthias Toussaint
//======================================================================
#ifndef DISPLAYPREFS_HH
#define DISPLAYPREFS_HH
#include <uidisplayprefs.h>
class DisplayPrefs : public UIDisplayPrefs
{
Q_OBJECT
public:
DisplayPrefs( QWidget *parent=0, const char *name=0 );
virtual ~DisplayPrefs();
bool showBar() const;
bool showMinMax() const;
QColor displayBgColor() const;
QColor displayTextColor() const;
public slots:
virtual void defaultsSLOT();
virtual void factoryDefaultsSLOT();
virtual void applySLOT();
};
#endif // DISPLAYPREFS_HH

View File

@ -375,7 +375,8 @@ DisplayWid::paintEvent( QPaintEvent * )
if (m_paintBar)
{
p.fillRect( off, height()-10, (double)(width()-2*off)*percent, 5,
p.fillRect( off, height()-10,
(int)qRound((double)(width()-2*off)*percent ), 5,
colorGroup().foreground() );
}
}

View File

@ -22,10 +22,11 @@
#include <unistd.h>
#include <errno.h>
#include <qapplication.h>
#include <iostream.h>
#include <stdio.h>
#include <iostream>
DMM::DMM( QObject *parent, const char *name ) :
QObject( parent, name ),
m_handle( -1 ),
@ -242,18 +243,18 @@ DMM::open()
void
DMM::close()
{
if (-1 != m_handle)
{
::close( m_handle );
}
killTimers();
m_error = tr( "Not connected" );
emit error( m_error );
m_handle = -1;
m_readerThread->setHandle( m_handle );
m_readerThread->setHandle( -1 );
if (-1 != m_handle)
{
::close( m_handle );
m_handle = -1;
}
m_oldStatus = ReaderThread::NotConnected;
}
@ -261,6 +262,7 @@ DMM::close()
void
DMM::timerEvent( QTimerEvent * )
{
//std::cerr << "timer event" << std::endl;
if (-1 == m_handle)
{
emit error( m_error );
@ -271,11 +273,9 @@ DMM::timerEvent( QTimerEvent * )
}
}
bool
DMM::event( QEvent *ev )
void
DMM::customEvent( QCustomEvent *ev )
{
if (QObject::event(ev)) return true;
if (QEvent::User == ev->type())
{
QString val;
@ -615,11 +615,7 @@ DMM::event( QEvent *ev )
emit error( m_error );
}
m_oldStatus = m_readerThread->status();
return false;
}
return true;
}
QString

View File

@ -68,7 +68,7 @@ protected:
QString m_name;
void timerEvent( QTimerEvent * );
bool event( QEvent * );
void customEvent( QCustomEvent * );
QString insertComma( const QString &, int );
};

View File

@ -1036,7 +1036,7 @@ DMMGraph::mouseMoveEvent( QMouseEvent *ev )
//cerr << "delta=" << m_mpos.x()-ev->pos().x() << " offset=" << offset << endl;
if (fabs(offset) >= 1)
{
scrollbar->setValue( scrollbar->value() + offset );
scrollbar->setValue( scrollbar->value() + (int)qRound(offset) );
m_mpos = ev->pos();
}
}
@ -1238,7 +1238,7 @@ DMMGraph::exportDataSLOT()
for (int i=0; i<m_pointer; i++)
{
QDateTime dt = m_graphStart.addSecs( i*m_sampleTime/10. );
QDateTime dt = m_graphStart.addSecs( i*(int)qRound(m_sampleTime/10.) );
QString line;
line.sprintf( "%02d.%02d.%04d\t%02d:%02d:%02d\t%g\t%s\n",
dt.date().day(), dt.date().month(), dt.date().year(),

View File

@ -20,9 +20,9 @@
#include <engnumbervalidator.h>
EngNumberValidator::EngNumberValidator( QWidget *parent,
EngNumberValidator::EngNumberValidator( QObject *parent,
const char *name ) :
QValidator(parent, name )
QValidator( parent, name )
{
}

View File

@ -26,7 +26,7 @@
class EngNumberValidator : public QValidator
{
public:
EngNumberValidator( QWidget *parent=0, const char *name=0 );
EngNumberValidator( QObject *parent=0, const char *name=0 );
virtual ~EngNumberValidator();
QValidator::State validate( QString &, int & ) const;

View File

@ -44,7 +44,7 @@
#include <help.xpm>
#include <icon.xpm>
#define VERSION_STRING "0.8.2"
#define VERSION_STRING "0.8.3"
MainWin::MainWin( QWidget *parent, const char *name ) :
QMainWindow( parent, name ),
@ -310,7 +310,7 @@ MainWin::versionSLOT()
msg += qVersion();
msg += " from Trolltech AS Norway <font color=blue><u>www.trolltech.com</u></font>"
" and is licensed under <b>GPL</b>.</div><br>"
"&copy; 2001, 2002 Matthias Toussaint &nbsp;-&nbsp;&nbsp;<font color=blue><u>qtdmm@mtoussaint.de</u></font>"
"&copy; 2001-2005 Matthias Toussaint &nbsp;-&nbsp;&nbsp;<font color=blue><u>qtdmm@mtoussaint.de</u></font>"
"<p><br>The icons (except the DMM icon) are taken from the KDE project.<p>";
QMessageBox version( tr("QtDMM: Welcome!" ),
@ -361,13 +361,7 @@ MainWin::createToolBars()
void
MainWin::createMenu()
{
QToolBar *tb = new QToolBar( this );
QMenuBar *menu = new QMenuBar( tb );
menu->setFrameStyle( QFrame::NoFrame );
tb->setStretchableWidget( menu );
addToolBar( tb, tr("Menubar"), QMainWindow::Top, false );
setDockEnabled( tb, Left, false );
setDockEnabled( tb, Right, false );
QMenuBar *menu = menuBar();
QPopupMenu *file = new QPopupMenu( menu );
m_exportAction->addTo( file );

View File

@ -1,494 +0,0 @@
/****************************************************************************
** $Id: qprocess.cpp,v 1.3 2002/10/11 20:08:59 mt Exp $
**
** Implementation of QProcess class
**
** Created : 20000905
**
** Copyright (C) 1992-2000 Trolltech AS. All rights reserved.
**
** This file is part of the kernel module of the Qt GUI Toolkit.
**
** This file may be distributed under the terms of the Q Public License
** as defined by Trolltech AS of Norway and appearing in the file
** LICENSE.QPL included in the packaging of this file.
**
** This file may be distributed and/or modified under the terms of the
** GNU General Public License version 2 as published by the Free Software
** Foundation and appearing in the file LICENSE.GPL included in the
** packaging of this file.
**
** Licensees holding valid Qt Enterprise Edition or Qt Professional Edition
** licenses may use this file in accordance with the Qt Commercial License
** Agreement provided with the Software.
**
** This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE
** WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
**
** See http://www.trolltech.com/pricing.html or email sales@trolltech.com for
** information about Qt Commercial License Agreements.
** See http://www.trolltech.com/qpl/ for QPL licensing information.
** See http://www.trolltech.com/gpl/ for GPL licensing information.
**
** Contact info@trolltech.com if any conditions of this licensing are
** not clear to you.
**
**********************************************************************/
#include <stdio.h>
#include <stdlib.h>
#include "qprocess.h"
#ifndef QT_NO_PROCESS
#include "qapplication.h"
//#define QPROCESS_DEBUG
/*!
\class QProcess qprocess.h
\brief The QProcess class is used to start external programs and to
communicate with them.
\ingroup misc
You can write to standard input of the started program. You can read the
output of the program on standard output and standard error. You are notified
when the program exits.
There are two different ways to run a process: If you use start(), you have
full control over the process; you can write to the standard input via the
writeToStdin() slots whenever you want, and you can close standard input via
the closeStdin() slot.
If you know the data that should be written to the standard input of the
process already when you want to run the process, you can use the launch()
functions instead. These functions take the data that should be written to
standard input as an argument, write it to standard input and automatically
close standard input if all data was written.
If you use a launch() function to run the process, you should not use the
slots writeToStdin() and closeStdin(), since the result is not well-defined.
Example: If you want to start the \c uic command (Qt commandline tool used
with the Qt Designer) and make some operations on the output (the \c uic
outputs the code it generates to standard output by default). Consider the
case, that you want to start it with the command line options "-tr i18n" on
the file "small dialog.ui" (notice the space in the filename). On the command
line you would do that with
\code
uic -tr i18n "small dialog.ui"
\endcode
\walkthrough process/process.cpp
A code snippet for this with the QProcess class could look like this:
\skipto UicManager::UicManager()
\printline UicManager::UicManager()
\printline {
\skipto proc = new QProcess( this );
\printline proc = new QProcess( this );
\skipto proc->addArgument( "uic" );
\printuntil this, SLOT(readFromStdout()) );
\skipto if ( !proc->start() ) {
\printuntil // error handling
\skipto }
\printline }
\printline }
\skipto void UicManager::readFromStdout()
\printuntil // Keep in mind that the data might be reported in chunks.
\skipto }
\printline }
Please note that you need the quotes for the file on the command line, but
you must not give the quotes to the QProcess: the command line shell
processes the string and splits it into the arguments, but the QProcess class
does not do this processing.
The readyReadStdout() signal is emitted when there is new data on standard
output. This happens asynchronous: you don't know if more data will arrive
later. In the above example you could connect the processExited() signal to
the slot UicManager::readFromStdout() instead. If you do so, you are sure
that all data is available when the slot is called. On the other hand, you
must wait until the process has finished before doing any processing. Which
approach is best, depends highly on the requirements of your application.
\sa QSocket
*/
/*!
Constructs a QProcess object. The parameters \a parent and \a name are passed
to the QObject constructor.
\sa setArguments() addArgument() start()
*/
QProcess::QProcess( QObject *parent, const char *name )
: QObject( parent, name ), ioRedirection( FALSE ), notifyOnExit( FALSE ),
wroteToStdinConnected( FALSE )
{
init();
}
/*!
Constructs a QProcess with \a arg0 as the command to be executed. The
parameters \a parent and \a name are passed to the QObject constructor.
The process is not started. You have to call start() explicitly to start the
process.
\sa setArguments() addArgument() start()
*/
QProcess::QProcess( const QString& arg0, QObject *parent, const char *name )
: QObject( parent, name ), ioRedirection( FALSE ), notifyOnExit( FALSE ),
wroteToStdinConnected( FALSE )
{
init();
addArgument( arg0 );
}
/*!
Constructs a QProcess with \a args as the arguments of the process. The first
element in the list is the command to be executed. The other elements in the
list are the arguments to this command. The parameters \a parent and \a name
are passed to the QObject constructor.
The process is not started. You have to call start() explicitly to start the
process.
\sa setArguments() addArgument() start()
*/
QProcess::QProcess( const QStringList& args, QObject *parent, const char *name )
: QObject( parent, name ), ioRedirection( FALSE ), notifyOnExit( FALSE ),
wroteToStdinConnected( FALSE )
{
init();
setArguments( args );
}
/*!
Returns the list of arguments that are set for the process. Arguments can be
specified with the constructor or with the functions setArguments() and
addArgument().
\sa setArguments() addArgument()
*/
QStringList QProcess::arguments() const
{
return _arguments;
}
/*!
Sets \a args as the arguments for the process. The first element in the list
is the command to be executed. The other elements in the list are the
arguments to this command.
Arguments that were previously set, are deleted first.
\sa arguments() addArgument()
*/
void QProcess::setArguments( const QStringList& args )
{
_arguments = args;
}
/*!
Adds \a arg to the end of the existing list of arguments.
The first element in the list of arguments is the command to be executed; the
following elements are the arguments to this command.
\sa arguments() setArguments()
*/
void QProcess::addArgument( const QString& arg )
{
_arguments.append( arg );
}
/*!
Returns the working directory that was set with setWorkingDirectory().
\sa setWorkingDirectory()
*/
QDir QProcess::workingDirectory() const
{
return workingDir;
}
/*!
Sets \a dir as the working directory for a process. This does not affect
running processes; only processes that are started afterwards are affected.
Setting the working directory is especially useful for processes that try to
access files with relative filenames.
\sa workingDirectory() start()
*/
void QProcess::setWorkingDirectory( const QDir& dir )
{
workingDir = dir;
}
/*!
Returns TRUE if the process has exited normally, otherwise FALSE. This
implies that this function returns FALSE if the process is running.
\sa isRunning() exitStatus() processExited()
*/
bool QProcess::normalExit() const
{
// isRunning() has the side effect that it determines the exit status!
if ( isRunning() )
return FALSE;
else
return exitNormal;
}
/*!
Returns the exit status of the process. This function returns immediately and
does not wait until the process is finished. In the case that the process is
running, this function returns 0.
If normalExit() is FALSE, this function returns 0. So you should check the
return value of normalExit() before relying on this value.
\sa normalExit() processExited()
*/
int QProcess::exitStatus() const
{
// isRunning() has the side effect that it determines the exit status!
if ( isRunning() )
return 0;
else
return exitStat;
}
/*!
Reads the data that the process has written to standard output. When new data was
written to standard output, the class emits the signal readyReadStdout().
If there is no data to read, this function returns a QByteArray of size 0: it
does not wait until there is something to read.
\sa readyReadStdout() readStderr() writeToStdin()
*/
QByteArray QProcess::readStdout()
{
QByteArray buf = bufStdout.copy();
bufStdout.resize( 0 );
return buf;
}
/*!
Reads the data that the process has written to standard error. When new data was
written to standard error, the class emits the signal readyReadStderr().
If there is no data to read, this function returns a QByteArray of size 0: it
does not wait until there is something to read.
\sa readyReadStderr() readStdout() writeToStdin()
*/
QByteArray QProcess::readStderr()
{
QByteArray buf = bufStderr.copy();
bufStderr.resize( 0 );
return buf;
}
/*!
Runs the process and writes the data \a buf to standard input of the process.
If all data is written to standard input, it closes standard input. The
command is searched in the path for executable programs; you can also use an
absolute path to the command.
Returns TRUE if the process could be started, otherwise FALSE.
Notice that you should not use the slots writeToStdin() and closeStdin() on
processes started with launch(), since the result is not well-defined. If you
need these slots, use start() instead.
The process may or may not read this data.
You can call this function when a process that was started with this instance
still runs. In this case, it closes standard input of that process and it
deletes pending data - you loose all control over that process, but the
process is not terminated. This applies also if the process could not be
started. (On operating systems that have zombie processes, Qt will also
wait() on the old process.)
\sa start()
*/
bool QProcess::launch( const QByteArray& buf )
{
if ( start() ) {
if ( !buf.isEmpty() ) {
connect( this, SIGNAL(wroteToStdin()),
this, SLOT(closeStdinLaunch()) );
writeToStdin( buf );
} else {
closeStdin();
}
return TRUE;
} else {
return FALSE;
}
}
/*! \overload
The data \a buf is written to standard input with writeToStdin(): so this
function writes the QString::local8Bit() representation of the string.
*/
bool QProcess::launch( const QString& buf )
{
if ( start() ) {
if ( !buf.isEmpty() ) {
connect( this, SIGNAL(wroteToStdin()),
this, SLOT(closeStdinLaunch()) );
writeToStdin( buf );
} else {
closeStdin();
}
return TRUE;
} else {
return FALSE;
}
}
/*!
This private slot is used by the launch() functions to close standard input.
*/
void QProcess::closeStdinLaunch()
{
disconnect( this, SIGNAL(wroteToStdin()),
this, SLOT(closeStdinLaunch()) );
closeStdin();
}
/*!
\fn void QProcess::readyReadStdout()
This signal is emitted when the process wrote data to standard output.
You can read the data with readStdout().
\sa readStdout() readyReadStderr()
*/
/*!
\fn void QProcess::readyReadStderr()
This signal is emitted when the process wrote data to standard error.
You can read the data with readStderr().
\sa readStderr() readyReadStdout()
*/
/*!
\fn void QProcess::processExited()
This signal is emitted when the process has exited.
\sa isRunning() normalExit() exitStatus() start() launch()
*/
/*!
\fn void QProcess::wroteToStdin()
This signal is emitted if the data send to standard input (via
writeToStdin()) was actually written to the process. This does not
imply that the process really read the data, since this class only detects
when it was able to write the data to the operating system. But it is now
safe to close standard input without loosing pending data.
\sa writeToStdin() closeStdin()
*/
/*! \overload
The string \a buf is handled as a text: what is written to standard input is
the QString::local8Bit() representation.
*/
void QProcess::writeToStdin( const QString& buf )
{
QByteArray tmp = buf.local8Bit();
tmp.resize( buf.length() );
writeToStdin( tmp );
}
/*
* Under Windows the implementation is not so nice: it is not that easy to
* detect when one of the signals should be emitted; therefore there are some
* timers that query the information.
* To keep it a little efficient, use the timers only when they are needed.
* They are needed, if you are interested in the signals. So use
* connectNotify() and disconnectNotify() to keep track of your interest.
*/
/*! \reimp
*/
void QProcess::connectNotify( const char * signal )
{
#if defined(QPROCESS_DEBUG)
qDebug( "QProcess::connectNotify(): signal %s has been connected", signal );
#endif
if ( !ioRedirection )
if ( qstrcmp( signal, SIGNAL(readyReadStdout()) )==0 ||
qstrcmp( signal, SIGNAL(readyReadStderr()) )==0
) {
#if defined(QPROCESS_DEBUG)
qDebug( "QProcess::connectNotify(): set ioRedirection to TRUE" );
#endif
setIoRedirection( TRUE );
return;
}
if ( !notifyOnExit && qstrcmp( signal, SIGNAL(processExited()) )==0 ) {
#if defined(QPROCESS_DEBUG)
qDebug( "QProcess::connectNotify(): set notifyOnExit to TRUE" );
#endif
setNotifyOnExit( TRUE );
return;
}
if ( !wroteToStdinConnected && qstrcmp( signal, SIGNAL(wroteToStdin()) )==0 ) {
#if defined(QPROCESS_DEBUG)
qDebug( "QProcess::connectNotify(): set wroteToStdinConnected to TRUE" );
#endif
setWroteStdinConnected( TRUE );
return;
}
}
/*! \reimp
*/
void QProcess::disconnectNotify( const char * )
{
if ( ioRedirection &&
receivers( SIGNAL(readyReadStdout()) ) ==0 &&
receivers( SIGNAL(readyReadStderr()) ) ==0
) {
#if defined(QPROCESS_DEBUG)
qDebug( "QProcess::disconnectNotify(): set ioRedirection to FALSE" );
#endif
setIoRedirection( FALSE );
}
if ( notifyOnExit && receivers( SIGNAL(processExited()) ) == 0 ) {
#if defined(QPROCESS_DEBUG)
qDebug( "QProcess::disconnectNotify(): set notifyOnExit to FALSE" );
#endif
setNotifyOnExit( FALSE );
}
if ( wroteToStdinConnected && receivers( SIGNAL(wroteToStdin()) ) == 0 ) {
#if defined(QPROCESS_DEBUG)
qDebug( "QProcess::disconnectNotify(): set wroteToStdinConnected to FALSE" );
#endif
setWroteStdinConnected( FALSE );
}
}
#endif // QT_NO_PROCESS

View File

@ -1,141 +0,0 @@
/****************************************************************************
** $Id: qprocess.h,v 1.3 2002/10/11 20:08:59 mt Exp $
**
** Implementation of QProcess class
**
** Created : 20000905
**
** Copyright (C) 1992-2000 Trolltech AS. All rights reserved.
**
** This file is part of the kernel module of the Qt GUI Toolkit.
**
** This file may be distributed under the terms of the Q Public License
** as defined by Trolltech AS of Norway and appearing in the file
** LICENSE.QPL included in the packaging of this file.
**
** This file may be distributed and/or modified under the terms of the
** GNU General Public License version 2 as published by the Free Software
** Foundation and appearing in the file LICENSE.GPL included in the
** packaging of this file.
**
** Licensees holding valid Qt Enterprise Edition or Qt Professional Edition
** licenses may use this file in accordance with the Qt Commercial License
** Agreement provided with the Software.
**
** This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE
** WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
**
** See http://www.trolltech.com/pricing.html or email sales@trolltech.com for
** information about Qt Commercial License Agreements.
** See http://www.trolltech.com/qpl/ for QPL licensing information.
** See http://www.trolltech.com/gpl/ for GPL licensing information.
**
** Contact info@trolltech.com if any conditions of this licensing are
** not clear to you.
**
**********************************************************************/
#ifndef QPROCESS_H
#define QPROCESS_H
#define Q_OS_UNIX
#ifndef QT_H
#include "qobject.h"
#include "qstringlist.h"
#include "qdir.h"
#endif // QT_H
#ifndef QT_NO_PROCESS
class QProcessPrivate;
class Q_EXPORT QProcess : public QObject
{
Q_OBJECT
public:
QProcess( QObject *parent=0, const char *name=0 );
QProcess( const QString& arg0, QObject *parent=0, const char *name=0 );
QProcess( const QStringList& args, QObject *parent=0, const char *name=0 );
~QProcess();
// set and get the arguments and working directory
QStringList arguments() const;
virtual void setArguments( const QStringList& args );
virtual void addArgument( const QString& arg );
QDir workingDirectory() const;
virtual void setWorkingDirectory( const QDir& dir );
// control the execution
virtual bool start();
virtual bool launch( const QString& buf );
virtual bool launch( const QByteArray& buf );
void hangUp() const;
void kill() const;
// inquire the status
bool isRunning() const;
bool normalExit() const;
int exitStatus() const;
// reading
virtual QByteArray readStdout();
virtual QByteArray readStderr();
signals:
void readyReadStdout();
void readyReadStderr();
void processExited();
void wroteToStdin();
public slots:
// input
virtual void writeToStdin( const QByteArray& buf );
virtual void writeToStdin( const QString& buf );
virtual void closeStdin();
protected: // ### or private?
void connectNotify( const char * signal );
void disconnectNotify( const char * signal );
private:
void setIoRedirection( bool value );
void setNotifyOnExit( bool value );
void setWroteStdinConnected( bool value );
void init();
void reset();
#if defined(Q_OS_WIN32)
uint readStddev( HANDLE dev, char *buf, uint bytes );
#endif
private slots:
void socketRead( int fd );
void socketWrite( int fd );
void timeout();
void closeStdinLaunch();
private:
QProcessPrivate *d;
QDir workingDir;
QStringList _arguments;
QByteArray bufStdout;
QByteArray bufStderr;
int exitStat; // exit status
bool exitNormal; // normal exit?
bool ioRedirection; // automatically set be (dis)connectNotify
bool notifyOnExit; // automatically set be (dis)connectNotify
bool wroteToStdinConnected; // automatically set be (dis)connectNotify
friend class QProcessPrivate;
#if defined(Q_OS_UNIX)
friend class QProcessManager;
friend class QProc;
#endif
};
#endif // QT_NO_PROCESS
#endif // QPROCESS_H

View File

@ -1,812 +0,0 @@
/****************************************************************************
** $Id: qprocess_unix.cpp,v 1.4 2002/10/13 15:48:42 mt Exp $
**
** Implementation of QProcess class for Unix
**
** Created : 20000905
**
** Copyright (C) 1992-2000 Trolltech AS. All rights reserved.
**
** This file is part of the kernel module of the Qt GUI Toolkit.
**
** This file may be distributed under the terms of the Q Public License
** as defined by Trolltech AS of Norway and appearing in the file
** LICENSE.QPL included in the packaging of this file.
**
** This file may be distributed and/or modified under the terms of the
** GNU General Public License version 2 as published by the Free Software
** Foundation and appearing in the file LICENSE.GPL included in the
** packaging of this file.
**
** Licensees holding valid Qt Enterprise Edition or Qt Professional Edition
** licenses may use this file in accordance with the Qt Commercial License
** Agreement provided with the Software.
**
** This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE
** WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
**
** See http://www.trolltech.com/pricing.html or email sales@trolltech.com for
** information about Qt Commercial License Agreements.
** See http://www.trolltech.com/qpl/ for QPL licensing information.
** See http://www.trolltech.com/gpl/ for GPL licensing information.
**
** Contact info@trolltech.com if any conditions of this licensing are
** not clear to you.
**
**********************************************************************/
#include "qprocess_unix.h"
#include "qprocess.h"
#ifndef QT_NO_PROCESS
#include "qapplication.h"
#include "qqueue.h"
#include "qlist.h"
#include "qsocketnotifier.h"
#include "qtimer.h"
#include "qcleanuphandler.h"
#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>
#include <fcntl.h>
#include <errno.h>
#include <signal.h>
#include <sys/wait.h>
#include <sys/socket.h>
#include <sys/types.h>
//#define QT_QPROCESS_DEBUG
QCleanupHandler<QProcessManager> qprocess_cleanup_procmanager;
QProcessManager::QProcessManager()
{
procList = new QList<QProc>;
procList->setAutoDelete( TRUE );
// The SIGCHLD handler writes to a socket to tell the manager that
// something happened. This is done to get the processing in sync with the
// event reporting.
if ( ::socketpair( AF_UNIX, SOCK_STREAM, 0, sigchldFd ) ) {
sigchldFd[0] = 0;
sigchldFd[1] = 0;
} else {
#if defined(QT_QPROCESS_DEBUG)
qDebug( "QProcessManager: install socket notifier (%d)", sigchldFd[1] );
#endif
QSocketNotifier *sn = new QSocketNotifier( sigchldFd[1],
QSocketNotifier::Read, this );
connect( sn, SIGNAL(activated(int)),
this, SLOT(sigchldHnd(int)) );
sn->setEnabled( TRUE );
}
// install a SIGCHLD handler and ignore SIGPIPE
struct sigaction act;
#if defined(QT_QPROCESS_DEBUG)
qDebug( "QProcessManager: install a sigchild handler" );
#endif
act.sa_handler = qt_C_sigchldHnd;
sigemptyset( &(act.sa_mask) );
sigaddset( &(act.sa_mask), SIGCHLD );
act.sa_flags = SA_NOCLDSTOP;
#if defined(SA_RESTART)
act.sa_flags |= SA_RESTART;
#endif
if ( sigaction( SIGCHLD, &act, &oldactChld ) != 0 )
qWarning( "Error installing SIGCHLD handler" );
#if defined(QT_QPROCESS_DEBUG)
qDebug( "QProcessManager: install a sigpipe handler (SIG_IGN)" );
#endif
act.sa_handler = qt_C_sigign;
sigemptyset( &(act.sa_mask) );
sigaddset( &(act.sa_mask), SIGPIPE );
act.sa_flags = 0;
if ( sigaction( SIGPIPE, &act, &oldactPipe ) != 0 )
qWarning( "Error installing SIGPIPE handler" );
qprocess_cleanup_procmanager.add( this );
}
QProcessManager::~QProcessManager()
{
delete procList;
if ( sigchldFd[0] != 0 )
::close( sigchldFd[0] );
if ( sigchldFd[1] != 0 )
::close( sigchldFd[1] );
// restore SIGCHLD handler
#if defined(QT_QPROCESS_DEBUG)
qDebug( "QProcessManager: restore old sigchild handler" );
#endif
if ( sigaction( SIGCHLD, &oldactChld, 0 ) != 0 )
qWarning( "Error restoring SIGCHLD handler" );
#if defined(QT_QPROCESS_DEBUG)
qDebug( "QProcessManager: restore old sigpipe handler" );
#endif
if ( sigaction( SIGPIPE, &oldactPipe, 0 ) != 0 )
qWarning( "Error restoring SIGPIPE handler" );
}
void QProcessManager::append( QProc *p )
{
procList->append( p );
#if defined(QT_QPROCESS_DEBUG)
qDebug( "QProcessManager: append process (procList.count(): %d)", procList->count() );
#endif
}
void QProcessManager::remove( QProc *p )
{
procList->remove( p );
#if defined(QT_QPROCESS_DEBUG)
qDebug( "QProcessManager: remove process (procList.count(): %d)", procList->count() );
#endif
if ( procList->count() == 0 ) {
QTimer::singleShot( 0, this, SLOT(removeMe()) );
}
}
void QProcessManager::removeMe()
{
QProcessPrivate::procManager = 0;
qprocess_cleanup_procmanager.remove( this );
delete this;
}
void QProcessManager::sigchldHnd( int fd )
{
char tmp;
::read( fd, &tmp, sizeof(tmp) );
#if defined(QT_QPROCESS_DEBUG)
qDebug( "QProcessManager::sigchldHnd()" );
#endif
QProc *proc;
QProcess *process;
bool removeProc;
proc = procList->first();
while ( proc != 0 ) {
removeProc = FALSE;
process = proc->process;
if ( process != 0 ) {
if ( !process->isRunning() ) {
#if defined(QT_QPROCESS_DEBUG)
qDebug( "QProcessManager::sigchldHnd(): process exited (QProcess available)" );
#endif
// read pending data
process->socketRead( process->d->socketStdout[0] );
process->socketRead( process->d->socketStderr[0] );
if ( process->notifyOnExit )
emit process->processExited();
removeProc = TRUE;
}
} else {
int status;
if ( ::waitpid( proc->pid, &status, WNOHANG ) == proc->pid ) {
#if defined(QT_QPROCESS_DEBUG)
qDebug( "QProcessManager::sigchldHnd(): process exited (QProcess not available)" );
#endif
removeProc = TRUE;
}
}
if ( removeProc ) {
QProc *oldproc = proc;
proc = procList->next();
remove( oldproc );
} else {
proc = procList->next();
}
}
}
/***********************************************************************
*
* QProcessPrivate
*
**********************************************************************/
QProcessManager *QProcessPrivate::procManager = 0;
QProcessPrivate::QProcessPrivate()
{
#if defined(QT_QPROCESS_DEBUG)
qDebug( "QProcessPrivate: Constructor" );
#endif
stdinBufRead = 0;
notifierStdin = 0;
notifierStdout = 0;
notifierStderr = 0;
socketStdin[0] = 0;
socketStdin[1] = 0;
socketStdout[0] = 0;
socketStdout[1] = 0;
socketStderr[0] = 0;
socketStderr[1] = 0;
exitValuesCalculated = FALSE;
proc = 0;
}
QProcessPrivate::~QProcessPrivate()
{
#if defined(QT_QPROCESS_DEBUG)
qDebug( "QProcessPrivate: Destructor" );
#endif
if ( proc != 0 )
proc->process = 0;
while ( !stdinBuf.isEmpty() ) {
delete stdinBuf.dequeue();
}
if ( notifierStdin ) {
delete notifierStdin;
}
if ( notifierStdout ) {
delete notifierStdout;
}
if ( notifierStderr ) {
delete notifierStderr;
}
if( socketStdin[1] != 0 )
::close( socketStdin[1] );
if( socketStdout[0] != 0 )
::close( socketStdout[0] );
if( socketStderr[0] != 0 )
::close( socketStderr[0] );
}
/*
Closes all open sockets in the child process that are not needed by the child
process. Otherwise one child may have an open socket on standard input, etc.
of another child.
*/
void QProcessPrivate::closeOpenSocketsForChild()
{
::close( socketStdin[1] );
::close( socketStdout[0] );
::close( socketStderr[0] );
if ( procManager != 0 ) {
if ( procManager->sigchldFd[0] != 0 )
::close( procManager->sigchldFd[0] );
if ( procManager->sigchldFd[1] != 0 )
::close( procManager->sigchldFd[1] );
// delete also the sockets from other QProcess instances
QProc *proc;
QProcess *process;
for ( proc=procManager->procList->first(); proc!=0; proc=procManager->procList->next() ) {
process = proc->process;
if ( process != 0 ) {
::close( process->d->socketStdin[1] );
::close( process->d->socketStdout[0] );
::close( process->d->socketStderr[0] );
}
}
}
}
void QProcessPrivate::newProc( pid_t pid, QProcess *process )
{
proc = new QProc( pid, process );
if ( procManager == 0 ) {
procManager = new QProcessManager;
}
// the QProcessManager takes care of deleting the QProc instances
procManager->append( proc );
}
/***********************************************************************
*
* sigchld handler callback
*
**********************************************************************/
#if defined(SIGNAL_HACK)
void qt_C_sigchldHnd()
#else
void qt_C_sigchldHnd( int )
#endif
{
if ( QProcessPrivate::procManager == 0 )
return;
if ( QProcessPrivate::procManager->sigchldFd[0] == 0 )
return;
char a = 1;
::write( QProcessPrivate::procManager->sigchldFd[0], &a, sizeof(a) );
}
/***********************************************************************
*
* QProcess
*
**********************************************************************/
/*!
This private class does basic initialization.
*/
void QProcess::init()
{
d = new QProcessPrivate();
exitStat = 0;
exitNormal = FALSE;
}
/*!
This private class resets the process variables, etc. so that it can be used
for another process to start.
*/
void QProcess::reset()
{
delete d;
d = new QProcessPrivate();
exitStat = 0;
exitNormal = FALSE;
bufStdout.resize( 0 );
bufStderr.resize( 0 );
}
/*!
Destructs the class.
If the process is running, it is NOT terminated! Standard input, standard
output and standard error of the process are closed.
\sa hangUp() kill()
*/
QProcess::~QProcess()
{
delete d;
}
/*!
Tries to run a process for the command and arguments that were specified with
setArguments(), addArgument() or that were specified in the constructor. The
command is searched in the path for executable programs; you can also use an
absolute path to the command.
Returns TRUE if the process could be started, otherwise FALSE.
You can write data to standard input of the process with
writeToStdin(), you can close standard input with closeStdin() and you can
terminate the process hangUp() resp. kill().
You can call this function even when there already is a running
process in this object. In this case, QProcess closes standard input
of the old process and deletes pending data, i.e., you loose all
control over that process, but the process is not terminated. This applies
also if the process could not be started. (On operating systems that have
zombie processes, Qt will also wait() on the old process.)
\sa launch() closeStdin()
*/
bool QProcess::start()
{
#if defined(QT_QPROCESS_DEBUG)
qDebug( "QProcess::start()" );
#endif
reset();
// open sockets for piping
if ( ::socketpair( AF_UNIX, SOCK_STREAM, 0, d->socketStdin ) ) {
return FALSE;
}
if ( ::socketpair( AF_UNIX, SOCK_STREAM, 0, d->socketStdout ) ) {
return FALSE;
}
if ( ::socketpair( AF_UNIX, SOCK_STREAM, 0, d->socketStderr ) ) {
return FALSE;
}
// the following pipe is only used to determine if the process could be
// started
int fd[2];
if ( pipe( fd ) < 0 ) {
// non critical error, go on
fd[0] = 0;
fd[1] = 0;
}
// construct the arguments for exec
QCString *arglistQ = new QCString[ _arguments.count() + 1 ];
const char** arglist = new const char*[ _arguments.count() + 1 ];
int i = 0;
for ( QStringList::Iterator it = _arguments.begin(); it != _arguments.end(); ++it ) {
arglistQ[i] = (*it).local8Bit();
arglist[i] = arglistQ[i];
#if defined(QT_QPROCESS_DEBUG)
qDebug( "QProcess::start(): arg %d = %s", i, arglist[i] );
#endif
i++;
}
arglist[i] = 0;
// fork and exec
QApplication::flushX();
pid_t pid = fork();
if ( pid == 0 ) {
// child
d->closeOpenSocketsForChild();
::dup2( d->socketStdin[0], STDIN_FILENO );
::dup2( d->socketStdout[1], STDOUT_FILENO );
::dup2( d->socketStderr[1], STDERR_FILENO );
::chdir( workingDir.absPath().latin1() );
if ( fd[0] )
::close( fd[0] );
if ( fd[1] )
::fcntl( fd[1], F_SETFD, FD_CLOEXEC ); // close on exec shows sucess
::execvp( arglist[0], (char*const*)arglist ); // ### cast not nice
if ( fd[1] ) {
char buf = 0;
::write( fd[1], &buf, 1 );
::close( fd[1] );
}
::exit( -1 );
} else if ( pid == -1 ) {
// error forking
goto error;
}
// test if exec was successful
if ( fd[1] )
close( fd[1] );
if ( fd[0] ) {
char buf;
while ( TRUE ) {
int n = ::read( fd[0], &buf, 1 );
if ( n==1 ) {
// socket was not closed => error
goto error;
} else if ( n==-1 ) {
if ( errno==EAGAIN || errno==EINTR )
// try it again
continue;
}
break;
}
}
d->newProc( pid, this );
::close( d->socketStdin[0] );
::close( d->socketStdout[1] );
::close( d->socketStderr[1] );
// setup notifiers for the sockets
d->notifierStdin = new QSocketNotifier( d->socketStdin[1],
QSocketNotifier::Write );
d->notifierStdout = new QSocketNotifier( d->socketStdout[0],
QSocketNotifier::Read );
d->notifierStderr = new QSocketNotifier( d->socketStderr[0],
QSocketNotifier::Read );
connect( d->notifierStdin, SIGNAL(activated(int)),
this, SLOT(socketWrite(int)) );
connect( d->notifierStdout, SIGNAL(activated(int)),
this, SLOT(socketRead(int)) );
connect( d->notifierStderr, SIGNAL(activated(int)),
this, SLOT(socketRead(int)) );
if ( !d->stdinBuf.isEmpty() ) {
d->notifierStdin->setEnabled( TRUE );
}
if ( ioRedirection ) {
d->notifierStdout->setEnabled( TRUE );
d->notifierStderr->setEnabled( TRUE );
}
// cleanup and return
delete[] arglistQ;
delete[] arglist;
return TRUE;
error:
::close( d->socketStdin[1] );
::close( d->socketStdout[0] );
::close( d->socketStderr[0] );
::close( d->socketStdin[0] );
::close( d->socketStdout[1] );
::close( d->socketStderr[1] );
d->socketStdin[0] = 0;
d->socketStdin[1] = 0;
d->socketStdout[0] = 0;
d->socketStdout[1] = 0;
d->socketStderr[0] = 0;
d->socketStderr[1] = 0;
::close( fd[0] );
::close( fd[1] );
delete[] arglistQ;
delete[] arglist;
return FALSE;
}
/*!
Asks the process to terminate. Processes can ignore this wish. If you want to
be sure that the process really terminates, you must use kill()
instead.
The function returns immediately: it does not wait until the process has
finished. When the process really exited, the signal processExited() is
emitted.
\sa kill() processExited()
*/
void QProcess::hangUp() const
{
if ( d->proc != 0 )
::kill( d->proc->pid, SIGHUP );
}
/*!
Terminates the process. This is not a safe way to end a process since the
process will not be able to do cleanup. hangUp() is the saver way to do it,
but processes might ignore a hangUp().
The function returns immediately: it does not wait until the process has
finished. When the process really exited, the signal processExited() is
emitted.
\sa hangUp() processExited()
*/
void QProcess::kill() const
{
if ( d->proc != 0 )
::kill( d->proc->pid, SIGKILL );
}
/*!
Returns TRUE if the process is running, otherwise FALSE.
\sa normalExit() exitStatus() processExited()
*/
bool QProcess::isRunning() const
{
if ( d->exitValuesCalculated ) {
#if defined(QT_QPROCESS_DEBUG)
qDebug( "QProcess::isRunning(): FALSE (already computed)" );
#endif
return FALSE;
}
if ( d->proc == 0 )
return FALSE;
int status;
if ( ::waitpid( d->proc->pid, &status, WNOHANG ) == d->proc->pid )
{
// compute the exit values
QProcess *that = (QProcess*)this; // mutable
that->exitNormal = WIFEXITED( status ) != 0;
if ( exitNormal ) {
that->exitStat = WEXITSTATUS( status );
}
d->exitValuesCalculated = TRUE;
#if defined(QT_QPROCESS_DEBUG)
qDebug( "QProcess::isRunning(): FALSE" );
#endif
return FALSE;
}
#if defined(QT_QPROCESS_DEBUG)
qDebug( "QProcess::isRunning(): TRUE" );
#endif
return TRUE;
}
/*!
Writes the data \a buf to the standard input of the process. The process may
or may not read this data.
This function returns immediately; the QProcess class might write the data at
a later point (you have to enter the event loop for that). When all the data
is written to the process, the signal wroteToStdin() is emitted. This does
not mean that the process really read the data, since this class only detects
when it was able to write the data to the operating system.
\sa wroteToStdin() closeStdin() readStdout() readStderr()
*/
void QProcess::writeToStdin( const QByteArray& buf )
{
#if defined(QT_QPROCESS_DEBUG)
// qDebug( "QProcess::writeToStdin(): write to stdin (%d)", d->socketStdin[1] );
#endif
d->stdinBuf.enqueue( new QByteArray(buf) );
if ( d->notifierStdin != 0 )
d->notifierStdin->setEnabled( TRUE );
}
/*!
Closes standard input of the process.
This function also deletes pending data that is not written to standard input
yet.
\sa wroteToStdin()
*/
void QProcess::closeStdin()
{
if ( d->socketStdin[1] !=0 ) {
while ( !d->stdinBuf.isEmpty() ) {
delete d->stdinBuf.dequeue();
}
if ( d->notifierStdin ) {
delete d->notifierStdin;
d->notifierStdin = 0;
}
if ( ::close( d->socketStdin[1] ) != 0 ) {
qWarning( "Could not close stdin of child process" );
}
#if defined(QT_QPROCESS_DEBUG)
qDebug( "QProcess::closeStdin(): stdin (%d) closed", d->socketStdin[1] );
#endif
d->socketStdin[1] = 0;
}
}
/*
This private slot is called when the process has outputted data to either
standard output or standard error.
*/
void QProcess::socketRead( int fd )
{
#if defined(QT_QPROCESS_DEBUG)
qDebug( "QProcess::socketRead(): %d", fd );
#endif
if ( fd == 0 )
return;
const int bufsize = 4096;
QByteArray *buffer=0;
uint oldSize;
int n;
if ( fd == d->socketStdout[0] ) {
buffer = &bufStdout;
} else if ( fd == d->socketStderr[0] ) {
buffer = &bufStderr;
}
// read data
oldSize = buffer->size();
buffer->resize( oldSize + bufsize );
n = ::read( fd, buffer->data()+oldSize, bufsize );
if ( n > 0 )
buffer->resize( oldSize + n );
else
buffer->resize( oldSize );
// eof or error?
if ( n == 0 || n == -1 ) {
if ( fd == d->socketStdout[0] ) {
#if defined(QT_QPROCESS_DEBUG)
qDebug( "QProcess::socketRead(): stdout (%d) closed", fd );
#endif
d->notifierStdout->setEnabled( FALSE );
delete d->notifierStdout;
d->notifierStdout = 0;
::close( d->socketStdout[0] );
d->socketStdout[0] = 0;
return;
} else if ( fd == d->socketStderr[0] ) {
#if defined(QT_QPROCESS_DEBUG)
qDebug( "QProcess::socketRead(): stderr (%d) closed", fd );
#endif
d->notifierStderr->setEnabled( FALSE );
delete d->notifierStderr;
d->notifierStderr = 0;
::close( d->socketStderr[0] );
d->socketStderr[0] = 0;
return;
}
}
// read all data that is available
while ( n == bufsize ) {
oldSize = buffer->size();
buffer->resize( oldSize + bufsize );
n = ::read( fd, buffer->data()+oldSize, bufsize );
if ( n > 0 )
buffer->resize( oldSize + n );
}
if ( fd == d->socketStdout[0] ) {
#if defined(QT_QPROCESS_DEBUG)
qDebug( "QProcess::socketRead(): %d bytes read from stdout (%d)",
buffer->size()-oldSize, fd );
#endif
emit readyReadStdout();
} else if ( fd == d->socketStderr[0] ) {
#if defined(QT_QPROCESS_DEBUG)
qDebug( "QProcess::socketRead(): %d bytes read from stderr (%d)",
buffer->size()-oldSize, fd );
#endif
emit readyReadStderr();
}
}
/*
This private slot is called when the process tries to read data from standard
input.
*/
void QProcess::socketWrite( int fd )
{
if ( fd != d->socketStdin[1] || d->socketStdin[1] == 0 )
return;
if ( d->stdinBuf.isEmpty() ) {
d->notifierStdin->setEnabled( FALSE );
return;
}
#if defined(QT_QPROCESS_DEBUG)
qDebug( "QProcess::socketWrite(): write to stdin (%d)", fd );
#endif
ssize_t ret = ::write( fd,
d->stdinBuf.head()->data() + d->stdinBufRead,
d->stdinBuf.head()->size() - d->stdinBufRead );
if ( ret > 0 )
d->stdinBufRead += ret;
if ( d->stdinBufRead == (ssize_t)d->stdinBuf.head()->size() ) {
d->stdinBufRead = 0;
delete d->stdinBuf.dequeue();
if ( wroteToStdinConnected && d->stdinBuf.isEmpty() )
emit wroteToStdin();
socketWrite( fd );
}
}
/*
This private slot is only used under Windows (but moc does not know about #if
defined()).
*/
void QProcess::timeout()
{
}
/*
This private function is used by connectNotify() and disconnectNotify() to
change the value of ioRedirection (and related behaviour)
*/
void QProcess::setIoRedirection( bool value )
{
ioRedirection = value;
if ( ioRedirection ) {
if ( d->notifierStdout )
d->notifierStdout->setEnabled( TRUE );
if ( d->notifierStderr )
d->notifierStderr->setEnabled( TRUE );
} else {
if ( d->notifierStdout )
d->notifierStdout->setEnabled( FALSE );
if ( d->notifierStderr )
d->notifierStderr->setEnabled( FALSE );
}
}
/*
This private function is used by connectNotify() and
disconnectNotify() to change the value of notifyOnExit (and related
behaviour)
*/
void QProcess::setNotifyOnExit( bool value )
{
notifyOnExit = value;
}
/*
This private function is used by connectNotify() and disconnectNotify() to
change the value of wroteToStdinConnected (and related behaviour)
*/
void QProcess::setWroteStdinConnected( bool value )
{
wroteToStdinConnected = value;
}
#endif // QT_NO_PROCESS

View File

@ -1,191 +0,0 @@
/****************************************************************************
** $Id: qprocess_unix.h,v 1.3 2002/10/11 20:08:59 mt Exp $
**
** Implementation of QProcess class for Unix
**
** Created : 20000905
**
** Copyright (C) 1992-2000 Trolltech AS. All rights reserved.
**
** This file is part of the kernel module of the Qt GUI Toolkit.
**
** This file may be distributed under the terms of the Q Public License
** as defined by Trolltech AS of Norway and appearing in the file
** LICENSE.QPL included in the packaging of this file.
**
** This file may be distributed and/or modified under the terms of the
** GNU General Public License version 2 as published by the Free Software
** Foundation and appearing in the file LICENSE.GPL included in the
** packaging of this file.
**
** Licensees holding valid Qt Enterprise Edition or Qt Professional Edition
** licenses may use this file in accordance with the Qt Commercial License
** Agreement provided with the Software.
**
** This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE
** WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
**
** See http://www.trolltech.com/pricing.html or email sales@trolltech.com for
** information about Qt Commercial License Agreements.
** See http://www.trolltech.com/qpl/ for QPL licensing information.
** See http://www.trolltech.com/gpl/ for GPL licensing information.
**
** Contact info@trolltech.com if any conditions of this licensing are
** not clear to you.
**
**********************************************************************/
#include "qprocess.h"
#ifndef QT_NO_PROCESS
#include "qapplication.h"
#include "qqueue.h"
#include "qlist.h"
#include "qsocketnotifier.h"
#include "qtimer.h"
#include "qcleanuphandler.h"
#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>
#include <fcntl.h>
#include <errno.h>
#include <signal.h>
#include <sys/wait.h>
#include <sys/socket.h>
#include <sys/types.h>
//#define QT_QPROCESS_DEBUG
#ifdef __MIPSEL__
#ifndef SOCK_DGRAM
#define SOCK_DGRAM 1
#endif
#ifndef SOCK_STREAM
#define SOCK_STREAM 2
#endif
#endif
#if defined(SIGNAL_HACK)
#undef SIGNAL_HACK
#endif
#if defined(Q_OS_MACX)
// these platforms work one way
#define SIGNAL_HACK
#elif defined(Q_CC_GNU) && ( defined(Q_OS_IRIX) || defined(Q_OS_SUN) )
// gcc on these platforms works above, but native compiler doesn't.
#define SIGNAL_HACK
#endif
#if defined(Q_C_CALLBACKS)
extern "C" {
#endif
// this looks like two unconnected platform differences that just
// happen to match up... perhaps we should use two defines, one
// for each yuckyness.
#if defined(SIGNAL_HACK)
static void qt_C_sigign() { (*SIG_IGN)(SIGPIPE); }
static void qt_C_sigchldHnd();
#else
#define qt_C_sigign SIG_IGN
static void qt_C_sigchldHnd( int );
#endif
#if defined(Q_C_CALLBACKS)
}
#endif
class QProc;
class QProcessManager;
class QProcessPrivate
{
public:
QProcessPrivate();
~QProcessPrivate();
void closeOpenSocketsForChild();
void newProc( pid_t pid, QProcess *process );
QQueue<QByteArray> stdinBuf;
QSocketNotifier *notifierStdin;
QSocketNotifier *notifierStdout;
QSocketNotifier *notifierStderr;
int socketStdin[2];
int socketStdout[2];
int socketStderr[2];
ssize_t stdinBufRead;
QProc *proc;
bool exitValuesCalculated;
static QProcessManager *procManager;
};
/***********************************************************************
*
* QProc
*
**********************************************************************/
/*
The class QProcess does not necessarily map exactly to the running
child processes: if the process is finished, the QProcess class may still be
there; furthermore a user can use QProcess to start more than one process.
The helper-class QProc has the semantics that one instance of this class maps
directly to a running child process.
*/
class QProc
{
public:
QProc( pid_t p, QProcess *proc=0 ) : pid(p), process(proc)
{
#if defined(QT_QPROCESS_DEBUG)
qDebug( "QProc: Constructor for pid %d and QProcess %p", pid, process );
#endif
}
~QProc()
{
#if defined(QT_QPROCESS_DEBUG)
qDebug( "QProc: Destructor for pid %d and QProcess %p", pid, process );
#endif
if ( process != 0 )
process->d->proc = 0;
}
pid_t pid;
QProcess *process;
};
/***********************************************************************
*
* QProcessManager
*
**********************************************************************/
class QProcessManager : public QObject
{
Q_OBJECT
public:
QProcessManager();
~QProcessManager();
void append( QProc *p );
void remove( QProc *p );
public slots:
void removeMe();
void sigchldHnd( int );
public:
struct sigaction oldactChld;
struct sigaction oldactPipe;
QList<QProc> *procList;
int sigchldFd[2];
};
#endif // QT_NO_PROCESS

24
src/qtcvs.out Normal file
View File

@ -0,0 +1,24 @@
Index: uitipdlg.ui
===================================================================
RCS file: /home/cvs/QtDMM/src/uitipdlg.ui,v
retrieving revision 1.1
diff -r1.1 uitipdlg.ui
14,15c14,15
< <width>485</width>
< <height>215</height>
---
> <width>505</width>
> <height>221</height>
126c126
< <pixmap>image0</pixmap>
---
> <pixmap>image1</pixmap>
130c130
< <bool>true</bool>
---
> <bool>false</bool>
294a295,298
> </image>
> <image>
> <name>image1</name>
> <data format="XPM.GZ" length="4607">789cd5d7c96edb301000d0bbbf42306f46112f71921a453fa1458f01821e649a34b538015af75014fdf770385a484924c7966aa04319d208d2f370a448ce72913c7ffb922c96b39fe7f49cf184abf447b238fc3a9d7ebf7cfffc67367fdc267a59eb65fe6136bf4b78f2f5ed55c036d3db6c6502d20cd3f54e4a480b4c371b4c4b48d75b18907248ef531890ee217dd8c1803485f449c280f408e9ee1106a40748f9eaf0919b9272936e61402a2095b2ae4a612a04a6125308339d91f10f0c7641788c4b8816710cbd3f25478bd88621f6c4b010d7a013880c1a7462bfe77e83936202238d198768a43732f01ec2e3618d1fdc079f5b19f5b9b6616fdfca70e752cf614c3fae33ecb90ccde756865d776b5cd78f31c614f7fa1486d54e67fb32a33bfe5f638a9e8e36486fb9b0417b53868d29de51531842070df11a4290119f2104fc4aeb22833f61bc73d186596240c470eac0c38f4311aea36e480008196d4ffb8052b8ce74048deada0e55d010cc201ec3ee42b774056528ac0294a0e16982aa185345e63752d6ed42ae03d7f59eac2a246838df3e64b0701dced9431754efadda31ca885ddbe61e68ae85ca9be8c82423cf958be474a3fec6cab0117b7e71034fe91939c968abd061ffad9b1d45d1742566f405548ac22031e3e825182b0a44c8c6d0b38b6e548494fa8157878bc4ef0f81554807e12d4230e029648ed748597a1192c13920dd4ac80643a304a3ec174236e0ac12a25f88dfa0fd4769cd8d5f6bd851197f3fcdde0148110f7b</data>

View File

@ -20,11 +20,13 @@
#include <readerthread.h>
#include <unistd.h>
#include <iostream.h>
#include <stdio.h>
#include <qapplication.h>
#include <qsocketnotifier.h>
#include <iostream>
ReaderThread::ReaderThread( QObject *receiver ) :
QThread(),
m_receiver( receiver ),
@ -52,16 +54,18 @@ ReaderThread::setFormat( ReadEvent::DataFormat format )
void
ReaderThread::setHandle( int handle )
{
delete m_notifier;
m_notifier = 0;
m_handle = handle;
if (-1 == m_handle)
{
m_status = ReaderThread::NotConnected;
m_readValue = false;
}
else
{
delete m_notifier;
m_notifier = new QSocketNotifier( m_handle, QSocketNotifier::Read );
connect( m_notifier, SIGNAL( activated(int) ),
@ -76,6 +80,7 @@ ReaderThread::run()
{
if (m_readValue)
{
//std::cerr << "going to read" << std::endl;
readDMM();
m_readValue = false;
}
@ -86,6 +91,7 @@ ReaderThread::run()
void
ReaderThread::startRead()
{
//std::cerr << "start read" << std::endl;
m_readValue = true;
m_sendRequest = true;
}
@ -93,6 +99,8 @@ ReaderThread::startRead()
void
ReaderThread::socketNotifierSLOT( int socket )
{
//std::cerr << "socket call" << std::endl;
if (m_handle != socket) return;
if (-1 == m_handle)
@ -136,7 +144,7 @@ ReaderThread::socketNotifierSLOT( int socket )
m_sendRequest = true;
m_length = 0;
QThread::postEvent( m_receiver,
QApplication::postEvent( m_receiver,
new ReadEvent( m_buffer, formatLength(), m_id, m_format ) );
m_id = (m_id+1) % m_numValues;

View File

@ -22,7 +22,6 @@
#include <qfile.h>
#include <qtextstream.h>
#include <qstringlist.h>
#include <iostream.h>
SimpleCfgGroup::SimpleCfgGroup( const QString & name ) :
groupName( name )

View File

@ -24,8 +24,6 @@ HEADERS = \
prefwidget.h \
printdlg.h \
qcleanuphandler.h \
qprocess.h \
qprocess_unix.h \
readerthread.h \
readevent.h \
recorderprefs.h \
@ -65,8 +63,6 @@ SOURCES = \
mainwin.cpp \
prefwidget.cpp \
printdlg.cpp \
qprocess.cpp \
qprocess_unix.cpp \
readerthread.cpp \
readevent.cpp \
recorderprefs.cpp \
@ -76,6 +72,6 @@ SOURCES = \
LIBS =
TARGET = qtdmm
VERSION = 0.8.2
VERSION = 0.8.3
DESTDIR = ../bin

View File

@ -31,7 +31,14 @@ const char *TipDlg::s_tipText[] = {
" the checkbox below this text. The tips can be switched "
"on again at any time"
" in the preferences dialog.",
"<font size=+2>QtDMM can't connect?</font><p>"
"Make shure you have read/write permission for the device"
" the multimeter is connected to. In doubt call a:<br>"
" <tt>chmod a+rw /dev/&lt;device&gt;</tt> (as root).<br>"
"<tt>&lt;device&gt;</tt> will be something like <tt>ttyS0</tt>"
" or <tt>usb/ttyUSB0</tt>. This depend on your configuration.",
"<font size=+2>Quick help</font><p>"
"Click on the context help button in the titlebar of the window."
" You can click any of the controls or windows of QtDMM to get"

1880
src/ui_config_mockup.ui Normal file

File diff suppressed because it is too large Load Diff

6055
src/uiconfigdlg.old.ui Normal file

File diff suppressed because it is too large Load Diff

374
src/uidisplayprefs.ui Normal file
View File

@ -0,0 +1,374 @@
<!DOCTYPE UI><UI>
<class>UIDisplayPrefs</class>
<widget>
<class>PrefWidget</class>
<property stdset="1">
<name>name</name>
<cstring>UIDisplayPrefs</cstring>
</property>
<property stdset="1">
<name>geometry</name>
<rect>
<x>0</x>
<y>0</y>
<width>335</width>
<height>312</height>
</rect>
</property>
<property stdset="1">
<name>caption</name>
<string>QFrameForm</string>
</property>
<vbox>
<property stdset="1">
<name>margin</name>
<number>10</number>
</property>
<property stdset="1">
<name>spacing</name>
<number>5</number>
</property>
<widget>
<class>QGroupBox</class>
<property stdset="1">
<name>name</name>
<cstring>GroupBox4</cstring>
</property>
<property stdset="1">
<name>title</name>
<string>Display</string>
</property>
<property>
<name>layoutMargin</name>
</property>
<property>
<name>layoutSpacing</name>
</property>
<grid>
<property stdset="1">
<name>margin</name>
<number>10</number>
</property>
<property stdset="1">
<name>spacing</name>
<number>5</number>
</property>
<widget row="1" column="0" >
<class>QLayoutWidget</class>
<property stdset="1">
<name>name</name>
<cstring>Layout37</cstring>
</property>
<property>
<name>layoutSpacing</name>
</property>
<hbox>
<property stdset="1">
<name>margin</name>
<number>0</number>
</property>
<property stdset="1">
<name>spacing</name>
<number>0</number>
</property>
<widget>
<class>QCheckBox</class>
<property stdset="1">
<name>name</name>
<cstring>ui_showBar</cstring>
</property>
<property stdset="1">
<name>text</name>
<string>Show bargraph</string>
</property>
<property stdset="1">
<name>checked</name>
<bool>true</bool>
</property>
</widget>
<spacer>
<property>
<name>name</name>
<cstring>Spacer34</cstring>
</property>
<property stdset="1">
<name>orientation</name>
<enum>Horizontal</enum>
</property>
<property stdset="1">
<name>sizeType</name>
<enum>MinimumExpanding</enum>
</property>
<property>
<name>sizeHint</name>
<size>
<width>20</width>
<height>20</height>
</size>
</property>
</spacer>
</hbox>
</widget>
<widget row="0" column="0" >
<class>QLayoutWidget</class>
<property stdset="1">
<name>name</name>
<cstring>Layout19_2</cstring>
</property>
<property>
<name>layoutSpacing</name>
</property>
<hbox>
<property stdset="1">
<name>margin</name>
<number>0</number>
</property>
<property stdset="1">
<name>spacing</name>
<number>5</number>
</property>
<widget>
<class>ColorButton</class>
<property stdset="1">
<name>name</name>
<cstring>ui_bgColorDisplay</cstring>
</property>
<property stdset="1">
<name>minimumSize</name>
<size>
<width>50</width>
<height>0</height>
</size>
</property>
<property stdset="1">
<name>maximumSize</name>
<size>
<width>50</width>
<height>32767</height>
</size>
</property>
<property>
<name>whatsThis</name>
<string>Click this button to change the color of the numerical display for the dmm.</string>
</property>
</widget>
<widget>
<class>QLabel</class>
<property stdset="1">
<name>name</name>
<cstring>TextLabel2_2_2</cstring>
</property>
<property stdset="1">
<name>sizePolicy</name>
<sizepolicy>
<hsizetype>7</hsizetype>
<vsizetype>1</vsizetype>
</sizepolicy>
</property>
<property stdset="1">
<name>text</name>
<string>Back&amp;ground</string>
</property>
<property stdset="1">
<name>alignment</name>
<set>AlignVCenter|AlignLeft</set>
</property>
<property>
<name>buddy</name>
<cstring>ui_bgColorDisplay</cstring>
</property>
<property>
<name>hAlign</name>
</property>
</widget>
</hbox>
</widget>
<widget row="0" column="1" >
<class>QLayoutWidget</class>
<property stdset="1">
<name>name</name>
<cstring>Layout19_3</cstring>
</property>
<property>
<name>layoutSpacing</name>
</property>
<hbox>
<property stdset="1">
<name>margin</name>
<number>0</number>
</property>
<property stdset="1">
<name>spacing</name>
<number>5</number>
</property>
<widget>
<class>ColorButton</class>
<property stdset="1">
<name>name</name>
<cstring>ui_textColor</cstring>
</property>
<property stdset="1">
<name>minimumSize</name>
<size>
<width>50</width>
<height>0</height>
</size>
</property>
<property stdset="1">
<name>maximumSize</name>
<size>
<width>50</width>
<height>32767</height>
</size>
</property>
<property>
<name>whatsThis</name>
<string>Click this button to change the color of the text in the numerical display.</string>
</property>
</widget>
<widget>
<class>QLabel</class>
<property stdset="1">
<name>name</name>
<cstring>TextLabel2_2_3</cstring>
</property>
<property stdset="1">
<name>sizePolicy</name>
<sizepolicy>
<hsizetype>3</hsizetype>
<vsizetype>1</vsizetype>
</sizepolicy>
</property>
<property stdset="1">
<name>text</name>
<string>&amp;Text</string>
</property>
<property>
<name>buddy</name>
<cstring>ui_textColor</cstring>
</property>
</widget>
</hbox>
</widget>
<widget row="1" column="1" >
<class>QLayoutWidget</class>
<property stdset="1">
<name>name</name>
<cstring>Layout37_2</cstring>
</property>
<property>
<name>layoutSpacing</name>
</property>
<hbox>
<property stdset="1">
<name>margin</name>
<number>0</number>
</property>
<property stdset="1">
<name>spacing</name>
<number>0</number>
</property>
<widget>
<class>QCheckBox</class>
<property stdset="1">
<name>name</name>
<cstring>ui_showMinMax</cstring>
</property>
<property stdset="1">
<name>text</name>
<string>Show Min/Max</string>
</property>
<property stdset="1">
<name>checked</name>
<bool>true</bool>
</property>
</widget>
<spacer>
<property>
<name>name</name>
<cstring>Spacer34_2</cstring>
</property>
<property stdset="1">
<name>orientation</name>
<enum>Horizontal</enum>
</property>
<property stdset="1">
<name>sizeType</name>
<enum>MinimumExpanding</enum>
</property>
<property>
<name>sizeHint</name>
<size>
<width>20</width>
<height>20</height>
</size>
</property>
</spacer>
</hbox>
</widget>
</grid>
</widget>
<spacer>
<property>
<name>name</name>
<cstring>Spacer1_5</cstring>
</property>
<property stdset="1">
<name>orientation</name>
<enum>Vertical</enum>
</property>
<property stdset="1">
<name>sizeType</name>
<enum>Expanding</enum>
</property>
<property>
<name>sizeHint</name>
<size>
<width>20</width>
<height>20</height>
</size>
</property>
</spacer>
</vbox>
</widget>
<customwidgets>
<customwidget>
<class>ColorButton</class>
<header location="local">colorbutton.h</header>
<sizehint>
<width>-1</width>
<height>-1</height>
</sizehint>
<container>0</container>
<sizepolicy>
<hordata>5</hordata>
<verdata>5</verdata>
</sizepolicy>
<pixmap>image0</pixmap>
</customwidget>
<customwidget>
<class>PrefWidget</class>
<header location="global">prefwidget.h</header>
<sizehint>
<width>-1</width>
<height>-1</height>
</sizehint>
<container>1</container>
<sizepolicy>
<hordata>5</hordata>
<verdata>5</verdata>
</sizepolicy>
<pixmap>image0</pixmap>
</customwidget>
</customwidgets>
<images>
<image>
<name>image0</name>
<data format="XPM.GZ" length="646">789c6dd2c10ac2300c00d07bbf2234b7229d1be245fc04c5a3201e4615f430059d0711ff5ddb2e6bb236ec90eed134cb5a19d8ef36602af5ecdbfeeac05dda0798d3abebde87e3faa374d3807fa0d633a52d38d8de6f679fe33fc776e196f53cd010188256a3600a292882096246517815ca99884606e18044a3a40d91824820924265a7923a2e8bcd05f33db1173e002913175f2a6be6d3294871a2d95fa00e8a94ee017b69d339d90df1e77c57ea072ede6758</data>
</image>
</images>
<tabstops>
<tabstop>ui_showBar</tabstop>
<tabstop>ui_showMinMax</tabstop>
</tabstops>
</UI>

View File

@ -1,594 +1,509 @@
<!DOCTYPE UI><UI>
<!DOCTYPE UI><UI version="3.3" stdsetdef="1">
<class>UIDmmPrefs</class>
<widget>
<class>PrefWidget</class>
<property stdset="1">
<name>name</name>
<widget class="PrefWidget">
<property name="name">
<cstring>UIDmmPrefs</cstring>
</property>
<property stdset="1">
<name>geometry</name>
<property name="geometry">
<rect>
<x>0</x>
<y>0</y>
<width>365</width>
<height>367</height>
<width>456</width>
<height>589</height>
</rect>
</property>
<property stdset="1">
<name>caption</name>
<property name="caption">
<string>QFrameForm</string>
</property>
<vbox>
<property stdset="1">
<name>margin</name>
<property name="name">
<cstring>unnamed</cstring>
</property>
<property name="margin">
<number>10</number>
</property>
<property stdset="1">
<name>spacing</name>
<property name="spacing">
<number>5</number>
</property>
<widget>
<class>QLabel</class>
<property stdset="1">
<name>name</name>
<widget class="QLabel">
<property name="name">
<cstring>ui_hint</cstring>
</property>
<property stdset="1">
<name>sizePolicy</name>
<property name="sizePolicy">
<sizepolicy>
<hsizetype>1</hsizetype>
<vsizetype>0</vsizetype>
<horstretch>0</horstretch>
<verstretch>0</verstretch>
</sizepolicy>
</property>
<property stdset="1">
<name>frameShape</name>
<property name="frameShape">
<enum>MShape</enum>
</property>
<property stdset="1">
<name>frameShadow</name>
<property name="frameShadow">
<enum>MShadow</enum>
</property>
<property stdset="1">
<name>text</name>
<property name="text">
<string>&lt;b&gt;Select yor DMM or set parameter manually&lt;/b&gt;</string>
</property>
</widget>
<widget>
<class>QComboBox</class>
<property stdset="1">
<name>name</name>
<widget class="QComboBox">
<property name="name">
<cstring>ui_model</cstring>
</property>
<property stdset="1">
<name>sizeLimit</name>
<property name="sizeLimit">
<number>12</number>
</property>
<property stdset="1">
<name>autoCompletion</name>
<property name="autoCompletion">
<bool>true</bool>
</property>
<property>
<name>whatsThis</name>
<property name="whatsThis" stdset="0">
<string>Here you may select your DMM model. If your DMM is not in the list, try to find working settings and mail them to me (&lt;font color=blue&gt;&lt;u&gt;qtdmm@mtoussaint.de&lt;/u&gt;&lt;/font&gt;). So I can add them to the list in the next release.</string>
</property>
</widget>
<widget>
<class>QButtonGroup</class>
<property stdset="1">
<name>name</name>
<widget class="QButtonGroup">
<property name="name">
<cstring>ButtonGroup11</cstring>
</property>
<property stdset="1">
<name>title</name>
<property name="title">
<string>Port settings</string>
</property>
<property>
<name>layoutMargin</name>
<property name="layoutMargin" stdset="0">
</property>
<property>
<name>layoutSpacing</name>
<property name="layoutSpacing" stdset="0">
</property>
<grid>
<property stdset="1">
<name>margin</name>
<property name="name">
<cstring>unnamed</cstring>
</property>
<property name="margin">
<number>10</number>
</property>
<property stdset="1">
<name>spacing</name>
<property name="spacing">
<number>5</number>
</property>
<widget row="0" column="0" >
<class>QLabel</class>
<property stdset="1">
<name>name</name>
<widget class="QLabel" row="0" column="0">
<property name="name">
<cstring>TextLabel2</cstring>
</property>
<property stdset="1">
<name>text</name>
<property name="text">
<string>&amp;Port:</string>
</property>
<property stdset="1">
<name>alignment</name>
<property name="alignment">
<set>AlignVCenter|AlignRight</set>
</property>
<property>
<name>buddy</name>
<property name="buddy" stdset="0">
<cstring>port</cstring>
</property>
<property>
<name>hAlign</name>
<property name="hAlign" stdset="0">
</property>
</widget>
<widget row="1" column="0" >
<class>QLabel</class>
<property stdset="1">
<name>name</name>
<widget class="QLabel" row="1" column="0">
<property name="name">
<cstring>ui_bitsLabel</cstring>
</property>
<property stdset="1">
<name>text</name>
<property name="text">
<string>&amp;Bits:</string>
</property>
<property stdset="1">
<name>alignment</name>
<property name="alignment">
<set>AlignVCenter|AlignRight</set>
</property>
<property>
<name>buddy</name>
<property name="buddy" stdset="0">
<cstring>bitsCombo</cstring>
</property>
<property>
<name>hAlign</name>
<property name="hAlign" stdset="0">
</property>
</widget>
<widget row="0" column="1" >
<class>QComboBox</class>
<widget class="QComboBox" row="0" column="1">
<item>
<property>
<name>text</name>
<property name="text">
<string>/dev/ttyS0</string>
</property>
</item>
<item>
<property>
<name>text</name>
<property name="text">
<string>/dev/ttyS1</string>
</property>
</item>
<item>
<property>
<name>text</name>
<property name="text">
<string>/dev/ttyS2</string>
</property>
</item>
<item>
<property>
<name>text</name>
<property name="text">
<string>/dev/ttyS3</string>
</property>
</item>
<item>
<property>
<name>text</name>
<property name="text">
<string>/dev/ttyS4</string>
</property>
</item>
<item>
<property>
<name>text</name>
<property name="text">
<string>/dev/ttyS5</string>
</property>
</item>
<item>
<property>
<name>text</name>
<property name="text">
<string>/dev/ttyS6</string>
</property>
</item>
<item>
<property>
<name>text</name>
<property name="text">
<string>/dev/ttyS7</string>
</property>
</item>
<item>
<property>
<name>text</name>
<property name="text">
<string>/dev/modem</string>
</property>
</item>
<property stdset="1">
<name>name</name>
<item>
<property name="text">
<string>/dev/usb/ttyUSB0</string>
</property>
</item>
<item>
<property name="text">
<string>/dev/usb/ttyUSB1</string>
</property>
</item>
<item>
<property name="text">
<string>/dev/usb/ttyUSB2</string>
</property>
</item>
<item>
<property name="text">
<string>/dev/usb/ttyUSB3</string>
</property>
</item>
<item>
<property name="text">
<string>/dev/ttyUSB0</string>
</property>
</item>
<item>
<property name="text">
<string>/dev/ttyUSB1</string>
</property>
</item>
<item>
<property name="text">
<string>/dev/ttyUSB2</string>
</property>
</item>
<item>
<property name="text">
<string>/dev/ttyUSB3</string>
</property>
</item>
<property name="name">
<cstring>port</cstring>
</property>
<property stdset="1">
<name>currentItem</name>
<property name="currentItem">
<number>0</number>
</property>
<property>
<name>whatsThis</name>
<property name="whatsThis" stdset="0">
<string>Choose the serial device here. &lt;i&gt;(Hint for DOS people: /dev/ttyS0 corresponds to COM1. /dev/ttyS1 to COM2 ...)&lt;/i&gt;</string>
</property>
</widget>
<widget row="1" column="1" >
<class>QComboBox</class>
<widget class="QComboBox" row="1" column="1">
<item>
<property>
<name>text</name>
<property name="text">
<string>5 bits</string>
</property>
</item>
<item>
<property>
<name>text</name>
<property name="text">
<string>6 bits</string>
</property>
</item>
<item>
<property>
<name>text</name>
<property name="text">
<string>7 bits</string>
</property>
</item>
<item>
<property>
<name>text</name>
<property name="text">
<string>8 bits</string>
</property>
</item>
<property stdset="1">
<name>name</name>
<property name="name">
<cstring>bitsCombo</cstring>
</property>
<property>
<name>whatsThis</name>
<property name="whatsThis" stdset="0">
<string>Number of bits for serial communication.</string>
</property>
</widget>
<widget row="0" column="2" >
<class>QLabel</class>
<property stdset="1">
<name>name</name>
<widget class="QLabel" row="0" column="2">
<property name="name">
<cstring>ui_baudLabel</cstring>
</property>
<property stdset="1">
<name>text</name>
<property name="text">
<string>Baud &amp;rate:</string>
</property>
<property stdset="1">
<name>alignment</name>
<property name="alignment">
<set>AlignVCenter|AlignRight</set>
</property>
<property>
<name>buddy</name>
<property name="buddy" stdset="0">
<cstring>baudRate</cstring>
</property>
<property>
<name>hAlign</name>
<property name="hAlign" stdset="0">
</property>
</widget>
<widget row="0" column="3" >
<class>QComboBox</class>
<widget class="QComboBox" row="0" column="3">
<item>
<property>
<name>text</name>
<property name="text">
<string>600 baud</string>
</property>
</item>
<item>
<property>
<name>text</name>
<property name="text">
<string>1200 baud</string>
</property>
</item>
<item>
<property>
<name>text</name>
<property name="text">
<string>1800 baud</string>
</property>
</item>
<item>
<property>
<name>text</name>
<property name="text">
<string>2400 baud</string>
</property>
</item>
<item>
<property>
<name>text</name>
<property name="text">
<string>4800 baud</string>
</property>
</item>
<item>
<property>
<name>text</name>
<property name="text">
<string>9600 baud</string>
</property>
</item>
<property stdset="1">
<name>name</name>
<property name="name">
<cstring>baudRate</cstring>
</property>
<property stdset="1">
<name>currentItem</name>
<property name="currentItem">
<number>0</number>
</property>
<property>
<name>whatsThis</name>
<property name="whatsThis" stdset="0">
<string>Select the baud rate for the DMM here. If you encounter problems connecting to your DMM try lowering the baud rate. I had some problems with my &lt;b&gt;Metex ME-32&lt;/b&gt;. The Documentation said 1200 baud but it only worked at 600.</string>
</property>
</widget>
<widget row="1" column="2" >
<class>QLabel</class>
<property stdset="1">
<name>name</name>
<widget class="QLabel" row="1" column="2">
<property name="name">
<cstring>ui_stopLabel</cstring>
</property>
<property stdset="1">
<name>text</name>
<property name="text">
<string>&amp;Stop bits:</string>
</property>
<property stdset="1">
<name>alignment</name>
<property name="alignment">
<set>AlignVCenter|AlignRight</set>
</property>
<property>
<name>buddy</name>
<property name="buddy" stdset="0">
<cstring>stopBitsCombo</cstring>
</property>
<property>
<name>hAlign</name>
<property name="hAlign" stdset="0">
</property>
</widget>
<widget row="1" column="3" >
<class>QComboBox</class>
<widget class="QComboBox" row="1" column="3">
<item>
<property>
<name>text</name>
<property name="text">
<string>1 Stop bit</string>
</property>
</item>
<item>
<property>
<name>text</name>
<property name="text">
<string>2 Stop bits</string>
</property>
</item>
<property stdset="1">
<name>name</name>
<property name="name">
<cstring>stopBitsCombo</cstring>
</property>
<property>
<name>whatsThis</name>
<property name="whatsThis" stdset="0">
<string>Number of stop bits for serial communication.</string>
</property>
</widget>
<widget row="2" column="1" >
<class>QComboBox</class>
<widget class="QComboBox" row="2" column="1">
<item>
<property>
<name>text</name>
<property name="text">
<string>None</string>
</property>
</item>
<item>
<property>
<name>text</name>
<property name="text">
<string>Even</string>
</property>
</item>
<item>
<property>
<name>text</name>
<property name="text">
<string>Odd</string>
</property>
</item>
<property stdset="1">
<name>name</name>
<property name="name">
<cstring>parityCombo</cstring>
</property>
<property>
<name>whatsThis</name>
<property name="whatsThis" stdset="0">
<string>Number of stop bits for serial communication.</string>
</property>
</widget>
<widget row="2" column="0" >
<class>QLabel</class>
<property stdset="1">
<name>name</name>
<widget class="QLabel" row="2" column="0">
<property name="name">
<cstring>ui_parityLabel</cstring>
</property>
<property stdset="1">
<name>text</name>
<property name="text">
<string>Parit&amp;y</string>
</property>
<property stdset="1">
<name>alignment</name>
<property name="alignment">
<set>AlignVCenter|AlignRight</set>
</property>
<property>
<name>buddy</name>
<property name="buddy" stdset="0">
<cstring>stopBitsCombo</cstring>
</property>
<property>
<name>hAlign</name>
<property name="hAlign" stdset="0">
</property>
</widget>
<widget row="2" column="2" >
<class>QLabel</class>
<property stdset="1">
<name>name</name>
<widget class="QLabel" row="2" column="2">
<property name="name">
<cstring>ui_displayLabel</cstring>
</property>
<property stdset="1">
<name>text</name>
<property name="text">
<string>&amp;Display</string>
</property>
<property stdset="1">
<name>alignment</name>
<property name="alignment">
<set>AlignVCenter|AlignRight</set>
</property>
<property>
<name>buddy</name>
<property name="buddy" stdset="0">
<cstring>stopBitsCombo</cstring>
</property>
<property>
<name>hAlign</name>
<property name="hAlign" stdset="0">
</property>
</widget>
<widget row="2" column="3" >
<class>QComboBox</class>
<widget class="QComboBox" row="2" column="3">
<item>
<property>
<name>text</name>
<property name="text">
<string>3 1/2</string>
</property>
</item>
<item>
<property>
<name>text</name>
<property name="text">
<string>3 3/4</string>
</property>
</item>
<item>
<property>
<name>text</name>
<property name="text">
<string>4 1/2</string>
</property>
</item>
<item>
<property>
<name>text</name>
<property name="text">
<string>4 3/4</string>
</property>
</item>
<property stdset="1">
<name>name</name>
<property name="name">
<cstring>displayCombo</cstring>
</property>
<property>
<name>whatsThis</name>
<property name="whatsThis" stdset="0">
<string>Number of stop bits for serial communication.</string>
</property>
</widget>
</grid>
</widget>
<widget>
<class>QButtonGroup</class>
<property stdset="1">
<name>name</name>
<widget class="QButtonGroup">
<property name="name">
<cstring>ui_protocol</cstring>
</property>
<property stdset="1">
<name>title</name>
<property name="title">
<string>Protocol</string>
</property>
<property>
<name>layoutMargin</name>
<property name="layoutMargin" stdset="0">
</property>
<property>
<name>layoutSpacing</name>
<property name="layoutSpacing" stdset="0">
</property>
<grid>
<property stdset="1">
<name>margin</name>
<property name="name">
<cstring>unnamed</cstring>
</property>
<property name="margin">
<number>10</number>
</property>
<property stdset="1">
<name>spacing</name>
<property name="spacing">
<number>5</number>
</property>
<widget row="0" column="0" rowspan="1" colspan="3" >
<class>QComboBox</class>
<widget class="QComboBox" row="0" column="0" rowspan="1" colspan="3">
<item>
<property>
<name>text</name>
<property name="text">
<string>14 bytes ASCII, polling (Metex/Voltcraft)</string>
</property>
</item>
<item>
<property>
<name>text</name>
<property name="text">
<string>10 bytes ASCII, continuous (PeakTech 451)</string>
</property>
</item>
<item>
<property>
<name>text</name>
<property name="text">
<string>14 bytes ASCII, continuous (Voltcraft)</string>
</property>
</item>
<item>
<property>
<name>text</name>
<property name="text">
<string>15 bytes ASCII, continuous (Voltcraft)</string>
</property>
</item>
<item>
<property>
<name>text</name>
<property name="text">
<string>11 bytes binary, continuous (M9803R)</string>
</property>
</item>
<property stdset="1">
<name>name</name>
<property name="name">
<cstring>protocolCombo</cstring>
</property>
<property>
<name>whatsThis</name>
<property name="whatsThis" stdset="0">
<string>Here you may select the DMM type. Currently you can select between &lt;b&gt;Metex/Voltcraft&lt;/b&gt; and a &lt;b&gt;PeakTech-451&lt;/b&gt;. Selecting &lt;b&gt;Metex/Voltcraft&lt;/b&gt; it should run with all DMM's of this brand wich are compatible with their 14 byte protocol.&lt;p&gt;The PeakTech setting was only tested with this model.</string>
</property>
</widget>
<widget row="1" column="0" >
<class>QLabel</class>
<property stdset="1">
<name>name</name>
<widget class="QLabel" row="1" column="0">
<property name="name">
<cstring>TextLabel1_4</cstring>
</property>
<property stdset="1">
<name>text</name>
<property name="text">
<string>&amp;Number of values:</string>
</property>
<property>
<name>buddy</name>
<property name="buddy" stdset="0">
<cstring>ui_numValues</cstring>
</property>
</widget>
<widget row="1" column="1" >
<class>QSpinBox</class>
<property stdset="1">
<name>name</name>
<widget class="QSpinBox" row="1" column="1">
<property name="name">
<cstring>ui_numValues</cstring>
</property>
<property stdset="1">
<name>maxValue</name>
<property name="maxValue">
<number>4</number>
</property>
<property stdset="1">
<name>minValue</name>
<property name="minValue">
<number>1</number>
</property>
<property>
<name>whatsThis</name>
<property name="whatsThis" stdset="0">
<string>Some multimeter send several lines of data containing different measured values. As QtDMM only shows one variable here you can set the number of lines to be ignored for each measurement (That means that QtDMM only uses the first line).</string>
</property>
</widget>
<spacer row="1" column="2" >
<property>
<name>name</name>
<spacer row="1" column="2">
<property name="name">
<cstring>Spacer1</cstring>
</property>
<property stdset="1">
<name>orientation</name>
<property name="orientation">
<enum>Horizontal</enum>
</property>
<property stdset="1">
<name>sizeType</name>
<property name="sizeType">
<enum>Expanding</enum>
</property>
<property>
<name>sizeHint</name>
<property name="sizeHint">
<size>
<width>20</width>
<height>20</height>
@ -598,80 +513,66 @@
</grid>
</widget>
<spacer>
<property>
<name>name</name>
<property name="name">
<cstring>Spacer1_3</cstring>
</property>
<property stdset="1">
<name>orientation</name>
<property name="orientation">
<enum>Vertical</enum>
</property>
<property stdset="1">
<name>sizeType</name>
<property name="sizeType">
<enum>Expanding</enum>
</property>
<property>
<name>sizeHint</name>
<property name="sizeHint">
<size>
<width>20</width>
<height>20</height>
</size>
</property>
</spacer>
<widget>
<class>QLabel</class>
<property stdset="1">
<name>name</name>
<widget class="QLabel">
<property name="name">
<cstring>message2</cstring>
</property>
<property stdset="1">
<name>sizePolicy</name>
<property name="sizePolicy">
<sizepolicy>
<hsizetype>1</hsizetype>
<vsizetype>3</vsizetype>
<horstretch>0</horstretch>
<verstretch>0</verstretch>
</sizepolicy>
</property>
<property stdset="1">
<name>text</name>
<property name="text">
<string>These protocoll settings have not been confirmed by a user yet. If you own this model and can confirm that it works. Please give me a note. &lt;u&gt;&lt;font color=blue&gt;qtdmm@mtoussaint.de&lt;/font&gt;&lt;/u&gt;</string>
</property>
<property stdset="1">
<name>alignment</name>
<property name="alignment">
<set>WordBreak|AlignBottom|AlignLeft</set>
</property>
<property>
<name>vAlign</name>
<property name="vAlign" stdset="0">
</property>
<property>
<name>wordwrap</name>
<property name="wordwrap" stdset="0">
</property>
</widget>
<widget>
<class>QLabel</class>
<property stdset="1">
<name>name</name>
<widget class="QLabel">
<property name="name">
<cstring>message</cstring>
</property>
<property stdset="1">
<name>sizePolicy</name>
<property name="sizePolicy">
<sizepolicy>
<hsizetype>1</hsizetype>
<vsizetype>3</vsizetype>
<horstretch>0</horstretch>
<verstretch>0</verstretch>
</sizepolicy>
</property>
<property stdset="1">
<name>text</name>
<property name="text">
<string>If you have a DMM not listed above and find manual settings that work, please report to &lt;font color=blue&gt;&lt;u&gt;qtdmm@mtoussaint.de&lt;/u&gt;&lt;/font&gt;. This way future users of this DMM can benefit from your help.</string>
</property>
<property stdset="1">
<name>alignment</name>
<property name="alignment">
<set>WordBreak|AlignBottom|AlignLeft</set>
</property>
<property>
<name>vAlign</name>
<property name="vAlign" stdset="0">
</property>
<property>
<name>wordwrap</name>
<property name="wordwrap" stdset="0">
</property>
</widget>
</vbox>
@ -688,14 +589,15 @@
<sizepolicy>
<hordata>5</hordata>
<verdata>5</verdata>
<horstretch>0</horstretch>
<verstretch>0</verstretch>
</sizepolicy>
<pixmap>image0</pixmap>
</customwidget>
</customwidgets>
<images>
<image>
<name>image0</name>
<data format="XPM.GZ" length="646">789c6dd2c10ac2300c00d07bbf2234b7229d1be245fc04c5a3201e4615f430059d0711ff5ddb2e6bb236ec90eed134cb5a19d8ef36602af5ecdbfeeac05dda0798d3abebde87e3faa374d3807fa0d633a52d38d8de6f679fe33fc776e196f53cd010188256a3600a292882096246517815ca99884606e18044a3a40d91824820924265a7923a2e8bcd05f33db1173e002913175f2a6be6d3294871a2d95fa00e8a94ee017b69d339d90df1e77c57ea072ede6758</data>
<image name="image0">
<data format="PNG" length="256">89504e470d0a1a0a0000000d4948445200000016000000160806000000c4b46c3b000000c749444154388dad55db1184200c4c180bb81a28c73aad811228c356f42b3792db3cc0db2fc724bb7901dc7b270f27ed17fa5fa9b117b7cd90211f4ba0ac906a7f1453b4d30ca917bb590681552af23f69bfc4ffa71519d2c8f62546ea5ea03738b1c18c33a4d156f0d13f43b61952e4af6d6e8fb3a408f080448419a433d6486d85052fdba892a295f5d45785cd8c51a9d6de6a814a8d2131da51f98e7a3b64ec9da04a8db53d43be3c3c0b22cacf17e4cdb5a931649ceddf34b190cf0aa019f03f1fd3e7457f03b5a66c9ed26e86130000000049454e44ae426082</data>
</image>
</images>
<tabstops>
@ -709,4 +611,8 @@
<tabstop>protocolCombo</tabstop>
<tabstop>ui_numValues</tabstop>
</tabstops>
<layoutdefaults spacing="6" margin="11"/>
<includehints>
<includehint>prefwidget.h</includehint>
</includehints>
</UI>

31
src/uitest.ui Normal file
View File

@ -0,0 +1,31 @@
<!DOCTYPE UI><UI>
<class>QFrameForm</class>
<widget>
<class>QFrame</class>
<property stdset="1">
<name>name</name>
<cstring>QFrameForm</cstring>
</property>
<property stdset="1">
<name>geometry</name>
<rect>
<x>0</x>
<y>0</y>
<width>296</width>
<height>400</height>
</rect>
</property>
<property stdset="1">
<name>caption</name>
<string>QFrameForm</string>
</property>
<property stdset="1">
<name>frameShape</name>
<enum>NoFrame</enum>
</property>
<property stdset="1">
<name>frameShadow</name>
<enum></enum>
</property>
</widget>
</UI>

View File

@ -1,13 +1,10 @@
<!DOCTYPE UI><UI>
<!DOCTYPE UI><UI version="3.3" stdsetdef="1">
<class>UITipDlg</class>
<widget>
<class>QDialog</class>
<property stdset="1">
<name>name</name>
<widget class="QDialog">
<property name="name">
<cstring>UITipDlg</cstring>
</property>
<property stdset="1">
<name>geometry</name>
<property name="geometry">
<rect>
<x>0</x>
<y>0</y>
@ -15,140 +12,115 @@
<height>215</height>
</rect>
</property>
<property stdset="1">
<name>caption</name>
<property name="caption">
<string>QtDMM: Tip of the day</string>
</property>
<property stdset="1">
<name>icon</name>
<property name="icon">
<pixmap>image0</pixmap>
</property>
<property>
<name>layoutMargin</name>
<property name="layoutMargin" stdset="0">
</property>
<property>
<name>layoutSpacing</name>
<property name="layoutSpacing" stdset="0">
</property>
<vbox>
<property stdset="1">
<name>margin</name>
<property name="name">
<cstring>unnamed</cstring>
</property>
<property name="margin">
<number>10</number>
</property>
<property stdset="1">
<name>spacing</name>
<property name="spacing">
<number>5</number>
</property>
<widget>
<class>QLayoutWidget</class>
<property stdset="1">
<name>name</name>
<widget class="QLayoutWidget">
<property name="name">
<cstring>Layout8</cstring>
</property>
<property>
<name>layoutSpacing</name>
<property name="layoutSpacing" stdset="0">
</property>
<hbox>
<property stdset="1">
<name>margin</name>
<property name="name">
<cstring>unnamed</cstring>
</property>
<property name="margin">
<number>0</number>
</property>
<property stdset="1">
<name>spacing</name>
<property name="spacing">
<number>5</number>
</property>
<widget>
<class>QTextView</class>
<property stdset="1">
<name>name</name>
<widget class="QTextView">
<property name="name">
<cstring>ui_tip</cstring>
</property>
<property stdset="1">
<name>minimumSize</name>
<property name="minimumSize">
<size>
<width>400</width>
<height>50</height>
</size>
</property>
<property stdset="1">
<name>maximumSize</name>
<property name="maximumSize">
<size>
<width>32767</width>
<height>200</height>
</size>
</property>
<property stdset="1">
<name>frameShape</name>
<property name="frameShape">
<enum>NoFrame</enum>
</property>
<property stdset="1">
<name>resizePolicy</name>
<property name="resizePolicy">
<enum>Manual</enum>
</property>
<property stdset="1">
<name>vScrollBarMode</name>
<property name="vScrollBarMode">
<enum>AlwaysOff</enum>
</property>
<property stdset="1">
<name>hScrollBarMode</name>
<property name="hScrollBarMode">
<enum>AlwaysOff</enum>
</property>
</widget>
<widget>
<class>QLayoutWidget</class>
<property stdset="1">
<name>name</name>
<widget class="QLayoutWidget">
<property name="name">
<cstring>Layout8</cstring>
</property>
<property>
<name>layoutSpacing</name>
<property name="layoutSpacing" stdset="0">
</property>
<vbox>
<property stdset="1">
<name>margin</name>
<property name="name">
<cstring>unnamed</cstring>
</property>
<property name="margin">
<number>0</number>
</property>
<property stdset="1">
<name>spacing</name>
<property name="spacing">
<number>0</number>
</property>
<widget>
<class>QLabel</class>
<property stdset="1">
<name>name</name>
<widget class="QLabel">
<property name="name">
<cstring>ui_logo</cstring>
</property>
<property stdset="1">
<name>margin</name>
<property name="margin">
<number>3</number>
</property>
<property stdset="1">
<name>pixmap</name>
<pixmap>image0</pixmap>
<property name="pixmap">
<pixmap>image1</pixmap>
</property>
<property stdset="1">
<name>scaledContents</name>
<property name="scaledContents">
<bool>true</bool>
</property>
<property>
<name>whatsThis</name>
<property name="whatsThis" stdset="0">
<string>Calvin :)</string>
</property>
</widget>
<spacer>
<property>
<name>name</name>
<property name="name">
<cstring>Spacer2</cstring>
</property>
<property stdset="1">
<name>orientation</name>
<property name="orientation">
<enum>Vertical</enum>
</property>
<property stdset="1">
<name>sizeType</name>
<property name="sizeType">
<enum>Expanding</enum>
</property>
<property>
<name>sizeHint</name>
<property name="sizeHint">
<size>
<width>20</width>
<height>20</height>
@ -159,128 +131,105 @@
</widget>
</hbox>
</widget>
<widget>
<class>QLayoutWidget</class>
<property stdset="1">
<name>name</name>
<widget class="QLayoutWidget">
<property name="name">
<cstring>Layout7</cstring>
</property>
<property>
<name>layoutSpacing</name>
<property name="layoutSpacing" stdset="0">
</property>
<hbox>
<property stdset="1">
<name>margin</name>
<property name="name">
<cstring>unnamed</cstring>
</property>
<property name="margin">
<number>0</number>
</property>
<property stdset="1">
<name>spacing</name>
<property name="spacing">
<number>5</number>
</property>
<widget>
<class>QCheckBox</class>
<property stdset="1">
<name>name</name>
<widget class="QCheckBox">
<property name="name">
<cstring>ui_showTip</cstring>
</property>
<property stdset="1">
<name>text</name>
<property name="text">
<string>Don't show tips again</string>
</property>
<property>
<name>whatsThis</name>
<property name="whatsThis" stdset="0">
<string>&lt;font size=+1&gt;&lt;b&gt;Don't show tips again&lt;/b&gt;&lt;/font&gt;&lt;p&gt;Check this if you don't want to see the tip of the day at startup. You can activate the tips at any time in the preferences again.</string>
</property>
</widget>
<widget>
<class>QPushButton</class>
<property stdset="1">
<name>name</name>
<widget class="QPushButton">
<property name="name">
<cstring>ui_previousBut</cstring>
</property>
<property stdset="1">
<name>sizePolicy</name>
<property name="sizePolicy">
<sizepolicy>
<hsizetype>7</hsizetype>
<vsizetype>0</vsizetype>
<horstretch>0</horstretch>
<verstretch>0</verstretch>
</sizepolicy>
</property>
<property stdset="1">
<name>text</name>
<property name="text">
<string>&amp;Previous</string>
</property>
<property stdset="1">
<name>autoDefault</name>
<property name="autoDefault">
<bool>false</bool>
</property>
<property>
<name>whatsThis</name>
<property name="whatsThis" stdset="0">
<string>&lt;font size=+1&gt;&lt;b&gt;Previous&lt;/b&gt;&lt;/font&gt;&lt;p&gt;Go to previous tip.</string>
</property>
</widget>
<widget>
<class>QPushButton</class>
<property stdset="1">
<name>name</name>
<widget class="QPushButton">
<property name="name">
<cstring>ui_nextBut</cstring>
</property>
<property stdset="1">
<name>sizePolicy</name>
<property name="sizePolicy">
<sizepolicy>
<hsizetype>7</hsizetype>
<vsizetype>0</vsizetype>
<horstretch>0</horstretch>
<verstretch>0</verstretch>
</sizepolicy>
</property>
<property stdset="1">
<name>text</name>
<property name="text">
<string>&amp;Next</string>
</property>
<property stdset="1">
<name>autoDefault</name>
<property name="autoDefault">
<bool>false</bool>
</property>
<property>
<name>whatsThis</name>
<property name="whatsThis" stdset="0">
<string>&lt;font size=+1&gt;&lt;b&gt;Next&lt;/b&gt;&lt;/font&gt;&lt;p&gt;Go to next tip.</string>
</property>
</widget>
<spacer>
<property>
<name>name</name>
<property name="name">
<cstring>Spacer1</cstring>
</property>
<property stdset="1">
<name>orientation</name>
<property name="orientation">
<enum>Horizontal</enum>
</property>
<property stdset="1">
<name>sizeType</name>
<property name="sizeType">
<enum>Expanding</enum>
</property>
<property>
<name>sizeHint</name>
<property name="sizeHint">
<size>
<width>20</width>
<height>20</height>
</size>
</property>
</spacer>
<widget>
<class>QPushButton</class>
<property stdset="1">
<name>name</name>
<widget class="QPushButton">
<property name="name">
<cstring>ui_closeBut</cstring>
</property>
<property stdset="1">
<name>text</name>
<property name="text">
<string>&amp;Close</string>
</property>
<property stdset="1">
<name>default</name>
<property name="default">
<bool>true</bool>
</property>
<property>
<name>whatsThis</name>
<property name="whatsThis" stdset="0">
<string>&lt;font size=+1&gt;&lt;b&gt;Close&lt;/b&gt;&lt;/font&gt;&lt;p&gt;Close this dialog.</string>
</property>
</widget>
@ -289,9 +238,12 @@
</vbox>
</widget>
<images>
<image>
<name>image0</name>
<data format="XPM.GZ" length="1422">789ca5915d4f83301486eff915cdcedd62dc3aa88c187f82c64b13e34529144a41139d17c6f8dfed69f91a1447e2bb91f4491fde5360b7254f8ff764bb0b3e4efca40411257f27dbecb369be9e5feebe834d7820e64f19a19bab60734d0479787bcd710d660d7b1bc4ca213d4a89583b3cec1d3688744f236a65811826e1314c105344c659c23822478cd3388b53c41c3189129a4488658bcca146144cdc08869839ccb8438928657748e530cf1d160e31f6e92e6470c0977307b82f307680a7be0838773ca3e64e368dcf3177e24ee656e07570df39adb9dc03977b464d0b3dedee1f3d2b9e2bb7bf7f3b2b66adf8166bbea9941ee9dc91452f0dc3c4d429642b947d7cb37a4199abaa268eabe8ee574a19a5aa263d5d85d6e62a6dcdcc71c270143d9fc5553f45ebbe6be6e0866e1dad7dcfa5aca2db17a3758d55f359830250d7f5820305088c957ce791d2bcfca2194b7ea7693a69e688a5a0f3731bfc0233976d47</data>
<image name="image0">
<data format="PNG" length="568">89504e470d0a1a0a0000000d4948445200000020000000200806000000737a7af4000001ff49444154789cc5573d4ec330187d465ca048ec4442ecd9c897137084962324131513ea8498104cc9095092237082a46c19411512bd89198a8d71fc9712c4932ac7f627bff7bd2fb51dd6751dfe1387b60922e25393755dc782041011bf59dd4ccd0f22e2ba88810041fef1fe31b980e43c1988b0960000eaa69e8c7c315f18c79d0200a0ddb4bf264fcf52ebdc41e802e2675a586dd53817f12801eda60d7222344e85b704803b13752e24e3bd0488ac7402d3f8580746bd036a3f34d687510ef8fabe3813821de89f7b63fb5b0409f84b8c2a417b616eff54c01436ef2dc0b67f4f09e73b503535aa090fa4288a06635607aaa60638071843d5d4b874b8117a6a26e749b800892f112ed2a22c8204544f55b880cbf902d517b1c83e84349be7289befb9fc36dbc5af4a633cd32fa544c4f5974f10fb32cde6b97c2e9b42920b242784f5cb1ade1b51741ae1eef64ef64dc4711c0300fabe977d35f350584b60231584a215d0fb711ca358953f4a503d8d10a0d7522551adeede5a638c4cc4527baf0001356b61bb2fde24642f01367276a4466997946ee7487e9fa1b82e07ebe870ee8426f294dc67434a29d20549113e049d86eae29c7330c68cbbdafa65bd7bd832e0e4fbcbce550eef7d20cb7210a532734a089c73bcbebf0e627f88daeefeea3e17f6ba90cc8e6700e0171180c14eb8bc5a4efe55ace3e1f141ee849fc001eddc052a55eb0000000049454e44ae426082</data>
</image>
<image name="image1">
<data format="PNG" length="1826">89504e470d0a1a0a0000000d49484452000000300000003008060000005702f987000006e949444154789cd5996d6c53d719c77fa90a248ead24bed72f59ad140226a4a405b5acd48bd604cf9598486174a81d53a5b66a36b6f16d9ab4098d5553d7aa9386c4876d883512a1b442534b8b42903a0d414247c6ebc02ca4499336649a143b7e4be4372051bd0f977bb9d7b9d76f713afa972c1d9df3dcc7ffff39cf79ce5bc5c0c0005f673cf0ff26b0503c58a8615b5b7b663189e4427f7f5f85515b41027ef0c20b198fa7b57c8c8a445b5b7bc648445e016d6ded198fa7159fcf577e660520990e33343c6428a222d724fe6ec796ccf33b762c2ac17c8886228422318686879889c5e68593e108b4b5b5674c966aac821980b1e1093e1d1925119f5e64ca12cc965a4451c426d401605ab694191dbb822731c0e8e808003575750b26980bb37377980c0401140146284a00c0e9c153a5b12a121d9e6d058df67dbb0e2c7970694176250bd8b57d37de169ff2d383ba5e5d36fad6c84f2e141d42320e7ef4a7a2fed864a92ef9db5cf8ca4228154f2e8adf924760d7f6dd8c8e8e687a560f7a3dbcd05e57a32c21d4e1d9a66ba3ce58d9a4cb95cdca12428b151e8560c121940d6f8b4fb777ddee26a5ecf1b46a4644b657db148ab284901a46a1a1b67fe3eddf16e53317eedb85ac50942c40bd08e52a2f36bef62350f21c50c77a21e5c5c27d3b02b373770ab22b7a04bc2dbeafe43c908a2779c8e9ca6b5b9400394f2ffaa96cd9521e72ba104531af6951029a9bdc4ad96a138a275602a2a148cef6a204749d39ad943b3779b1da84bc7f20a354c1569b80d526100e87e1ee31538d8204acfaf43f6c8bcf51d3d9c9f9ab9fd17ce52c1d972e32b7612317edf34564938d86229cfbc7f99242cf6ca9d58c7c4902d6c66769be7216deef2675f9143c7f96ef25121cbf7c81e8379f9c672f0beae9ed9dd7966ffbad462a9ec4944c208aa2a1f8e2b3d0061f03277a58fbec56a54edde3dd870ee3763769367a264b353fd9f532d555f927653692e930ff3c778dd46dfdb45a90801b9625f0c4d33cf5e69b208a7c0b38ffc4d3cc59960019253c260341ea9d0e85bc7c1d6913ea6870adc66133110ca50068720bd86a3e6074620bc1500a87cd04c0d0f07f39f7efcd00b43efa310daed58c091386dcf20a8846128c3537f0f1f0045d5d5d4afdbe4d5e7a7a4f00d23dd14c2c06c06420c8d68e0e76ee940e3932e1ec7283fd2d56360e323ab145d376fa5fcff1c905295ddf9e35e17dfcc39cfc720a48c5934a3c5b6d029d9bbc6cce54f0b3932730f59f51ec5e7df5879af01004ab866c369e697d9b958d83006cdffc23aef9db3979a68d03c7763235b55cb1fbe4421323e33b71d79c2aed66ce64a9c66a13e83e74987aa703b3a5969ebbe1918a27f1785a75c3430e0719eafadada2ae271916bfe7689c0d25a62e91dc0a886bc8ca9a9e5b86b8c39e60d21f96e74321054f270bdd3c12f7fb547433abbc79df52b00084c8ecff379fefaf6ac9a088260c56ebf394f84dd7e3327bf82e6c0debdafe9b6a927e4f4745a232618baa16baf175af2c8fcfac77fe3fdbfb72b73e0db1b47f03efe21feab750c0d2f200b3db2c685fbe1934ac6c8869afc538f7da4698ba53b999e4eebfa55fbaaac72e2b0a5d9d8fc17962d791190b290205873722b48c08afaf76869ee533286111187cdc4fa757d9ab6cfbf085359b57fde37d9a1752b1d20184ad1e05a4d83ebe2dd5a2b914874e102d444e5e11e19bdb77d68720b54563975bf59d938c8945f2a67ecf7ea9daca0b63640659593c0e4b8c69f1a65190135d1e9e9b426241c361395554e3276a8988237f6bf46321d56daa391047044e3271a8ae0f53dc363beb56480e0f5143d7d4fb2b5fda2c62f480b5bd904545639617a5c133272b6a99802fff51bbcfebafe95891e9adcd216e4dce00606fc8dac5ff52e0daed58094c56ea503797d1425203039aec93c72d864ecf0cebe23741f3a5cb0af9ede5e2e5dbec4acb59f445a3ae1fdf9d86f78f63b633cb769480a37e31d446902d43dbfec612719a49e7f67df11ac8299975f79491151ef7418fa919f8fa4b5650d5f8ab730596648c56b8884a5637ad03f7ffd58b00087cd742f26fde3ca64ee3e74989fff623707dffa3d23c363dc1c1f63f98a55867e669209cd7daaf9b640827b93589d5ecb3a89017cfd17a4b30170dc6c664f4a2272f4dd0f884612f41d3fc6effe78807dfbffc0ba96f5ba3ed6b5ac579e4d41da963c10afe44bf11603fe46ae7f56c74fbf7f9447d6b872eea920cfb58adc4b164b38afcd4c32c1c8f018078efe15ffd52ba4e2496e8e8f4947411dd845bbeeed462a5e43225d97b7e765e4ddcc01c4e3229f7fd1423094e21b06b635d5d29e69cfde3d80340752b7ef60b6e8db8ba288288af807af299d60b248fb4d73554c59c0229128a148cc70376af852dfd9b92b235f6ba8df6a439198c64eeee142ae408c100e870bfa3e1c0ed3d57550f352ff3f86ade1d7b6af9f100000000049454e44ae426082</data>
</image>
</images>
<layoutdefaults spacing="6" margin="11"/>
</UI>

View File

@ -1,85 +0,0 @@
/A.xpm/1.1/Sat Nov 24 17:05:03 2001//
/A_small.xpm/1.1/Sat Nov 24 17:05:03 2001//
/DBM.xpm/1.1/Sun Oct 13 15:49:07 2002//
/DBM_small.xpm/1.1/Sun Oct 13 15:49:07 2002//
/F.xpm/1.1/Sat Nov 24 17:05:03 2001//
/F_small.xpm/1.1/Sat Nov 24 17:05:03 2001//
/G.xpm/1.1/Sat Nov 24 17:05:03 2001//
/G_small.xpm/1.1/Sat Nov 24 17:05:03 2001//
/H.xpm/1.1/Sun Oct 13 15:49:07 2002//
/H_small.xpm/1.1/Sun Oct 13 15:49:07 2002//
/Hz.xpm/1.1/Sat Nov 24 17:05:03 2001//
/Hz_small.xpm/1.1/Sat Nov 24 17:05:03 2001//
/M.xpm/1.1/Sat Nov 24 17:05:03 2001//
/M_small.xpm/1.1/Sat Nov 24 17:05:03 2001//
/Ohm.xpm/1.1/Sat Nov 24 17:05:03 2001//
/Ohm_small.xpm/1.1/Sat Nov 24 17:05:03 2001//
/V.xpm/1.1/Sat Nov 24 17:05:03 2001//
/V_small.xpm/1.1/Sat Nov 24 17:05:03 2001//
/W.xpm/1.1/Sun Oct 13 15:49:07 2002//
/W_small.xpm/1.1/Sun Oct 13 15:49:07 2002//
/ac.xpm/1.1/Sat Nov 24 17:05:03 2001//
/all_digits.xpm/1.1/Sat Nov 24 17:05:03 2001//
/auto.xpm/1.1/Sun Oct 13 15:49:07 2002//
/bar.xpm/1.1/Sat Nov 24 17:05:03 2001//
/clear.xpm/1.1/Sat Nov 24 17:05:03 2001//
/conf.xpm/1.1/Sat Nov 24 17:05:03 2001//
/config.xpm/1.1/Sat Nov 24 17:05:03 2001//
/connect_off.xpm/1.1/Sat Nov 24 17:05:03 2001//
/connect_on.xpm/1.1/Sat Nov 24 17:05:03 2001//
/connection.xpm/1.1/Sat Oct 19 14:15:53 2002//
/dc.xpm/1.1/Sat Nov 24 17:05:03 2001//
/decimal.xpm/1.1/Sat Nov 24 17:05:03 2001//
/decimal_small.xpm/1.1/Sat Nov 24 17:05:03 2001//
/deg.xpm/1.1/Sat Nov 24 17:05:03 2001//
/deg_small.xpm/1.1/Sat Nov 24 17:05:03 2001//
/diode.xpm/1.1/Sat Nov 24 17:05:03 2001//
/dmm.xpm/1.1/Sat Oct 19 14:15:53 2002//
/ee.xpm/1.1/Sat Nov 24 17:05:03 2001//
/execute.xpm/1.1/Sat Oct 19 14:15:53 2002//
/export.xpm/1.1/Sat Nov 24 17:05:03 2001//
/fifty_bar.xpm/1.1/Wed Mar 20 20:34:14 2002//
/fourty_bar.xpm/1.1/Wed Mar 20 20:34:14 2002//
/graph.xpm/1.1/Sat Oct 19 14:15:53 2002//
/gui.xpm/1.1/Sat Oct 19 14:15:53 2002//
/help.xpm/1.1/Sat Nov 24 17:05:03 2001//
/hi.xpm/1.1/Sat Nov 24 17:05:03 2001//
/hold.xpm/1.1/Sun Oct 13 15:49:07 2002//
/icon.xpm/1.1/Sat Nov 24 17:05:03 2001//
/icon_gray.xpm/1.1/Sat Nov 24 17:05:03 2001//
/import.xpm/1.1/Sat Nov 24 17:05:03 2001//
/integration.xpm/1.1/Sat Oct 19 14:15:53 2002//
/k.xpm/1.1/Sat Nov 24 17:05:03 2001//
/k_small.xpm/1.1/Sat Nov 24 17:05:03 2001//
/l.xpm/1.1/Sat Nov 24 17:05:03 2001//
/l_small.xpm/1.1/Sat Nov 24 17:05:03 2001//
/m.xpm/1.1/Sat Nov 24 17:05:03 2001//
/m_small.xpm/1.1/Sat Nov 24 17:05:03 2001//
/manu.xpm/1.1/Sun Oct 13 15:49:07 2002//
/max_str.xpm/1.1/Sat Nov 24 17:05:03 2001//
/min_str.xpm/1.1/Sat Nov 24 17:05:03 2001//
/minus.xpm/1.1/Sat Nov 24 17:05:03 2001//
/minus_small.xpm/1.1/Sat Nov 24 17:05:03 2001//
/n.xpm/1.1/Sat Nov 24 17:05:03 2001//
/n_small.xpm/1.1/Sat Nov 24 17:05:03 2001//
/null_bar.xpm/1.1/Wed Mar 20 20:34:14 2002//
/numbers.xpm/1.1/Sun Nov 25 13:00:49 2001//
/numbers_small.xpm/1.1/Sun Nov 25 13:00:49 2001//
/numers_tiny.xpm/1.1/Sun Nov 25 13:00:49 2001//
/p.xpm/1.1/Sat Nov 24 17:05:03 2001//
/p_small.xpm/1.1/Sat Nov 24 17:05:03 2001//
/print.xpm/1.1/Sat Nov 24 17:05:03 2001//
/quit.xpm/1.1/Sat Nov 24 17:05:03 2001//
/recorder.xpm/1.1/Sat Oct 19 14:15:53 2002//
/reset.xpm/1.1/Sat Nov 24 17:05:03 2001//
/scale.xpm/1.1/Sat Oct 19 14:15:53 2002//
/specialchars.xpm/1.1/Sun Oct 13 15:49:07 2002//
/specialchars_small.xpm/1.1/Sun Oct 13 15:49:07 2002//
/start.xpm/1.1/Sat Nov 24 17:05:03 2001//
/stop.xpm/1.1/Sat Nov 24 17:05:03 2001//
/ten_bar.xpm/1.1/Wed Mar 20 20:34:14 2002//
/thirty_bar.xpm/1.1/Wed Mar 20 20:34:14 2002//
/twenty_bar.xpm/1.1/Wed Mar 20 20:34:14 2002//
/u.xpm/1.1/Sat Nov 24 17:05:03 2001//
/u_small.xpm/1.1/Sat Nov 24 17:05:03 2001//
D

View File

@ -1 +0,0 @@
QtDMM/src/xpm

View File

@ -1 +0,0 @@
/home/cvs

223
src/xpm/connect_icon.xpm Executable file
View File

@ -0,0 +1,223 @@
/* XPM */
static char * connect_icon_xpm[] = {
"32 32 188 2",
" c None",
". c #FFFF00",
"+ c #FCFC00",
"@ c #EFEF00",
"# c #979700",
"$ c #F1F100",
"% c #A8A800",
"& c #343400",
"* c #000000",
"= c #F2F200",
"- c #8E8E00",
"; c #434300",
"> c #5C5C5C",
", c #616160",
"' c #484748",
") c #AAAD00",
"! c #939300",
"~ c #585800",
"{ c #DADBDA",
"] c #FFFFFF",
"^ c #E5E1E4",
"/ c #02051F",
"( c #353900",
"_ c #CAC900",
": c #454500",
"< c #1C201C",
"[ c #FDFDFD",
"} c #F7F6F7",
"| c #F1F0F1",
"1 c #F9F4F8",
"2 c #CCC8D3",
"3 c #51504C",
"4 c #F8F800",
"5 c #B0B000",
"6 c #333300",
"7 c #595E59",
"8 c #A5A7A5",
"9 c #EBEBEB",
"0 c #DBDADB",
"a c #EDEBED",
"b c #FFFDFF",
"c c #AAAAB3",
"d c #3C3E52",
"e c #FBFB00",
"f c #A0A000",
"g c #646400",
"h c #BFC1BF",
"i c #DADADA",
"j c #D9D9D9",
"k c #DBDCDB",
"l c #EAECEA",
"m c #FDFCFC",
"n c #DAD6D9",
"o c #1C1C1A",
"p c #F7F700",
"q c #B6B600",
"r c #555500",
"s c #1F1F00",
"t c #7F7E7F",
"u c #EFEBEF",
"v c #E1E2E1",
"w c #E0E1E0",
"x c #DEDEDE",
"y c #DEDDDE",
"z c #DDDEDD",
"A c #E7E4E7",
"B c #EFEAEF",
"C c #DCD9DB",
"D c #383751",
"E c #FFFF01",
"F c #3E3E00",
"G c #5E5D5E",
"H c #BFBCBF",
"I c #D3D1D3",
"J c #E4E4E4",
"K c #DCDCDC",
"L c #E7E5E7",
"M c #F7F3F5",
"N c #A6A1B1",
"O c #53514F",
"P c #5B5B00",
"Q c #6D6D00",
"R c #7B7B01",
"S c #454445",
"T c #949294",
"U c #AEABAE",
"V c #D3D3D3",
"W c #E2E3E2",
"X c #E0E0E0",
"Y c #E3DFE3",
"Z c #F9F5F8",
"` c #CAC8D4",
" . c #000027",
".. c #292900",
"+. c #323132",
"@. c #676667",
"#. c #787678",
"$. c #ACA9AC",
"%. c #D4D2D4",
"&. c #E6E7E6",
"*. c #E3E4E3",
"=. c #ECEDEC",
"-. c #F0ECF0",
";. c #4E4D4F",
">. c #515051",
",. c #787578",
"'. c #B1AFB1",
"). c #8D8A8D",
"!. c #9E9B9E",
"~. c #D5D2D5",
"{. c #E2E4E2",
"]. c #E2E1E2",
"^. c #D5D3D5",
"/. c #C3C1C3",
"(. c #353738",
"_. c #272827",
":. c #5C5B5C",
"<. c #FDFBFD",
"[. c #9B979B",
"}. c #817E81",
"|. c #B0ACB0",
"1. c #D3D2D3",
"2. c #E4E3E4",
"3. c #CDCBCD",
"4. c #ABA7AB",
"5. c #888688",
"6. c #222422",
"7. c #1F211F",
"8. c #D2D1D2",
"9. c #8B898B",
"0. c #7B797B",
"a. c #B1ADB1",
"b. c #DAD9DA",
"c. c #EBECEB",
"d. c #D6D3D6",
"e. c #A6A3A6",
"f. c #787778",
"g. c #6A696A",
"h. c #1F1F1F",
"i. c #878887",
"j. c #EAE9EA",
"k. c #DCDADC",
"l. c #B3B0B3",
"m. c #878587",
"n. c #656465",
"o. c #8D8B8D",
"p. c #9A989A",
"q. c #989798",
"r. c #9C999C",
"s. c #5D5C5D",
"t. c #121212",
"u. c #020302",
"v. c #434343",
"w. c #575557",
"x. c #434243",
"y. c #2D2C2D",
"z. c #696769",
"A. c #828082",
"B. c #827F82",
"C. c #7D7B7D",
"D. c #555455",
"E. c #292929",
"F. c #212121",
"G. c #F5F3F5",
"H. c #6E6A6E",
"I. c #464746",
"J. c #7E7D7E",
"K. c #929092",
"L. c #6E6D6E",
"M. c #202120",
"N. c #7C7C7C",
"O. c #EBE7EB",
"P. c #454345",
"Q. c #090909",
"R. c #090A09",
"S. c #0F0E0F",
"T. c #070607",
"U. c #595A59",
"V. c #D6D5D6",
"W. c #FEFDFE",
"X. c #545154",
"Y. c #060506",
"Z. c #060606",
"`. c #161616",
" + c #FCFAFC",
".+ c #6C686C",
"++ c #BFBDBF",
"@+ c #535253",
" ",
" ",
" ",
" ",
" ",
" ",
" ",
" ",
" ",
" . + ",
" . @ # ",
" . $ % & ",
" * * * . = - ; ",
" > , ' * ) . ! ~ ",
" * { ] ^ / ( _ : . . ",
" * < [ } | 1 2 3 * . 4 5 6 ",
" 7 8 ] 9 0 a b c d * . e f g ; ",
" * h ] i j k k l m n o * . p q r s ",
" * t u v w x y z A B C D * . E 5 F ",
" * G H I v J x K w L M N O P Q R ",
" * S T U V W X x x z Y Z ` .* .. ",
" * +.@.#.$.%.&.X x x z *.=.-.;.* ",
" >.,.'.).!.~.W *.x {.].^./.(.* ",
" _.:.<.[.}.|.1.2.J ].3.4.5.6.* ",
" * 7.] 8.9.0.a.b.c.d.e.f.g.h.* ",
" * i.j.k.l.m.n.o.p.q.r.9.s.t.u. ",
" * v.x ] w.>.x.y.z.A.B.C.D.E.* ",
" * F.] G.H.* * * * I.J.K.L.M.* ",
" * N.] O.P.* Q.R.S.Q.T. ",
" * U.V.W.X.Y. * * * ",
"Z.`.] +.+* ",
"{ V.++@+T. "};

39
src/xpm/display.xpm Executable file
View File

@ -0,0 +1,39 @@
/* XPM */
static char * display_xpm[] = {
"32 32 4 1",
" c None",
". c #00B506",
"+ c #0035F4",
"@ c #000000",
" ",
" ",
" ",
" ",
" ",
" ",
" .......... ",
" + + ........@. ",
" ++ ++@ ......@..@ ",
" +++ +++@ @@@@@...@ ",
" +++@ +++@ ...@ ",
" +++@ +++@ ...@ ",
" +++@ +++@ ...@ ",
" +++@ +++@ ...@ ",
" +++@ +++@ ...@ ",
" ++@++++++ ++@ ...... ..@ ",
" @++++++++ @@ ........ @@ ",
" ++++++@++ .. ......@@ ",
" @@@@@+++@ ... @@@@@@ ",
" +++@ ...@ ",
" +++@ ...@ ",
" +++@ ...@ ",
" +++@ ...@ ",
" +++@ ...@ ",
" ++@ ..@...... ",
" +@ .@........ ",
" @ .......... ",
" @@@@@@@@@@ ",
" ",
" ",
" ",
" "};

81
src/xpm/dmm_big.xpm Executable file
View File

@ -0,0 +1,81 @@
/* XPM */
static char * dmm_big_xpm[] = {
"64 64 14 1",
" c None",
". c #000000",
"+ c #7F7F7F",
"@ c #595959",
"# c #3A3A3A",
"$ c #C0D8C1",
"% c #FF0000",
"& c #FFFFFF",
"* c #969696",
"= c #FFEE00",
"- c #0019FF",
"; c #C4C4C4",
"> c #0022FF",
", c #141414",
" ",
" ",
" ............................................ ",
" .............................................. ",
" ...++++++++++++++++++++++++++++++++++++++++++... ",
" ...++@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@++... ",
" ..++@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@++.. ",
" ..+@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@#.. ",
" ..+@@@######################################@@@#.. ",
" ..+@@@#####################################+@@@#.. ",
" ..+@@@##$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$++@@@#.. ",
" ..+@@@##$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$++@@@#.. ",
" ..+@@@##$$......$$$$$$..$$..$$......$$..$$++@@@#.. ",
" ..+@@@##$$......$$$$$$..$$..$$......$$..$$++@@@#.. ",
" ..+@@@##$$$$$$..$$$$$$..$$..$$$$$$..$$..$$++@@@#.. ",
" ..+@@@##$$$$$$..$$$$$$..$$..$$$$$$..$$..$$++@@@#.. ",
" ..+@@@##$$......$$$$$$......$$......$$..$$++@@@#.. ",
" ..+@@@##$$......$$$$$$......$$......$$..$$++@@@#.. ",
" ..+@@@##$$$$$$..$$$$$$$$$$..$$..$$$$$$..$$++@@@#.. ",
" ..+@@@##$$$$$$..$$$$$$$$$$..$$..$$$$$$..$$++@@@#.. ",
" ..+@@@##$$......$$..$$$$$$..$$......$$..$$++@@@#.. ",
" ..+@@@##$$......$$..$$$$$$..$$......$$..$$++@@@#.. ",
" ..+@@@##$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$++@@@#.. ",
" ..+@@@##$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$++@@@#.. ",
" ..+@@@##$$.$$$$$$$$$$$.$$$$$$$$$$$$$$$$$$$++@@@#.. ",
" ..+@@@##$$.$.$.$.$.$.$.$.$.$$$$$$$$$$$$$$$++@@@#.. ",
" ..+@@@##$$.$.$.$.$.$.$.$.$.$$$$$$$$$$$$$$$++@@@#.. ",
" ..+@@@##$$.$.$.$.$.$.$.$.$.$$$$$$$$$$$$$$$++@@@#.. ",
" ..+@@@##$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$++@@@#.. ",
" ..+@@@##$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$++@@@#.. ",
" ..+@@@#+++++++++++++++++++++++++++++++++++++@@@#.. ",
" ..+@@@++++++++++++++++++++++++++++++++++++++@@@#.. ",
" ..+@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@#.. ",
" ..+@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@#.. ",
" ..+@@@%%%%@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@.. ",
" ..+@@%%%%%%@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@.. ",
" ..+@%%&&&&%%@@@@@@@@@@@@@@.....................#.. ",
" ..+@%%&%%&%%@@@@@@@@@@@........................#.. ",
" ..+@%%&&&&%%@@@@@@@@......*********************#.. ",
" ..+@%%&%%%%%@@@@@......************************#.. ",
" ..+@@%%%%%%@@@......************==******----***#.. ",
" ..+@@@%%%%@@.....***************=******--.---**#.. ",
" ..@@@@@@@@....****************===**=**-----.--*#.. ",
" ..@@@@@.....******************=**===**-.------*#.. ",
" ..+.......**********;;;;****;;********------.-*#.. ",
" ..+....*************;;;;****;;********--.-----*#.. ",
" ..+***********;;********************;;*---.--**#.. ",
" ..+***********;;********************;;**----***#.. ",
" ..+*==************====;;;;;;;;;;****;;*********#.. ",
" ..+*==**********;;=====;;;;;;;;;;;**;;*********#.. ",
" ..+*==**;;****;;;;======;;;;;;;;;;;;***********#.. ",
" ..+*==**;;***;;;;;;=====;;;;;;;;;;;;;**********#.. ",
" ..+*==;;****;;;;;;;............;;;;;>>****;;***#.. ",
" ..+*==;;***;;;;;;................;;>>>>***;;***#.. ",
" ..+*==****;;;;;;..................>>>>>>**;;***#.. ",
" ..+*==****;;;;;....................>>>>>**;;***#.. ",
" ..+*==***;;;;;..&&..#########.......>>>>>******#.. ",
" ..+*==***%;;;...&&&..##########......>>>>******#.. ",
" ..+*==**%%%%.....&&&,,##########......>>>>*****#.. ",
" ..+*==**%%%%....##&&&,.##########.....>>>>*****#.. ",
" ..+*==**%%%.....##,&&,.,#########......>>>*****#.. ",
" ..+*==**%%%....####,,,,,##########.....>>>*****#.. ",
" ######################################.########### ",
" ################################################## "};

View File

@ -4,7 +4,7 @@ static char * graph_xpm[] = {
" c None",
". c #000000",
"+ c #939393",
"@ c #08AD00",
"@ c #001ECC",
" ",
" . + + + + ",
" . + + + + ",

View File

@ -1,39 +1,117 @@
/* XPM */
static char * integration_xpm[] = {
"32 32 4 1",
"32 32 82 1",
" c None",
". c #0033FF",
"+ c #114811",
"@ c #00A500",
" ",
" ",
" .... ",
" .. ... ",
" .. ... ",
" .. . ",
" ... ",
" .. ",
" .. ",
" .. ",
" ... +@@@ @@@@ ",
" ... @@ @@@ @@ @@ ",
" ... @@ @@@@ @@@ ",
" ... @ @@@ @@@ ",
" ... @ @@ @ ",
" .. @@@ ",
" .. @@ ",
" ... @@ ",
" ... @@@ ",
" ... @ @@ @ ",
" ... @@@ @@@ @ ",
" ... @@@ @@@@ @@ ",
" .. @@ @@ @@@ @@ ",
" .. @@@@ @@@@ ",
" .. ",
" ... ",
" . .. ",
" ... .. ",
" ... .. ",
" .... ",
". c #FFFFFF",
"+ c #FAFAFA",
"@ c #F4F4F4",
"# c #F2F2F2",
"$ c #F9F9F9",
"% c #EAEAEA",
"& c #747474",
"* c #4A4A4A",
"= c #2D2D2D",
"- c #E8E8E8",
"; c #545454",
"> c #1A1A1A",
", c #343434",
"' c #0B0B0B",
") c #040404",
"! c #525252",
"~ c #EEEEEE",
"{ c #1E1E1E",
"] c #151515",
"^ c #8B8B8B",
"/ c #323232",
"( c #575757",
"_ c #FEFEFE",
": c #C9C9C9",
"< c #0F0F0F",
"[ c #1B1B1B",
"} c #ADADAD",
"| c #EDEDED",
"1 c #464646",
"2 c #070707",
"3 c #444444",
"4 c #FDFDFD",
"5 c #F1F1F1",
"6 c #0E0E0E",
"7 c #CBCBCB",
"8 c #191919",
"9 c #ECECEC",
"0 c #C8C8C8",
"a c #0D0D0D",
"b c #EFEFEF",
"c c #F3F3F3",
"d c #F5F5F5",
"e c #3F3F3F",
"f c #020202",
"g c #858585",
"h c #363636",
"i c #4F4F4F",
"j c #E4E4E4",
"k c #EBEBEB",
"l c #7E7E7E",
"m c #717171",
"n c #777777",
"o c #F0F0F0",
"p c #171717",
"q c #000000",
"r c #121212",
"s c #656565",
"t c #8E8E8E",
"u c #2A2A2A",
"v c #080808",
"w c #212121",
"x c #5C5C5C",
"y c #B5B5B5",
"z c #101010",
"A c #E9E9E9",
"B c #484848",
"C c #F7F7F7",
"D c #373737",
"E c #030303",
"F c #9A9A9A",
"G c #E1E1E1",
"H c #CDCDCD",
"I c #4D4D4D",
"J c #FCFCFC",
"K c #FBFBFB",
"L c #050505",
"M c #0C0C0C",
"N c #F8F8F8",
"O c #3B3B3B",
"P c #060606",
"Q c #595959",
" ",
" .+@#$. ",
" .%&*=*-. ",
" $;>,')!+ ",
" ~{]^/'(+ ",
" _:<[%~}|. ",
" $1234._. ",
" 5{67. ",
" |889 ",
" _0a8b .+@c$. .+dd+. ",
" $ef]b _9g;hij4k^lmn%. ",
" opqr~ .ks(tuvwn!xy!zi$ ",
" brqrb +^sA40af'B|CDE{c ",
" ~rqpo CFG_ C/f'H._('I$ ",
" b]fe$ J-K JmL8o .~}|. ",
" 9pM0_ ._. NOP3$ ._. ",
" _0Mp9 ~[6:_ ",
" $ef]b _:6[~ ",
" opqr~ ._. $3PON ._. ",
" brqrb .|}~. o8LmJ K-J ",
" ~rqpo $I'(_.H'f/C _GFC ",
" b]fe$ c{EDC|B'fa04As^+ ",
" b8a0_ $iz!yx!nwvut(sk. ",
" 988| .%nml^k4jih;g9_ ",
" .76{5 .+dd+. .$c@+. ",
" ._.4321$ ",
".o}~%[<:_ ",
".Q'/^]{~ ",
".;)',>;$ ",
".k*=*&%. ",
" .$#@+. ",
" "};

View File

@ -0,0 +1,39 @@
/* XPM */
static char * integration_old_xpm[] = {
"32 32 4 1",
" c None",
". c #0033FF",
"+ c #114811",
"@ c #00A500",
" ",
" ",
" .... ",
" .. ... ",
" .. ... ",
" .. . ",
" ... ",
" .. ",
" .. ",
" .. ",
" ... +@@@ @@@@ ",
" ... @@ @@@ @@ @@ ",
" ... @@ @@@@ @@@ ",
" ... @ @@@ @@@ ",
" ... @ @@ @ ",
" .. @@@ ",
" .. @@ ",
" ... @@ ",
" ... @@@ ",
" ... @ @@ @ ",
" ... @@@ @@@ @ ",
" ... @@@ @@@@ @@ ",
" .. @@ @@ @@@ @@ ",
" .. @@@@ @@@@ ",
" .. ",
" ... ",
" . .. ",
" ... .. ",
" ... .. ",
" .... ",
" ",
" "};

69
src/xpm/obsolete/eight.xpm Executable file
View File

@ -0,0 +1,69 @@
/* XPM */
static char * eight_xpm[] = {
"38 64 2 1",
" c None",
". c #000000",
" ",
" ",
" ...................... ... ",
" ........................ ..... ",
" ........................ ...... ",
" . ....................... ...... ",
" ... ..................... ........ ",
" .... .................... ........ ",
" ..... ................... ........ ",
" ...... .................. ........ ",
" ....... ........ ",
" ........ ........ ",
" ........ ........ ",
" ........ ........ ",
" ........ ........ ",
" ........ ........ ",
" ........ ........ ",
" ........ ........ ",
" ........ ........ ",
" ........ ........ ",
" ........ ........ ",
" ........ ........ ",
" ........ ........ ",
" ........ ........ ",
" ........ ........ ",
" ........ ........ ",
" ........ ........ ",
" ........ ........ ",
" ....... .................. ....... ",
" ...... .................... ...... ",
" ..... ...................... ..... ",
" ... ........................ ... ",
" .......................... ",
" ... ........................ ... ",
" ..... ...................... ..... ",
" ...... .................... ...... ",
" ....... .................. ....... ",
" ........ ........ ",
" ........ ........ ",
" ........ ........ ",
" ........ ........ ",
" ........ ........ ",
" ........ ........ ",
" ........ ........ ",
" ........ ........ ",
" ........ ........ ",
" ........ ........ ",
" ........ ........ ",
" ........ ........ ",
" ........ ........ ",
" ........ ........ ",
" ........ ........ ",
" ........ ........ ",
" ........ ........ ",
" ........ ................ ........ ",
" ....... ................. ........ ",
" ...... ................... ....... ",
" ..... .................... ....... ",
" ... ...................... ..... ",
" .. ....................... ..... ",
" ......................... ... ",
" ........................ . ",
" ",
" "};

View File

@ -0,0 +1,26 @@
/* XPM */
static char * eight_small_xpm[] = {
"12 21 2 1",
" c None",
". c #000000",
" .......... ",
". ........ .",
".. ...... ..",
"... ...",
"... ...",
"... ...",
"... ...",
"... ...",
"... ...",
".. ...... ..",
" ........ ",
".. ...... ..",
"... ...",
"... ...",
"... ...",
"... ...",
"... ...",
"... ...",
".. ...... ..",
". ........ .",
" .......... "};

19
src/xpm/obsolete/eight_tiny.xpm Executable file
View File

@ -0,0 +1,19 @@
/* XPM */
static char * eight_tiny_xpm[] = {
"8 14 2 1",
" c None",
". c #000000",
" ...... ",
". .... .",
".. ..",
".. ..",
".. ..",
".. ..",
". .... .",
". .... .",
".. ..",
".. ..",
".. ..",
".. ..",
". .... .",
" ...... "};

69
src/xpm/obsolete/five.xpm Executable file
View File

@ -0,0 +1,69 @@
/* XPM */
static char * five_xpm[] = {
"38 64 2 1",
" c None",
". c #000000",
" ",
" ",
" ...................... ",
" ........................ ",
" ........................ ",
" . ....................... ",
" ... ..................... ",
" .... .................... ",
" ..... ................... ",
" ...... .................. ",
" ....... ",
" ........ ",
" ........ ",
" ........ ",
" ........ ",
" ........ ",
" ........ ",
" ........ ",
" ........ ",
" ........ ",
" ........ ",
" ........ ",
" ........ ",
" ........ ",
" ........ ",
" ........ ",
" ........ ",
" ........ ",
" ....... .................. ",
" ...... .................... ",
" ..... ...................... ",
" ... ........................ ",
" .......................... ",
" ........................ ... ",
" ...................... ..... ",
" .................... ...... ",
" .................. ....... ",
" ........ ",
" ........ ",
" ........ ",
" ........ ",
" ........ ",
" ........ ",
" ........ ",
" ........ ",
" ........ ",
" ........ ",
" ........ ",
" ........ ",
" ........ ",
" ........ ",
" ........ ",
" ........ ",
" ........ ",
" ................ ........ ",
" ................. ........ ",
" ................... ....... ",
" .................... ....... ",
" ...................... ..... ",
" ....................... ..... ",
" ......................... ... ",
" ........................ . ",
" ",
" "};

26
src/xpm/obsolete/five_small.xpm Executable file
View File

@ -0,0 +1,26 @@
/* XPM */
static char * five_small_xpm[] = {
"12 21 2 1",
" c None",
". c #000000",
" .......... ",
". ........ ",
".. ...... ",
"... ",
"... ",
"... ",
"... ",
"... ",
"... ",
".. ...... ",
" ........ ",
" ...... ..",
" ...",
" ...",
" ...",
" ...",
" ...",
" ...",
" ...... ..",
" ........ .",
" .......... "};

69
src/xpm/obsolete/four.xpm Executable file
View File

@ -0,0 +1,69 @@
/* XPM */
static char * four_xpm[] = {
"38 64 2 1",
" c None",
". c #000000",
" ",
" ",
" ... ",
" ..... ",
" ...... ",
" . ...... ",
" ... ........ ",
" .... ........ ",
" ..... ........ ",
" ...... ........ ",
" ....... ........ ",
" ........ ........ ",
" ........ ........ ",
" ........ ........ ",
" ........ ........ ",
" ........ ........ ",
" ........ ........ ",
" ........ ........ ",
" ........ ........ ",
" ........ ........ ",
" ........ ........ ",
" ........ ........ ",
" ........ ........ ",
" ........ ........ ",
" ........ ........ ",
" ........ ........ ",
" ........ ........ ",
" ........ ........ ",
" ....... .................. ....... ",
" ...... .................... ...... ",
" ..... ...................... ..... ",
" ... ........................ ... ",
" .......................... ",
" ........................ ... ",
" ...................... ..... ",
" .................... ...... ",
" .................. ....... ",
" ........ ",
" ........ ",
" ........ ",
" ........ ",
" ........ ",
" ........ ",
" ........ ",
" ........ ",
" ........ ",
" ........ ",
" ........ ",
" ........ ",
" ........ ",
" ........ ",
" ........ ",
" ........ ",
" ........ ",
" ........ ",
" ........ ",
" ....... ",
" ....... ",
" ..... ",
" ..... ",
" ... ",
" . ",
" ",
" "};

26
src/xpm/obsolete/four_small.xpm Executable file
View File

@ -0,0 +1,26 @@
/* XPM */
static char * four_small_xpm[] = {
"12 21 2 1",
" c None",
". c #000000",
" ",
". .",
".. ..",
"... ...",
"... ...",
"... ...",
"... ...",
"... ...",
"... ...",
".. ...... ..",
" ........ ",
" ...... ..",
" ...",
" ...",
" ...",
" ...",
" ...",
" ...",
" ..",
" .",
" "};

69
src/xpm/obsolete/nine.xpm Executable file
View File

@ -0,0 +1,69 @@
/* XPM */
static char * nine_xpm[] = {
"38 64 2 1",
" c None",
". c #000000",
" ",
" ",
" ...................... ... ",
" ........................ ..... ",
" ........................ ...... ",
" . ....................... ...... ",
" ... ..................... ........ ",
" .... .................... ........ ",
" ..... ................... ........ ",
" ...... .................. ........ ",
" ....... ........ ",
" ........ ........ ",
" ........ ........ ",
" ........ ........ ",
" ........ ........ ",
" ........ ........ ",
" ........ ........ ",
" ........ ........ ",
" ........ ........ ",
" ........ ........ ",
" ........ ........ ",
" ........ ........ ",
" ........ ........ ",
" ........ ........ ",
" ........ ........ ",
" ........ ........ ",
" ........ ........ ",
" ........ ........ ",
" ....... .................. ....... ",
" ...... .................... ...... ",
" ..... ...................... ..... ",
" ... ........................ ... ",
" .......................... ",
" ........................ ... ",
" ...................... ..... ",
" .................... ...... ",
" .................. ....... ",
" ........ ",
" ........ ",
" ........ ",
" ........ ",
" ........ ",
" ........ ",
" ........ ",
" ........ ",
" ........ ",
" ........ ",
" ........ ",
" ........ ",
" ........ ",
" ........ ",
" ........ ",
" ........ ",
" ........ ",
" ................ ........ ",
" ................. ........ ",
" ................... ....... ",
" .................... ....... ",
" ...................... ..... ",
" ....................... ..... ",
" ......................... ... ",
" ........................ . ",
" ",
" "};

26
src/xpm/obsolete/nine_small.xpm Executable file
View File

@ -0,0 +1,26 @@
/* XPM */
static char * nine_small_xpm[] = {
"12 21 2 1",
" c None",
". c #000000",
" .......... ",
". ........ .",
".. ...... ..",
"... ...",
"... ...",
"... ...",
"... ...",
"... ...",
"... ...",
".. ...... ..",
" ........ ",
" ...... ..",
" ...",
" ...",
" ...",
" ...",
" ...",
" ...",
" ...... ..",
" ........ .",
" .......... "};

19
src/xpm/obsolete/nine_tiny.xpm Executable file
View File

@ -0,0 +1,19 @@
/* XPM */
static char * nine_tiny_xpm[] = {
"8 14 2 1",
" c None",
". c #000000",
" ...... ",
". .... .",
".. ..",
".. ..",
".. ..",
".. ..",
". .... .",
". .... .",
".. ..",
".. ..",
".. ..",
".. ..",
". .... .",
" ...... "};

69
src/xpm/obsolete/one.xpm Executable file
View File

@ -0,0 +1,69 @@
/* XPM */
static char * one_xpm[] = {
"38 64 2 1",
" c None",
". c #000000",
" ",
" ",
" ... ",
" ..... ",
" ...... ",
" ...... ",
" ........ ",
" ........ ",
" ........ ",
" ........ ",
" ........ ",
" ........ ",
" ........ ",
" ........ ",
" ........ ",
" ........ ",
" ........ ",
" ........ ",
" ........ ",
" ........ ",
" ........ ",
" ........ ",
" ........ ",
" ........ ",
" ........ ",
" ........ ",
" ........ ",
" ........ ",
" ....... ",
" ...... ",
" ..... ",
" ... ",
" ",
" ... ",
" ..... ",
" ...... ",
" ....... ",
" ........ ",
" ........ ",
" ........ ",
" ........ ",
" ........ ",
" ........ ",
" ........ ",
" ........ ",
" ........ ",
" ........ ",
" ........ ",
" ........ ",
" ........ ",
" ........ ",
" ........ ",
" ........ ",
" ........ ",
" ........ ",
" ........ ",
" ....... ",
" ....... ",
" ..... ",
" ..... ",
" ... ",
" . ",
" ",
" "};

26
src/xpm/obsolete/one_small.xpm Executable file
View File

@ -0,0 +1,26 @@
/* XPM */
static char * one_small_xpm[] = {
"12 21 2 1",
" c None",
". c #000000",
" ",
" .",
" ..",
" ...",
" ...",
" ...",
" ...",
" ...",
" ...",
" ..",
" ",
" ..",
" ...",
" ...",
" ...",
" ...",
" ...",
" ...",
" ..",
" .",
" "};

69
src/xpm/obsolete/seven.xpm Executable file
View File

@ -0,0 +1,69 @@
/* XPM */
static char * seven_xpm[] = {
"38 64 2 1",
" c None",
". c #000000",
" ",
" ",
" ...................... ... ",
" ........................ ..... ",
" ........................ ...... ",
" ....................... ...... ",
" ..................... ........ ",
" .................... ........ ",
" ................... ........ ",
" .................. ........ ",
" ........ ",
" ........ ",
" ........ ",
" ........ ",
" ........ ",
" ........ ",
" ........ ",
" ........ ",
" ........ ",
" ........ ",
" ........ ",
" ........ ",
" ........ ",
" ........ ",
" ........ ",
" ........ ",
" ........ ",
" ........ ",
" ....... ",
" ...... ",
" ..... ",
" ... ",
" ",
" ... ",
" ..... ",
" ...... ",
" ....... ",
" ........ ",
" ........ ",
" ........ ",
" ........ ",
" ........ ",
" ........ ",
" ........ ",
" ........ ",
" ........ ",
" ........ ",
" ........ ",
" ........ ",
" ........ ",
" ........ ",
" ........ ",
" ........ ",
" ........ ",
" ........ ",
" ........ ",
" ....... ",
" ....... ",
" ..... ",
" ..... ",
" ... ",
" . ",
" ",
" "};

View File

@ -0,0 +1,26 @@
/* XPM */
static char * seven_small_xpm[] = {
"12 21 2 1",
" c None",
". c #000000",
" .......... ",
" ........ .",
" ...... ..",
" ...",
" ...",
" ...",
" ...",
" ...",
" ...",
" ..",
" ",
" ..",
" ...",
" ...",
" ...",
" ...",
" ...",
" ...",
" ..",
" .",
" "};

19
src/xpm/obsolete/seven_tiny.xpm Executable file
View File

@ -0,0 +1,19 @@
/* XPM */
static char * seven_tiny_xpm[] = {
"8 14 2 1",
" c None",
". c #000000",
" ...... ",
". .... .",
".. ..",
".. ..",
".. ..",
".. ..",
". .... .",
". .... .",
".. ..",
".. ..",
".. ..",
".. ..",
". .... .",
" ...... "};

69
src/xpm/obsolete/six.xpm Executable file
View File

@ -0,0 +1,69 @@
/* XPM */
static char * six_xpm[] = {
"38 64 2 1",
" c None",
". c #000000",
" ",
" ",
" ...................... ",
" ........................ ",
" ........................ ",
" . ....................... ",
" ... ..................... ",
" .... .................... ",
" ..... ................... ",
" ...... .................. ",
" ....... ",
" ........ ",
" ........ ",
" ........ ",
" ........ ",
" ........ ",
" ........ ",
" ........ ",
" ........ ",
" ........ ",
" ........ ",
" ........ ",
" ........ ",
" ........ ",
" ........ ",
" ........ ",
" ........ ",
" ........ ",
" ....... .................. ",
" ...... .................... ",
" ..... ...................... ",
" ... ........................ ",
" .......................... ",
" ... ........................ ... ",
" ..... ...................... ..... ",
" ...... .................... ...... ",
" ....... .................. ....... ",
" ........ ........ ",
" ........ ........ ",
" ........ ........ ",
" ........ ........ ",
" ........ ........ ",
" ........ ........ ",
" ........ ........ ",
" ........ ........ ",
" ........ ........ ",
" ........ ........ ",
" ........ ........ ",
" ........ ........ ",
" ........ ........ ",
" ........ ........ ",
" ........ ........ ",
" ........ ........ ",
" ........ ........ ",
" ........ ................ ........ ",
" ....... ................. ........ ",
" ...... ................... ....... ",
" ..... .................... ....... ",
" ... ...................... ..... ",
" .. ....................... ..... ",
" ......................... ... ",
" ........................ . ",
" ",
" "};

26
src/xpm/obsolete/six_small.xpm Executable file
View File

@ -0,0 +1,26 @@
/* XPM */
static char * six_small_xpm[] = {
"12 21 2 1",
" c None",
". c #000000",
" .......... ",
". ........ ",
".. ...... ",
"... ",
"... ",
"... ",
"... ",
"... ",
"... ",
".. ...... ",
" ........ ",
".. ...... ..",
"... ...",
"... ...",
"... ...",
"... ...",
"... ...",
"... ...",
".. ...... ..",
". ........ .",
" .......... "};

69
src/xpm/obsolete/three.xpm Executable file
View File

@ -0,0 +1,69 @@
/* XPM */
static char * three_xpm[] = {
"38 64 2 1",
" c None",
". c #000000",
" ",
" ",
" ...................... ... ",
" ........................ ..... ",
" ........................ ...... ",
" ....................... ...... ",
" ..................... ........ ",
" .................... ........ ",
" ................... ........ ",
" .................. ........ ",
" ........ ",
" ........ ",
" ........ ",
" ........ ",
" ........ ",
" ........ ",
" ........ ",
" ........ ",
" ........ ",
" ........ ",
" ........ ",
" ........ ",
" ........ ",
" ........ ",
" ........ ",
" ........ ",
" ........ ",
" ........ ",
" .................. ....... ",
" .................... ...... ",
" ...................... ..... ",
" ........................ ... ",
" .......................... ",
" ........................ ... ",
" ...................... ..... ",
" .................... ...... ",
" .................. ....... ",
" ........ ",
" ........ ",
" ........ ",
" ........ ",
" ........ ",
" ........ ",
" ........ ",
" ........ ",
" ........ ",
" ........ ",
" ........ ",
" ........ ",
" ........ ",
" ........ ",
" ........ ",
" ........ ",
" ........ ",
" ................ ........ ",
" ................. ........ ",
" ................... ....... ",
" .................... ....... ",
" ...................... ..... ",
" ....................... ..... ",
" ......................... ... ",
" ........................ . ",
" ",
" "};

View File

@ -0,0 +1,26 @@
/* XPM */
static char * three_small_xpm[] = {
"12 21 2 1",
" c None",
". c #000000",
" .......... ",
" ........ .",
" ...... ..",
" ...",
" ...",
" ...",
" ...",
" ...",
" ...",
" ...... ..",
" ........ ",
" ...... ..",
" ...",
" ...",
" ...",
" ...",
" ...",
" ...",
" ...... ..",
" ........ .",
" .......... "};

69
src/xpm/obsolete/two.xpm Executable file
View File

@ -0,0 +1,69 @@
/* XPM */
static char * two_xpm[] = {
"38 64 2 1",
" c None",
". c #000000",
" ",
" ",
" ...................... ... ",
" ........................ ..... ",
" ........................ ...... ",
" ....................... ...... ",
" ..................... ........ ",
" .................... ........ ",
" ................... ........ ",
" .................. ........ ",
" ........ ",
" ........ ",
" ........ ",
" ........ ",
" ........ ",
" ........ ",
" ........ ",
" ........ ",
" ........ ",
" ........ ",
" ........ ",
" ........ ",
" ........ ",
" ........ ",
" ........ ",
" ........ ",
" ........ ",
" ........ ",
" .................. ....... ",
" .................... ...... ",
" ...................... ..... ",
" ........................ ... ",
" .......................... ",
" ... ........................ ",
" ..... ...................... ",
" ...... .................... ",
" ....... .................. ",
" ........ ",
" ........ ",
" ........ ",
" ........ ",
" ........ ",
" ........ ",
" ........ ",
" ........ ",
" ........ ",
" ........ ",
" ........ ",
" ........ ",
" ........ ",
" ........ ",
" ........ ",
" ........ ",
" ........ ",
" ........ ................ ",
" ....... ................. ",
" ...... ................... ",
" ..... .................... ",
" ... ...................... ",
" .. ....................... ",
" ......................... ",
" ........................ ",
" ",
" "};

26
src/xpm/obsolete/two_small.xpm Executable file
View File

@ -0,0 +1,26 @@
/* XPM */
static char * two_small_xpm[] = {
"12 21 2 1",
" c None",
". c #000000",
" .......... ",
" ........ .",
" ...... ..",
" ...",
" ...",
" ...",
" ...",
" ...",
" ...",
" ...... ..",
" ........ ",
".. ...... ",
"... ",
"... ",
"... ",
"... ",
"... ",
"... ",
".. ...... ",
". ........ ",
" .......... "};

69
src/xpm/obsolete/zero.xpm Executable file
View File

@ -0,0 +1,69 @@
/* XPM */
static char * zero_xpm[] = {
"38 64 2 1",
" c None",
". c #000000",
" ",
" ",
" ...................... ... ",
" ........................ ..... ",
" ........................ ...... ",
" . ....................... ...... ",
" ... ..................... ........ ",
" .... .................... ........ ",
" ..... ................... ........ ",
" ...... .................. ........ ",
" ....... ........ ",
" ........ ........ ",
" ........ ........ ",
" ........ ........ ",
" ........ ........ ",
" ........ ........ ",
" ........ ........ ",
" ........ ........ ",
" ........ ........ ",
" ........ ........ ",
" ........ ........ ",
" ........ ........ ",
" ........ ........ ",
" ........ ........ ",
" ........ ........ ",
" ........ ........ ",
" ........ ........ ",
" ........ ........ ",
" ....... ....... ",
" ...... ...... ",
" ..... ..... ",
" ... ... ",
" ",
" ... ... ",
" ..... ..... ",
" ...... ...... ",
" ....... ....... ",
" ........ ........ ",
" ........ ........ ",
" ........ ........ ",
" ........ ........ ",
" ........ ........ ",
" ........ ........ ",
" ........ ........ ",
" ........ ........ ",
" ........ ........ ",
" ........ ........ ",
" ........ ........ ",
" ........ ........ ",
" ........ ........ ",
" ........ ........ ",
" ........ ........ ",
" ........ ........ ",
" ........ ........ ",
" ........ ................ ........ ",
" ....... ................. ........ ",
" ...... ................... ....... ",
" ..... .................... ....... ",
" ... ...................... ..... ",
" .. ....................... ..... ",
" ......................... ... ",
" ........................ . ",
" ",
" "};

26
src/xpm/obsolete/zero_small.xpm Executable file
View File

@ -0,0 +1,26 @@
/* XPM */
static char * zero_small_xpm[] = {
"12 21 2 1",
" c None",
". c #000000",
" .......... ",
". ........ .",
".. ...... ..",
"... ...",
"... ...",
"... ...",
"... ...",
"... ...",
"... ...",
".. ..",
" ",
".. ..",
"... ...",
"... ...",
"... ...",
"... ...",
"... ...",
"... ...",
".. ...... ..",
". ........ .",
" .......... "};