summaryrefslogtreecommitdiff
path: root/Bus
diff options
context:
space:
mode:
authorfcolin2007-02-01 13:29:31 +0000
committerfcolin2007-02-01 13:29:31 +0000
commitafe2e7dfc1388cad991e8d38dda7d648c137aa52 (patch)
tree92bf63d2b2b34a805927aa294c7c51912638f66a /Bus
parent0be65f8a110ee9bf5da9c93e0bd5b5b62b3bad0c (diff)
parent04c263c314499e38d64af9d4a1aa5e2b8d9d5ead (diff)
downloadivy-cplusplus-windows@3001.zip
ivy-cplusplus-windows@3001.tar.gz
ivy-cplusplus-windows@3001.tar.bz2
ivy-cplusplus-windows@3001.tar.xz
modif struct svnwindows@3001
Diffstat (limited to 'Bus')
-rw-r--r--Bus/Bus.dsw147
-rw-r--r--Bus/Bus.sln105
-rw-r--r--Bus/Bus.vssscc10
-rw-r--r--Bus/Horloge/Curvefit.cpp235
-rw-r--r--Bus/Horloge/Curvefit.h15
-rw-r--r--Bus/Horloge/Digistring.cpp904
-rw-r--r--Bus/Horloge/Digistring.h187
-rw-r--r--Bus/Horloge/Horloge.cpp74
-rw-r--r--Bus/Horloge/Horloge.dsp199
-rw-r--r--Bus/Horloge/Horloge.h50
-rw-r--r--Bus/Horloge/Horloge.rc194
-rw-r--r--Bus/Horloge/Horloge.vcproj535
-rw-r--r--Bus/Horloge/Horloge.vcproj.vspscc10
-rw-r--r--Bus/Horloge/HorlogeDlg.cpp347
-rw-r--r--Bus/Horloge/HorlogeDlg.h82
-rw-r--r--Bus/Horloge/HorlogeParseCmdLine.cpp58
-rw-r--r--Bus/Horloge/HorlogeParseCmdLine.h31
-rw-r--r--Bus/Horloge/MemDC.h104
-rw-r--r--Bus/Horloge/ReadMe.txt88
-rw-r--r--Bus/Horloge/Rgbcolor.h40
-rw-r--r--Bus/Horloge/StdAfx.cpp8
-rw-r--r--Bus/Horloge/StdAfx.h84
-rw-r--r--Bus/Horloge/res/Horloge.icobin766 -> 0 bytes
-rw-r--r--Bus/Horloge/res/Horloge.rc213
-rw-r--r--Bus/Horloge/res/ico00001.icobin4534 -> 0 bytes
-rw-r--r--Bus/Horloge/res/ico00002.icobin766 -> 0 bytes
-rw-r--r--Bus/Horloge/res/ico00003.icobin766 -> 0 bytes
-rw-r--r--Bus/Horloge/res/ico00004.icobin766 -> 0 bytes
-rw-r--r--Bus/Horloge/res/icon1.icobin766 -> 0 bytes
-rw-r--r--Bus/Horloge/resource.h44
-rw-r--r--Bus/Ivy/BufferedSocket.cxx168
-rw-r--r--Bus/Ivy/BufferedSocket.h36
-rw-r--r--Bus/Ivy/DataTypes.h328
-rw-r--r--Bus/Ivy/InstIvy/InstIvy.sln42
-rw-r--r--Bus/Ivy/InstIvy/InstIvy.vdproj282
-rw-r--r--Bus/Ivy/InstIvy/InstIvy.vdproj.vspscc10
-rw-r--r--Bus/Ivy/InstIvy/InstIvy.vssscc10
-rw-r--r--Bus/Ivy/InstIvyDev/InstIvyDev.sln21
-rw-r--r--Bus/Ivy/InstIvyDev/InstIvyDev.vdproj1042
-rw-r--r--Bus/Ivy/InstIvyDev/InstIvyDev.vdproj.vspscc10
-rw-r--r--Bus/Ivy/InstallSource/InstallSource.vdproj728
-rw-r--r--Bus/Ivy/InstallSource/InstallSource.vdproj.vspscc10
-rw-r--r--Bus/Ivy/Ivy.cxx437
-rw-r--r--Bus/Ivy/Ivy.dsp196
-rw-r--r--Bus/Ivy/Ivy.h119
-rw-r--r--Bus/Ivy/Ivy.vcproj590
-rw-r--r--Bus/Ivy/Ivy.vcproj.vspscc10
-rw-r--r--Bus/Ivy/IvyApplication.cxx375
-rw-r--r--Bus/Ivy/IvyApplication.h69
-rw-r--r--Bus/Ivy/IvyBinding.cxx189
-rw-r--r--Bus/Ivy/IvyBinding.h58
-rw-r--r--Bus/Ivy/IvyCallback.h180
-rw-r--r--Bus/Ivy/IvyCbindings.cxx129
-rw-r--r--Bus/Ivy/IvyCbindings.h108
-rw-r--r--Bus/Ivy/IvyDllMain.cpp42
-rw-r--r--Bus/Ivy/IvyLib/IvyLib.vdproj264
-rw-r--r--Bus/Ivy/IvyLib/IvyLib.vdproj.vspscc10
-rw-r--r--Bus/Ivy/IvyStdAfx.cpp27
-rw-r--r--Bus/Ivy/IvyStdAfx.h91
-rw-r--r--Bus/Ivy/IvySynchroWnd.cxx243
-rw-r--r--Bus/Ivy/IvySynchroWnd.h109
-rw-r--r--Bus/Ivy/IvyWatcher.cxx124
-rw-r--r--Bus/Ivy/IvyWatcher.h34
-rw-r--r--Bus/Ivy/Regexp.cxx1758
-rw-r--r--Bus/Ivy/Regexp.h41
-rw-r--r--Bus/Ivy/ThreadedSocket.cxx547
-rw-r--r--Bus/Ivy/ThreadedSocket.h135
-rw-r--r--Bus/Ivy/intervalRegexp.c432
-rw-r--r--Bus/Ivy/intervalRegexp.h14
-rw-r--r--Bus/IvyAudioMon/InstIvyAudioMonitor/InstIvyAudioMonitor.vdproj811
-rw-r--r--Bus/IvyAudioMon/InstIvyAudioMonitor/InstIvyAudioMonitor.vdproj.vspscc10
-rw-r--r--Bus/IvyAudioMon/IvyAudioMon.exe.manifest22
-rw-r--r--Bus/IvyAudioMon/IvyAudioMon.sln54
-rw-r--r--Bus/IvyAudioMon/IvyAudioMon.vssscc10
-rw-r--r--Bus/IvyAudioMon/Meter.cpp72
-rw-r--r--Bus/IvyAudioMon/Meter.h49
-rw-r--r--Bus/IvyAudioMon/Meter.rc206
-rw-r--r--Bus/IvyAudioMon/Meter.vcproj250
-rw-r--r--Bus/IvyAudioMon/Meter.vcproj.vspscc10
-rw-r--r--Bus/IvyAudioMon/MeterDlg.cpp365
-rw-r--r--Bus/IvyAudioMon/MeterDlg.h80
-rw-r--r--Bus/IvyAudioMon/ParseCmdLine.cpp76
-rw-r--r--Bus/IvyAudioMon/ParseCmdLine.h37
-rw-r--r--Bus/IvyAudioMon/StdAfx.cpp6
-rw-r--r--Bus/IvyAudioMon/StdAfx.h28
-rw-r--r--Bus/IvyAudioMon/res/Meter.icobin318 -> 0 bytes
-rw-r--r--Bus/IvyAudioMon/res/Meter.rc213
-rw-r--r--Bus/IvyAudioMon/resource.h30
-rw-r--r--Bus/IvyCursor/InstIvyCursor/InstIvyCursor.vdproj797
-rw-r--r--Bus/IvyCursor/InstIvyCursor/InstIvyCursor.vdproj.vspscc10
-rw-r--r--Bus/IvyCursor/IvyCursor.cpp325
-rw-r--r--Bus/IvyCursor/IvyCursor.h3
-rw-r--r--Bus/IvyCursor/IvyCursor.icobin22534 -> 0 bytes
-rw-r--r--Bus/IvyCursor/IvyCursor.rc115
-rw-r--r--Bus/IvyCursor/IvyCursor.sln55
-rw-r--r--Bus/IvyCursor/IvyCursor.vcproj177
-rw-r--r--Bus/IvyCursor/IvyCursor.vcproj.vspscc10
-rw-r--r--Bus/IvyCursor/IvyCursor.vssscc10
-rw-r--r--Bus/IvyCursor/ReadMe.txt53
-rw-r--r--Bus/IvyCursor/resource.h28
-rw-r--r--Bus/IvyCursor/small.icobin23558 -> 0 bytes
-rw-r--r--Bus/IvyCursor/stdafx.cpp8
-rw-r--r--Bus/IvyCursor/stdafx.h18
-rw-r--r--Bus/IvyFileMon/C++/Bus/IvyFileMon/IvyFileMon.vssccbin46 -> 0 bytes
-rw-r--r--Bus/IvyFileMon/DelayedDirectoryChangeHandler.cpp1414
-rw-r--r--Bus/IvyFileMon/DelayedDirectoryChangeHandler.h336
-rw-r--r--Bus/IvyFileMon/DirectoryChanges.cpp2026
-rw-r--r--Bus/IvyFileMon/DirectoryChanges.h493
-rw-r--r--Bus/IvyFileMon/HistoryEdit.cpp82
-rw-r--r--Bus/IvyFileMon/HistoryEdit.h65
-rw-r--r--Bus/IvyFileMon/InstIvyFileMon/InstIvyFileMon.vdproj795
-rw-r--r--Bus/IvyFileMon/InstIvyFileMon/InstIvyFileMon.vdproj.vspscc10
-rw-r--r--Bus/IvyFileMon/IvyFileMon.cpp65
-rw-r--r--Bus/IvyFileMon/IvyFileMon.h31
-rw-r--r--Bus/IvyFileMon/IvyFileMon.rc215
-rw-r--r--Bus/IvyFileMon/IvyFileMon.sln53
-rw-r--r--Bus/IvyFileMon/IvyFileMon.vcproj207
-rw-r--r--Bus/IvyFileMon/IvyFileMon.vcproj.vspscc10
-rw-r--r--Bus/IvyFileMon/IvyFileMon.vsscc0
-rw-r--r--Bus/IvyFileMon/IvyFileMon.vssscc10
-rw-r--r--Bus/IvyFileMon/IvyFileMonDlg.cpp281
-rw-r--r--Bus/IvyFileMon/IvyFileMonDlg.h55
-rw-r--r--Bus/IvyFileMon/ParseCmdLine.cpp76
-rw-r--r--Bus/IvyFileMon/ParseCmdLine.h37
-rw-r--r--Bus/IvyFileMon/ReadMe.txt87
-rw-r--r--Bus/IvyFileMon/res/IvyFileMon.icobin21630 -> 0 bytes
-rw-r--r--Bus/IvyFileMon/res/IvyFileMon.manifest22
-rw-r--r--Bus/IvyFileMon/res/IvyFileMon.rc213
-rw-r--r--Bus/IvyFileMon/resource.h28
-rw-r--r--Bus/IvyFileMon/stdafx.cpp7
-rw-r--r--Bus/IvyFileMon/stdafx.h42
-rw-r--r--Bus/IvyProbe/ETSLayout.cpp3057
-rw-r--r--Bus/IvyProbe/ETSLayout.h963
-rw-r--r--Bus/IvyProbe/HistoryEdit.cpp82
-rw-r--r--Bus/IvyProbe/HistoryEdit.h65
-rw-r--r--Bus/IvyProbe/InstIvyProbe/InstIvy.vdproj945
-rw-r--r--Bus/IvyProbe/InstIvyProbe/InstIvy.vdproj.vspscc10
-rw-r--r--Bus/IvyProbe/IvyProbe.cpp81
-rw-r--r--Bus/IvyProbe/IvyProbe.h50
-rw-r--r--Bus/IvyProbe/IvyProbe.rc243
-rw-r--r--Bus/IvyProbe/IvyProbe.sln42
-rw-r--r--Bus/IvyProbe/IvyProbe.vcproj535
-rw-r--r--Bus/IvyProbe/IvyProbe.vcproj.vspscc10
-rw-r--r--Bus/IvyProbe/IvyProbe.vssscc10
-rw-r--r--Bus/IvyProbe/IvyProbeDlg.cpp394
-rw-r--r--Bus/IvyProbe/IvyProbeDlg.h110
-rw-r--r--Bus/IvyProbe/ReadMe.txt81
147 files changed, 0 insertions, 29458 deletions
diff --git a/Bus/Bus.dsw b/Bus/Bus.dsw
deleted file mode 100644
index eb79d0e..0000000
--- a/Bus/Bus.dsw
+++ /dev/null
@@ -1,147 +0,0 @@
-Microsoft Developer Studio Workspace File, Format Version 6.00
-# WARNING: DO NOT EDIT OR DELETE THIS WORKSPACE FILE!
-
-###############################################################################
-
-Project: "Horloge"=".\Horloge\Horloge.dsp" - Package Owner=<4>
-
-Package=<5>
-{{{
- begin source code control
- "$/Bus/Horloge", JIEAAAAA
- .\horloge
- end source code control
-}}}
-
-Package=<4>
-{{{
- Begin Project Dependency
- Project_Dep_Name Ivy
- End Project Dependency
-}}}
-
-###############################################################################
-
-Project: "Ivy"=".\Ivy\Ivy.dsp" - Package Owner=<4>
-
-Package=<5>
-{{{
- begin source code control
- "$/Ivy", NBEAAAAA
- .\ivy
- end source code control
-}}}
-
-Package=<4>
-{{{
-}}}
-
-###############################################################################
-
-Project: "IvyTest"=".\IvyTest\IvyTest.dsp" - Package Owner=<4>
-
-Package=<5>
-{{{
-}}}
-
-Package=<4>
-{{{
- Begin Project Dependency
- Project_Dep_Name Ivy
- End Project Dependency
-}}}
-
-###############################################################################
-
-Project: "NewFxServer"=".\NewFxServer\NewFxServer.dsp" - Package Owner=<4>
-
-Package=<5>
-{{{
- begin source code control
- "$/NewFxServer", BPBAAAAA
- .\newfxserver
- end source code control
-}}}
-
-Package=<4>
-{{{
- Begin Project Dependency
- Project_Dep_Name Ivy
- End Project Dependency
-}}}
-
-###############################################################################
-
-Project: "RadarTest"="..\RadarTest\RadarTest.dsp" - Package Owner=<4>
-
-Package=<5>
-{{{
- begin source code control
- "$/RadarTest", RFAAAAAA
- ..\radartest
- end source code control
-}}}
-
-Package=<4>
-{{{
- Begin Project Dependency
- Project_Dep_Name libRadar
- End Project Dependency
- Begin Project Dependency
- Project_Dep_Name Ivy
- End Project Dependency
-}}}
-
-###############################################################################
-
-Project: "Test"=".\Test\Test.dsp" - Package Owner=<4>
-
-Package=<5>
-{{{
- begin source code control
- "$/Bus/Test", ZPBAAAAA
- .\test
- end source code control
-}}}
-
-Package=<4>
-{{{
- Begin Project Dependency
- Project_Dep_Name Ivy
- End Project Dependency
-}}}
-
-###############################################################################
-
-Project: "libRadar"="..\libRadar\libRadar.dsp" - Package Owner=<4>
-
-Package=<5>
-{{{
- begin source code control
- "$/libRadar", GDAAAAAA
- ..\libradar
- end source code control
-}}}
-
-Package=<4>
-{{{
-}}}
-
-###############################################################################
-
-Global:
-
-Package=<5>
-{{{
- begin source code control
- "$/Bus", ZOBAAAAA
- .
- end source code control
-}}}
-
-Package=<3>
-{{{
-}}}
-
-###############################################################################
-
diff --git a/Bus/Bus.sln b/Bus/Bus.sln
deleted file mode 100644
index 6f65d87..0000000
--- a/Bus/Bus.sln
+++ /dev/null
@@ -1,105 +0,0 @@
-Microsoft Visual Studio Solution File, Format Version 9.00
-# Visual Studio 2005
-Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "Ivy", "Ivy\Ivy.vcproj", "{9BD87B7A-517E-4900-B3EA-A358885CD876}"
-EndProject
-Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "IvyProbe", "IvyProbe\IvyProbe.vcproj", "{B7F7F0F7-9029-4D1A-8CB4-C42DAF86A21C}"
- ProjectSection(ProjectDependencies) = postProject
- {9BD87B7A-517E-4900-B3EA-A358885CD876} = {9BD87B7A-517E-4900-B3EA-A358885CD876}
- EndProjectSection
-EndProject
-Project("{54435603-DBB4-11D2-8724-00A0C9A8B90C}") = "InstallIvyProbe", "IvyProbe\InstIvy\InstIvy.vdproj", "{72D0A567-E63F-4B6B-9F4D-9C9CC2B5E6E5}"
-EndProject
-Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "pcre", "..\..\pcre\pcre.vcproj", "{D79FC143-498E-4342-B2C7-BDAD1B8D0E6B}"
-EndProject
-Project("{54435603-DBB4-11D2-8724-00A0C9A8B90C}") = "InstallIvyDev", "Ivy\InstIvyDev\InstIvyDev.vdproj", "{D1E11E12-38DB-4190-AD37-830CF9AD335F}"
-EndProject
-Project("{54435603-DBB4-11D2-8724-00A0C9A8B90C}") = "InstallIvyLib", "Ivy\IvyLib\IvyLib.vdproj", "{F2DD17AD-A9D0-43B7-92D0-5116560C78B3}"
-EndProject
-Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Solution Items", "Solution Items", "{63C59D2C-F649-432C-8A44-969E66BC2C56}"
- ProjectSection(SolutionItems) = preProject
- UpdateIvyWeb.bat = UpdateIvyWeb.bat
- EndProjectSection
-EndProject
-Global
- GlobalSection(SourceCodeControl) = preSolution
- SccNumberOfProjects = 7
- SccProjectName0 = \u0022$/Bus\u0022,\u0020ZOBAAAAA
- SccLocalPath0 = .
- SccProvider0 = MSSCCI:Microsoft\u0020Visual\u0020SourceSafe
- CanCheckoutShared = false
- SccProjectUniqueName1 = Ivy\\Ivy.vcproj
- SccProjectName1 = \u0022$/Bus/Ivy\u0022,\u0020QPEAAAAA
- SccLocalPath1 = Ivy
- CanCheckoutShared = false
- SccProjectUniqueName2 = IvyProbe\\IvyProbe.vcproj
- SccProjectName2 = \u0022$/Bus/IvyProbe\u0022,\u0020ZPBAAAAA
- SccLocalPath2 = IvyProbe
- CanCheckoutShared = false
- SccProjectUniqueName3 = IvyProbe\\InstIvy\\InstIvy.vdproj
- SccProjectName3 = \u0022$/Bus/IvyProbe/InstIvyProbe\u0022,\u0020QTFAAAAA
- SccLocalPath3 = IvyProbe\\InstIvy
- CanCheckoutShared = false
- SccProjectUniqueName4 = ..\\..\\pcre\\pcre.vcproj
- SccProjectName4 = \u0022$/pcre\u0022,\u0020KSHAAAAA
- SccLocalPath4 = ..\\..\\pcre
- CanCheckoutShared = false
- SccProjectUniqueName5 = Ivy\\InstIvyDev\\InstIvyDev.vdproj
- SccProjectName5 = \u0022$/Bus/Ivy/InstIvyDev\u0022,\u0020FUFAAAAA
- SccLocalPath5 = Ivy\\InstIvyDev
- CanCheckoutShared = false
- SccProjectUniqueName6 = Ivy\\IvyLib\\IvyLib.vdproj
- SccLocalPath6 = .
- CanCheckoutShared = false
- SccProjectFilePathRelativizedFromConnection6 = Ivy\\IvyLib\\
- EndGlobalSection
- GlobalSection(SolutionConfigurationPlatforms) = preSolution
- Debug|Win32 = Debug|Win32
- Debug|x64 = Debug|x64
- Release|Win32 = Release|Win32
- Release|x64 = Release|x64
- EndGlobalSection
- GlobalSection(ProjectConfigurationPlatforms) = postSolution
- {9BD87B7A-517E-4900-B3EA-A358885CD876}.Debug|Win32.ActiveCfg = Debug|Win32
- {9BD87B7A-517E-4900-B3EA-A358885CD876}.Debug|Win32.Build.0 = Debug|Win32
- {9BD87B7A-517E-4900-B3EA-A358885CD876}.Debug|x64.ActiveCfg = Debug|x64
- {9BD87B7A-517E-4900-B3EA-A358885CD876}.Debug|x64.Build.0 = Debug|x64
- {9BD87B7A-517E-4900-B3EA-A358885CD876}.Release|Win32.ActiveCfg = Release|x64
- {9BD87B7A-517E-4900-B3EA-A358885CD876}.Release|Win32.Build.0 = Release|x64
- {9BD87B7A-517E-4900-B3EA-A358885CD876}.Release|x64.ActiveCfg = Release|x64
- {9BD87B7A-517E-4900-B3EA-A358885CD876}.Release|x64.Build.0 = Release|x64
- {B7F7F0F7-9029-4D1A-8CB4-C42DAF86A21C}.Debug|Win32.ActiveCfg = Debug|Win32
- {B7F7F0F7-9029-4D1A-8CB4-C42DAF86A21C}.Debug|Win32.Build.0 = Debug|Win32
- {B7F7F0F7-9029-4D1A-8CB4-C42DAF86A21C}.Debug|x64.ActiveCfg = Debug|x64
- {B7F7F0F7-9029-4D1A-8CB4-C42DAF86A21C}.Debug|x64.Build.0 = Debug|x64
- {B7F7F0F7-9029-4D1A-8CB4-C42DAF86A21C}.Release|Win32.ActiveCfg = Release|x64
- {B7F7F0F7-9029-4D1A-8CB4-C42DAF86A21C}.Release|Win32.Build.0 = Release|x64
- {B7F7F0F7-9029-4D1A-8CB4-C42DAF86A21C}.Release|x64.ActiveCfg = Release|x64
- {B7F7F0F7-9029-4D1A-8CB4-C42DAF86A21C}.Release|x64.Build.0 = Release|x64
- {72D0A567-E63F-4B6B-9F4D-9C9CC2B5E6E5}.Debug|Win32.ActiveCfg = Debug
- {72D0A567-E63F-4B6B-9F4D-9C9CC2B5E6E5}.Debug|x64.ActiveCfg = Debug
- {72D0A567-E63F-4B6B-9F4D-9C9CC2B5E6E5}.Release|Win32.ActiveCfg = Release
- {72D0A567-E63F-4B6B-9F4D-9C9CC2B5E6E5}.Release|x64.ActiveCfg = Release
- {72D0A567-E63F-4B6B-9F4D-9C9CC2B5E6E5}.Release|x64.Build.0 = Release
- {D79FC143-498E-4342-B2C7-BDAD1B8D0E6B}.Debug|Win32.ActiveCfg = Debug|Win32
- {D79FC143-498E-4342-B2C7-BDAD1B8D0E6B}.Debug|Win32.Build.0 = Debug|Win32
- {D79FC143-498E-4342-B2C7-BDAD1B8D0E6B}.Debug|x64.ActiveCfg = Debug|x64
- {D79FC143-498E-4342-B2C7-BDAD1B8D0E6B}.Debug|x64.Build.0 = Debug|x64
- {D79FC143-498E-4342-B2C7-BDAD1B8D0E6B}.Release|Win32.ActiveCfg = Release|x64
- {D79FC143-498E-4342-B2C7-BDAD1B8D0E6B}.Release|Win32.Build.0 = Release|x64
- {D79FC143-498E-4342-B2C7-BDAD1B8D0E6B}.Release|x64.ActiveCfg = Release|x64
- {D79FC143-498E-4342-B2C7-BDAD1B8D0E6B}.Release|x64.Build.0 = Release|x64
- {D1E11E12-38DB-4190-AD37-830CF9AD335F}.Debug|Win32.ActiveCfg = Debug
- {D1E11E12-38DB-4190-AD37-830CF9AD335F}.Debug|x64.ActiveCfg = Debug
- {D1E11E12-38DB-4190-AD37-830CF9AD335F}.Release|Win32.ActiveCfg = Release
- {D1E11E12-38DB-4190-AD37-830CF9AD335F}.Release|x64.ActiveCfg = Release
- {D1E11E12-38DB-4190-AD37-830CF9AD335F}.Release|x64.Build.0 = Release
- {F2DD17AD-A9D0-43B7-92D0-5116560C78B3}.Debug|Win32.ActiveCfg = Debug
- {F2DD17AD-A9D0-43B7-92D0-5116560C78B3}.Debug|x64.ActiveCfg = Debug
- {F2DD17AD-A9D0-43B7-92D0-5116560C78B3}.Release|Win32.ActiveCfg = Release
- {F2DD17AD-A9D0-43B7-92D0-5116560C78B3}.Release|x64.ActiveCfg = Release
- {F2DD17AD-A9D0-43B7-92D0-5116560C78B3}.Release|x64.Build.0 = Release
- EndGlobalSection
- GlobalSection(SolutionProperties) = preSolution
- HideSolutionNode = FALSE
- EndGlobalSection
-EndGlobal
diff --git a/Bus/Bus.vssscc b/Bus/Bus.vssscc
deleted file mode 100644
index 794f014..0000000
--- a/Bus/Bus.vssscc
+++ /dev/null
@@ -1,10 +0,0 @@
-""
-{
-"FILE_VERSION" = "9237"
-"ENLISTMENT_CHOICE" = "NEVER"
-"PROJECT_FILE_RELATIVE_PATH" = ""
-"NUMBER_OF_EXCLUDED_FILES" = "0"
-"ORIGINAL_PROJECT_FILE_PATH" = ""
-"NUMBER_OF_NESTED_PROJECTS" = "0"
-"SOURCE_CONTROL_SETTINGS_PROVIDER" = "PROJECT"
-}
diff --git a/Bus/Horloge/Curvefit.cpp b/Bus/Horloge/Curvefit.cpp
deleted file mode 100644
index a1854d0..0000000
--- a/Bus/Horloge/Curvefit.cpp
+++ /dev/null
@@ -1,235 +0,0 @@
-// Curvefit.cpp: implementation of the CBezierfit class.
-//
-//////////////////////////////////////////////////////////////////////
-
-#include "stdafx.h"
-#include <MATH.H>
-#include "Curvefit.h"
-
-#ifdef _DEBUG
-#undef THIS_FILE
-static char THIS_FILE[]=__FILE__;
-#define new DEBUG_NEW
-#endif
-
-static double DistanceError(const double *x, const double *y, const double *Rawdata, int n);
-static void Bezier(double u, const double *a, const double *b,
- double x4, double y4, double &z, double &s);
-
-void CalcBezier(const double *Rawdata, int n, double *Control)
-{
- double x[4];
- double y[4];
- double e1,e2, e3;
- int Retry;
- double x1a,x2a,y1a,y2a;
-
- x[0] = Rawdata[0];
- y[0] = Rawdata[1];
-
- x[1] = Rawdata[2];
- y[1] = Rawdata[3];
-
- x[2] = Rawdata[n-4];
- y[2] = Rawdata[n-3];
-
- x[3] = Rawdata[n-2];
- y[3] = Rawdata[n-1];
-
- // seed with linear interpolation...
- x[1] += x[1] - x[0];
- y[1] += y[1] - y[0];
- x[2] += x[2] - x[3];
- y[2] += y[2] - y[3];
-
- e1 = DistanceError(x, y, Rawdata, n);
- for (Retry = 1; Retry <= 2; Retry++)
- {
-// TRACE("Retry %d\n", Retry);
-// TRACE(" x1 y2 x2 y2 error\n");
- e3 = 0.5;
- x1a = x[1];
- while (fabs(e3) >= 0.01)
- {
- x[1] += (x[1] - x[0])*e3;
- e2 = DistanceError(x, y, Rawdata, n);
- if (e2 == e1)
- break;
- if (e2 > e1)
- {
- x[1] = x1a;
- e3 /=-3;
- }
- else
- {
- e1 = e2;
- x1a = x[1];
- }
- }
-
- e3 = 0.5;
- y1a = y[1];
- while (fabs(e3) >= 0.01)
- {
- y[1] += (y[1] - y[0])*e3;
- e2 = DistanceError(x, y, Rawdata, n);
- if (e2 == e1)
- break;
- if (e2 > e1)
- {
- y[1] = y1a;
- e3 /=-3;
- }
- else
- {
- e1 = e2;
- y1a = y[1];
- }
- }
-
- e3 = 0.5;
- x2a = x[2];
- while (fabs(e3) >= 0.01)
- {
- x[2] += (x[2] - x[3])*e3;
- e2 = DistanceError(x, y, Rawdata, n);
- if (e2 == e1)
- break;
- if (e2 > e1)
- {
- x[2] = x2a;
- e3 /=-3;
- }
- else
- {
- e1 = e2;
- x2a = x[2];
- }
- }
-
- e3 = 0.5;
- y2a = y[2];
- while (fabs(e3) >= 0.01)
- {
- y[2] += (y[2] - y[3])*e3;
- e2 = DistanceError(x, y, Rawdata, n);
- if (e2 == e1)
- break;
- if (e2 > e1)
- {
- y[2] = y2a;
- e3 /=-3;
- }
- else
- {
- e1 = e2;
- y2a = y[2];
- }
- }
- } // for
-
- Control[0] = x[1];
- Control[1] = y[1];
- Control[2] = x[2];
- Control[3] = y[2];
-}
-
-double DistanceError(const double *x, const double *y,
- const double *Rawdata, int n)
-{
- int i;
- double a[4];
- double b[4];
- double u, u1, u2;
- double z, z1, z2,s,s1;
- double temp;
- double totalerror;
- double stepsize;
- double x4, y4;
-
- totalerror = 0;
- a[3] = (x[3]-x[0]+3*(x[1]-x[2]))/8;
- b[3] = (y[3]-y[0]+3*(y[1]-y[2]))/8;
- a[2] = (x[3]+x[0]-x[1]-x[2])*3/8;
- b[2] = (y[3]+y[0]-y[1]-y[2])*3/8;
- a[1] = (x[3]-x[0])/2 -a[3];
- b[1] = (y[3]-y[0])/2 -b[3];
- a[0] = (x[3]+x[0])/2 -a[2];
- b[0] = (y[3]+y[0])/2 -b[2];
-
- stepsize = 2.0/(n);
- for (i = 2; i <= n-3; i+=2)
- {
- x4 = Rawdata[i];
- y4 = Rawdata[i+1];
- for (u = -1; u <= 1.01; u += stepsize)
- {
- Bezier(u, a, b, x4, y4, z, s);
- if (s == 0)
- {
- u1 = u;
- z1 = z;
- s1 = s;
- break;
- }
- if (u == -1)
- {
- u1 = u;
- z1 = z;
- s1 = s;
- }
- if (s < s1)
- {
- u1 = u;
- z1 = z;
- s1 = s;
- }
- }
- if (s1 != 0)
- {
- u = u1 + stepsize;
- if (u > 1)
- u = 1 - stepsize;
- Bezier(u, a, b, x4, y4, z, s);
- while (s != 0 && z != 0)
- {
- u2 = u;
- z2 = z;
- temp = z2-z1;
- if (temp != 0)
- u = (z2 * u1-z1*u2)/temp;
- else
- u = (u1 + u2)/2;
-
- if (u > 1)
- u = 1;
- else if (u < -1)
- u = -1;
- if (fabs(u-u2) < 0.001)
- break;
- u1 = u2;
- z1 = z2;
- Bezier(u, a, b, x4, y4, z, s);
- }
- }
- totalerror += s;
- }
-// TRACE("%8.3lf %8.3lf %8.3lf %8.3lf %8.3lf\n", x[1], y[1], x[2], y[2], totalerror);
- return totalerror;
-}
-
-void Bezier(double u, const double *a, const double *b,
- double x4, double y4, double &z, double &s)
-{
- double x, y;
- double dx4,dy4;
- double dx,dy;
-
- x = a[0] + u*(a[1] + u*(a[2]+u*a[3]));
- y = b[0] + u*(b[1] + u*(b[2]+u*b[3]));
- dx4 = x-x4; dy4 = y-y4;
- dx = a[1] + u * (a[2] + a[2] + u*3*a[3]);
- dy = b[1] + u * (b[2] + b[2] + u*3*b[3]);
- z = dx * dx4 + dy*dy4;
- s = dx4*dx4 + dy4*dy4;
-} \ No newline at end of file
diff --git a/Bus/Horloge/Curvefit.h b/Bus/Horloge/Curvefit.h
deleted file mode 100644
index 79918d7..0000000
--- a/Bus/Horloge/Curvefit.h
+++ /dev/null
@@ -1,15 +0,0 @@
-// Curvefit.h: interface for the CBezierfit class.
-//
-//////////////////////////////////////////////////////////////////////
-
-#if !defined(AFX_CURVEFIT_H__8CC78BC2_CA92_11D3_949E_00104B6C2FFE__INCLUDED_)
-#define AFX_CURVEFIT_H__8CC78BC2_CA92_11D3_949E_00104B6C2FFE__INCLUDED_
-
-#if _MSC_VER >= 1000
-#pragma once
-#endif // _MSC_VER >= 1000
-
-void CalcBezier(const double *Rawdata, int n, double *Control);
-
-
-#endif // !defined(AFX_CURVEFIT_H__8CC78BC2_CA92_11D3_949E_00104B6C2FFE__INCLUDED_)
diff --git a/Bus/Horloge/Digistring.cpp b/Bus/Horloge/Digistring.cpp
deleted file mode 100644
index a0cc6b7..0000000
--- a/Bus/Horloge/Digistring.cpp
+++ /dev/null
@@ -1,904 +0,0 @@
-// Digistring.cpp : implementation file
-//
-// Copyright (C) 2000 by Michel Wassink
-// All rights reserved
-//
-// This is free software.
-// This code may be used in compiled form in any way you desire. This
-// file may be redistributed unmodified by any means PROVIDING it is
-// not sold for profit without the authors written consent, and
-// providing that this notice and the authors name and all copyright
-// notices remains intact. If the source code in this file is used in
-// any commercial application then a statement along the lines of
-// "Portions Copyright © 2000 Michel Wassink" must be included in
-// the startup banner, "About" box or printed documentation. An email
-// letting me know that you are using it would be nice as well. That's
-// not much to ask considering the amount of work that went into this.
-//
-// No warrantee of any kind, expressed or implied, is included with this
-// software; use at your own risk, responsibility for damages (if any) to
-// anyone resulting from the use of this software rests entirely with the
-// user.
-//
-// Send bug reports, bug fixes, enhancements, requests, flames, etc., and
-// I'll try to keep a version up to date. I can be reached as follows:
-// mwassink@csi.com (private site)
-// An email letting me know that you are using it would be nice.
-/////////////////////////////////////////////////////////////////////////////
-
-#include "stdafx.h"
-#include "Digistring.h"
-#include "Curvefit.h"
-
-#ifdef _DEBUG
-#define new DEBUG_NEW
-#undef THIS_FILE
-static char THIS_FILE[] = __FILE__;
-#endif
-
-// Segment numbering:
-// ----- 13 ----- 0
-//|\ | /| 8 0 12 | | 1 2
-//| \|/ | 1 2 | |
-// -- -- == 6 7 ----- == 3
-//| /|\ | 3 4 | |
-//|/ | \| 9 5 11 | | 4 5
-// ----- 10 ----- 6
-
-#define MAXSEGCHAR7 12 // Number of supported 7 segment characters
-#define MAXSEGCHAR14 40 // Number of supported 14 segment characters
-#define MAXSEGSEMCOL 2 // Number of supported 3 segment characters
-#define NORM_DIGIHEIGHT 83 // All characters must have this height
-
-////////////////////////////////////////////////////////////////////////////////
-// For 14 segments display...
-// SP 0 1 2 3 4 5 6
-WORD CHAR_SEGM14[MAXSEGCHAR14] = {0x0000, 0x3F00, 0x1800, 0x36C0, 0x3CC0, 0x19C0, 0x2DC0, 0x2FC0,
-// 7 8 9 - A B C D E F G H
- 0x3800, 0x3FC0, 0x3DC0, 0x00C0, 0x3BC0, 0x3CA1, 0x2700, 0x3C21, 0x27C0, 0x23C0, 0x2F80, 0x1BC0,
-// I J K L M N O P Q R S
- 0x2421, 0x1E00, 0x0354, 0x0700, 0x1B06, 0x1B12, 0x3F00, 0x33C0, 0x3F10, 0x33D0, 0x2DC0,
-// T U V W X Y Z * +
- 0x2021, 0x1F00, 0x030C, 0x1B18, 0x001E, 0x11E0, 0x240C, 0x00FF, 0x00E1};
-// straight style
-CPoint PtSeg14N0[5] = {CPoint(20,13), CPoint(20,36), CPoint(24,40), CPoint(28,36), CPoint(28,13)};
-CPoint PtSeg14N1[4] = {CPoint( 5, 5), CPoint(15,35), CPoint(20,37), CPoint(18,25)};
-CPoint PtSeg14N6[6] = {CPoint( 6,41), CPoint(14,45), CPoint(18,45), CPoint(22,41), CPoint(18,37),
- CPoint(14,37)};
-CPoint PtSeg14N8[4] = {CPoint( 4, 7), CPoint( 4,40), CPoint(11,36), CPoint(11,26)};
-CPoint PtSeg14N13[4] = {CPoint( 6, 4), CPoint(11,11), CPoint(37,11), CPoint(42, 4)};
-BYTE TpSeg14N0[5] = {PT_MOVETO, PT_LINETO, PT_LINETO, PT_LINETO, PT_LINETO};
-BYTE TpSeg14N1[4] = {PT_MOVETO, PT_LINETO, PT_LINETO, PT_LINETO};
-BYTE TpSeg14N6[6] = {PT_MOVETO, PT_LINETO, PT_LINETO, PT_LINETO, PT_LINETO,
- PT_LINETO};
-BYTE TpSeg14N8[4] = {PT_MOVETO, PT_LINETO, PT_LINETO, PT_LINETO};
-BYTE TpSeg14N13[4] = {PT_MOVETO, PT_LINETO, PT_LINETO, PT_LINETO};
-
-// smooth style PT_BEZIERTO
-CPoint PtSeg14N0S[13] ={CPoint(20,12), CPoint(20,25), CPoint(22,36), CPoint(23,39), CPoint(24,40),
- CPoint(25,39), CPoint(26,36), CPoint(28,25), CPoint(28,12), CPoint(26,10),
- CPoint(24, 9), CPoint(22,10), CPoint(20,12)};
-CPoint PtSeg14N1S[10] ={CPoint(10,10), CPoint(10,13), CPoint(11,20), CPoint(13,28), CPoint(21,38),
- CPoint(21,37), CPoint(19,26), CPoint(15,16), CPoint(11,10), CPoint(10,10)};
-CPoint PtSeg14N6S[6] = {CPoint( 8,41), CPoint(12,45), CPoint(16,45), CPoint(23,41), CPoint(16,37),
- CPoint(12,37)};
-CPoint PtSeg14N8S[10]= {CPoint( 4, 7), CPoint( 4,39), CPoint( 5,40), CPoint( 6,40), CPoint( 9,37),
- CPoint(11,33), CPoint(11,25), CPoint( 9,14), CPoint( 5, 6), CPoint( 4, 7)};
-CPoint PtSeg14N13S[17]={CPoint( 8, 4), CPoint( 7, 5), CPoint( 7, 6), CPoint( 9, 8), CPoint(12, 9),
- CPoint(14,11), CPoint(19,11), CPoint(21, 9), CPoint(24, 7), CPoint(27, 9),
- CPoint(29,11), CPoint(34,11), CPoint(36, 9), CPoint(39, 8), CPoint(41, 6),
- CPoint(41, 5), CPoint(40, 4)};
-BYTE TpSeg14N0S[13]= {PT_MOVETO, PT_LINETO, PT_BEZIERTO, PT_BEZIERTO, PT_BEZIERTO,
- PT_BEZIERTO, PT_BEZIERTO, PT_LINETO, PT_LINETO, PT_BEZIERTO,
- PT_BEZIERTO, PT_BEZIERTO, PT_LINETO};
-BYTE TpSeg14N1S[10] ={PT_MOVETO, PT_BEZIERTO, PT_BEZIERTO, PT_BEZIERTO, PT_LINETO,
- PT_LINETO, PT_BEZIERTO, PT_BEZIERTO, PT_BEZIERTO, PT_LINETO};
-BYTE TpSeg14N6S[6] = {PT_MOVETO, PT_LINETO, PT_LINETO, PT_LINETO, PT_LINETO,
- PT_LINETO};
-BYTE TpSeg14N8S[10] ={PT_MOVETO, PT_LINETO, PT_BEZIERTO, PT_BEZIERTO, PT_BEZIERTO,
- PT_BEZIERTO, PT_LINETO, PT_BEZIERTO, PT_BEZIERTO, PT_LINETO};
-BYTE TpSeg14N13S[17]={PT_MOVETO, PT_BEZIERTO, PT_BEZIERTO, PT_BEZIERTO, PT_BEZIERTO,
- PT_LINETO, PT_LINETO, PT_BEZIERTO, PT_BEZIERTO, PT_BEZIERTO,
- PT_LINETO, PT_LINETO, PT_BEZIERTO, PT_BEZIERTO, PT_BEZIERTO,
- PT_BEZIERTO, PT_LINETO};
-///////////////////////////////////////////////////////////////////////////////
-// For 7 segments display...
-// SP 0 1 2 3 4 5
-BYTE CHAR_SEGM7[MAXSEGCHAR7] = {0x00, 0x77, 0x24, 0x5D, 0x6D, 0x2E, 0x6B,
-// 6 7 8 9 -
- 0x7B, 0x25, 0x7F, 0x6F, 0x08};
-// straight style
-CPoint PtSeg7N0[4] = {CPoint( 5, 4), CPoint(12,11), CPoint(36,11), CPoint(43, 4)};
-CPoint PtSeg7N1[4] = {CPoint( 4, 6), CPoint( 4,40), CPoint(11,36), CPoint(11,13)};
-CPoint PtSeg7N3[6] = {CPoint( 6,41), CPoint(14,45), CPoint(34,45), CPoint(42,41), CPoint(34,37),
- CPoint(14,37)}; // 3
-BYTE TpSeg7N0[4] = {PT_MOVETO, PT_LINETO, PT_LINETO, PT_LINETO};
-BYTE TpSeg7N1[4] = {PT_MOVETO, PT_LINETO, PT_LINETO, PT_LINETO};
-BYTE TpSeg7N3[6] = {PT_MOVETO, PT_LINETO, PT_LINETO, PT_LINETO, PT_LINETO,
- PT_LINETO};
-
-// smooth style PT_BEZIERTO
-CPoint PtSeg7N0S[7] = {CPoint( 6, 4), CPoint( 5, 5), CPoint( 5, 6), CPoint( 8, 9), CPoint(12,11),
- CPoint(36,11), CPoint(39, 4)};
-CPoint PtSeg7N1S[7] = {CPoint( 4, 9), CPoint( 4,39), CPoint( 6,40), CPoint( 7,40), CPoint( 9,38),
- CPoint(11,36), CPoint(11,12)};
-CPoint PtSeg7N2S[10] = {CPoint(37,36), CPoint(39,38), CPoint(41,40), CPoint(42,40), CPoint(44,39),
- CPoint(44, 6), CPoint(42, 4), CPoint(41, 4), CPoint(39, 8), CPoint(37,12)};
-CPoint PtSeg7N3S[6] = {CPoint( 8,41), CPoint(12,45), CPoint(36,45), CPoint(40,41), CPoint(36,37),
- CPoint(12,37)};
-BYTE TpSeg7N0S[7] = {PT_MOVETO, PT_BEZIERTO, PT_BEZIERTO, PT_BEZIERTO, PT_LINETO,
- PT_LINETO, PT_LINETO};
-BYTE TpSeg7N1S[7] = {PT_MOVETO, PT_LINETO, PT_BEZIERTO, PT_BEZIERTO, PT_BEZIERTO,
- PT_LINETO, PT_LINETO};
-BYTE TpSeg7N2S[10] = {PT_MOVETO, PT_BEZIERTO, PT_BEZIERTO, PT_LINETO, PT_LINETO,
- PT_LINETO, PT_BEZIERTO, PT_BEZIERTO, PT_BEZIERTO, PT_LINETO};
-BYTE TpSeg7N3S[6] = {PT_MOVETO, PT_LINETO, PT_LINETO, PT_LINETO, PT_LINETO,
- PT_LINETO};
-
-// For 3 segments semicoloncombi display...
-// . :
-BYTE CHAR_SEMCOL[MAXSEGSEMCOL] = {0x04, 0x03};
-
-CPoint PtSegScN0[4] = {CPoint( 4,23), CPoint( 4,32), CPoint(13,32), CPoint(13,23)};
-CPoint PtSegScN1[4] = {CPoint( 4,50), CPoint( 4,59), CPoint(13,59), CPoint(13,50)};
-CPoint PtSegScN2[4] = {CPoint( 4,68), CPoint( 4,77), CPoint(13,77), CPoint(13,68)};
-BYTE TpSegScN0[4] = {PT_MOVETO, PT_LINETO, PT_LINETO, PT_LINETO};
-BYTE TpSegScN1[4] = {PT_MOVETO, PT_LINETO, PT_LINETO, PT_LINETO};
-BYTE TpSegScN2[4] = {PT_MOVETO, PT_LINETO, PT_LINETO, PT_LINETO};
-
-// Functions for mirroring points...
-CPoint PointMirror(const CPoint &P, const CPoint &M)
-{
- return CPoint(P.x + 2*(M.x - P.x), P.y + 2*(M.y - P.y));
-}
-
-CPoint LineMirrorX(const CPoint &P, int X)
-{
- return CPoint(P.x + 2*(X - P.x), P.y);
-}
-
-CPoint LineMirrorY(const CPoint &P, int Y)
-{
- return CPoint(P.x, P.y + 2*(Y - P.y));
-}
-
-/////////////////////////////////////////////////////////////////////////////
-// CDSegment
-CDSegment::CDSegment()
-{
- m_paPoints = NULL;
- m_paTypes = NULL;
-}
-
-CDSegment::CDSegment(const CDSegment& Segment)
-{
- ASSERT(Segment.m_paPoints != NULL); // Do not copy an unitialized segment
-
- m_nCount = Segment.m_nCount;
-
- m_paPoints = new CPoint[m_nCount];
- m_paTypes = new BYTE[m_nCount];
- if (m_paPoints != NULL && m_paTypes != NULL)
- {
- memcpy(m_paPoints, Segment.m_paPoints, m_nCount * sizeof(CPoint));
- memcpy(m_paTypes, Segment.m_paTypes, m_nCount * sizeof(BYTE));
- }
-}
-
-// -----------------------------------------------------------------------------
-
-CDSegment::~CDSegment()
-{
- FreeSegment();
-}
-
-void CDSegment::DefPoints(const POINT* lpaPoints, const BYTE* lpaTypes, int nCount)
-{
- FreeSegment();
-
- m_paPoints = new CPoint[nCount];
- m_paTypes = new BYTE[nCount];
- m_nCount = nCount;
- if (m_paPoints != NULL && m_paTypes != NULL)
- {
- memcpy(m_paPoints, lpaPoints, m_nCount * sizeof(CPoint));
- memcpy(m_paTypes, lpaTypes, m_nCount * sizeof(BYTE));
- }
-}
-
-// -----------------------------------------------------------------------------
-
-CDSegment CDSegment::operator=(const CDSegment &Segment)
-{
- CPoint *pNewPoints;
- BYTE * pNewTypes;
-
- m_nCount = Segment.m_nCount;
-
- pNewPoints = new CPoint[m_nCount];
- pNewTypes = new BYTE[m_nCount];
- memcpy(pNewPoints, Segment.m_paPoints, m_nCount * sizeof(CPoint));
- memcpy(pNewTypes, Segment.m_paTypes, m_nCount * sizeof(BYTE));
- FreeSegment(); // Get rid of old stuff
- m_paPoints = pNewPoints;
- m_paTypes = pNewTypes;
-
- return *this;
-}
-
-void CDSegment::FreeSegment()
-{
- if (m_paPoints != NULL && m_paTypes != NULL)
- {
- delete[] m_paPoints;
- delete[] m_paTypes;
- m_paPoints = NULL;
- m_paTypes = NULL;
- }
-}
-
-void CDSegment::Draw(CDC *pDC, CDoubleRect DrawPlace, int iWidth) const
-{
- int i, nBez,b;
- CPoint * paPoints;
- double daContr[4];
- double *pBezPts;
- double dRelWidth, dRelHeight;
-
- paPoints = new CPoint[m_nCount];
- if (paPoints == NULL) return;
-
- dRelWidth = DrawPlace.Width() / iWidth;
- dRelHeight = DrawPlace.Height() / NORM_DIGIHEIGHT;
- for (i = 0; i < m_nCount; i++)
- {
- if (m_paTypes[i] != PT_BEZIERTO)
- {
- paPoints[i] = CPoint(DrawPlace.left + dRelWidth * m_paPoints[i].x + 0.5,
- DrawPlace.top + dRelHeight * m_paPoints[i].y + 0.5);
- }
- }
-
- for (i = 0; i < m_nCount; i++)
- {
- if (m_paTypes[i] == PT_MOVETO)
- {
- pDC->MoveTo(paPoints[i]);
- }
- else if (m_paTypes[i] == PT_LINETO)
- {
- VERIFY(pDC->LineTo(paPoints[i]));
- }
- else if (m_paTypes[i] == PT_BEZIERTO)
- {
- // Look for the first non-bezier point(This is the EndPoint)...
- nBez = 0;
- do
- {
- nBez++;
- } while (m_paTypes[i+nBez] == PT_BEZIERTO);
-
- pBezPts = new double[2*(nBez+2)];
- for (b = 0; b < (nBez+2)*2; b += 2)
- {
- pBezPts[b ] = DrawPlace.left + dRelWidth * m_paPoints[i-1+b/2].x;
- pBezPts[b+1] = DrawPlace.top + dRelHeight * m_paPoints[i-1+b/2].y;
- }
- CalcBezier(pBezPts, 2*(nBez+2), daContr);
- delete[] pBezPts;
-
- paPoints[i ].x = daContr[0] + 0.5;
- paPoints[i ].y = daContr[1] + 0.5;
- paPoints[i+1].x = daContr[2] + 0.5;
- paPoints[i+1].y = daContr[3] + 0.5;
- paPoints[i+2] = paPoints[i+nBez];
-
- VERIFY(pDC->PolyBezierTo(&paPoints[i], 3));
- i += nBez;
- }
- } // for
- delete[] paPoints;
-}
-
-/////////////////////////////////////////////////////////////////////////////
-// CDigiChar
-
-CDigiChar::CDigiChar()
-{
- m_Width = 49;
- m_wSegmData = 0x0000; // All segments in offcolor
-}
-
-CDigiChar::~CDigiChar()
-{
-
-}
-
-void CDigiChar::Draw(CDC *pDC, CDoubleRect DrawPlace, CPen *pOffPen, CPen *pOnPen,
- CBrush *pOffBrush, CBrush *pOnBrush)
-{
- WORD SegMask;
- DSegmentVector::iterator SegmIterator;
-
- SegMask = 1;
- for (SegmIterator = m_SegmentVector.begin(); SegmIterator != m_SegmentVector.end();
- SegmIterator++)
- {
- if (m_wSegmData & SegMask)
- {
- pDC->SelectObject(pOnBrush);
- pDC->SelectObject(pOnPen);
- }
- else
- {
- pDC->SelectObject(pOffBrush);
- pDC->SelectObject(pOffPen);
- }
-
- pDC->BeginPath();
- SegmIterator->Draw(pDC, DrawPlace, m_Width);
- pDC->EndPath();
- pDC->StrokeAndFillPath();
-
- SegMask <<= 1;
- }
-}
-void CDigiChar::SetElementData(WORD wSegmData, int /*iDispStyle*/)
-{
- m_wSegmData = wSegmData;
-}
-
-int CDigiChar::GetNormWidth() const
-{
- return m_Width;
-}
-
-/////////////////////////////////////////////////////////////////////////////
-// CDigi7Segment
-
-CDigi7Segment::CDigi7Segment()
-{
- m_Width = 49;
- m_NSegments = 7;
-}
-
-void CDigi7Segment::SetElementData(WORD wSegmData, int iDispStyle)
-{
- int i, p;
- CDSegment TmpSegm;
- LPPOINT lpTmpSegPoints = NULL;
- LPPOINT lpSegPoints;
- LPBYTE lpType;
- int nCount;
-
- m_SegmentVector.clear();
- for (i = 0; i < m_NSegments; i++)
- {
- switch(i)
- {
- case 0:
- case 6: if (iDispStyle & CDigistring::DS_SMOOTH)
- {
- lpSegPoints = PtSeg7N0S;
- lpType = TpSeg7N0S;
- nCount = 7;
- }
- else
- {
- lpSegPoints = PtSeg7N0;
- lpType = TpSeg7N0;
- nCount = 4;
- }
- break;
- case 1:
- case 4:if (iDispStyle & CDigistring::DS_SMOOTH)
- {
- lpSegPoints = PtSeg7N1S;
- lpType = TpSeg7N1S;
- nCount = 7;
- }
- else
- {
- lpSegPoints = PtSeg7N1;
- lpType = TpSeg7N1;
- nCount = 4;
- }
- break;
- case 2:
- case 5: if (iDispStyle & CDigistring::DS_SMOOTH)
- {
- lpSegPoints = PtSeg7N2S;
- lpType = TpSeg7N2S;
- nCount = 10;
- }
- else
- {
- lpSegPoints = PtSeg7N1;
- lpType = TpSeg7N1;
- nCount = 4;
- }
- break;
- case 3: if (iDispStyle & CDigistring::DS_SMOOTH)
- {
- lpSegPoints = PtSeg7N3S;
- lpType = TpSeg7N3S;
- nCount = 6;
- }
- else
- {
- lpSegPoints = PtSeg7N3;
- lpType = TpSeg7N3;
- nCount = 6;
- }
- break;
- }
-
- switch(i)
- {
- case 6: lpTmpSegPoints = new CPoint[nCount];
- for (p = 0; p < nCount; p++)
- lpTmpSegPoints[p] = LineMirrorY(lpSegPoints[p], 41);break;
- case 2: if (!(iDispStyle & CDigistring::DS_SMOOTH))
- {
- lpTmpSegPoints = new CPoint[nCount];
- for (p = 0; p < nCount; p++)
- lpTmpSegPoints[p] = LineMirrorX(lpSegPoints[p], (m_Width-1)/2);
- }
- break;
- case 4: lpTmpSegPoints = new CPoint[nCount];
- for (p = 0; p < nCount; p++)
- lpTmpSegPoints[p] = LineMirrorY(lpSegPoints[p], 41);break;
- case 5: lpTmpSegPoints = new CPoint[nCount];
- for (p = 0; p < nCount; p++)
- if (iDispStyle & CDigistring::DS_SMOOTH)
- lpTmpSegPoints[p] = LineMirrorY(lpSegPoints[p], 41);
- else
- lpTmpSegPoints[p] = PointMirror(lpSegPoints[p], CPoint((m_Width-1)/2, 41));
- break;
- }
-
- if (lpTmpSegPoints == NULL)
- TmpSegm.DefPoints(lpSegPoints, lpType, nCount);
- else
- {
- TmpSegm.DefPoints(lpTmpSegPoints, lpType, nCount);
- delete[] lpTmpSegPoints;
- lpTmpSegPoints = NULL;
- }
- m_SegmentVector.push_back(TmpSegm);
- }
- m_wSegmData = wSegmData;
-}
-
-/////////////////////////////////////////////////////////////////////////////
-// CDigi14Segment
-
-CDigi14Segment::CDigi14Segment()
-{
- m_Width = 49;
- m_NSegments = 14;
-}
-
-void CDigi14Segment::SetElementData(WORD wSegmData, int iDispStyle)
-{
- int i, p;
- CDSegment x;
- LPPOINT lpTmpSegPoints = NULL;
- LPPOINT lpSegPoints;
- LPBYTE lpType;
- int nCount;
-
- m_SegmentVector.clear();
- for (i = 0; i < m_NSegments; i++)
- {
- switch(i)
- {
- case 0:
- case 5: if (iDispStyle & CDigistring::DS_SMOOTH)
- {
- lpSegPoints = PtSeg14N0S;
- lpType = TpSeg14N0S;
- nCount = 13;
- }
- else
- {
- lpSegPoints = PtSeg14N0;
- lpType = TpSeg14N0;
- nCount = 5;
- }
- break;
- case 1:
- case 2:
- case 3:
- case 4:
- if (iDispStyle & CDigistring::DS_SMOOTH)
- {
- lpSegPoints = PtSeg14N1S;
- lpType = TpSeg14N1S;
- nCount = 10;
- }
- else
- {
- lpSegPoints = PtSeg14N1;
- lpType = TpSeg14N1;
- nCount = 5;
- }
- break;
- case 6:
- case 7:
- if (iDispStyle & CDigistring::DS_SMOOTH)
- {
- lpSegPoints = PtSeg14N6S;
- lpType = TpSeg14N6S;
- nCount = 6;
- }
- else
- {
- lpSegPoints = PtSeg14N6;
- lpType = TpSeg14N6;
- nCount = 6;
- }
- break;
- case 8:
- case 9:
- case 11:
- case 12:
- if (iDispStyle & CDigistring::DS_SMOOTH)
- {
- lpSegPoints = PtSeg14N8S;
- lpType = TpSeg14N8S;
- nCount = 10;
- }
- else
- {
- lpSegPoints = PtSeg14N8;
- lpType = TpSeg14N8;
- nCount = 4;
- }
- break;
- case 13:
- case 10:
- if (iDispStyle & CDigistring::DS_SMOOTH)
- {
- lpSegPoints = PtSeg14N13S;
- lpType = TpSeg14N13S;
- nCount = 17;
- }
- else
- {
- lpSegPoints = PtSeg14N13;
- lpType = TpSeg14N13;
- nCount = 4;
- }
- break;
- }
-
- switch(i)
- {
- case 5: lpTmpSegPoints = new CPoint[nCount];
- for (p = 0; p < nCount; p++)
- lpTmpSegPoints[p] = LineMirrorY(lpSegPoints[p], 41);break;
- case 2: lpTmpSegPoints = new CPoint[nCount];
- for (p = 0; p < nCount; p++)
- lpTmpSegPoints[p] = LineMirrorX(lpSegPoints[p], (m_Width-1)/2);break;
- case 3: lpTmpSegPoints = new CPoint[nCount];
- for (p = 0; p < nCount; p++)
- lpTmpSegPoints[p] = LineMirrorY(lpSegPoints[p], 41);break;
- case 4: lpTmpSegPoints = new CPoint[nCount];
- for (p = 0; p < nCount; p++)
- lpTmpSegPoints[p] = PointMirror(lpSegPoints[p], CPoint((m_Width-1)/2, 41));break;
- case 7: lpTmpSegPoints = new CPoint[nCount];
- for (p = 0; p < nCount; p++)
- lpTmpSegPoints[p] = LineMirrorX(lpSegPoints[p], (m_Width-1)/2);break;
- case 9: lpTmpSegPoints = new CPoint[nCount];
- for (p = 0; p < nCount; p++)
- lpTmpSegPoints[p] = LineMirrorY(lpSegPoints[p], 41);break;
- case 11: lpTmpSegPoints = new CPoint[nCount];
- for (p = 0; p < nCount; p++)
- lpTmpSegPoints[p] = PointMirror(lpSegPoints[p], CPoint((m_Width-1)/2, 41));break;
- case 12: lpTmpSegPoints = new CPoint[nCount];
- for (p = 0; p < nCount; p++)
- lpTmpSegPoints[p] = LineMirrorX(lpSegPoints[p], (m_Width-1)/2);break;
- case 10: lpTmpSegPoints = new CPoint[nCount];
- for (p = 0; p < nCount; p++)
- lpTmpSegPoints[p] = LineMirrorY(lpSegPoints[p], 41);break;
- }
-
- if (lpTmpSegPoints == NULL)
- x.DefPoints(lpSegPoints, lpType, nCount);
- else
- {
- x.DefPoints(lpTmpSegPoints, lpType, nCount);
- delete[] lpTmpSegPoints;
- lpTmpSegPoints = NULL;
- }
- m_SegmentVector.push_back(x);
- }
- m_wSegmData = wSegmData;
-}
-
-/////////////////////////////////////////////////////////////////////////////
-// CDigiSemiColonCombi
-
-CDigiColonDotChar::CDigiColonDotChar()
-{
- m_Width = 18;
- m_NSegments = 3;
-}
-
-void CDigiColonDotChar::SetElementData(WORD wSegmData, int /*iDispStyle*/)
-{
- int i;
- CDSegment DSegment;
- LPPOINT lpSegPoints;
- LPBYTE lpType;
- int nCount;
-
- m_SegmentVector.clear();
-
- for (i = 0; i < m_NSegments; i++)
- {
- switch(i)
- {
- case 0:lpSegPoints = PtSegScN0;
- lpType = TpSegScN0;
- nCount = 4; break;
- case 1:
- lpSegPoints = PtSegScN1;
- lpType = TpSegScN1;
- nCount = 4; break;
- case 2:
- lpSegPoints = PtSegScN2;
- lpType = TpSegScN2;
- nCount = 4; break;
- }
- DSegment.DefPoints(lpSegPoints, lpType, nCount);
- m_SegmentVector.push_back(DSegment);
- }
-
- m_wSegmData = wSegmData;
-}
-
-/////////////////////////////////////////////////////////////////////////////
-// CDigistring
-
-CDigistring::CDigistring()
- : m_strText("EMPTY")
-{
- m_DispStyle = DS_SZ_PROP;
- m_BackColor = BLACK;
- m_Modified = TRUE;
- m_OffColor = DARKGREEN;
- m_OnColor = LIGHTGREEN;
-}
-
-CDigistring::~CDigistring()
-{
- m_CharVector.clear();
-}
-
-void CDigistring::SetText(LPCTSTR lpszText)
-{
- if (m_strText != lpszText)
- {
- m_strText = lpszText;
- m_Modified = TRUE;
- Invalidate();
- }
-}
-
-void CDigistring::Format(LPCTSTR lpszFormat, ...)
-{
- TCHAR szMessage[256];
-
- va_list argp;
- va_start(argp, lpszFormat);
- _vsntprintf(szMessage, 255, lpszFormat, argp);
- va_end(argp);
-
- SetText(szMessage);
-}
-
-void CDigistring::SetColor(COLORREF OffColor, COLORREF OnColor)
-{
- if (m_OnColor == OnColor && m_OffColor == OffColor)
- return;
- m_OnColor = OnColor;
- m_OffColor = OffColor;
- Invalidate();
-}
-
-void CDigistring::SetBackColor(COLORREF BackColor /* = BLACK */)
-{
- if (m_BackColor == BackColor)
- return;
- m_BackColor = BackColor;
- Invalidate();
-}
-
-BOOL CDigistring::ModifyDigiStyle(DWORD dwRemove, DWORD dwAdd)
-{
- ASSERT(!(dwRemove & dwAdd));
- if (dwRemove & dwAdd)
- return FALSE;
-
- m_DispStyle |= dwAdd;
- m_DispStyle &= ~dwRemove;
-
- m_Modified = TRUE;
- Invalidate();
- return TRUE;
-}
-
-CDigiChar * CDigistring::DefineChar(TCHAR cChar)
-{
- int iIndex;
- CDigiChar * pDChar = NULL;
-
- if (cChar >= _T('0') && cChar <= _T('9')
- || cChar == _T(' ') || cChar == _T('-'))
- {
- if (cChar == _T(' '))
- {
- iIndex = 0;
- }
- else if (cChar == _T('-'))
- {
- iIndex = 11;
- }
- else
- {
- iIndex = cChar - _T('0') + 1;
- }
-
- if (m_DispStyle & DS_STYLE14)
- {
- pDChar = new CDigi14Segment;
- pDChar->SetElementData(CHAR_SEGM14[iIndex], m_DispStyle);
- }
- else
- {
- pDChar = new CDigi7Segment;
- pDChar->SetElementData(CHAR_SEGM7[iIndex], m_DispStyle);
- }
- }
- else if (cChar >= _T('A') && cChar <= _T('Z'))
- {
- iIndex = cChar - _T('A') + 12;
- pDChar = new CDigi14Segment;
- pDChar->SetElementData(CHAR_SEGM14[iIndex], m_DispStyle);
- }
- else
- {
- iIndex = 0;
- switch(cChar)
- {
- case _T(':'): iIndex++;
- case _T('.'): pDChar = new CDigiColonDotChar;
- pDChar->SetElementData(CHAR_SEMCOL[iIndex], m_DispStyle);
- break;
- case _T('*'): iIndex = MAXSEGCHAR14 - 2; pDChar = new CDigi14Segment;
- pDChar->SetElementData(CHAR_SEGM14[iIndex], m_DispStyle);
- break;
- case _T('+'): iIndex = MAXSEGCHAR14 - 1; pDChar = new CDigi14Segment;
- pDChar->SetElementData(CHAR_SEGM14[iIndex], m_DispStyle);
- break;
- default : ASSERT(FALSE);
- }
- }
- return pDChar;
-}
-
-void CDigistring::BuildString()
-{
- CDigiChar * pDChar;
- if (!m_Modified) return;
- m_CharVector.clear();
-
- m_strText.MakeUpper();
- for (int i = 0; i < m_strText.GetLength(); i++)
- {
- if ((pDChar = DefineChar(m_strText[i])) != NULL)
- {
- m_CharVector.push_back(*pDChar);
- delete pDChar;
- }
- }
-
- m_Modified = FALSE;
-}
-
-BEGIN_MESSAGE_MAP(CDigistring, CStatic)
- //{{AFX_MSG_MAP(CDigistring)
- ON_WM_PAINT()
- ON_WM_ERASEBKGND()
- //}}AFX_MSG_MAP
-END_MESSAGE_MAP()
-
-/////////////////////////////////////////////////////////////////////////////
-// CDigistring message handlers
-
-void CDigistring::OnPaint()
-{
- CRect rect;
- CDoubleRect CharRect;
- GetClientRect(&rect);
-
- CPaintDC dc(this); // device context for painting
- dc.SetBkColor(m_BackColor);
- CMemDC memDC(&dc, &rect);
-
- CBrush hBrushOff, hBrushOn;
- hBrushOff.CreateSolidBrush(m_OffColor);
- hBrushOn.CreateSolidBrush(m_OnColor);
- CBrush *pOldBrush = memDC.SelectObject(&hBrushOn);
-
- int r = int(GetRValue(m_OffColor) * 0.75 + GetRValue(m_BackColor) * 0.25);
- int g = int(GetGValue(m_OffColor) * 0.75 + GetGValue(m_BackColor) * 0.25);
- int b = int(GetBValue(m_OffColor) * 0.75 + GetBValue(m_BackColor) * 0.25);
-
- CPen OffPen(PS_SOLID | PS_ENDCAP_ROUND, 1, RGB(r,g,b));
- r = int(GetRValue(m_OnColor) * 0.75 + GetRValue(m_BackColor) * 0.25);
- g = int(GetGValue(m_OnColor) * 0.75 + GetGValue(m_BackColor) * 0.25);
- b = int(GetBValue(m_OnColor) * 0.75 + GetBValue(m_BackColor) * 0.25);
- CPen OnPen(PS_SOLID | PS_ENDCAP_ROUND, 1, RGB(r,g,b));
- CPen *pOldPen = memDC.SelectObject(&OffPen);
-
- int iTotWidth = 0;
- double dRelWidth, dRelHeight;
- // TODO: Add your message handler code here
-
- DigiCharVector::iterator CharIterator;
-
- // Calculate resizing factors...
- BuildString();
- for (CharIterator = m_CharVector.begin(); CharIterator != m_CharVector.end();
- CharIterator++)
- {
- iTotWidth += CharIterator->GetNormWidth();
- }
- dRelWidth = double(rect.Width()) / iTotWidth;
- dRelHeight = double(rect.Height()) / NORM_DIGIHEIGHT;
-
- // If proportional make offset for centered text
- if (m_DispStyle & DS_SZ_PROP)
- {
- if (dRelWidth < dRelHeight)
- dRelHeight = dRelWidth;
- else
- dRelWidth = dRelHeight;
-
- CharRect.left = (rect.Width() - dRelWidth * iTotWidth) / 2;
- CharRect.top = (rect.Height() - dRelHeight * NORM_DIGIHEIGHT) / 2;
- }
- else
- CharRect.SetRectEmpty();
-
- // Draw all characters...
- for (CharIterator = m_CharVector.begin(); CharIterator != m_CharVector.end();
- CharIterator++)
- {
- CharRect.SetRect(CharRect.left, CharRect.top,
- CharRect.left + dRelWidth * CharIterator->GetNormWidth(),
- CharRect.top + dRelHeight * NORM_DIGIHEIGHT);
-
- CharIterator->Draw(&memDC, CharRect, &OffPen, &OnPen, &hBrushOff, &hBrushOn);
-
- CharRect.left += dRelWidth * CharIterator->GetNormWidth();
- }
-
- // Mama says: Clean up your mess!
- memDC.SelectObject(pOldPen);
- memDC.SelectObject(pOldBrush);
- OffPen.DeleteObject();
- OnPen.DeleteObject();
- hBrushOff.DeleteObject();
- hBrushOn.DeleteObject();
-}
-
-BOOL CDigistring::OnEraseBkgnd(CDC* /*pDC*/)
-{
- // Don't erase the background to avoid flickering
- // Background is painted in CMemDC::CMemDC(); with FillSolidRect();
- return FALSE;
-}
diff --git a/Bus/Horloge/Digistring.h b/Bus/Horloge/Digistring.h
deleted file mode 100644
index dc1352d..0000000
--- a/Bus/Horloge/Digistring.h
+++ /dev/null
@@ -1,187 +0,0 @@
-#if !defined(AFX_DIGISTRING_H__F77484C2_745F_11D3_A718_87712333104C__INCLUDED_)
-#define AFX_DIGISTRING_H__F77484C2_745F_11D3_A718_87712333104C__INCLUDED_
-
-#if _MSC_VER >= 1000
-#pragma once
-#endif // _MSC_VER >= 1000
-// Digistring.h : header file
-//
-// Copyright (C) 2000 by Michel Wassink
-// All rights reserved
-//
-// This is free software.
-// This code may be used in compiled form in any way you desire. This
-// file may be redistributed unmodified by any means PROVIDING it is
-// not sold for profit without the authors written consent, and
-// providing that this notice and the authors name and all copyright
-// notices remains intact. If the source code in this file is used in
-// any commercial application then a statement along the lines of
-// "Portions Copyright © 2000 Michel Wassink" must be included in
-// the startup banner, "About" box or printed documentation. An email
-// letting me know that you are using it would be nice as well. That's
-// not much to ask considering the amount of work that went into this.
-//
-// No warrantee of any kind, expressed or implied, is included with this
-// software; use at your own risk, responsibility for damages (if any) to
-// anyone resulting from the use of this software rests entirely with the
-// user.
-//
-// Version: 1.0
-// Release: 1 (februari 2000 to www.codeguru.com and www.codeproject.com)
-// -----------------------------------------------------------------------
-// Notes to changes for release 1 (V1.0):
-// - First release.
-//
-// Send bug reports, bug fixes, enhancements, requests, flames, etc., and
-// I'll try to keep a version up to date. I can be reached as follows:
-// mwassink@csi.com (private site)
-// An email letting me know that you are using it would be nice.
-/////////////////////////////////////////////////////////////////////////////
-
-#include <vector>
-using namespace std ;
-#include "MEMDC.H"
-#include "RGBCOLOR.H"
-
-// CRect class with double precision for accurate drawing.
-class CDoubleRect
-{
-public:
- void SetRect(double x1, double y1, double x2, double y2)
- { left = x1; top = y1; right = x2; bottom = y2;}
- double Width() const{return right - left;}
- double Height() const{return bottom - top;}
- void SetRectEmpty(){left = top = right = bottom = 0.0;}
-public:
- double left, top, right, bottom;
-};
-
-class CDSegment
-{
-public:
- CDSegment();
- CDSegment(const CDSegment& Segment);
- ~CDSegment();
- void DefPoints(const POINT* lpPoints, const BYTE* lpTypes, int nCount);
- void Draw(CDC *pDC, CDoubleRect DrawPlace, int iWidth) const;
- void FreeSegment();
- CDSegment operator=(const CDSegment &Segment);
-
-// Implementation
-public:
- CPoint * m_paPoints;
- BYTE * m_paTypes;
- int m_nCount;
-};
-
-typedef vector<CDSegment> DSegmentVector;
-
-class CDigiChar
-{
-// Construction
-public:
- CDigiChar();
-
-//Attributes:
-public:
- virtual ~CDigiChar();
- virtual void SetElementData(WORD wSegmData, int iDispStyle);
- void Draw(CDC *pDC, CDoubleRect DrawPlace, CPen *pOffPen, CPen *pOnpen,
- CBrush *pOffBrush, CBrush *pOnBrush);
- void SetColor(COLORREF OffColor, COLORREF OnColor);
- int GetNormWidth() const;
-
-
-protected:
- int m_Width;
- WORD m_wSegmData;
- DSegmentVector m_SegmentVector;
- int m_NSegments;
- COLORREF m_OffColor;
- COLORREF m_OnColor;
-
-};
-
-class CDigiColonDotChar : public CDigiChar
-{
-public:
- CDigiColonDotChar();
- void SetElementData(WORD wSegmData, int iDispStyle);
-};
-
-class CDigi7Segment : public CDigiChar
-{
-public:
- CDigi7Segment();
- void SetElementData(WORD wSegmData, int iDispStyle);
-};
-
-class CDigi14Segment : public CDigiChar
-{
-public:
- CDigi14Segment();
- void SetElementData(WORD wSegmData, int iDispStyle);
-};
-
-typedef vector<CDigiChar> DigiCharVector;
-
-/////////////////////////////////////////////////////////////////////////////
-// CDigistring class
-
-class CDigistring : public CStatic
-{
-// Construction
-public:
- CDigistring();
-
-// Attributes
-public:
- enum {
- DS_SMOOTH = 1, // Pioneer kind of characters
- DS_STYLE14 = 2, // use allways 14 segment display.
- DS_SZ_PROP = 4 // size proportional
- };
-
-// Operations
-public:
-
-// Overrides
- // ClassWizard generated virtual function overrides
- //{{AFX_VIRTUAL(CDigistring)
- //}}AFX_VIRTUAL
-
-// Implementation
-public:
- virtual ~CDigistring();
- void SetText(LPCTSTR lpszText);
- void Format(LPCTSTR lpszFormat, ...);
- void SetColor(COLORREF OffColor, COLORREF OnColor);
- void SetBackColor(COLORREF BackColor = BLACK);
- BOOL ModifyDigiStyle(DWORD dwRemove, DWORD dwAdd);
-
- // Generated message map functions
-protected:
- CDigiChar * DefineChar(TCHAR cChar);
- void BuildString();
-
- CString m_strText;
- BOOL m_Modified;
- DigiCharVector m_CharVector;
- COLORREF m_OffColor;
- COLORREF m_OnColor;
- COLORREF m_BackColor;
- DWORD m_DispStyle;
- //{{AFX_MSG(CDigistring)
- afx_msg void OnPaint();
- afx_msg BOOL OnEraseBkgnd(CDC* pDC);
- //}}AFX_MSG
-
- DECLARE_MESSAGE_MAP()
-};
-
-/////////////////////////////////////////////////////////////////////////////
-
-//{{AFX_INSERT_LOCATION}}
-// Microsoft Developer Studio will insert additional declarations immediately before the previous line.
-
-#endif // !defined(AFX_DIGISTRING_H__F77484C2_745F_11D3_A718_87712333104C__INCLUDED_)
diff --git a/Bus/Horloge/Horloge.cpp b/Bus/Horloge/Horloge.cpp
deleted file mode 100644
index cbe1774..0000000
--- a/Bus/Horloge/Horloge.cpp
+++ /dev/null
@@ -1,74 +0,0 @@
-// Horloge.cpp : Defines the class behaviors for the application.
-//
-
-#include "stdafx.h"
-#include "Horloge.h"
-#include "HorlogeDlg.h"
-
-#ifdef _DEBUG
-#define new DEBUG_NEW
-#undef THIS_FILE
-static char THIS_FILE[] = __FILE__;
-#endif
-
-/////////////////////////////////////////////////////////////////////////////
-// CHorlogeApp
-
-BEGIN_MESSAGE_MAP(CHorlogeApp, CWinApp)
- //{{AFX_MSG_MAP(CHorlogeApp)
- // NOTE - the ClassWizard will add and remove mapping macros here.
- // DO NOT EDIT what you see in these blocks of generated code!
- //}}AFX_MSG
- ON_COMMAND(ID_HELP, CWinApp::OnHelp)
-END_MESSAGE_MAP()
-
-/////////////////////////////////////////////////////////////////////////////
-// CHorlogeApp construction
-
-CHorlogeApp::CHorlogeApp()
-{
- // TODO: add construction code here,
- // Place all significant initialization in InitInstance
-}
-
-/////////////////////////////////////////////////////////////////////////////
-// The one and only CHorlogeApp object
-
-CHorlogeApp theApp;
-
-/////////////////////////////////////////////////////////////////////////////
-// CHorlogeApp initialization
-
-BOOL CHorlogeApp::InitInstance()
-{
- // InitCommonControlsEx() is required on Windows XP if an application
- // manifest specifies use of ComCtl32.dll version 6 or later to enable
- // visual styles. Otherwise, any window creation will fail.
- INITCOMMONCONTROLSEX InitCtrls;
- InitCtrls.dwSize = sizeof(InitCtrls);
- // Set this to include all the common control classes you want to use
- // in your application.
- InitCtrls.dwICC = ICC_WIN95_CLASSES;
- InitCommonControlsEx(&InitCtrls);
-
- CWinApp::InitInstance();
-
- //AfxEnableControlContainer();
- CHorlogeDlg dlg;
- m_pMainWnd = &dlg;
- INT_PTR nResponse = dlg.DoModal();
- if (nResponse == IDOK)
- {
- // TODO: Place code here to handle when the dialog is
- // dismissed with OK
- }
- else if (nResponse == IDCANCEL)
- {
- // TODO: Place code here to handle when the dialog is
- // dismissed with Cancel
- }
-
- // Since the dialog has been closed, return FALSE so that we exit the
- // application, rather than start the application's message pump.
- return FALSE;
-}
diff --git a/Bus/Horloge/Horloge.dsp b/Bus/Horloge/Horloge.dsp
deleted file mode 100644
index c10c181..0000000
--- a/Bus/Horloge/Horloge.dsp
+++ /dev/null
@@ -1,199 +0,0 @@
-# Microsoft Developer Studio Project File - Name="Horloge" - Package Owner=<4>
-# Microsoft Developer Studio Generated Build File, Format Version 6.00
-# ** DO NOT EDIT **
-
-# TARGTYPE "Win32 (x86) Application" 0x0101
-
-CFG=Horloge - Win32 Debug
-!MESSAGE This is not a valid makefile. To build this project using NMAKE,
-!MESSAGE use the Export Makefile command and run
-!MESSAGE
-!MESSAGE NMAKE /f "Horloge.mak".
-!MESSAGE
-!MESSAGE You can specify a configuration when running NMAKE
-!MESSAGE by defining the macro CFG on the command line. For example:
-!MESSAGE
-!MESSAGE NMAKE /f "Horloge.mak" CFG="Horloge - Win32 Debug"
-!MESSAGE
-!MESSAGE Possible choices for configuration are:
-!MESSAGE
-!MESSAGE "Horloge - Win32 Release" (based on "Win32 (x86) Application")
-!MESSAGE "Horloge - Win32 Debug" (based on "Win32 (x86) Application")
-!MESSAGE
-
-# Begin Project
-# PROP AllowPerConfigDependencies 0
-# PROP Scc_ProjName ""$/Bus/Horloge", JIEAAAAA"
-# PROP Scc_LocalPath "."
-CPP=cl.exe
-MTL=midl.exe
-RSC=rc.exe
-
-!IF "$(CFG)" == "Horloge - Win32 Release"
-
-# PROP BASE Use_MFC 6
-# PROP BASE Use_Debug_Libraries 0
-# PROP BASE Output_Dir "Release"
-# PROP BASE Intermediate_Dir "Release"
-# PROP BASE Target_Dir ""
-# PROP Use_MFC 6
-# PROP Use_Debug_Libraries 0
-# PROP Output_Dir "Release"
-# PROP Intermediate_Dir "Release"
-# PROP Target_Dir ""
-# ADD BASE CPP /nologo /MD /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_WINDOWS" /D "_AFXDLL" /Yu"stdafx.h" /FD /c
-# ADD CPP /nologo /MD /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_WINDOWS" /D "_AFXDLL" /D "_MBCS" /Yu"stdafx.h" /FD /c
-# ADD BASE MTL /nologo /D "NDEBUG" /mktyplib203 /win32
-# ADD MTL /nologo /D "NDEBUG" /mktyplib203 /win32
-# ADD BASE RSC /l 0x40c /d "NDEBUG" /d "_AFXDLL"
-# ADD RSC /l 0x40c /d "NDEBUG" /d "_AFXDLL"
-BSC32=bscmake.exe
-# ADD BASE BSC32 /nologo
-# ADD BSC32 /nologo
-LINK32=link.exe
-# ADD BASE LINK32 /nologo /subsystem:windows /machine:I386
-# ADD LINK32 /nologo /subsystem:windows /machine:I386
-
-!ELSEIF "$(CFG)" == "Horloge - Win32 Debug"
-
-# PROP BASE Use_MFC 6
-# PROP BASE Use_Debug_Libraries 1
-# PROP BASE Output_Dir "Debug"
-# PROP BASE Intermediate_Dir "Debug"
-# PROP BASE Target_Dir ""
-# PROP Use_MFC 6
-# PROP Use_Debug_Libraries 1
-# PROP Output_Dir "Debug"
-# PROP Intermediate_Dir "Debug"
-# PROP Ignore_Export_Lib 0
-# PROP Target_Dir ""
-# ADD BASE CPP /nologo /MDd /W3 /Gm /GX /ZI /Od /D "WIN32" /D "_DEBUG" /D "_WINDOWS" /D "_AFXDLL" /Yu"stdafx.h" /FD /GZ /c
-# ADD CPP /nologo /MDd /W3 /Gm /GX /ZI /Od /D "WIN32" /D "_DEBUG" /D "_WINDOWS" /D "_AFXDLL" /D "_MBCS" /FR /Yu"stdafx.h" /FD /GZ /c
-# ADD BASE MTL /nologo /D "_DEBUG" /mktyplib203 /win32
-# ADD MTL /nologo /D "_DEBUG" /mktyplib203 /win32
-# ADD BASE RSC /l 0x40c /d "_DEBUG" /d "_AFXDLL"
-# ADD RSC /l 0x40c /d "_DEBUG" /d "_AFXDLL"
-BSC32=bscmake.exe
-# ADD BASE BSC32 /nologo
-# ADD BSC32 /nologo
-LINK32=link.exe
-# ADD BASE LINK32 /nologo /subsystem:windows /debug /machine:I386 /pdbtype:sept
-# ADD LINK32 /nologo /subsystem:windows /debug /machine:I386 /out:"c:\users\fcolin\Program Files\Debug\Horloge.exe" /pdbtype:sept
-
-!ENDIF
-
-# Begin Target
-
-# Name "Horloge - Win32 Release"
-# Name "Horloge - Win32 Debug"
-# Begin Group "Source Files"
-
-# PROP Default_Filter "cpp;c;cxx;rc;def;r;odl;idl;hpj;bat"
-# Begin Source File
-
-SOURCE=.\Curvefit.cpp
-# End Source File
-# Begin Source File
-
-SOURCE=.\Digistring.cpp
-# End Source File
-# Begin Source File
-
-SOURCE=.\Horloge.cpp
-# End Source File
-# Begin Source File
-
-SOURCE=.\Horloge.rc
-# End Source File
-# Begin Source File
-
-SOURCE=.\HorlogeDlg.cpp
-# End Source File
-# Begin Source File
-
-SOURCE=.\HorlogeParseCmdLine.cpp
-# End Source File
-# Begin Source File
-
-SOURCE=.\StdAfx.cpp
-# ADD CPP /Yc"stdafx.h"
-# End Source File
-# End Group
-# Begin Group "Header Files"
-
-# PROP Default_Filter "h;hpp;hxx;hm;inl"
-# Begin Source File
-
-SOURCE=.\Curvefit.h
-# End Source File
-# Begin Source File
-
-SOURCE=.\Digistring.h
-# End Source File
-# Begin Source File
-
-SOURCE=.\Horloge.h
-# End Source File
-# Begin Source File
-
-SOURCE=.\HorlogeDlg.h
-# End Source File
-# Begin Source File
-
-SOURCE=.\HorlogeParseCmdLine.h
-# End Source File
-# Begin Source File
-
-SOURCE=.\MemDC.h
-# End Source File
-# Begin Source File
-
-SOURCE=.\Resource.h
-# End Source File
-# Begin Source File
-
-SOURCE=.\Rgbcolor.h
-# End Source File
-# Begin Source File
-
-SOURCE=.\StdAfx.h
-# End Source File
-# End Group
-# Begin Group "Resource Files"
-
-# PROP Default_Filter "ico;cur;bmp;dlg;rc2;rct;bin;rgs;gif;jpg;jpeg;jpe"
-# Begin Source File
-
-SOURCE=.\res\Horloge.ico
-# End Source File
-# Begin Source File
-
-SOURCE=.\res\Horloge.rc2
-# End Source File
-# Begin Source File
-
-SOURCE=.\res\ico00001.ico
-# End Source File
-# Begin Source File
-
-SOURCE=.\res\ico00002.ico
-# End Source File
-# Begin Source File
-
-SOURCE=.\res\ico00003.ico
-# End Source File
-# Begin Source File
-
-SOURCE=.\res\ico00004.ico
-# End Source File
-# Begin Source File
-
-SOURCE=.\res\icon1.ico
-# End Source File
-# End Group
-# Begin Source File
-
-SOURCE=.\ReadMe.txt
-# End Source File
-# End Target
-# End Project
diff --git a/Bus/Horloge/Horloge.h b/Bus/Horloge/Horloge.h
deleted file mode 100644
index a7ab3d9..0000000
--- a/Bus/Horloge/Horloge.h
+++ /dev/null
@@ -1,50 +0,0 @@
-// Horloge.h : main header file for the HORLOGE application
-//
-
-#if !defined(AFX_HORLOGE_H__0FD083D1_0B1D_43C1_9501_73E55EBEDE61__INCLUDED_)
-#define AFX_HORLOGE_H__0FD083D1_0B1D_43C1_9501_73E55EBEDE61__INCLUDED_
-
-#if _MSC_VER > 1000
-#pragma once
-#endif // _MSC_VER > 1000
-
-#ifndef __AFXWIN_H__
- #error include 'stdafx.h' before including this file for PCH
-#endif
-
-#include "resource.h" // main symbols
-#include "Digistring.h"
-
-/////////////////////////////////////////////////////////////////////////////
-// CHorlogeApp:
-// See Horloge.cpp for the implementation of this class
-//
-
-class CHorlogeApp : public CWinApp
-{
-public:
- CHorlogeApp();
-
-// Overrides
- // ClassWizard generated virtual function overrides
- //{{AFX_VIRTUAL(CHorlogeApp)
- public:
- virtual BOOL InitInstance();
- //}}AFX_VIRTUAL
-
-// Implementation
-
- //{{AFX_MSG(CHorlogeApp)
- // NOTE - the ClassWizard will add and remove member functions here.
- // DO NOT EDIT what you see in these blocks of generated code !
- //}}AFX_MSG
- DECLARE_MESSAGE_MAP()
-};
-
-
-/////////////////////////////////////////////////////////////////////////////
-
-//{{AFX_INSERT_LOCATION}}
-// Microsoft Visual C++ will insert additional declarations immediately before the previous line.
-
-#endif // !defined(AFX_HORLOGE_H__0FD083D1_0B1D_43C1_9501_73E55EBEDE61__INCLUDED_)
diff --git a/Bus/Horloge/Horloge.rc b/Bus/Horloge/Horloge.rc
deleted file mode 100644
index a7c0582..0000000
--- a/Bus/Horloge/Horloge.rc
+++ /dev/null
@@ -1,194 +0,0 @@
-// Microsoft Visual C++ generated resource script.
-//
-#include "resource.h"
-
-#define APSTUDIO_READONLY_SYMBOLS
-/////////////////////////////////////////////////////////////////////////////
-//
-// Generated from the TEXTINCLUDE 2 resource.
-//
-#include "afxres.h"
-
-/////////////////////////////////////////////////////////////////////////////
-#undef APSTUDIO_READONLY_SYMBOLS
-
-/////////////////////////////////////////////////////////////////////////////
-// French (France) resources
-
-#if !defined(AFX_RESOURCE_DLL) || defined(AFX_TARG_FRA)
-#ifdef _WIN32
-LANGUAGE LANG_FRENCH, SUBLANG_FRENCH
-#pragma code_page(1252)
-#endif //_WIN32
-
-#ifdef APSTUDIO_INVOKED
-/////////////////////////////////////////////////////////////////////////////
-//
-// TEXTINCLUDE
-//
-
-1 TEXTINCLUDE
-BEGIN
- "resource.h\0"
-END
-
-2 TEXTINCLUDE
-BEGIN
- "#include ""afxres.h""\r\n"
- "\0"
-END
-
-3 TEXTINCLUDE
-BEGIN
- "#define _AFX_NO_SPLITTER_RESOURCES\r\n"
- "#define _AFX_NO_OLE_RESOURCES\r\n"
- "#define _AFX_NO_TRACKER_RESOURCES\r\n"
- "#define _AFX_NO_PROPERTY_RESOURCES\r\n"
- "\r\n"
- "#if !defined(AFX_RESOURCE_DLL) || defined(AFX_TARG_FRA)\r\n"
- "#ifdef _WIN32\r\n"
- "LANGUAGE 12, 1\r\n"
- "#pragma code_page(1252)\r\n"
- "#endif //_WIN32\r\n"
- "#include ""res\\Horloge.rc2"" // non-Microsoft Visual C++ edited resources\r\n"
- "#include ""l.fra\\afxres.rc"" // Standard components\r\n"
- "#endif\r\n"
- "\0"
-END
-
-#endif // APSTUDIO_INVOKED
-
-
-/////////////////////////////////////////////////////////////////////////////
-//
-// Icon
-//
-
-// Icon with lowest ID value placed first to ensure application icon
-// remains consistent on all systems.
-IDR_MAINFRAME ICON "res\\Horloge.ico"
-IDI_FORWARD ICON "res\\icon1.ico"
-IDI_BACKWARD ICON "res\\ico00001.ico"
-IDI_PAUSE ICON "res\\ico00002.ico"
-IDI_START ICON "res\\ico00003.ico"
-IDI_NORMAL_SPEED ICON "res\\ico00004.ico"
-
-/////////////////////////////////////////////////////////////////////////////
-//
-// Dialog
-//
-
-IDD_HORLOGE_DIALOG DIALOGEX 0, 0, 320, 201
-STYLE DS_SETFONT | DS_MODALFRAME | WS_MINIMIZEBOX | WS_MAXIMIZEBOX | WS_POPUP | WS_VISIBLE | WS_CAPTION | WS_SYSMENU
-EXSTYLE WS_EX_APPWINDOW
-CAPTION "Horloge"
-FONT 8, "MS Sans Serif", 0, 0, 0x1
-BEGIN
- PUSHBUTTON "Pause",IDC_PAUSE,115,82,61,28,BS_ICON
- PUSHBUTTON "Start",IDC_START,179,82,58,28,BS_ICON
- PUSHBUTTON "Backward",IDC_BACKWARD,111,55,30,22,BS_ICON
- PUSHBUTTON "Forward",IDC_FORWARD,175,55,30,22,BS_ICON
- CTEXT "SPEED",IDC_SPEED,212,55,47,22,SS_CENTERIMAGE | SS_SUNKEN
- CTEXT "HH:MM:SS",IDC_TIME,115,12,190,34,SS_CENTERIMAGE | SS_SUNKEN
- GROUPBOX "Ivy",IDC_STATIC,7,5,102,188
- EDITTEXT IDC_BUSNUMBER,20,18,74,14,ES_AUTOHSCROLL
- PUSHBUTTON "Ivy Start",IDC_IVYSTART,41,38,31,14
- CONTROL "Big Speed",IDC_BIGSPEED,"Button",BS_AUTOCHECKBOX | BS_LEFTTEXT | WS_DISABLED | WS_TABSTOP,264,62,49,10
- LISTBOX IDC_APPLIST,13,59,91,128,LBS_SORT | LBS_NOINTEGRALHEIGHT | WS_VSCROLL | WS_TABSTOP
- CONTROL "DateTimePicker1",IDC_SETTIME,"SysDateTimePick32",DTS_RIGHTALIGN | DTS_UPDOWN | WS_TABSTOP | 0x8,251,86,54,13
- PUSHBUTTON "-5 min",IDC_BACK_5,117,119,28,24
- PUSHBUTTON "- 2 min",IDC_BACK_2,150,119,28,24
- PUSHBUTTON "+2 min",IDC_FORW_2,243,119,28,24
- PUSHBUTTON "+5 min",IDC_FORW_5,274,119,28,24
- PUSHBUTTON "-1 min",IDC_BACK_1,181,119,28,24
- PUSHBUTTON "+1 min",IDC_FORW_1,212,119,28,24
- PUSHBUTTON "Change File...",IDC_FILE,113,167,48,14
- EDITTEXT IDC_FILENAME,165,167,142,14,ES_AUTOHSCROLL | ES_READONLY
- PUSHBUTTON "Normal Speed",IDC_NORMAL_SPEED,143,55,30,22,BS_ICON
- CONTROL "",IDC_FILEPROGRESS,"msctls_progress32",WS_BORDER,110,148,203,14
-END
-
-
-/////////////////////////////////////////////////////////////////////////////
-//
-// Version
-//
-
-VS_VERSION_INFO VERSIONINFO
- FILEVERSION 1,0,0,1
- PRODUCTVERSION 1,0,0,1
- FILEFLAGSMASK 0x3fL
-#ifdef _DEBUG
- FILEFLAGS 0x1L
-#else
- FILEFLAGS 0x0L
-#endif
- FILEOS 0x4L
- FILETYPE 0x1L
- FILESUBTYPE 0x0L
-BEGIN
- BLOCK "StringFileInfo"
- BEGIN
- BLOCK "040C04B0"
- BEGIN
- VALUE "FileDescription", "Application MFC Horloge"
- VALUE "FileVersion", "1, 0, 0, 1"
- VALUE "InternalName", "Horloge"
- VALUE "LegalCopyright", "Copyright (C) 2001"
- VALUE "OriginalFilename", "Horloge.EXE"
- VALUE "ProductName", "Application Horloge"
- VALUE "ProductVersion", "1, 0, 0, 1"
- END
- END
- BLOCK "VarFileInfo"
- BEGIN
- VALUE "Translation", 0x40c, 1200
- END
-END
-
-
-/////////////////////////////////////////////////////////////////////////////
-//
-// DESIGNINFO
-//
-
-#ifdef APSTUDIO_INVOKED
-GUIDELINES DESIGNINFO
-BEGIN
- IDD_HORLOGE_DIALOG, DIALOG
- BEGIN
- LEFTMARGIN, 7
- RIGHTMARGIN, 313
- TOPMARGIN, 5
- BOTTOMMARGIN, 193
- END
-END
-#endif // APSTUDIO_INVOKED
-
-#endif // French (France) resources
-/////////////////////////////////////////////////////////////////////////////
-
-
-
-#ifndef APSTUDIO_INVOKED
-/////////////////////////////////////////////////////////////////////////////
-//
-// Generated from the TEXTINCLUDE 3 resource.
-//
-#define _AFX_NO_SPLITTER_RESOURCES
-#define _AFX_NO_OLE_RESOURCES
-#define _AFX_NO_TRACKER_RESOURCES
-#define _AFX_NO_PROPERTY_RESOURCES
-
-#if !defined(AFX_RESOURCE_DLL) || defined(AFX_TARG_FRA)
-#ifdef _WIN32
-LANGUAGE 12, 1
-#pragma code_page(1252)
-#endif //_WIN32
-#include "res\Horloge.rc2" // non-Microsoft Visual C++ edited resources
-#include "l.fra\afxres.rc" // Standard components
-#endif
-
-/////////////////////////////////////////////////////////////////////////////
-#endif // not APSTUDIO_INVOKED
-
diff --git a/Bus/Horloge/Horloge.vcproj b/Bus/Horloge/Horloge.vcproj
deleted file mode 100644
index 3a5bcb1..0000000
--- a/Bus/Horloge/Horloge.vcproj
+++ /dev/null
@@ -1,535 +0,0 @@
-<?xml version="1.0" encoding="Windows-1252"?>
-<VisualStudioProject
- ProjectType="Visual C++"
- Version="8,00"
- Name="Horloge"
- ProjectGUID="{79A52956-E5E0-46FF-9EB7-112ED0CD5315}"
- RootNamespace="Horloge"
- SccProjectName="&quot;$/Bus/Horloge&quot;, JIEAAAAA"
- SccLocalPath="."
- SccProvider="MSSCCI:Microsoft Visual SourceSafe"
- Keyword="MFCProj"
- >
- <Platforms>
- <Platform
- Name="Win32"
- />
- <Platform
- Name="x64"
- />
- </Platforms>
- <ToolFiles>
- </ToolFiles>
- <Configurations>
- <Configuration
- Name="Debug|Win32"
- OutputDirectory="$(SolutionDir)$(ConfigurationName)"
- IntermediateDirectory="$(ConfigurationName)"
- ConfigurationType="1"
- InheritedPropertySheets="$(VCInstallDir)VCProjectDefaults\UpgradeFromVC71.vsprops"
- UseOfMFC="2"
- ATLMinimizesCRunTimeLibraryUsage="false"
- CharacterSet="2"
- >
- <Tool
- Name="VCPreBuildEventTool"
- />
- <Tool
- Name="VCCustomBuildTool"
- />
- <Tool
- Name="VCXMLDataGeneratorTool"
- />
- <Tool
- Name="VCWebServiceProxyGeneratorTool"
- />
- <Tool
- Name="VCMIDLTool"
- PreprocessorDefinitions="_DEBUG"
- MkTypLibCompatible="true"
- SuppressStartupBanner="true"
- TargetEnvironment="1"
- TypeLibraryName=".\Debug/Horloge.tlb"
- />
- <Tool
- Name="VCCLCompilerTool"
- Optimization="0"
- AdditionalIncludeDirectories="&quot;..\Ivy&quot;"
- PreprocessorDefinitions="WIN32;_DEBUG;_WINDOWS"
- BasicRuntimeChecks="3"
- RuntimeLibrary="3"
- UsePrecompiledHeader="2"
- PrecompiledHeaderThrough="stdafx.h"
- BrowseInformation="1"
- WarningLevel="3"
- SuppressStartupBanner="true"
- DebugInformationFormat="4"
- />
- <Tool
- Name="VCManagedResourceCompilerTool"
- />
- <Tool
- Name="VCResourceCompilerTool"
- PreprocessorDefinitions="_AFXDLL;_DEBUG"
- Culture="1036"
- />
- <Tool
- Name="VCPreLinkEventTool"
- />
- <Tool
- Name="VCLinkerTool"
- LinkIncremental="2"
- SuppressStartupBanner="true"
- GenerateDebugInformation="true"
- SubSystem="2"
- />
- <Tool
- Name="VCALinkTool"
- />
- <Tool
- Name="VCManifestTool"
- />
- <Tool
- Name="VCXDCMakeTool"
- />
- <Tool
- Name="VCBscMakeTool"
- />
- <Tool
- Name="VCFxCopTool"
- />
- <Tool
- Name="VCAppVerifierTool"
- />
- <Tool
- Name="VCWebDeploymentTool"
- />
- <Tool
- Name="VCPostBuildEventTool"
- />
- </Configuration>
- <Configuration
- Name="Debug|x64"
- OutputDirectory="$(SolutionDir)$(PlatformName)\$(ConfigurationName)"
- IntermediateDirectory="$(PlatformName)\$(ConfigurationName)"
- ConfigurationType="1"
- InheritedPropertySheets="$(VCInstallDir)VCProjectDefaults\UpgradeFromVC71.vsprops"
- UseOfMFC="2"
- ATLMinimizesCRunTimeLibraryUsage="false"
- CharacterSet="1"
- >
- <Tool
- Name="VCPreBuildEventTool"
- />
- <Tool
- Name="VCCustomBuildTool"
- />
- <Tool
- Name="VCXMLDataGeneratorTool"
- />
- <Tool
- Name="VCWebServiceProxyGeneratorTool"
- />
- <Tool
- Name="VCMIDLTool"
- PreprocessorDefinitions="_DEBUG"
- MkTypLibCompatible="true"
- SuppressStartupBanner="true"
- TargetEnvironment="3"
- TypeLibraryName=".\Debug/Horloge.tlb"
- />
- <Tool
- Name="VCCLCompilerTool"
- Optimization="0"
- AdditionalIncludeDirectories="..\Ivy;&quot;..\..\..\pcre-6.4&quot;"
- PreprocessorDefinitions="WIN32;_DEBUG;_WINDOWS"
- BasicRuntimeChecks="3"
- RuntimeLibrary="3"
- UsePrecompiledHeader="2"
- PrecompiledHeaderThrough="stdafx.h"
- BrowseInformation="1"
- WarningLevel="3"
- SuppressStartupBanner="true"
- DebugInformationFormat="3"
- />
- <Tool
- Name="VCManagedResourceCompilerTool"
- />
- <Tool
- Name="VCResourceCompilerTool"
- PreprocessorDefinitions="_AFXDLL;_DEBUG"
- Culture="1036"
- AdditionalIncludeDirectories="$(IntDir)/"
- />
- <Tool
- Name="VCPreLinkEventTool"
- />
- <Tool
- Name="VCLinkerTool"
- LinkIncremental="2"
- SuppressStartupBanner="true"
- GenerateDebugInformation="true"
- SubSystem="2"
- TargetMachine="17"
- />
- <Tool
- Name="VCALinkTool"
- />
- <Tool
- Name="VCManifestTool"
- />
- <Tool
- Name="VCXDCMakeTool"
- />
- <Tool
- Name="VCBscMakeTool"
- />
- <Tool
- Name="VCFxCopTool"
- />
- <Tool
- Name="VCAppVerifierTool"
- />
- <Tool
- Name="VCWebDeploymentTool"
- />
- <Tool
- Name="VCPostBuildEventTool"
- />
- </Configuration>
- <Configuration
- Name="Release|Win32"
- OutputDirectory="$(SolutionDir)$(ConfigurationName)"
- IntermediateDirectory="$(ConfigurationName)"
- ConfigurationType="1"
- InheritedPropertySheets="$(VCInstallDir)VCProjectDefaults\UpgradeFromVC71.vsprops"
- UseOfMFC="2"
- ATLMinimizesCRunTimeLibraryUsage="false"
- CharacterSet="2"
- >
- <Tool
- Name="VCPreBuildEventTool"
- />
- <Tool
- Name="VCCustomBuildTool"
- />
- <Tool
- Name="VCXMLDataGeneratorTool"
- />
- <Tool
- Name="VCWebServiceProxyGeneratorTool"
- />
- <Tool
- Name="VCMIDLTool"
- PreprocessorDefinitions="NDEBUG"
- MkTypLibCompatible="true"
- SuppressStartupBanner="true"
- TargetEnvironment="1"
- TypeLibraryName=".\Release/Horloge.tlb"
- />
- <Tool
- Name="VCCLCompilerTool"
- InlineFunctionExpansion="1"
- AdditionalIncludeDirectories="..\Ivy;&quot;..\..\..\pcre-6.4&quot;"
- PreprocessorDefinitions="WIN32;NDEBUG;_WINDOWS"
- StringPooling="true"
- RuntimeLibrary="2"
- EnableFunctionLevelLinking="true"
- UsePrecompiledHeader="2"
- PrecompiledHeaderThrough="stdafx.h"
- WarningLevel="3"
- SuppressStartupBanner="true"
- />
- <Tool
- Name="VCManagedResourceCompilerTool"
- />
- <Tool
- Name="VCResourceCompilerTool"
- PreprocessorDefinitions="_AFXDLL;NDEBUG"
- Culture="1036"
- />
- <Tool
- Name="VCPreLinkEventTool"
- />
- <Tool
- Name="VCLinkerTool"
- LinkIncremental="1"
- SuppressStartupBanner="true"
- SubSystem="2"
- />
- <Tool
- Name="VCALinkTool"
- />
- <Tool
- Name="VCManifestTool"
- />
- <Tool
- Name="VCXDCMakeTool"
- />
- <Tool
- Name="VCBscMakeTool"
- />
- <Tool
- Name="VCFxCopTool"
- />
- <Tool
- Name="VCAppVerifierTool"
- />
- <Tool
- Name="VCWebDeploymentTool"
- />
- <Tool
- Name="VCPostBuildEventTool"
- CommandLine="rem copy &quot;$(TargetPath)&quot; &quot;C:\users\fcolin\Program Files\$(OutDir)&quot;"
- />
- </Configuration>
- <Configuration
- Name="Release|x64"
- OutputDirectory="$(SolutionDir)$(PlatformName)\$(ConfigurationName)"
- IntermediateDirectory="$(PlatformName)\$(ConfigurationName)"
- ConfigurationType="1"
- InheritedPropertySheets="$(VCInstallDir)VCProjectDefaults\UpgradeFromVC71.vsprops"
- UseOfMFC="2"
- ATLMinimizesCRunTimeLibraryUsage="false"
- CharacterSet="1"
- >
- <Tool
- Name="VCPreBuildEventTool"
- />
- <Tool
- Name="VCCustomBuildTool"
- />
- <Tool
- Name="VCXMLDataGeneratorTool"
- />
- <Tool
- Name="VCWebServiceProxyGeneratorTool"
- />
- <Tool
- Name="VCMIDLTool"
- PreprocessorDefinitions="NDEBUG"
- MkTypLibCompatible="true"
- SuppressStartupBanner="true"
- TargetEnvironment="3"
- TypeLibraryName=".\Release/Horloge.tlb"
- />
- <Tool
- Name="VCCLCompilerTool"
- InlineFunctionExpansion="1"
- AdditionalIncludeDirectories="..\Ivy;&quot;..\..\..\pcre-6.4&quot;"
- PreprocessorDefinitions="WIN32;NDEBUG;_WINDOWS"
- StringPooling="true"
- RuntimeLibrary="2"
- EnableFunctionLevelLinking="true"
- UsePrecompiledHeader="2"
- PrecompiledHeaderThrough="stdafx.h"
- WarningLevel="3"
- SuppressStartupBanner="true"
- />
- <Tool
- Name="VCManagedResourceCompilerTool"
- />
- <Tool
- Name="VCResourceCompilerTool"
- PreprocessorDefinitions="_AFXDLL;NDEBUG"
- Culture="1036"
- />
- <Tool
- Name="VCPreLinkEventTool"
- />
- <Tool
- Name="VCLinkerTool"
- LinkIncremental="1"
- SuppressStartupBanner="true"
- SubSystem="2"
- TargetMachine="17"
- />
- <Tool
- Name="VCALinkTool"
- />
- <Tool
- Name="VCManifestTool"
- />
- <Tool
- Name="VCXDCMakeTool"
- />
- <Tool
- Name="VCBscMakeTool"
- />
- <Tool
- Name="VCFxCopTool"
- />
- <Tool
- Name="VCAppVerifierTool"
- />
- <Tool
- Name="VCWebDeploymentTool"
- />
- <Tool
- Name="VCPostBuildEventTool"
- CommandLine="rem copy &quot;$(TargetPath)&quot; &quot;C:\users\fcolin\Program Files\$(OutDir)&quot;"
- />
- </Configuration>
- </Configurations>
- <References>
- <ProjectReference
- ReferencedProjectIdentifier="{84E0039A-6721-4B18-9792-E9AE4274AC0E}"
- RelativePathToProject="..\Ivy\Ivy.vcproj"
- />
- <ProjectReference
- ReferencedProjectIdentifier="{D79FC143-498E-4342-B2C7-BDAD1B8D0E6B}"
- RelativePathToProject="..\..\..\pcre\pcre.vcproj"
- />
- </References>
- <Files>
- <Filter
- Name="Source Files"
- Filter="cpp;c;cxx;rc;def;r;odl;idl;hpj;bat"
- >
- <File
- RelativePath=".\Curvefit.cpp"
- >
- </File>
- <File
- RelativePath=".\Digistring.cpp"
- >
- </File>
- <File
- RelativePath=".\Horloge.cpp"
- >
- </File>
- <File
- RelativePath=".\HorlogeDlg.cpp"
- >
- </File>
- <File
- RelativePath=".\HorlogeParseCmdLine.cpp"
- >
- </File>
- <File
- RelativePath=".\StdAfx.cpp"
- >
- <FileConfiguration
- Name="Debug|Win32"
- >
- <Tool
- Name="VCCLCompilerTool"
- UsePrecompiledHeader="1"
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Debug|x64"
- >
- <Tool
- Name="VCCLCompilerTool"
- UsePrecompiledHeader="1"
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Release|Win32"
- >
- <Tool
- Name="VCCLCompilerTool"
- UsePrecompiledHeader="1"
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Release|x64"
- >
- <Tool
- Name="VCCLCompilerTool"
- UsePrecompiledHeader="1"
- />
- </FileConfiguration>
- </File>
- </Filter>
- <Filter
- Name="Header Files"
- Filter="h;hpp;hxx;hm;inl"
- >
- <File
- RelativePath=".\Curvefit.h"
- >
- </File>
- <File
- RelativePath=".\Digistring.h"
- >
- </File>
- <File
- RelativePath=".\Horloge.h"
- >
- </File>
- <File
- RelativePath=".\HorlogeDlg.h"
- >
- </File>
- <File
- RelativePath=".\HorlogeParseCmdLine.h"
- >
- </File>
- <File
- RelativePath=".\MemDC.h"
- >
- </File>
- <File
- RelativePath=".\Resource.h"
- >
- </File>
- <File
- RelativePath=".\Rgbcolor.h"
- >
- </File>
- <File
- RelativePath=".\StdAfx.h"
- >
- </File>
- </Filter>
- <Filter
- Name="Resource Files"
- Filter="ico;cur;bmp;dlg;rc2;rct;bin;rgs;gif;jpg;jpeg;jpe"
- >
- <File
- RelativePath=".\res\Horloge.ico"
- >
- </File>
- <File
- RelativePath=".\Horloge.rc"
- >
- </File>
- <File
- RelativePath=".\res\Horloge.rc2"
- >
- </File>
- <File
- RelativePath=".\res\ico00001.ico"
- >
- </File>
- <File
- RelativePath=".\res\ico00002.ico"
- >
- </File>
- <File
- RelativePath=".\res\ico00003.ico"
- >
- </File>
- <File
- RelativePath=".\res\ico00004.ico"
- >
- </File>
- <File
- RelativePath=".\res\icon1.ico"
- >
- </File>
- </Filter>
- <File
- RelativePath=".\ReadMe.txt"
- >
- </File>
- </Files>
- <Globals>
- <Global
- Name="RESOURCE_FILE"
- Value="Horloge.rc"
- />
- </Globals>
-</VisualStudioProject>
diff --git a/Bus/Horloge/Horloge.vcproj.vspscc b/Bus/Horloge/Horloge.vcproj.vspscc
deleted file mode 100644
index 794f014..0000000
--- a/Bus/Horloge/Horloge.vcproj.vspscc
+++ /dev/null
@@ -1,10 +0,0 @@
-""
-{
-"FILE_VERSION" = "9237"
-"ENLISTMENT_CHOICE" = "NEVER"
-"PROJECT_FILE_RELATIVE_PATH" = ""
-"NUMBER_OF_EXCLUDED_FILES" = "0"
-"ORIGINAL_PROJECT_FILE_PATH" = ""
-"NUMBER_OF_NESTED_PROJECTS" = "0"
-"SOURCE_CONTROL_SETTINGS_PROVIDER" = "PROJECT"
-}
diff --git a/Bus/Horloge/HorlogeDlg.cpp b/Bus/Horloge/HorlogeDlg.cpp
deleted file mode 100644
index b6ac3d9..0000000
--- a/Bus/Horloge/HorlogeDlg.cpp
+++ /dev/null
@@ -1,347 +0,0 @@
-// HorlogeDlg.cpp : implementation file
-//
-
-#include "stdafx.h"
-#include "Horloge.h"
-#include "HorlogeDlg.h"
-#include "HorlogeParseCmdLine.h"
-
-#include "IvyApplication.h"
-
-#ifdef _DEBUG
-#define new DEBUG_NEW
-#undef THIS_FILE
-static char THIS_FILE[] = __FILE__;
-#endif
-
-/////////////////////////////////////////////////////////////////////////////
-// CHorlogeDlg dialog
-
-CHorlogeDlg::CHorlogeDlg(CWnd* pParent /*=NULL*/)
- : CDialog(CHorlogeDlg::IDD, pParent)
-{
- //{{AFX_DATA_INIT(CHorlogeDlg)
- m_busnumber = _T("");
- m_big_speed = FALSE;
- m_filename = _T("");
- //}}AFX_DATA_INIT
- // Note that LoadIcon does not require a subsequent DestroyIcon in Win32
- m_hIcon = AfxGetApp()->LoadIcon(IDR_MAINFRAME);
- GetSystemTime(&current_time);
- GetSystemTime(&start_time);
- bus = NULL;
- rate = 1.0;
-}
-
-void CHorlogeDlg::DoDataExchange(CDataExchange* pDX)
-{
- CDialog::DoDataExchange(pDX);
- //{{AFX_DATA_MAP(CHorlogeDlg)
- DDX_Control(pDX, IDC_SETTIME, m_setTime);
- DDX_Control(pDX, IDC_APPLIST, m_applist);
- DDX_Control(pDX, IDC_SPEED, m_Speed);
- DDX_Control(pDX, IDC_TIME, m_Time);
- DDX_Text(pDX, IDC_BUSNUMBER, m_busnumber);
- DDX_Check(pDX, IDC_BIGSPEED, m_big_speed);
- DDX_Text(pDX, IDC_FILENAME, m_filename);
- //}}AFX_DATA_MAP
- DDX_Control(pDX, IDC_FILEPROGRESS, file_progress);
-}
-
-BEGIN_MESSAGE_MAP(CHorlogeDlg, CDialog)
- //{{AFX_MSG_MAP(CHorlogeDlg)
- ON_WM_PAINT()
- ON_WM_QUERYDRAGICON()
- ON_BN_CLICKED(IDC_IVYSTART, OnIvystart)
- ON_BN_CLICKED(IDC_PAUSE, OnPause)
- ON_BN_CLICKED(IDC_START, OnStart)
- ON_NOTIFY(DTN_DATETIMECHANGE, IDC_SETTIME, OnDatetimechangeSettime)
- ON_BN_CLICKED(IDC_BACKWARD, OnBackward)
- ON_BN_CLICKED(IDC_FORWARD, OnForward)
- ON_BN_CLICKED(IDC_BACK_5, OnBack5)
- ON_BN_CLICKED(IDC_BACK_2, OnBack2)
- ON_BN_CLICKED(IDC_BACK_1, OnBack1)
- ON_BN_CLICKED(IDC_FORW_1, OnForw1)
- ON_BN_CLICKED(IDC_FORW_2, OnForw2)
- ON_BN_CLICKED(IDC_FORW_5, OnForw5)
- ON_BN_CLICKED(IDC_FILE, OnFile)
- ON_BN_CLICKED(IDC_NORMAL_SPEED, OnNormalSpeed)
- ON_LBN_DBLCLK(IDC_APPLIST, OnDblclkApplist)
- //}}AFX_MSG_MAP
-END_MESSAGE_MAP()
-
-/////////////////////////////////////////////////////////////////////////////
-// CHorlogeDlg message handlers
-
-BOOL CHorlogeDlg::OnInitDialog()
-{
- CDialog::OnInitDialog();
-
- // Set the icon for this dialog. The framework does this automatically
- // when the application's main window is not a dialog
- //SetIcon(m_hIcon, TRUE); // Set big icon
- SetIcon(m_hIcon, FALSE); // Set small icon
-
- ((CButton*)GetDlgItem(IDC_FORWARD))->SetIcon( AfxGetApp()->LoadIcon(IDI_FORWARD));
- ((CButton*)GetDlgItem(IDC_BACKWARD))->SetIcon(AfxGetApp()->LoadIcon(IDI_BACKWARD));
- ((CButton*)GetDlgItem(IDC_PAUSE))->SetIcon(AfxGetApp()->LoadIcon(IDI_PAUSE));
- ((CButton*)GetDlgItem(IDC_START))->SetIcon(AfxGetApp()->LoadIcon(IDI_START));
- ((CButton*)GetDlgItem(IDC_NORMAL_SPEED))->SetIcon(AfxGetApp()->LoadIcon(IDI_NORMAL_SPEED));
-
-
- m_Time.Format(TEXT("%02d:%02d:%02d"), 0,0,0);
- m_Speed.Format(TEXT("%.2f"), rate );
- m_setTime.GetTime(&current_time);
-
- bus = new Ivy( "Horloge","Horloge READY",this,TRUE);
-
- // parse command Line Info
- HorlogeParseCmdLine cmd;
- cmd.m_busNumber = bus->GetDomain( NULL );
-
- AfxGetApp()->ParseCommandLine( cmd );
-
- // Set Argument from Command Line
- m_busnumber = cmd.m_busNumber;
-
-
- bus->BindMsg("^ClockEvent Time=([0-9]+):([0-9]+):([0-9]+) Rate=([-.0-9]+) Bs=([0-9]+)", BUS_CALLBACK_OF(CHorlogeDlg, IvyClockEvent ));
- bus->BindMsg("^ClockDatas Time=([0-9]+):([0-9]+):([0-9]+) Rate=([-.0-9]+) Bs=([0-9]+)", BUS_CALLBACK_OF(CHorlogeDlg, IvyClockEvent ));
- bus->BindMsg("^FileReadEvent Type=REJEU Name=([^ ]+) StartTime=([0-9]+):([0-9]+):([0-9]+) EndTime=([0-9]+):([0-9]+):([0-9]+)", BUS_CALLBACK_OF(CHorlogeDlg, IvyFileReadEvent ));
- bus->BindMsg("^rejeu READY", BUS_CALLBACK_OF(CHorlogeDlg, IvyRejeuReady));
-
- m_busnumber = bus->GetDomain( CStringA( m_busnumber ) );
- UpdateData(FALSE);
-
- // force bus start in case of start
- if ( cmd.m_start )
- OnIvystart();
-
- return TRUE; // return TRUE unless you set the focus to a control
-}
-
-// If you add a minimize button to your dialog, you will need the code below
-// to draw the icon. For MFC applications using the document/view model,
-// this is automatically done for you by the framework.
-
-void CHorlogeDlg::OnPaint()
-{
- if (IsIconic())
- {
- CPaintDC dc(this); // device context for painting
-
- SendMessage(WM_ICONERASEBKGND, (WPARAM) dc.GetSafeHdc(), 0);
-
- // Center icon in client rectangle
- int cxIcon = GetSystemMetrics(SM_CXICON);
- int cyIcon = GetSystemMetrics(SM_CYICON);
- CRect rect;
- GetClientRect(&rect);
- int x = (rect.Width() - cxIcon + 1) / 2;
- int y = (rect.Height() - cyIcon + 1) / 2;
-
- // Draw the icon
- dc.DrawIcon(x, y, m_hIcon);
- }
- else
- {
- CDialog::OnPaint();
- }
-}
-
-// The system calls this to obtain the cursor to display while the user drags
-// the minimized window.
-HCURSOR CHorlogeDlg::OnQueryDragIcon()
-{
- return (HCURSOR) m_hIcon;
-}
-
-void CHorlogeDlg::OnIvystart()
-{
- UpdateData(TRUE);
- bus->stop();
- m_busnumber = bus->GetDomain( CStringA( m_busnumber ) );
- bus->start( CStringA(m_busnumber));
- m_applist.ResetContent();
- UpdateData(FALSE);
-}
-void CHorlogeDlg::OnApplicationConnected(IvyApplication *app)
-{
- m_applist.AddString( CString(app->GetName()) );
-}
-void CHorlogeDlg::OnApplicationDisconnected(IvyApplication *app)
-{
- m_applist.DeleteString(m_applist.FindString(0, CString(app->GetName())) );
-}
-
-void CHorlogeDlg::OnDblclkApplist()
-{
- CString name;
- int sel = m_applist.GetCurSel();
- m_applist.GetText( sel, name );
- IvyApplication *app = bus->GetApplication( CStringA(name) );
- if ( app )
- {
- bus->SendDieMsg(app);
- m_applist.DeleteString( sel );
- }
-
-}
-
-void CHorlogeDlg::IvyClockEvent( IvyApplication *app, int argc, const char **argv )
-{
- // Ivy ClockEvent Time=10:23:45 Rate=3 Bs=0
- current_time.wHour = atoi( *argv++ );
- current_time.wMinute = atoi( *argv++ );
- current_time.wSecond = atoi( *argv++ );
- rate = atof( *argv++ );
- int BigSpeed = atoi( *argv++ );
- m_Time.Format(TEXT("%02d:%02d:%02d"), current_time.wHour, current_time.wMinute, current_time.wSecond);
- m_Speed.Format(TEXT("%.2f"), rate );
- m_big_speed = BigSpeed;
- m_setTime.SetTime(&current_time);
- CTime cur_time( current_time );
- CTime sta_time( start_time );
- CTimeSpan span = cur_time - sta_time;
- file_progress.SetPos( span.GetTotalSeconds() );
- TRACE("CHorlogeDlg::IvyClockEvent %d\n", span.GetTotalSeconds() );
- UpdateData(FALSE);
-}
-void CHorlogeDlg::IvyFileReadEvent( IvyApplication *app, int argc, const char **argv )
-{
- // Ivy FileReadEvent Type=REJEU Name=/home/fcolin/asterix/EAF3534D.rej StartTime=19:57:00 EndTime=20:09:59
- const char* name = *argv++;
- int hh_start = atoi( *argv++ );
- int mm_start = atoi( *argv++ );
- int ss_start = atoi( *argv++ );
- int hh_end = atoi( *argv++ );
- int mm_end = atoi( *argv++ );
- int ss_end = atoi( *argv++ );
-
- start_time.wHour = hh_start;
- start_time.wMinute = mm_start;
- start_time.wSecond = ss_start;
- current_time = start_time;
-
- long start = (( hh_start * 60 ) + mm_start ) * 60 + ss_start;
- long end = (( hh_end * 60 ) + mm_end ) * 60 + ss_end;
-
- TRACE("CHorlogeDlg::IvyFileReadEvent range 0 %d\n", end - start );
- file_progress.SetRange32(0, end - start );
- file_progress.SetStep( 1 );
- file_progress.SetPos( 0 );
-
- m_Time.Format(TEXT("%02d:%02d:%02d"), current_time.wHour, current_time.wMinute, current_time.wSecond);
- VERIFY(m_setTime.SetTime(&current_time));
- m_filename = name;
- bus->SendMsg("SetClock Time=%d:%d:%d", current_time.wHour, current_time.wMinute, current_time.wSecond );
- UpdateData(FALSE);
-}
-void CHorlogeDlg::IvyRejeuReady( IvyApplication *app, int argc, const char **argv )
-{
- bus->SendMsg("GetClockDatas");
-}
-
-void CHorlogeDlg::OnPause()
-{
- bus->SendMsg("ClockPause");
-}
-
-void CHorlogeDlg::OnStart()
-{
- bus->SendMsg("ClockStart");
-}
-
-void CHorlogeDlg::OnBackward()
-{
- rate -= 0.5;
- m_Speed.Format(TEXT("%.2f"), rate );
- bus->SendMsg("SetClock Rate=%.2f",rate);
-}
-
-void CHorlogeDlg::OnForward()
-{
- rate += 0.5;
- m_Speed.Format(TEXT("%.2f"), rate );
- bus->SendMsg("SetClock Rate=%.2f",rate);
-}
-void CHorlogeDlg::OnNormalSpeed()
-{
- rate = 1.0;
- m_Speed.Format(TEXT("%.2f"), rate );
- bus->SendMsg("SetClock Rate=%.2f",rate);
-}
-
-
-void CHorlogeDlg::OnDatetimechangeSettime(NMHDR* pNMHDR, LRESULT* pResult)
-{
- m_setTime.GetTime(&current_time);
- bus->SendMsg( "SetClock Time=%d:%d:%d", current_time.wHour, current_time.wMinute, current_time.wSecond );
- m_Time.Format(TEXT("%02d:%02d:%02d"), current_time.wHour, current_time.wMinute, current_time.wSecond);
- *pResult = 0;
-}
-
-
-void CHorlogeDlg::OnBack5()
-{
- CTime new_time( current_time );
- new_time -= CTimeSpan( 0, 0, 5, 0 );
- new_time. GetAsSystemTime(current_time);
- bus->SendMsg( "SetClock Time=%d:%d:%d", current_time.wHour, current_time.wMinute, current_time.wSecond );
- m_Time.Format(TEXT("%02d:%02d:%02d"), current_time.wHour, current_time.wMinute, current_time.wSecond);
-}
-
-void CHorlogeDlg::OnBack2()
-{
- CTime new_time( current_time );
- new_time -= CTimeSpan( 0, 0, 2, 0 );
- new_time. GetAsSystemTime(current_time);
- bus->SendMsg( "SetClock Time=%d:%d:%d", current_time.wHour, current_time.wMinute, current_time.wSecond );
- m_Time.Format(TEXT("%02d:%02d:%02d"), current_time.wHour, current_time.wMinute, current_time.wSecond);
-}
-
-void CHorlogeDlg::OnBack1()
-{
- CTime new_time( current_time );
- new_time -= CTimeSpan( 0, 0, 1, 0 );
- new_time. GetAsSystemTime(current_time);
- bus->SendMsg( "SetClock Time=%d:%d:%d", current_time.wHour, current_time.wMinute, current_time.wSecond );
- m_Time.Format(TEXT("%02d:%02d:%02d"), current_time.wHour, current_time.wMinute, current_time.wSecond);
-}
-
-void CHorlogeDlg::OnForw1()
-{
- CTime new_time( current_time );
- new_time += CTimeSpan( 0, 0, 1, 0 );
- new_time. GetAsSystemTime(current_time);
- bus->SendMsg( "SetClock Time=%d:%d:%d", current_time.wHour, current_time.wMinute, current_time.wSecond );
- m_Time.Format(TEXT("%02d:%02d:%02d"), current_time.wHour, current_time.wMinute, current_time.wSecond);
-}
-
-void CHorlogeDlg::OnForw2()
-{
- CTime new_time( current_time );
- new_time += CTimeSpan( 0, 0, 2, 0 );
- new_time. GetAsSystemTime(current_time);
- bus->SendMsg( "SetClock Time=%d:%d:%d", current_time.wHour, current_time.wMinute, current_time.wSecond );
- m_Time.Format(TEXT("%02d:%02d:%02d"), current_time.wHour, current_time.wMinute, current_time.wSecond);
-}
-
-void CHorlogeDlg::OnForw5()
-{
- CTime new_time( current_time );
- new_time += CTimeSpan( 0, 0, 5, 0 );
- new_time. GetAsSystemTime(current_time);
- bus->SendMsg( "SetClock Time=%d:%d:%d", current_time.wHour, current_time.wMinute, current_time.wSecond );
- m_Time.Format(TEXT("%02d:%02d:%02d"), current_time.wHour, current_time.wMinute, current_time.wSecond);
-}
-
-void CHorlogeDlg::OnFile()
-{
- CFileDialog file(TRUE,TEXT(".rej"),NULL, OFN_FILEMUSTEXIST,TEXT("Rejeu Files (*.rej)|*.rej|All Files (*.*)|*.*||"));
- if ( file.DoModal() == IDOK )
- {
- bus->SendMsg( "FileRead Type=rejeu Name=%S", file.GetPathName() );
- }
-}
-
diff --git a/Bus/Horloge/HorlogeDlg.h b/Bus/Horloge/HorlogeDlg.h
deleted file mode 100644
index 93cb915..0000000
--- a/Bus/Horloge/HorlogeDlg.h
+++ /dev/null
@@ -1,82 +0,0 @@
-// HorlogeDlg.h : header file
-//
-
-#if !defined(AFX_HORLOGEDLG_H__8AB6D6CD_4D9E_450D_B42C_E5A6F72FCA32__INCLUDED_)
-#define AFX_HORLOGEDLG_H__8AB6D6CD_4D9E_450D_B42C_E5A6F72FCA32__INCLUDED_
-
-#if _MSC_VER > 1000
-#pragma once
-#endif // _MSC_VER > 1000
-
-#include "Ivy.h"
-#include "afxcmn.h"
-/////////////////////////////////////////////////////////////////////////////
-// CHorlogeDlg dialog
-
-class CHorlogeDlg : public CDialog, public IvyApplicationCallback
-{
-// Construction
-public:
- CHorlogeDlg(CWnd* pParent = NULL); // standard constructor
-
-// Dialog Data
- //{{AFX_DATA(CHorlogeDlg)
- enum { IDD = IDD_HORLOGE_DIALOG };
- CDateTimeCtrl m_setTime;
- CListBox m_applist;
- CDigistring m_Speed;
- CDigistring m_Time;
- CString m_busnumber;
- BOOL m_big_speed;
- CString m_filename;
- //}}AFX_DATA
-
- // ClassWizard generated virtual function overrides
- //{{AFX_VIRTUAL(CHorlogeDlg)
- protected:
- virtual void DoDataExchange(CDataExchange* pDX); // DDX/DDV support
- //}}AFX_VIRTUAL
-
-// Implementation
-protected:
- HICON m_hIcon;
- Ivy *bus;
- double rate;
- SYSTEMTIME start_time;
- SYSTEMTIME current_time;
- void IvyClockEvent( IvyApplication *app, int argc, const char **argv );
- void IvyRejeuReady( IvyApplication *app, int argc, const char **argv );
- void IvyFileReadEvent( IvyApplication *app, int argc, const char **argv );
- void OnApplicationConnected( IvyApplication *app );
- void OnApplicationDisconnected( IvyApplication *app );
-
- // Generated message map functions
- //{{AFX_MSG(CHorlogeDlg)
- virtual BOOL OnInitDialog();
- afx_msg void OnPaint();
- afx_msg HCURSOR OnQueryDragIcon();
- afx_msg void OnIvystart();
- afx_msg void OnPause();
- afx_msg void OnStart();
- afx_msg void OnDatetimechangeSettime(NMHDR* pNMHDR, LRESULT* pResult);
- afx_msg void OnBackward();
- afx_msg void OnForward();
- afx_msg void OnBack5();
- afx_msg void OnBack2();
- afx_msg void OnBack1();
- afx_msg void OnForw1();
- afx_msg void OnForw2();
- afx_msg void OnForw5();
- afx_msg void OnFile();
- afx_msg void OnNormalSpeed();
- afx_msg void OnDblclkApplist();
- //}}AFX_MSG
- DECLARE_MESSAGE_MAP()
-public:
- CProgressCtrl file_progress;
-};
-
-//{{AFX_INSERT_LOCATION}}
-// Microsoft Visual C++ will insert additional declarations immediately before the previous line.
-
-#endif // !defined(AFX_HORLOGEDLG_H__8AB6D6CD_4D9E_450D_B42C_E5A6F72FCA32__INCLUDED_)
diff --git a/Bus/Horloge/HorlogeParseCmdLine.cpp b/Bus/Horloge/HorlogeParseCmdLine.cpp
deleted file mode 100644
index bd3e4e9..0000000
--- a/Bus/Horloge/HorlogeParseCmdLine.cpp
+++ /dev/null
@@ -1,58 +0,0 @@
-// HorlogeParseCmdLine.cpp: implementation of the HorlogeParseCmdLine class.
-//
-//////////////////////////////////////////////////////////////////////
-
-#include "stdafx.h"
-
-#include "HorlogeParseCmdLine.h"
-
-#ifdef _DEBUG
-#undef THIS_FILE
-static char THIS_FILE[]=__FILE__;
-#define new DEBUG_NEW
-#endif
-
-//////////////////////////////////////////////////////////////////////
-// Construction/Destruction
-//////////////////////////////////////////////////////////////////////
-
-HorlogeParseCmdLine::HorlogeParseCmdLine()
-{
- m_start = FALSE;
- m_busNumber = "";
-}
-
-HorlogeParseCmdLine::~HorlogeParseCmdLine()
-{
-
-}
-
-void HorlogeParseCmdLine::ParseParam(LPCTSTR lpszParam, BOOL bFlag, BOOL bLast)
-{
- if (bFlag)
- {
- ParseParamFlag(lpszParam);
- }
- else
- ParseParamNotFlag(lpszParam);
-
-}
-
-void HorlogeParseCmdLine::ParseParamFlag(LPCTSTR pszParam)
-{
-
- if (lstrcmpi(pszParam, TEXT("start")) == 0)
- m_start = TRUE;
- else if (lstrcmpi(pszParam, TEXT("bus")) == 0)
- m_shellCommand = BusNumber;
-}
-
-void HorlogeParseCmdLine::ParseParamNotFlag(LPCTSTR pszParam)
-{
- switch ( m_shellCommand )
- {
- case BusNumber:
- m_busNumber = pszParam;
- break;
- }
-}
diff --git a/Bus/Horloge/HorlogeParseCmdLine.h b/Bus/Horloge/HorlogeParseCmdLine.h
deleted file mode 100644
index 3ececad..0000000
--- a/Bus/Horloge/HorlogeParseCmdLine.h
+++ /dev/null
@@ -1,31 +0,0 @@
-// TestParseCmdLine.h: interface for the TestParseCmdLine class.
-//
-//////////////////////////////////////////////////////////////////////
-
-#if !defined(AFX_FXParseCMDLINE_H__20232B92_AB99_11D2_898F_00A0245B298A__INCLUDED_)
-#define AFX_FXParseCMDLINE_H__20232B92_AB99_11D2_898F_00A0245B298A__INCLUDED_
-
-#if _MSC_VER > 1000
-#pragma once
-#endif // _MSC_VER > 1000
-
-class HorlogeParseCmdLine : public CCommandLineInfo
-{
-public:
-
- BOOL m_start;
- CString m_busNumber;
- virtual void ParseParam( LPCTSTR lpszParam, BOOL bFlag, BOOL bLast );
- HorlogeParseCmdLine();
- virtual ~HorlogeParseCmdLine();
- enum {
- BusNumber,
- Start,
- }m_shellCommand;
-
-protected:
- void ParseParamNotFlag(LPCTSTR pszParam);
- void ParseParamFlag(LPCTSTR pszParam);
-};
-
-#endif // !defined(AFX_FXParseCMDLINE_H__20232B92_AB99_11D2_898F_00A0245B298A__INCLUDED_)
diff --git a/Bus/Horloge/MemDC.h b/Bus/Horloge/MemDC.h
deleted file mode 100644
index 494fbbe..0000000
--- a/Bus/Horloge/MemDC.h
+++ /dev/null
@@ -1,104 +0,0 @@
-#ifndef _MEMDC_H_
-#define _MEMDC_H_
-
-//////////////////////////////////////////////////
-// CMemDC - memory DC
-//
-// Author: Keith Rule
-// Email: keithr@europa.com
-// Copyright 1996-1999, Keith Rule
-//
-// You may freely use or modify this code provided this
-// Copyright is included in all derived versions.
-//
-// History - 10/3/97 Fixed scrolling bug.
-// Added print support. - KR
-//
-// 11/3/99 Fixed most common complaint. Added
-// background color fill. - KR
-//
-// 11/3/99 Added support for mapping modes other than
-// MM_TEXT as suggested by Lee Sang Hun. - KR
-//
-// This class implements a memory Device Context which allows
-// flicker free drawing.
-
-class CMemDC : public CDC {
-private:
- CBitmap m_bitmap; // Offscreen bitmap
- CBitmap* m_oldBitmap; // bitmap originally found in CMemDC
- CDC* m_pDC; // Saves CDC passed in constructor
- CRect m_rect; // Rectangle of drawing area.
- BOOL m_bMemDC; // TRUE if CDC really is a Memory DC.
-public:
-
- CMemDC(CDC* pDC, const CRect* pRect = NULL) : CDC()
- {
- ASSERT(pDC != NULL);
-
- // Some initialization
- m_pDC = pDC;
- m_oldBitmap = NULL;
- m_bMemDC = !pDC->IsPrinting();
-
- // Get the rectangle to draw
- if (pRect == NULL) {
- pDC->GetClipBox(&m_rect);
- } else {
- m_rect = *pRect;
- }
-
- if (m_bMemDC) {
- // Create a Memory DC
- CreateCompatibleDC(pDC);
- pDC->LPtoDP(&m_rect);
-
- m_bitmap.CreateCompatibleBitmap(pDC, m_rect.Width(), m_rect.Height());
- m_oldBitmap = SelectObject(&m_bitmap);
-
- SetMapMode(pDC->GetMapMode());
- pDC->DPtoLP(&m_rect);
- SetWindowOrg(m_rect.left, m_rect.top);
- } else {
- // Make a copy of the relevent parts of the current DC for printing
- m_bPrinting = pDC->m_bPrinting;
- m_hDC = pDC->m_hDC;
- m_hAttribDC = pDC->m_hAttribDC;
- }
-
- // Fill background
- FillSolidRect(m_rect, pDC->GetBkColor());
- }
-
-
- ~CMemDC()
- {
- if (m_bMemDC) {
- // Copy the offscreen bitmap onto the screen.
- m_pDC->BitBlt(m_rect.left, m_rect.top, m_rect.Width(), m_rect.Height(),
- this, m_rect.left, m_rect.top, SRCCOPY);
-
- //Swap back the original bitmap.
- SelectObject(m_oldBitmap);
- } else {
- // All we need to do is replace the DC with an illegal value,
- // this keeps us from accidently deleting the handles associated with
- // the CDC that was passed to the constructor.
- m_hDC = m_hAttribDC = NULL;
- }
- }
-
- // Allow usage as a pointer
- CMemDC* operator->()
- {
- return this;
- }
-
- // Allow usage as a pointer
- operator CMemDC*()
- {
- return this;
- }
-};
-
-#endif \ No newline at end of file
diff --git a/Bus/Horloge/ReadMe.txt b/Bus/Horloge/ReadMe.txt
deleted file mode 100644
index 4065fc4..0000000
--- a/Bus/Horloge/ReadMe.txt
+++ /dev/null
@@ -1,88 +0,0 @@
-========================================================================
- MICROSOFT FOUNDATION CLASS LIBRARY : Horloge
-========================================================================
-
-
-AppWizard has created this Horloge application for you. This application
-not only demonstrates the basics of using the Microsoft Foundation classes
-but is also a starting point for writing your application.
-
-This file contains a summary of what you will find in each of the files that
-make up your Horloge application.
-
-Horloge.dsp
- This file (the project file) contains information at the project level and
- is used to build a single project or subproject. Other users can share the
- project (.dsp) file, but they should export the makefiles locally.
-
-Horloge.h
- This is the main header file for the application. It includes other
- project specific headers (including Resource.h) and declares the
- CHorlogeApp application class.
-
-Horloge.cpp
- This is the main application source file that contains the application
- class CHorlogeApp.
-
-Horloge.rc
- This is a listing of all of the Microsoft Windows resources that the
- program uses. It includes the icons, bitmaps, and cursors that are stored
- in the RES subdirectory. This file can be directly edited in Microsoft
- Visual C++.
-
-Horloge.clw
- This file contains information used by ClassWizard to edit existing
- classes or add new classes. ClassWizard also uses this file to store
- information needed to create and edit message maps and dialog data
- maps and to create prototype member functions.
-
-res\Horloge.ico
- This is an icon file, which is used as the application's icon. This
- icon is included by the main resource file Horloge.rc.
-
-res\Horloge.rc2
- This file contains resources that are not edited by Microsoft
- Visual C++. You should place all resources not editable by
- the resource editor in this file.
-
-
-
-
-/////////////////////////////////////////////////////////////////////////////
-
-AppWizard creates one dialog class:
-
-HorlogeDlg.h, HorlogeDlg.cpp - the dialog
- These files contain your CHorlogeDlg class. This class defines
- the behavior of your application's main dialog. The dialog's
- template is in Horloge.rc, which can be edited in Microsoft
- Visual C++.
-
-
-/////////////////////////////////////////////////////////////////////////////
-Other standard files:
-
-StdAfx.h, StdAfx.cpp
- These files are used to build a precompiled header (PCH) file
- named Horloge.pch and a precompiled types file named StdAfx.obj.
-
-Resource.h
- This is the standard header file, which defines new resource IDs.
- Microsoft Visual C++ reads and updates this file.
-
-/////////////////////////////////////////////////////////////////////////////
-Other notes:
-
-AppWizard uses "TODO:" to indicate parts of the source code you
-should add to or customize.
-
-If your application uses MFC in a shared DLL, and your application is
-in a language other than the operating system's current language, you
-will need to copy the corresponding localized resources MFC42XXX.DLL
-from the Microsoft Visual C++ CD-ROM onto the system or system32 directory,
-and rename it to be MFCLOC.DLL. ("XXX" stands for the language abbreviation.
-For example, MFC42DEU.DLL contains resources translated to German.) If you
-don't do this, some of the UI elements of your application will remain in the
-language of the operating system.
-
-/////////////////////////////////////////////////////////////////////////////
diff --git a/Bus/Horloge/Rgbcolor.h b/Bus/Horloge/Rgbcolor.h
deleted file mode 100644
index 1c45453..0000000
--- a/Bus/Horloge/Rgbcolor.h
+++ /dev/null
@@ -1,40 +0,0 @@
-/////////////////////////////////////////////////////////////////////////////
-// Copyright (C) 2000 by Michel Wassink
-// All rights reserved
-//
-// This is free software.
-// You may redistribute it by any means providing it is not sold for profit
-// without the author written consent.
-//
-// No warrantee of any kind, expressed or implied, is included with this
-// software; use at your own risk, responsibility for damages (if any) to
-// anyone resulting from the use of this software rests entirely with the
-// user.
-//
-// Send bug reports, bug fixes, enhancements, requests, flames, etc., and
-// I'll try to keep a version up to date. I can be reached as follows:
-// mwassink@csi.com (private site)
-/////////////////////////////////////////////////////////////////////////////
-
-#ifndef __RGBCOLOR_H__
-#define __RGBCOLOR_H__
-
-#define BLACK RGB( 000, 000, 000 )
-#define DARKBLUE RGB( 000, 000, 128 )
-#define DARKGREEN RGB( 000, 064, 000 )
-#define DARKCYAN RGB( 000, 064, 064 )
-#define DARKRED RGB( 064, 000, 000 )
-#define DARKMAGENTA RGB( 128, 000, 128 )
-#define BROWN RGB( 128, 128, 000 )
-#define DARKGRAY RGB( 128, 128, 128 )
-
-#define LIGHTGRAY RGB( 192, 192, 192 )
-#define LIGHTBLUE RGB( 000, 000, 255 )
-#define LIGHTGREEN RGB( 000, 255, 000 )
-#define LIGHTCYAN RGB( 000, 255, 255 )
-#define LIGHTRED RGB( 255, 000, 000 )
-#define LIGHTMAGENTA RGB( 255, 000, 255 )
-#define YELLOW RGB( 255, 255, 000 )
-#define WHITE RGB( 255, 255, 255 )
-
-#endif // __RGBCOLOR_H__
diff --git a/Bus/Horloge/StdAfx.cpp b/Bus/Horloge/StdAfx.cpp
deleted file mode 100644
index ec4138a..0000000
--- a/Bus/Horloge/StdAfx.cpp
+++ /dev/null
@@ -1,8 +0,0 @@
-// stdafx.cpp : source file that includes just the standard includes
-// Horloge.pch will be the pre-compiled header
-// stdafx.obj will contain the pre-compiled type information
-
-#include "stdafx.h"
-
-
-
diff --git a/Bus/Horloge/StdAfx.h b/Bus/Horloge/StdAfx.h
deleted file mode 100644
index 18ddc2a..0000000
--- a/Bus/Horloge/StdAfx.h
+++ /dev/null
@@ -1,84 +0,0 @@
-// stdafx.h : include file for standard system include files,
-// or project specific include files that are used frequently, but
-// are changed infrequently
-//
-
-#if !defined(AFX_STDAFX_H__71A27006_2E49_42EE_BE8E_4A7CB7E53C16__INCLUDED_)
-#define AFX_STDAFX_H__71A27006_2E49_42EE_BE8E_4A7CB7E53C16__INCLUDED_
-
-#if _MSC_VER > 1000
-#pragma once
-#endif // _MSC_VER > 1000
-
-#ifndef _SECURE_ATL
-#define _SECURE_ATL 1
-#endif
-
-#ifndef VC_EXTRALEAN
-#define VC_EXTRALEAN // Exclude rarely-used stuff from Windows headers
-#endif
-
-// Modify the following defines if you have to target a platform prior to the ones specified below.
-// Refer to MSDN for the latest info on corresponding values for different platforms.
-#ifndef WINVER // Allow use of features specific to Windows XP or later.
-#define WINVER 0x0501 // Change this to the appropriate value to target other versions of Windows.
-#endif
-
-#ifndef _WIN32_WINNT // Allow use of features specific to Windows XP or later.
-#define _WIN32_WINNT 0x0501 // Change this to the appropriate value to target other versions of Windows.
-#endif
-
-#ifndef _WIN32_WINDOWS // Allow use of features specific to Windows 98 or later.
-#define _WIN32_WINDOWS 0x0410 // Change this to the appropriate value to target Windows Me or later.
-#endif
-
-#ifndef _WIN32_IE // Allow use of features specific to IE 6.0 or later.
-#define _WIN32_IE 0x0600 // Change this to the appropriate value to target other versions of IE.
-#endif
-
-#define _ATL_CSTRING_EXPLICIT_CONSTRUCTORS // some CString constructors will be explicit
-
-// turns off MFC's hiding of some common and often safely ignored warning messages
-#define _AFX_ALL_WARNINGS
-
-#include <afxwin.h> // MFC core and standard components
-#include <afxext.h> // MFC extensions
-
-
-
-#ifndef _AFX_NO_OLE_SUPPORT
-#include <afxdtctl.h> // MFC support for Internet Explorer 4 Common Controls
-#endif
-//#include "commctrl.h"
-
-
-
-#include <winsock.h>
-#ifndef _AFX_NO_AFXCMN_SUPPORT
-#include <afxcmn.h> // MFC support for Windows Common Controls
-#endif // _AFX_NO_AFXCMN_SUPPORT
-
-
-//{{AFX_INSERT_LOCATION}}
-// Microsoft Visual C++ will insert additional declarations immediately before the previous line.
-
-#ifdef _UNICODE
-#if defined _M_IX86
-#pragma comment(linker,"/manifestdependency:\"type='win32' name='Microsoft.Windows.Common-Controls' version='6.0.0.0' processorArchitecture='x86' publicKeyToken='6595b64144ccf1df' language='*'\"")
-#elif defined _M_IA64
-#pragma comment(linker,"/manifestdependency:\"type='win32' name='Microsoft.Windows.Common-Controls' version='6.0.0.0' processorArchitecture='ia64' publicKeyToken='6595b64144ccf1df' language='*'\"")
-#elif defined _M_X64
-#pragma comment(linker,"/manifestdependency:\"type='win32' name='Microsoft.Windows.Common-Controls' version='6.0.0.0' processorArchitecture='amd64' publicKeyToken='6595b64144ccf1df' language='*'\"")
-#else
-#pragma comment(linker,"/manifestdependency:\"type='win32' name='Microsoft.Windows.Common-Controls' version='6.0.0.0' processorArchitecture='*' publicKeyToken='6595b64144ccf1df' language='*'\"")
-#endif
-#endif
-
-#endif // !defined(AFX_STDAFX_H__71A27006_2E49_42EE_BE8E_4A7CB7E53C16__INCLUDED_)
-
-
-
-
-
-
-
diff --git a/Bus/Horloge/res/Horloge.ico b/Bus/Horloge/res/Horloge.ico
deleted file mode 100644
index da2c09d..0000000
--- a/Bus/Horloge/res/Horloge.ico
+++ /dev/null
Binary files differ
diff --git a/Bus/Horloge/res/Horloge.rc2 b/Bus/Horloge/res/Horloge.rc2
deleted file mode 100644
index 181da8f..0000000
--- a/Bus/Horloge/res/Horloge.rc2
+++ /dev/null
@@ -1,13 +0,0 @@
-//
-// HORLOGE.RC2 - resources Microsoft Visual C++ does not edit directly
-//
-
-#ifdef APSTUDIO_INVOKED
- #error this file is not editable by Microsoft Visual C++
-#endif //APSTUDIO_INVOKED
-
-
-/////////////////////////////////////////////////////////////////////////////
-// Add manually edited resources here...
-
-/////////////////////////////////////////////////////////////////////////////
diff --git a/Bus/Horloge/res/ico00001.ico b/Bus/Horloge/res/ico00001.ico
deleted file mode 100644
index aa862a1..0000000
--- a/Bus/Horloge/res/ico00001.ico
+++ /dev/null
Binary files differ
diff --git a/Bus/Horloge/res/ico00002.ico b/Bus/Horloge/res/ico00002.ico
deleted file mode 100644
index 47fcdbe..0000000
--- a/Bus/Horloge/res/ico00002.ico
+++ /dev/null
Binary files differ
diff --git a/Bus/Horloge/res/ico00003.ico b/Bus/Horloge/res/ico00003.ico
deleted file mode 100644
index 9eff079..0000000
--- a/Bus/Horloge/res/ico00003.ico
+++ /dev/null
Binary files differ
diff --git a/Bus/Horloge/res/ico00004.ico b/Bus/Horloge/res/ico00004.ico
deleted file mode 100644
index b1e3652..0000000
--- a/Bus/Horloge/res/ico00004.ico
+++ /dev/null
Binary files differ
diff --git a/Bus/Horloge/res/icon1.ico b/Bus/Horloge/res/icon1.ico
deleted file mode 100644
index 614b0a0..0000000
--- a/Bus/Horloge/res/icon1.ico
+++ /dev/null
Binary files differ
diff --git a/Bus/Horloge/resource.h b/Bus/Horloge/resource.h
deleted file mode 100644
index a400f6a..0000000
--- a/Bus/Horloge/resource.h
+++ /dev/null
@@ -1,44 +0,0 @@
-//{{NO_DEPENDENCIES}}
-// Microsoft Visual C++ generated include file.
-// Used by Horloge.rc
-//
-#define IDD_HORLOGE_DIALOG 102
-#define IDR_MAINFRAME 128
-#define IDI_FORWARD 141
-#define IDI_BACKWARD 142
-#define IDI_PAUSE 143
-#define IDI_START 144
-#define IDI_NORMAL_SPEED 146
-#define IDC_PAUSE 1001
-#define IDC_START 1002
-#define IDC_BACKWARD 1003
-#define IDC_FORWARD 1004
-#define IDC_NORMAL_SPEED 1005
-#define IDC_SPEED 1010
-#define IDC_TIME 1011
-#define IDC_BUSNUMBER 1026
-#define IDC_IVYSTART 1027
-#define IDC_BIGSPEED 1028
-#define IDC_APPLIST 1030
-#define IDC_SETTIME 1031
-#define IDC_BACK_5 1034
-#define IDC_BACK_2 1035
-#define IDC_FORW_2 1036
-#define IDC_FORW_5 1037
-#define IDC_BACK_1 1038
-#define IDC_FORW_1 1039
-#define IDC_FILE 1040
-#define IDC_FILENAME 1041
-#define IDC_PROGRESS1 1043
-#define IDC_FILEPROGRESS 1043
-
-// Next default values for new objects
-//
-#ifdef APSTUDIO_INVOKED
-#ifndef APSTUDIO_READONLY_SYMBOLS
-#define _APS_NEXT_RESOURCE_VALUE 149
-#define _APS_NEXT_COMMAND_VALUE 32772
-#define _APS_NEXT_CONTROL_VALUE 1044
-#define _APS_NEXT_SYMED_VALUE 101
-#endif
-#endif
diff --git a/Bus/Ivy/BufferedSocket.cxx b/Bus/Ivy/BufferedSocket.cxx
deleted file mode 100644
index 1a11c56..0000000
--- a/Bus/Ivy/BufferedSocket.cxx
+++ /dev/null
@@ -1,168 +0,0 @@
-// BufferedSocket.cpp: implementation of the CBufferedSocket class.
-//
-//////////////////////////////////////////////////////////////////////
-
-#include "IvyStdAfx.h"
-#include "BufferedSocket.h"
-
-#define BUFFER_SIZE 4096
-
-//////////////////////////////////////////////////////////////////////
-// Construction/Destruction
-//////////////////////////////////////////////////////////////////////
-
-CBufferedSocket::CBufferedSocket()
-{
- separator = '\n';
- buffer_size = BUFFER_SIZE;
- buffer = (char*)malloc( buffer_size );
- current_ptr = buffer;
- connected = false;
- InitializeCriticalSection( &m_CritSection );
-}
-
-CBufferedSocket::~CBufferedSocket()
-{
- free( buffer );
-}
-void CBufferedSocket::Accept(CBufferedSocket& rConnectedSocket, SOCKADDR* lpSockAddr , int* lpSockAddrLen )
-{
- CThreadedSocket::Accept(rConnectedSocket, lpSockAddr , lpSockAddrLen );
- rConnectedSocket.connected = true;
-}
-void CBufferedSocket::OnReceive(int nErrorCode)
-{
- char *ptr_sep;
- char *ptr;
- size_t nb_to_read = 0;
- size_t nb;
- char *tmp_buf;
-
- SOCKADDR addr;
- size_t len = sizeof( addr );
-
- /* limitation taille buffer */
- nb_to_read = buffer_size - (current_ptr - buffer );
- if( nb_to_read == 0 )
- {
- buffer_size *= 2; /* twice old size */
- tmp_buf = (char*)realloc( buffer, buffer_size );
- if (!tmp_buf )
- {
- TRACE("HandleSocket Buffer Memory Alloc Error\n");
- exit(0);
- }
- buffer = tmp_buf;
- TRACE( "Buffer Limit reached realloc new size %ld\n", buffer_size );
- nb_to_read = buffer_size - (current_ptr - buffer );
- }
- nb = ReceiveFrom( current_ptr, nb_to_read, &addr, &len, 0/*MSG_PARTIAL*/ );
- ASSERT ( memchr( current_ptr, 0, nb) == NULL );
- if ( nb == SOCKET_ERROR )
- {
- int err = this->GetLastError();
- if ( err != WSAESHUTDOWN ) // shutdown by remote side ?
- TRACE("error Receive %d socket %d\n",this->GetLastError(),m_hSocket);
- Close();
- return;
- }
- if ( nb == 0 ) // shutdown by remote side ?
- {
- Close();
- return;
- }
-
- current_ptr += nb;
- ptr = buffer;
- while ((ptr_sep = (char*)memchr (ptr, separator, current_ptr - ptr )))
- {
- *ptr_sep = '\0';
- //TRACE("message %s\n", ptr );
- OnReceive( ptr );
- ptr = ++ptr_sep;
- //ASSERT( ptr < (buffer + buffer_size) );
- }
- if (ptr < current_ptr )
- { /* recopie ligne incomplete au debut du buffer */
- len = current_ptr - ptr;
- memcpy (buffer, ptr, len );
- current_ptr = buffer + len;
- }
- else
- {
- current_ptr = buffer;
- }
-
-
-}
-
-void CBufferedSocket::OnReceive( char *line )
-{
-}
-void CBufferedSocket::SetSeparator( char sep )
-{
- separator = sep;
-}
-void CBufferedSocket::OnSend( int nErrorCode )
-{
- ivy::string msg;
- bool empty;
-
- // on essaye de garder la section critique a l'interieur de la boucle
- // pour permettre l'entrelacement avec la partie emetrice
- do
- {
- EnterCriticalSection( &m_CritSection );
- empty = buf_out.empty();
- if ( !empty ) msg = buf_out.front();
- LeaveCriticalSection( &m_CritSection );
- if ( !empty )
- {
-// TRACE("CBufferedSocket::OnSend Sending buffer %s\n",msg.c_str());
-
- size_t lg = msg.length();
- size_t sent = CThreadedSocket::Send( msg.c_str(), lg );
- if ( sent == lg )
- { // emission correcte on enleve le msg de la file
- EnterCriticalSection( &m_CritSection );
- buf_out.pop_front();
- LeaveCriticalSection( &m_CritSection );
- }
- else
- { // erreur
- int err = this->GetLastError();
- switch ( err ){
- case WSAEWOULDBLOCK: // si la file est pleine on sort en silence !
- break;
- case WSAECONNABORTED: // broken pipe on sort en silence
- break;
- default:
- TRACE("CBufferedSocket::OnWakeup error %d Sending buffer %s \n",err,msg.c_str());
- break;
- }
- break;
- }
- }
- } while ( !empty );
-}
-
-void CBufferedSocket::OnConnect( int nErrorCode )
-{
- connected = true;
- StartWriter();
-// TRACE("CBufferedSocket::OnConnect buffer size %d\n",buf_out.size());
-}
-void CBufferedSocket::Send ( const char * data )
-{
- //BOOL toBeSignaled;
- EnterCriticalSection( &m_CritSection );
- //toBeSignaled = buf_out.IsEmpty() && connected;
- buf_out.push_back( ivy::string(data) );
- LeaveCriticalSection( &m_CritSection );
- //TRACE("CBufferedSocket::Send Adding buffer to send count %d\n",buf_out.size());
-// if ( connected )
-// {
- bool ok = SignalWriter();
- if ( !ok ) TRACE( "CBufferedSocket::SignalWriter Error %d\n", this->GetLastError());
-// }
-}
diff --git a/Bus/Ivy/BufferedSocket.h b/Bus/Ivy/BufferedSocket.h
deleted file mode 100644
index 851ead1..0000000
--- a/Bus/Ivy/BufferedSocket.h
+++ /dev/null
@@ -1,36 +0,0 @@
-// BufferedSocket.h: interface for the CBufferedSocket class.
-//
-//////////////////////////////////////////////////////////////////////
-
-
-#pragma once
-
-
-#include "ThreadedSocket.h"
-
-class CBufferedSocket : public CThreadedSocket
-{
-// DECLARE_DYNAMIC(CBufferedSocket)
-public:
- CBufferedSocket();
- virtual ~CBufferedSocket();
- void OnReceive( int nErrorCode );
- void OnSend( int nErrorCode );
- void OnConnect(int nErrorCode);
- virtual void OnReceive( char *line );
- virtual void Accept(CBufferedSocket& rConnectedSocket,
- SOCKADDR* lpSockAddr = NULL, int* lpSockAddrLen = NULL);
- void SetSeparator( char sep );
- void Send ( const char * data );
-protected:
- bool connected; /* wait to be connected before sending any Data */
- int separator;
- /* buffer de reception de l'application */
- long buffer_size;
- char *buffer;
- char *current_ptr;
- // Buffer Emission
- CRITICAL_SECTION m_CritSection;
- ivy::list<ivy::string> buf_out;
-};
-
diff --git a/Bus/Ivy/DataTypes.h b/Bus/Ivy/DataTypes.h
deleted file mode 100644
index 8afc4ce..0000000
--- a/Bus/Ivy/DataTypes.h
+++ /dev/null
@@ -1,328 +0,0 @@
-#pragma once
-
-
-#include <string.h>
-
-namespace ivy
-{
-#ifdef WIN32
-#ifdef IVY_EXPORTS
-class _declspec(dllexport) string;
-template <class T> class _declspec(dllexport) list;
-template <class T> class _declspec(dllexport) vector;
-#else
-#pragma comment(lib,"Ivy.LIB" )
-class _declspec(dllimport) string;
-template <class T> class _declspec(dllimport) list;
-template <class T> class _declspec(dllimport) vector;
-#endif
-#endif
-
-class string {
-public:
- static const size_t npos = size_t(-1);
- string(size_t len = 0)
- { ptr = allocBuffer( len ); };
- string ( const string& s )
- { ptr = 0; copy( s.ptr, s.size ); }
- string( const char * s, size_t len = npos )
- {
- ptr = 0;
- if ( len == npos )
- len = strlen(s) ;
- copy( s, len );
- }
-
- ~string()
- { delete [] ptr; }
- size_t length()
- { return size; }
- bool empty() const
- { return size==0; }
- void copy( const char * s, size_t len )
- {
- if ( ptr ) delete [] ptr;
- ptr = allocBuffer( len );
- strncpy_s( ptr, len + 1, s, len );
- }
- void erase(size_t start=0, size_t len = npos)
- {
- char *newptr;
- size_t real_len;
- size_t buf_size;
- real_len = len == npos ? size - start : len;
- if ( real_len > size ) real_len = size;
- buf_size = size - real_len;
- newptr = allocBuffer( buf_size );
- strncpy_s( newptr, buf_size +1, ptr , start );
- strncpy_s( &newptr[start], buf_size +1 - start, &ptr[start+real_len], size - start );
- delete ptr;
- ptr = newptr;
- }
- void append( const char *s , size_t len = npos )
- {
- insert ( size, s , len );
- }
- void insert(size_t index, const char * s, size_t len = npos)
- {
- char *newptr;
- if ( len == npos ) len = strlen(s) ;
- size_t buf_len = size + len;
- newptr = allocBuffer( buf_len );
- strncpy_s( newptr , buf_len +1, ptr, index );
- strncpy_s( newptr+index, buf_len + 1 - index, s, len ) ;
- strncpy_s( newptr+index+len, buf_len + 1 - index -len, &ptr[index], size - (index+len) ) ;
- delete ptr;
- ptr = newptr;
- }
- string substr( size_t start, size_t len = npos )
- { return string ( &ptr[start], len ); }
- size_t find_first_of( const char* strCharSet )
- { char *fnd = strpbrk( ptr, strCharSet ); if ( fnd ) return (size_t)(fnd - ptr); else return npos; }
- size_t rfind( char c )
- { char *fnd = strrchr( ptr, c); if ( fnd ) return (size_t)(fnd - ptr); else return npos; }
-// friend string operator + (const string& left, const char* right);
-// friend string operator + (const char* left, const string& right);
- friend string operator + (const string& left, const string& right)
- {
- string str( left.size + right.size );
- str.append( left.ptr, left.size);
- str.append( right.ptr, right.size);
- return str;
- }
-
- void operator +=(string s)
- {
- append( s.ptr, s.size );
- }
-
- void operator +=(const char* s)
- {
- append( s, strlen(s) );
- }
-
- void operator +=(char c)
- { append( &c, 1);}
-
-
- string operator +(string s) const
- { string str ( ptr, size ); str.append( s.ptr, s.size ); return str; }
- string operator +(const char c) const
- { string str ( ptr, size ); str.append( &c, 1); return str; }
- string& operator=(const string& s)
- { copy(s.ptr,s.size); return *this; }
- string& operator=(const char* s)
- { copy(s,strlen(s)); return *this; }
- // Nondestructive typecast operator
- operator const char*() const
- { return ptr; }
- const char *c_str() const // remove this ugly thing
- { return ptr; }
-private:
- char *ptr;
- size_t size;
- // always allocate one extra character for '\0' termination
- char *allocBuffer(size_t len)
- {
- char *newptr;
- size = len;
- newptr = new char[len+1] ;
- newptr[len] = '\0';
- return newptr;
- }
-
-};
-
-
-
-
-template <class T> class list {
-
-protected:
- struct _Node;
- friend struct _Node;
- typedef struct _Node Node;
- typedef Node* NodePtr;
- struct _Node {
- NodePtr next, prev;
- T value;
- };
-
-public:
-
- //friend class iterator;
- class iterator {
- public:
- iterator()
- {ptr = 0;}
- iterator(NodePtr p)
- {ptr = p;}
- T& operator*() const
- {return ptr->value; }
-// T* operator->() const
-// {return &(ptr->value); }
-// T* operator->() const
-// {return (&**this); }
- iterator& operator++()
- {ptr = ptr->next;
- return (*this); }
- iterator operator++(int)
- {iterator tmp = *this;
- ++*this;
- return (tmp); }
- iterator& operator--()
- {ptr = ptr.prev;
- return (*this); }
- iterator operator--(int)
- {iterator tmp = *this;
- --*this;
- return (tmp); }
- bool operator==(const iterator& p) const
- {return (ptr == p.ptr); }
- bool operator!=(const iterator& p) const
- {return (ptr != p.ptr); }
- NodePtr next() const
- {return ptr->next; };
- NodePtr prev() const
- {return ptr->prev ; };
- NodePtr node() const
- {return (ptr); }
- protected:
- NodePtr ptr;
- };
-
- list()
- {
- head = new Node;
- head->next = head->prev = head;
- }
- ~list()
- {
- clear();
- delete head;
- }
- bool empty()
- { return head->next == head ; }
- T& front()
- {return (*begin()); }
- const T& front() const
- {return (*begin()); }
- T& back()
- {return (*(--end())); }
- const T& back() const
- {return (*(--end())); }
- iterator erase(iterator p)
- {
- NodePtr s = (p++).node();
- s->prev->next = s->next;
- s->next->prev = s->prev;
- delete s;
- return (p);
- }
-
- iterator insert(iterator p, const T& v =T())
- {
- NodePtr s = p.node();
- NodePtr newnode = new Node;
- newnode->value = v;
- newnode->prev = s->prev;
- newnode->next = s;
- s->prev->next = newnode;
- s->prev = newnode;
- return (iterator(newnode));
- }
- void push_front(const T& v)
- {insert(begin(), v); }
- void pop_front()
- {erase(begin()); }
- void push_back(const T& v)
- {insert(end(), v); }
- void pop_back()
- {erase(--end()); }
- iterator erase(iterator first, iterator last)
- {
- while (first != last)
- erase(first++);
- return (first);
- }
- void clear()
- {erase(begin(), end()); }
-
- void remove( const T& data )
- {
- iterator last = end();
- for (iterator iter = begin(); iter != last; )
- if (*iter == data)
- erase(iter++);
- else
- ++iter;
- }
- iterator begin()
- {return (iterator(head->next)); }
- iterator end()
- {return (iterator(head));}
- protected:
- NodePtr head;
-
-};
-
-template <class T> class vector {
-public:
-
- vector ( )
- { data = 0; len = 0; }
- size_t size()
- { return len; }
- void reserve( size_t index )
- {
- if ( index >= len )
- resize( index );
- }
- void resize( size_t index )
- {
- size_t i;
- T* newdata = new T[index];
- for ( i = 0; i < len ; i ++ )
- newdata[i] = data[i];
- for ( i = len; i < index ; i ++ )
- newdata[i] = 0;
- if ( data ) delete [] data;
- data = newdata;
- len = index;
- }
- // Accesses indexed component of vector
- T & operator [](size_t index )
- {
- // reserve( index ); // TODO or NOT check range
- return data[index] ;
- }
- T & operator [](size_t index ) const
- {
- return data[index] ;
- }
- void push_back( const T& value )
- {
- T* newdata = new T[len+1];
- for ( size_t i = 0; i < len ; i ++ )
- newdata[i] = data[i];
- newdata[len++] = value;
- if ( data ) delete [] data;
- data = newdata;
- }
- void erase( int i )
- {
- data[i] = 0;
- }
- void clear()
- {
- delete [] data;
- data = 0;
- len = 0;
- }
-
-private:
- T* data;
- size_t len;
-};
-
-} \ No newline at end of file
diff --git a/Bus/Ivy/InstIvy/InstIvy.sln b/Bus/Ivy/InstIvy/InstIvy.sln
deleted file mode 100644
index def9de2..0000000
--- a/Bus/Ivy/InstIvy/InstIvy.sln
+++ /dev/null
@@ -1,42 +0,0 @@
-Microsoft Visual Studio Solution File, Format Version 7.00
-Project("{54435603-DBB4-11D2-8724-00A0C9A8B90C}") = "InstIvy", "InstIvy.vdproj", "{8826FCA8-62E5-449E-A1F5-A3203F13EF78}"
-EndProject
-Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "Ivy", "..\..\C++\Bus\Ivy\Ivy.vcproj", "{9F40EF6B-8C74-4087-9E25-32A5E7EC2128}"
-EndProject
-Global
- GlobalSection(SourceCodeControl) = preSolution
- SccNumberOfProjects = 3
- SccProjectName0 = \u0022$/Bus/Install/InstIvy\u0022,\u0020CREAAAAA
- SccLocalPath0 = .
- SccProvider0 = MSSCCI:Microsoft\u0020Visual\u0020SourceSafe
- CanCheckoutShared = false
- SolutionUniqueID = {F1027A98-11B4-463A-808C-63E2AD09C2EA}
- SccProjectUniqueName1 = InstIvy.vdproj
- SccLocalPath1 = .
- CanCheckoutShared = false
- SccProjectUniqueName2 = ..\\..\\C++\\Bus\\Ivy\\Ivy.vcproj
- SccProjectName2 = \u0022$/Bus/Ivy\u0022,\u0020QPEAAAAA
- SccLocalPath2 = ..\\..\\C++\\Bus\\Ivy
- CanCheckoutShared = false
- EndGlobalSection
- GlobalSection(SolutionConfiguration) = preSolution
- ConfigName.0 = Debug
- ConfigName.1 = Release
- EndGlobalSection
- GlobalSection(ProjectDependencies) = postSolution
- EndGlobalSection
- GlobalSection(ProjectConfiguration) = postSolution
- {8826FCA8-62E5-449E-A1F5-A3203F13EF78}.Debug.ActiveCfg = Debug
- {8826FCA8-62E5-449E-A1F5-A3203F13EF78}.Debug.Build.0 = Debug
- {8826FCA8-62E5-449E-A1F5-A3203F13EF78}.Release.ActiveCfg = Release
- {8826FCA8-62E5-449E-A1F5-A3203F13EF78}.Release.Build.0 = Release
- {9F40EF6B-8C74-4087-9E25-32A5E7EC2128}.Debug.ActiveCfg = Debug|Win32
- {9F40EF6B-8C74-4087-9E25-32A5E7EC2128}.Debug.Build.0 = Debug|Win32
- {9F40EF6B-8C74-4087-9E25-32A5E7EC2128}.Release.ActiveCfg = Release|Win32
- {9F40EF6B-8C74-4087-9E25-32A5E7EC2128}.Release.Build.0 = Release|Win32
- EndGlobalSection
- GlobalSection(ExtensibilityGlobals) = postSolution
- EndGlobalSection
- GlobalSection(ExtensibilityAddIns) = postSolution
- EndGlobalSection
-EndGlobal
diff --git a/Bus/Ivy/InstIvy/InstIvy.vdproj b/Bus/Ivy/InstIvy/InstIvy.vdproj
deleted file mode 100644
index 4346312..0000000
--- a/Bus/Ivy/InstIvy/InstIvy.vdproj
+++ /dev/null
@@ -1,282 +0,0 @@
-"DeployProject"
-{
-"VSVersion" = "3:700"
-"ProjectType" = "8:{5443560e-dbb4-11d2-8724-00a0c9a8b90c}"
-"IsWebType" = "8:FALSE"
-"ProjectName" = "8:InstIvy"
-"LanguageId" = "3:1036"
-"CodePage" = "3:1252"
-"UILanguageId" = "3:1036"
-"SccProjectName" = "8:\"$/Bus/Install/InstIvy\", CREAAAAA"
-"SccLocalPath" = "8:."
-"SccAuxPath" = "8:"
-"SccProvider" = "8:MSSCCI:Microsoft Visual SourceSafe"
- "Hierarchy"
- {
- "Entry"
- {
- "MsmKey" = "8:_1C8127E2CE08470A9FB2772F59EF6C16"
- "OwnerKey" = "8:_UNDEFINED"
- "MsmSig" = "8:C:\\USERS\\FCOLIN\\PROGRAM FILES\\DEBUG\\IVY.DLL"
- }
- "Entry"
- {
- "MsmKey" = "8:_474D2E042D971A73B3B54FD999910DF8"
- "OwnerKey" = "8:_1C8127E2CE08470A9FB2772F59EF6C16"
- "MsmSig" = "8:C:\\WINDOWS\\SYSTEM32\\MSVCR70D.DLL"
- }
- "Entry"
- {
- "MsmKey" = "8:_6853BE42500AB02614E13C492A847CC2"
- "OwnerKey" = "8:_1C8127E2CE08470A9FB2772F59EF6C16"
- "MsmSig" = "8:C:\\WINDOWS\\SYSTEM32\\MSVCP70D.DLL"
- }
- "Entry"
- {
- "MsmKey" = "8:_84E197CA5A09A6E635F4F2D20CB9C269"
- "OwnerKey" = "8:_1C8127E2CE08470A9FB2772F59EF6C16"
- "MsmSig" = "8:C:\\WINDOWS\\SYSTEM32\\WSOCK32.DLL"
- }
- }
- "Configurations"
- {
- "Debug"
- {
- "DisplayName" = "8:Debug"
- "IsDebugOnly" = "11:TRUE"
- "IsReleaseOnly" = "11:FALSE"
- "OutputFilename" = "8:Debug\\InstIvy.msm"
- "PackageFilesAs" = "3:2"
- "PackageFileSize" = "3:-2147483648"
- "CabType" = "3:1"
- "Compression" = "3:2"
- "SignOutput" = "11:FALSE"
- "CertificateFile" = "8:"
- "PrivateKeyFile" = "8:"
- "TimeStampServer" = "8:"
- "InstallerBootstrapper" = "3:1"
- }
- "Release"
- {
- "DisplayName" = "8:Release"
- "IsDebugOnly" = "11:FALSE"
- "IsReleaseOnly" = "11:TRUE"
- "OutputFilename" = "8:Release\\InstIvy.msm"
- "PackageFilesAs" = "3:2"
- "PackageFileSize" = "3:-2147483648"
- "CabType" = "3:1"
- "Compression" = "3:2"
- "SignOutput" = "11:FALSE"
- "CertificateFile" = "8:"
- "PrivateKeyFile" = "8:"
- "TimeStampServer" = "8:"
- "InstallerBootstrapper" = "3:1"
- }
- }
- "Deployable"
- {
- "CustomAction"
- {
- }
- "DefaultFeature"
- {
- "Name" = "8:DefaultFeature"
- "Title" = "8:"
- "Description" = "8:"
- }
- "File"
- {
- "{54DA9790-1474-11D3-8E00-00C04F6837D0}:_474D2E042D971A73B3B54FD999910DF8"
- {
- "Signature" = "8:20000000a04c53fed195c101662efae5e36ac201a04c53fed195c101000000000030080000000000000000006d0073007600630072003700300064002e0064006c006c000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000"
- "SourcePath" = "8:MSVCR70D.dll"
- "TargetName" = "8:MSVCR70D.dll"
- "Tag" = "8:"
- "Folder" = "8:_15DCD27905D341429030EE4BA476A488"
- "Condition" = "8:"
- "Transitive" = "11:FALSE"
- "Vital" = "11:TRUE"
- "ReadOnly" = "11:FALSE"
- "Hidden" = "11:FALSE"
- "System" = "11:FALSE"
- "Permanent" = "11:FALSE"
- "SharedLegacy" = "11:FALSE"
- "PackageAs" = "3:1"
- "Register" = "3:1"
- "Exclude" = "11:FALSE"
- "IsDependency" = "11:TRUE"
- "IsolateTo" = "8:"
- }
- "{54DA9790-1474-11D3-8E00-00C04F6837D0}:_6853BE42500AB02614E13C492A847CC2"
- {
- "Signature" = "8:2000000090c39d10d295c101662efae5e36ac20190c39d10d295c1010000000000400b0000000000000000006d0073007600630070003700300064002e0064006c006c000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000"
- "SourcePath" = "8:MSVCP70D.dll"
- "TargetName" = "8:MSVCP70D.dll"
- "Tag" = "8:"
- "Folder" = "8:_15DCD27905D341429030EE4BA476A488"
- "Condition" = "8:"
- "Transitive" = "11:FALSE"
- "Vital" = "11:TRUE"
- "ReadOnly" = "11:FALSE"
- "Hidden" = "11:FALSE"
- "System" = "11:FALSE"
- "Permanent" = "11:FALSE"
- "SharedLegacy" = "11:FALSE"
- "PackageAs" = "3:1"
- "Register" = "3:1"
- "Exclude" = "11:FALSE"
- "IsDependency" = "11:TRUE"
- "IsolateTo" = "8:"
- }
- "{54DA9790-1474-11D3-8E00-00C04F6837D0}:_84E197CA5A09A6E635F4F2D20CB9C269"
- {
- "Signature" = "8:2000000000e08cf6b82fc101bec8e082ea6ac20100e08cf6b82fc10100000000005e00000000000000000000770073006f0063006b00330032002e0064006c006c0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000"
- "SourcePath" = "8:WSOCK32.dll"
- "TargetName" = "8:WSOCK32.dll"
- "Tag" = "8:"
- "Folder" = "8:_15DCD27905D341429030EE4BA476A488"
- "Condition" = "8:"
- "Transitive" = "11:FALSE"
- "Vital" = "11:TRUE"
- "ReadOnly" = "11:FALSE"
- "Hidden" = "11:FALSE"
- "System" = "11:FALSE"
- "Permanent" = "11:FALSE"
- "SharedLegacy" = "11:FALSE"
- "PackageAs" = "3:1"
- "Register" = "3:1"
- "Exclude" = "11:FALSE"
- "IsDependency" = "11:TRUE"
- "IsolateTo" = "8:"
- }
- }
- "FileType"
- {
- }
- "Folder"
- {
- "{777C097F-0ED8-11D3-8D6C-00A0C9CFCEE6}:_15DCD27905D341429030EE4BA476A488"
- {
- "Name" = "8:#1910"
- "AlwaysCreate" = "11:FALSE"
- "Condition" = "8:"
- "Transitive" = "11:FALSE"
- "Property" = "8:CommonFilesFolder"
- "Folders"
- {
- }
- }
- "{2FBCB9FF-B6A1-4FA9-9C7C-D1366E178586}:_7BEBD1D67A934D228BFBAE7C11467C9A"
- {
- "DefaultLocation" = "8:[TARGETDIR]"
- "DisplayName" = "8:Dossier Remplacement pour les modules"
- "Description" = "8:"
- "Name" = "8:Dossier Remplacement pour les modules"
- "AlwaysCreate" = "11:FALSE"
- "Condition" = "8:"
- "Transitive" = "11:FALSE"
- "Property" = "8:NEWRETARGETABLEPROPERTY1"
- "Folders"
- {
- }
- }
- "{777C097F-0ED8-11D3-8D6C-00A0C9CFCEE6}:_AEEFF3D8A3364088A698304D464E078E"
- {
- "Name" = "8:#1914"
- "AlwaysCreate" = "11:FALSE"
- "Condition" = "8:"
- "Transitive" = "11:FALSE"
- "Property" = "8:SystemFolder"
- "Folders"
- {
- }
- }
- }
- "Shortcut"
- {
- }
- "Sequences"
- {
- }
- "Registry"
- {
- "HKLM"
- {
- "Keys"
- {
- }
- }
- "HKCU"
- {
- "Keys"
- {
- }
- }
- "HKCR"
- {
- "Keys"
- {
- }
- }
- "HKU"
- {
- "Keys"
- {
- }
- }
- "HKPU"
- {
- "Keys"
- {
- }
- }
- }
- "ProjectOutput"
- {
- "{B1E2BB22-187D-11D3-8E02-00C04F6837D0}:_1C8127E2CE08470A9FB2772F59EF6C16"
- {
- "SourcePath" = "8:..\\..\\Program Files\\Debug\\Ivy.dll"
- "TargetName" = "8:"
- "Tag" = "8:"
- "Folder" = "8:_15DCD27905D341429030EE4BA476A488"
- "Condition" = "8:"
- "Transitive" = "11:FALSE"
- "Vital" = "11:TRUE"
- "ReadOnly" = "11:FALSE"
- "Hidden" = "11:FALSE"
- "System" = "11:FALSE"
- "Permanent" = "11:FALSE"
- "SharedLegacy" = "11:FALSE"
- "PackageAs" = "3:1"
- "Register" = "3:1"
- "Exclude" = "11:FALSE"
- "IsDependency" = "11:FALSE"
- "IsolateTo" = "8:"
- "ProjectOutputGroupRegister" = "3:1"
- "OutputConfiguration" = "8:"
- "OutputGroupCanonicalName" = "8:Built"
- "OutputProjectCanonicalName" = "8:..\\..\\C++\\Bus\\Ivy\\Ivy.vcproj"
- "OutputProjectGuid" = "8:{9F40EF6B-8C74-4087-9E25-32A5E7EC2128}"
- "ShowKeyOutput" = "11:FALSE"
- "ExcludeFilters"
- {
- }
- }
- }
- "Module"
- {
- "ModuleSignature" = "8:MergeModule.50212549D8E242BBB1C9246BFDAFADB2"
- "Version" = "8:1.0.0.0"
- "Title" = "8:Ivy"
- "Subject" = "8:"
- "Author" = "8:CENA"
- "Keywords" = "8:"
- "Comments" = "8:"
- "SearchPath" = "8:"
- "UseSystemSearchPath" = "11:TRUE"
- }
- "MergeModule"
- {
- }
- }
-}
diff --git a/Bus/Ivy/InstIvy/InstIvy.vdproj.vspscc b/Bus/Ivy/InstIvy/InstIvy.vdproj.vspscc
deleted file mode 100644
index 492cf62..0000000
--- a/Bus/Ivy/InstIvy/InstIvy.vdproj.vspscc
+++ /dev/null
@@ -1,10 +0,0 @@
-""
-{
-"FILE_VERSION" = "9237"
-"ENLISTMENT_CHOICE" = "NEVER"
-"PROJECT_FILE_RELATIVE_PATH" = "relative:Install\\InstIvy"
-"NUMBER_OF_EXCLUDED_FILES" = "0"
-"ORIGINAL_PROJECT_FILE_PATH" = ""
-"NUMBER_OF_NESTED_PROJECTS" = "0"
-"SOURCE_CONTROL_SETTINGS_PROVIDER" = "PROJECT"
-}
diff --git a/Bus/Ivy/InstIvy/InstIvy.vssscc b/Bus/Ivy/InstIvy/InstIvy.vssscc
deleted file mode 100644
index 794f014..0000000
--- a/Bus/Ivy/InstIvy/InstIvy.vssscc
+++ /dev/null
@@ -1,10 +0,0 @@
-""
-{
-"FILE_VERSION" = "9237"
-"ENLISTMENT_CHOICE" = "NEVER"
-"PROJECT_FILE_RELATIVE_PATH" = ""
-"NUMBER_OF_EXCLUDED_FILES" = "0"
-"ORIGINAL_PROJECT_FILE_PATH" = ""
-"NUMBER_OF_NESTED_PROJECTS" = "0"
-"SOURCE_CONTROL_SETTINGS_PROVIDER" = "PROJECT"
-}
diff --git a/Bus/Ivy/InstIvyDev/InstIvyDev.sln b/Bus/Ivy/InstIvyDev/InstIvyDev.sln
deleted file mode 100644
index 79e9200..0000000
--- a/Bus/Ivy/InstIvyDev/InstIvyDev.sln
+++ /dev/null
@@ -1,21 +0,0 @@
-Microsoft Visual Studio Solution File, Format Version 7.00
-Project("{54435603-DBB4-11D2-8724-00A0C9A8B90C}") = "InstIvyDev", "InstIvyDev.vdproj", "{07B35ABB-D1C2-4546-8ABA-945C1E8A88FE}"
-EndProject
-Global
- GlobalSection(SolutionConfiguration) = preSolution
- ConfigName.0 = Debug
- ConfigName.1 = Release
- EndGlobalSection
- GlobalSection(ProjectDependencies) = postSolution
- EndGlobalSection
- GlobalSection(ProjectConfiguration) = postSolution
- {07B35ABB-D1C2-4546-8ABA-945C1E8A88FE}.Debug.ActiveCfg = Debug
- {07B35ABB-D1C2-4546-8ABA-945C1E8A88FE}.Debug.Build.0 = Debug
- {07B35ABB-D1C2-4546-8ABA-945C1E8A88FE}.Release.ActiveCfg = Release
- {07B35ABB-D1C2-4546-8ABA-945C1E8A88FE}.Release.Build.0 = Release
- EndGlobalSection
- GlobalSection(ExtensibilityGlobals) = postSolution
- EndGlobalSection
- GlobalSection(ExtensibilityAddIns) = postSolution
- EndGlobalSection
-EndGlobal
diff --git a/Bus/Ivy/InstIvyDev/InstIvyDev.vdproj b/Bus/Ivy/InstIvyDev/InstIvyDev.vdproj
deleted file mode 100644
index 25df386..0000000
--- a/Bus/Ivy/InstIvyDev/InstIvyDev.vdproj
+++ /dev/null
@@ -1,1042 +0,0 @@
-"DeployProject"
-{
-"VSVersion" = "3:800"
-"ProjectType" = "8:{978C614F-708E-4E1A-B201-565925725DBA}"
-"IsWebType" = "8:FALSE"
-"ProjectName" = "8:InstallIvyDev"
-"LanguageId" = "3:1036"
-"CodePage" = "3:1252"
-"UILanguageId" = "3:1036"
-"SccProjectName" = "8:\"$/Bus/Ivy/InstIvyDev\", FUFAAAAA"
-"SccLocalPath" = "8:."
-"SccAuxPath" = "8:"
-"SccProvider" = "8:MSSCCI:Microsoft Visual SourceSafe"
- "Hierarchy"
- {
- "Entry"
- {
- "MsmKey" = "8:_0881ABF5280948D5AA93B02FECFC3956"
- "OwnerKey" = "8:_587183B52DD64752997FFA522BC57D0A"
- "MsmSig" = "8:_UNDEFINED"
- }
- "Entry"
- {
- "MsmKey" = "8:_32C90C9C8FC242AE9C65DA1C92DA2700"
- "OwnerKey" = "8:_UNDEFINED"
- "MsmSig" = "8:_UNDEFINED"
- }
- "Entry"
- {
- "MsmKey" = "8:_587183B52DD64752997FFA522BC57D0A"
- "OwnerKey" = "8:_UNDEFINED"
- "MsmSig" = "8:_UNDEFINED"
- }
- "Entry"
- {
- "MsmKey" = "8:_6C5F1DCD58734C9D953B306F435ED006"
- "OwnerKey" = "8:_7B9C5BFD7A8B4F36A616771B210FF5C8"
- "MsmSig" = "8:_UNDEFINED"
- }
- "Entry"
- {
- "MsmKey" = "8:_6FB50FA4D8F60743C6DAA4C31583C68C"
- "OwnerKey" = "8:_BFED66BE7DFC4FC5B625527D0526B5A5"
- "MsmSig" = "8:_UNDEFINED"
- }
- "Entry"
- {
- "MsmKey" = "8:_7B9C5BFD7A8B4F36A616771B210FF5C8"
- "OwnerKey" = "8:_32C90C9C8FC242AE9C65DA1C92DA2700"
- "MsmSig" = "8:_UNDEFINED"
- }
- "Entry"
- {
- "MsmKey" = "8:_7B9C5BFD7A8B4F36A616771B210FF5C8"
- "OwnerKey" = "8:_BFED66BE7DFC4FC5B625527D0526B5A5"
- "MsmSig" = "8:_UNDEFINED"
- }
- "Entry"
- {
- "MsmKey" = "8:_7B9C5BFD7A8B4F36A616771B210FF5C8"
- "OwnerKey" = "8:_587183B52DD64752997FFA522BC57D0A"
- "MsmSig" = "8:_UNDEFINED"
- }
- "Entry"
- {
- "MsmKey" = "8:_AB55CBB0776C4E9E90F5CB636E7D660B"
- "OwnerKey" = "8:_0881ABF5280948D5AA93B02FECFC3956"
- "MsmSig" = "8:_UNDEFINED"
- }
- "Entry"
- {
- "MsmKey" = "8:_B656C8E7B4C5444BB7CAA2BB82B22DEB"
- "OwnerKey" = "8:_UNDEFINED"
- "MsmSig" = "8:_UNDEFINED"
- }
- "Entry"
- {
- "MsmKey" = "8:_BFED66BE7DFC4FC5B625527D0526B5A5"
- "OwnerKey" = "8:_UNDEFINED"
- "MsmSig" = "8:_UNDEFINED"
- }
- }
- "Configurations"
- {
- "Debug"
- {
- "DisplayName" = "8:Debug"
- "IsDebugOnly" = "11:TRUE"
- "IsReleaseOnly" = "11:FALSE"
- "OutputFilename" = "8:Debug\\InstIvyDev.msi"
- "PackageFilesAs" = "3:2"
- "PackageFileSize" = "3:-2147483648"
- "CabType" = "3:1"
- "Compression" = "3:2"
- "SignOutput" = "11:FALSE"
- "CertificateFile" = "8:"
- "PrivateKeyFile" = "8:"
- "TimeStampServer" = "8:"
- "InstallerBootstrapper" = "3:1"
- "BootstrapperCfg:{63ACBE69-63AA-4F98-B2B6-99F9E24495F2}"
- {
- "Enabled" = "11:FALSE"
- "PromptEnabled" = "11:TRUE"
- "PrerequisitesLocation" = "2:1"
- "Url" = "8:"
- "ComponentsUrl" = "8:"
- "Items"
- {
- }
- }
- }
- "Release"
- {
- "DisplayName" = "8:Release"
- "IsDebugOnly" = "11:FALSE"
- "IsReleaseOnly" = "11:TRUE"
- "OutputFilename" = "8:..\\..\\..\\..\\Install\\InstIvyDev.msi"
- "PackageFilesAs" = "3:2"
- "PackageFileSize" = "3:-2147483648"
- "CabType" = "3:1"
- "Compression" = "3:2"
- "SignOutput" = "11:FALSE"
- "CertificateFile" = "8:"
- "PrivateKeyFile" = "8:"
- "TimeStampServer" = "8:"
- "InstallerBootstrapper" = "3:1"
- "BootstrapperCfg:{63ACBE69-63AA-4F98-B2B6-99F9E24495F2}"
- {
- "Enabled" = "11:FALSE"
- "PromptEnabled" = "11:TRUE"
- "PrerequisitesLocation" = "2:1"
- "Url" = "8:http://www.tls.cena.fr/products/ivy/download/packages"
- "ComponentsUrl" = "8:"
- "Items"
- {
- }
- }
- }
- }
- "Deployable"
- {
- "CustomAction"
- {
- }
- "DefaultFeature"
- {
- "Name" = "8:DefaultFeature"
- "Title" = "8:"
- "Description" = "8:"
- }
- "ExternalPersistence"
- {
- "LaunchCondition"
- {
- }
- }
- "File"
- {
- "{1FB2D0AE-D3B9-43D4-B9DD-F88EC61E35DE}:_6FB50FA4D8F60743C6DAA4C31583C68C"
- {
- "SourcePath" = "8:WSOCK32.dll"
- "TargetName" = "8:WSOCK32.dll"
- "Tag" = "8:"
- "Folder" = "8:_97BD9053CEE5430F9BC907C244C522C0"
- "Condition" = "8:"
- "Transitive" = "11:FALSE"
- "Vital" = "11:TRUE"
- "ReadOnly" = "11:FALSE"
- "Hidden" = "11:FALSE"
- "System" = "11:FALSE"
- "Permanent" = "11:FALSE"
- "SharedLegacy" = "11:FALSE"
- "PackageAs" = "3:1"
- "Register" = "3:1"
- "Exclude" = "11:TRUE"
- "IsDependency" = "11:TRUE"
- "IsolateTo" = "8:"
- }
- "{1FB2D0AE-D3B9-43D4-B9DD-F88EC61E35DE}:_B656C8E7B4C5444BB7CAA2BB82B22DEB"
- {
- "SourcePath" = "8:..\\..\\release\\Ivy.lib"
- "TargetName" = "8:Ivy.lib"
- "Tag" = "8:"
- "Folder" = "8:_4BD06D3C92334052AE64EABA3DE642C3"
- "Condition" = "8:"
- "Transitive" = "11:FALSE"
- "Vital" = "11:TRUE"
- "ReadOnly" = "11:FALSE"
- "Hidden" = "11:FALSE"
- "System" = "11:FALSE"
- "Permanent" = "11:FALSE"
- "SharedLegacy" = "11:FALSE"
- "PackageAs" = "3:1"
- "Register" = "3:1"
- "Exclude" = "11:FALSE"
- "IsDependency" = "11:FALSE"
- "IsolateTo" = "8:"
- }
- }
- "FileType"
- {
- }
- "Folder"
- {
- "{3C67513D-01DD-4637-8A68-80971EB9504F}:_97BD9053CEE5430F9BC907C244C522C0"
- {
- "DefaultLocation" = "8:[ProgramFilesFolder][Manufacturer]\\[ProductName]"
- "Name" = "8:#1925"
- "AlwaysCreate" = "11:FALSE"
- "Condition" = "8:"
- "Transitive" = "11:FALSE"
- "Property" = "8:TARGETDIR"
- "Folders"
- {
- "{9EF0B969-E518-4E46-987F-47570745A589}:_4BD06D3C92334052AE64EABA3DE642C3"
- {
- "Name" = "8:Lib"
- "AlwaysCreate" = "11:FALSE"
- "Condition" = "8:"
- "Transitive" = "11:FALSE"
- "Property" = "8:_884F08395AE541928DAABB355DC3485B"
- "Folders"
- {
- }
- }
- "{9EF0B969-E518-4E46-987F-47570745A589}:_64AFC2E36B5346C08FF007A580F68304"
- {
- "Name" = "8:Include"
- "AlwaysCreate" = "11:FALSE"
- "Condition" = "8:"
- "Transitive" = "11:FALSE"
- "Property" = "8:_631518C84C224AE680C352EB2F43713C"
- "Folders"
- {
- }
- }
- "{9EF0B969-E518-4E46-987F-47570745A589}:_823268F0927E471C9AC8D4518AB6C2F5"
- {
- "Name" = "8:SrcExample"
- "AlwaysCreate" = "11:FALSE"
- "Condition" = "8:"
- "Transitive" = "11:FALSE"
- "Property" = "8:_D2C6F66A7FE9467184E94EAE96D06FA2"
- "Folders"
- {
- }
- }
- "{9EF0B969-E518-4E46-987F-47570745A589}:_9CFE50635C5443E68113471C7E3235C3"
- {
- "Name" = "8:SrcLib"
- "AlwaysCreate" = "11:FALSE"
- "Condition" = "8:"
- "Transitive" = "11:FALSE"
- "Property" = "8:_A82ABE6889AF4890A9FB2AE77868B9D4"
- "Folders"
- {
- }
- }
- "{9EF0B969-E518-4E46-987F-47570745A589}:_BE1B10BDB24D49EA8562F4B0A6596F21"
- {
- "Name" = "8:Bin"
- "AlwaysCreate" = "11:FALSE"
- "Condition" = "8:"
- "Transitive" = "11:FALSE"
- "Property" = "8:_4839FF1AF6C24020B0C868BA0C7D4D2E"
- "Folders"
- {
- }
- }
- }
- }
- }
- "LaunchCondition"
- {
- }
- "Locator"
- {
- }
- "MsiBootstrapper"
- {
- "LangId" = "3:1036"
- }
- "Product"
- {
- "Name" = "8:Microsoft Visual Studio"
- "ProductName" = "8:InstIvyDev"
- "ProductCode" = "8:{54EEC85D-F868-49E0-A71C-54409C92E02F}"
- "PackageCode" = "8:{4A4A8B44-7D84-4AEB-98DA-766B603AD502}"
- "UpgradeCode" = "8:{B61AA283-78E2-443D-A093-4D5D6C0B779A}"
- "RestartWWWService" = "11:FALSE"
- "RemovePreviousVersions" = "11:FALSE"
- "DetectNewerInstalledVersion" = "11:TRUE"
- "InstallAllUsers" = "11:FALSE"
- "ProductVersion" = "8:1.0.0"
- "Manufacturer" = "8:SDER PII"
- "ARPHELPTELEPHONE" = "8:"
- "ARPHELPLINK" = "8:http://www.tls.cena.fr/products/ivy"
- "Title" = "8:InstIvyDev"
- "Subject" = "8:Ivy"
- "ARPCONTACT" = "8:SDER PII"
- "Keywords" = "8:Ivy"
- "ARPCOMMENTS" = "8:Ivy Sources and Lib "
- "ARPURLINFOABOUT" = "8:"
- "ARPPRODUCTICON" = "8:"
- "ARPIconIndex" = "3:0"
- "SearchPath" = "8:"
- "UseSystemSearchPath" = "11:TRUE"
- "TargetPlatform" = "3:0"
- "PreBuildEvent" = "8:"
- "PostBuildEvent" = "8:\"$(ProjectDir)..\\..\\UpdateIvyWeb.bat\" \"$(BuiltOuputPath)\""
- "RunPostBuildEvent" = "3:0"
- }
- "Registry"
- {
- "HKLM"
- {
- "Keys"
- {
- "{60EA8692-D2D5-43EB-80DC-7906BF13D6EF}:_BB28EFBCAF6D427984A8D12ADA79ED71"
- {
- "Name" = "8:Software"
- "Condition" = "8:"
- "AlwaysCreate" = "11:FALSE"
- "DeleteAtUninstall" = "11:FALSE"
- "Transitive" = "11:FALSE"
- "Keys"
- {
- "{60EA8692-D2D5-43EB-80DC-7906BF13D6EF}:_46BB5FEDD5E54B1DA83F1AEE69B7414D"
- {
- "Name" = "8:[Manufacturer]"
- "Condition" = "8:"
- "AlwaysCreate" = "11:FALSE"
- "DeleteAtUninstall" = "11:FALSE"
- "Transitive" = "11:FALSE"
- "Keys"
- {
- }
- "Values"
- {
- }
- }
- }
- "Values"
- {
- }
- }
- }
- }
- "HKCU"
- {
- "Keys"
- {
- "{60EA8692-D2D5-43EB-80DC-7906BF13D6EF}:_D254D89ED3C54FA68FAE6AD35F7725E3"
- {
- "Name" = "8:Software"
- "Condition" = "8:"
- "AlwaysCreate" = "11:FALSE"
- "DeleteAtUninstall" = "11:FALSE"
- "Transitive" = "11:FALSE"
- "Keys"
- {
- "{60EA8692-D2D5-43EB-80DC-7906BF13D6EF}:_D96808EDD7E448E3BF4976DBB5153FDA"
- {
- "Name" = "8:[Manufacturer]"
- "Condition" = "8:"
- "AlwaysCreate" = "11:FALSE"
- "DeleteAtUninstall" = "11:FALSE"
- "Transitive" = "11:FALSE"
- "Keys"
- {
- }
- "Values"
- {
- }
- }
- }
- "Values"
- {
- }
- }
- }
- }
- "HKCR"
- {
- "Keys"
- {
- }
- }
- "HKU"
- {
- "Keys"
- {
- }
- }
- "HKPU"
- {
- "Keys"
- {
- }
- }
- }
- "Sequences"
- {
- }
- "Shortcut"
- {
- }
- "UserInterface"
- {
- "{DF760B10-853B-4699-99F2-AFF7185B4A62}:_02EC527B9FF844D88C616726908FDF10"
- {
- "Name" = "8:#1902"
- "Sequence" = "3:2"
- "Attributes" = "3:3"
- "Dialogs"
- {
- "{688940B3-5CA9-4162-8DEE-2993FA9D8CBC}:_BDEB1035C12E4BFEB8737D924C6F4156"
- {
- "Sequence" = "3:100"
- "DisplayName" = "8:Finished"
- "UseDynamicProperties" = "11:TRUE"
- "IsDependency" = "11:FALSE"
- "SourcePath" = "8:<VsdDialogDir>\\VsdAdminFinishedDlg.wid"
- "Properties"
- {
- "BannerBitmap"
- {
- "Name" = "8:BannerBitmap"
- "DisplayName" = "8:#1001"
- "Description" = "8:#1101"
- "Type" = "3:8"
- "ContextData" = "8:Bitmap"
- "Attributes" = "3:4"
- "Setting" = "3:1"
- "UsePlugInResources" = "11:TRUE"
- }
- }
- }
- }
- }
- "{2479F3F5-0309-486D-8047-8187E2CE5BA0}:_3750316B8DBF425BA6AA4348C0F1CA87"
- {
- "UseDynamicProperties" = "11:FALSE"
- "IsDependency" = "11:FALSE"
- "SourcePath" = "8:<VsdDialogDir>\\VsdUserInterface.wim"
- }
- "{DF760B10-853B-4699-99F2-AFF7185B4A62}:_51727C53A61B4F6D901F06AED9B3C481"
- {
- "Name" = "8:#1901"
- "Sequence" = "3:1"
- "Attributes" = "3:2"
- "Dialogs"
- {
- "{688940B3-5CA9-4162-8DEE-2993FA9D8CBC}:_BA05984C1F294731B5ED66914BD89A5C"
- {
- "Sequence" = "3:100"
- "DisplayName" = "8:Progress"
- "UseDynamicProperties" = "11:TRUE"
- "IsDependency" = "11:FALSE"
- "SourcePath" = "8:<VsdDialogDir>\\VsdProgressDlg.wid"
- "Properties"
- {
- "BannerBitmap"
- {
- "Name" = "8:BannerBitmap"
- "DisplayName" = "8:#1001"
- "Description" = "8:#1101"
- "Type" = "3:8"
- "ContextData" = "8:Bitmap"
- "Attributes" = "3:4"
- "Setting" = "3:1"
- "UsePlugInResources" = "11:TRUE"
- }
- "ShowProgress"
- {
- "Name" = "8:ShowProgress"
- "DisplayName" = "8:#1009"
- "Description" = "8:#1109"
- "Type" = "3:5"
- "ContextData" = "8:1;True=1;False=0"
- "Attributes" = "3:0"
- "Setting" = "3:0"
- "Value" = "3:1"
- "DefaultValue" = "3:1"
- "UsePlugInResources" = "11:TRUE"
- }
- }
- }
- }
- }
- "{DF760B10-853B-4699-99F2-AFF7185B4A62}:_6FF89DC49B8348899925787F1294FD64"
- {
- "Name" = "8:#1901"
- "Sequence" = "3:2"
- "Attributes" = "3:2"
- "Dialogs"
- {
- "{688940B3-5CA9-4162-8DEE-2993FA9D8CBC}:_9F7D27549F654B418F380589DA56C3ED"
- {
- "Sequence" = "3:100"
- "DisplayName" = "8:Progress"
- "UseDynamicProperties" = "11:TRUE"
- "IsDependency" = "11:FALSE"
- "SourcePath" = "8:<VsdDialogDir>\\VsdAdminProgressDlg.wid"
- "Properties"
- {
- "BannerBitmap"
- {
- "Name" = "8:BannerBitmap"
- "DisplayName" = "8:#1001"
- "Description" = "8:#1101"
- "Type" = "3:8"
- "ContextData" = "8:Bitmap"
- "Attributes" = "3:4"
- "Setting" = "3:1"
- "UsePlugInResources" = "11:TRUE"
- }
- "ShowProgress"
- {
- "Name" = "8:ShowProgress"
- "DisplayName" = "8:#1009"
- "Description" = "8:#1109"
- "Type" = "3:5"
- "ContextData" = "8:1;True=1;False=0"
- "Attributes" = "3:0"
- "Setting" = "3:0"
- "Value" = "3:1"
- "DefaultValue" = "3:1"
- "UsePlugInResources" = "11:TRUE"
- }
- }
- }
- }
- }
- "{DF760B10-853B-4699-99F2-AFF7185B4A62}:_8F8434AEBED14452982010E6F3848023"
- {
- "Name" = "8:#1900"
- "Sequence" = "3:1"
- "Attributes" = "3:1"
- "Dialogs"
- {
- "{688940B3-5CA9-4162-8DEE-2993FA9D8CBC}:_97A4AE594BB347ECAD98AAFC6FD3B0FB"
- {
- "Sequence" = "3:200"
- "DisplayName" = "8:Installation Folder"
- "UseDynamicProperties" = "11:TRUE"
- "IsDependency" = "11:FALSE"
- "SourcePath" = "8:<VsdDialogDir>\\VsdFolderDlg.wid"
- "Properties"
- {
- "BannerBitmap"
- {
- "Name" = "8:BannerBitmap"
- "DisplayName" = "8:#1001"
- "Description" = "8:#1101"
- "Type" = "3:8"
- "ContextData" = "8:Bitmap"
- "Attributes" = "3:4"
- "Setting" = "3:1"
- "UsePlugInResources" = "11:TRUE"
- }
- "InstallAllUsersVisible"
- {
- "Name" = "8:InstallAllUsersVisible"
- "DisplayName" = "8:#1059"
- "Description" = "8:#1159"
- "Type" = "3:5"
- "ContextData" = "8:1;True=1;False=0"
- "Attributes" = "3:0"
- "Setting" = "3:0"
- "Value" = "3:1"
- "DefaultValue" = "3:1"
- "UsePlugInResources" = "11:TRUE"
- }
- }
- }
- "{688940B3-5CA9-4162-8DEE-2993FA9D8CBC}:_E3B1F5B6B5FE4CE6B369C0374CA9AA75"
- {
- "Sequence" = "3:100"
- "DisplayName" = "8:Welcome"
- "UseDynamicProperties" = "11:TRUE"
- "IsDependency" = "11:FALSE"
- "SourcePath" = "8:<VsdDialogDir>\\VsdWelcomeDlg.wid"
- "Properties"
- {
- "BannerBitmap"
- {
- "Name" = "8:BannerBitmap"
- "DisplayName" = "8:#1001"
- "Description" = "8:#1101"
- "Type" = "3:8"
- "ContextData" = "8:Bitmap"
- "Attributes" = "3:4"
- "Setting" = "3:1"
- "UsePlugInResources" = "11:TRUE"
- }
- "CopyrightWarning"
- {
- "Name" = "8:CopyrightWarning"
- "DisplayName" = "8:#1002"
- "Description" = "8:#1102"
- "Type" = "3:3"
- "ContextData" = "8:"
- "Attributes" = "3:0"
- "Setting" = "3:1"
- "Value" = "8:#1202"
- "DefaultValue" = "8:#1202"
- "UsePlugInResources" = "11:TRUE"
- }
- "Welcome"
- {
- "Name" = "8:Welcome"
- "DisplayName" = "8:#1003"
- "Description" = "8:#1103"
- "Type" = "3:3"
- "ContextData" = "8:"
- "Attributes" = "3:0"
- "Setting" = "3:1"
- "Value" = "8:#1203"
- "DefaultValue" = "8:#1203"
- "UsePlugInResources" = "11:TRUE"
- }
- }
- }
- "{688940B3-5CA9-4162-8DEE-2993FA9D8CBC}:_EA128F65E9D44AE1B2E071C21B8C0010"
- {
- "Sequence" = "3:300"
- "DisplayName" = "8:Confirm Installation"
- "UseDynamicProperties" = "11:TRUE"
- "IsDependency" = "11:FALSE"
- "SourcePath" = "8:<VsdDialogDir>\\VsdConfirmDlg.wid"
- "Properties"
- {
- "BannerBitmap"
- {
- "Name" = "8:BannerBitmap"
- "DisplayName" = "8:#1001"
- "Description" = "8:#1101"
- "Type" = "3:8"
- "ContextData" = "8:Bitmap"
- "Attributes" = "3:4"
- "Setting" = "3:1"
- "UsePlugInResources" = "11:TRUE"
- }
- }
- }
- }
- }
- "{2479F3F5-0309-486D-8047-8187E2CE5BA0}:_9AC53598B4544C15A28E2D88AD28D24E"
- {
- "UseDynamicProperties" = "11:FALSE"
- "IsDependency" = "11:FALSE"
- "SourcePath" = "8:<VsdDialogDir>\\VsdBasicDialogs.wim"
- }
- "{DF760B10-853B-4699-99F2-AFF7185B4A62}:_D1645593CABE4CAF974F04BA8599A164"
- {
- "Name" = "8:#1900"
- "Sequence" = "3:2"
- "Attributes" = "3:1"
- "Dialogs"
- {
- "{688940B3-5CA9-4162-8DEE-2993FA9D8CBC}:_0EE17FA1A76D4B8C86D0CA3BC7089F16"
- {
- "Sequence" = "3:100"
- "DisplayName" = "8:Welcome"
- "UseDynamicProperties" = "11:TRUE"
- "IsDependency" = "11:FALSE"
- "SourcePath" = "8:<VsdDialogDir>\\VsdAdminWelcomeDlg.wid"
- "Properties"
- {
- "BannerBitmap"
- {
- "Name" = "8:BannerBitmap"
- "DisplayName" = "8:#1001"
- "Description" = "8:#1101"
- "Type" = "3:8"
- "ContextData" = "8:Bitmap"
- "Attributes" = "3:4"
- "Setting" = "3:1"
- "UsePlugInResources" = "11:TRUE"
- }
- "CopyrightWarning"
- {
- "Name" = "8:CopyrightWarning"
- "DisplayName" = "8:#1002"
- "Description" = "8:#1102"
- "Type" = "3:3"
- "ContextData" = "8:"
- "Attributes" = "3:0"
- "Setting" = "3:1"
- "Value" = "8:#1202"
- "DefaultValue" = "8:#1202"
- "UsePlugInResources" = "11:TRUE"
- }
- "Welcome"
- {
- "Name" = "8:Welcome"
- "DisplayName" = "8:#1003"
- "Description" = "8:#1103"
- "Type" = "3:3"
- "ContextData" = "8:"
- "Attributes" = "3:0"
- "Setting" = "3:1"
- "Value" = "8:#1203"
- "DefaultValue" = "8:#1203"
- "UsePlugInResources" = "11:TRUE"
- }
- }
- }
- "{688940B3-5CA9-4162-8DEE-2993FA9D8CBC}:_B8FA44662FAF40B4A23F14BBE7115F3C"
- {
- "Sequence" = "3:300"
- "DisplayName" = "8:Confirm Installation"
- "UseDynamicProperties" = "11:TRUE"
- "IsDependency" = "11:FALSE"
- "SourcePath" = "8:<VsdDialogDir>\\VsdAdminConfirmDlg.wid"
- "Properties"
- {
- "BannerBitmap"
- {
- "Name" = "8:BannerBitmap"
- "DisplayName" = "8:#1001"
- "Description" = "8:#1101"
- "Type" = "3:8"
- "ContextData" = "8:Bitmap"
- "Attributes" = "3:4"
- "Setting" = "3:1"
- "UsePlugInResources" = "11:TRUE"
- }
- }
- }
- "{688940B3-5CA9-4162-8DEE-2993FA9D8CBC}:_F1C7DEE7DB5C4556ADD1217E3B254EC3"
- {
- "Sequence" = "3:200"
- "DisplayName" = "8:Installation Folder"
- "UseDynamicProperties" = "11:TRUE"
- "IsDependency" = "11:FALSE"
- "SourcePath" = "8:<VsdDialogDir>\\VsdAdminFolderDlg.wid"
- "Properties"
- {
- "BannerBitmap"
- {
- "Name" = "8:BannerBitmap"
- "DisplayName" = "8:#1001"
- "Description" = "8:#1101"
- "Type" = "3:8"
- "ContextData" = "8:Bitmap"
- "Attributes" = "3:4"
- "Setting" = "3:1"
- "UsePlugInResources" = "11:TRUE"
- }
- }
- }
- }
- }
- "{DF760B10-853B-4699-99F2-AFF7185B4A62}:_FED02DC05BEC48728F86FB64CF2C5B31"
- {
- "Name" = "8:#1902"
- "Sequence" = "3:1"
- "Attributes" = "3:3"
- "Dialogs"
- {
- "{688940B3-5CA9-4162-8DEE-2993FA9D8CBC}:_83F73B2D8F7E44DA9567C4497FA978AB"
- {
- "Sequence" = "3:100"
- "DisplayName" = "8:Finished"
- "UseDynamicProperties" = "11:TRUE"
- "IsDependency" = "11:FALSE"
- "SourcePath" = "8:<VsdDialogDir>\\VsdFinishedDlg.wid"
- "Properties"
- {
- "BannerBitmap"
- {
- "Name" = "8:BannerBitmap"
- "DisplayName" = "8:#1001"
- "Description" = "8:#1101"
- "Type" = "3:8"
- "ContextData" = "8:Bitmap"
- "Attributes" = "3:4"
- "Setting" = "3:1"
- "UsePlugInResources" = "11:TRUE"
- }
- "UpdateText"
- {
- "Name" = "8:UpdateText"
- "DisplayName" = "8:#1058"
- "Description" = "8:#1158"
- "Type" = "3:15"
- "ContextData" = "8:"
- "Attributes" = "3:0"
- "Setting" = "3:1"
- "Value" = "8:#1258"
- "DefaultValue" = "8:#1258"
- "UsePlugInResources" = "11:TRUE"
- }
- }
- }
- }
- }
- }
- "MergeModule"
- {
- "{CEE29DC0-9FBA-4B99-8D47-5BC643D9B626}:_0881ABF5280948D5AA93B02FECFC3956"
- {
- "UseDynamicProperties" = "11:TRUE"
- "IsDependency" = "11:TRUE"
- "SourcePath" = "8:Microsoft_VC80_MFC_x86.msm"
- "Properties"
- {
- }
- "LanguageId" = "3:0"
- "Exclude" = "11:FALSE"
- "Folder" = "8:"
- "Feature" = "8:"
- "IsolateTo" = "8:"
- }
- "{CEE29DC0-9FBA-4B99-8D47-5BC643D9B626}:_6C5F1DCD58734C9D953B306F435ED006"
- {
- "UseDynamicProperties" = "11:TRUE"
- "IsDependency" = "11:TRUE"
- "SourcePath" = "8:policy_8_0_microsoft_vc80_crt_x86.msm"
- "Properties"
- {
- }
- "LanguageId" = "3:0"
- "Exclude" = "11:FALSE"
- "Folder" = "8:"
- "Feature" = "8:"
- "IsolateTo" = "8:"
- }
- "{CEE29DC0-9FBA-4B99-8D47-5BC643D9B626}:_7B9C5BFD7A8B4F36A616771B210FF5C8"
- {
- "UseDynamicProperties" = "11:TRUE"
- "IsDependency" = "11:TRUE"
- "SourcePath" = "8:Microsoft_VC80_CRT_x86.msm"
- "Properties"
- {
- }
- "LanguageId" = "3:0"
- "Exclude" = "11:FALSE"
- "Folder" = "8:"
- "Feature" = "8:"
- "IsolateTo" = "8:"
- }
- "{CEE29DC0-9FBA-4B99-8D47-5BC643D9B626}:_AB55CBB0776C4E9E90F5CB636E7D660B"
- {
- "UseDynamicProperties" = "11:TRUE"
- "IsDependency" = "11:TRUE"
- "SourcePath" = "8:policy_8_0_microsoft_vc80_mfc_x86.msm"
- "Properties"
- {
- }
- "LanguageId" = "3:0"
- "Exclude" = "11:FALSE"
- "Folder" = "8:"
- "Feature" = "8:"
- "IsolateTo" = "8:"
- }
- }
- "ProjectOutput"
- {
- "{5259A561-127C-4D43-A0A1-72F10C7B3BF8}:_0DBE25F652264D9F92A27A1581D093E3"
- {
- "SourcePath" = "8:"
- "TargetName" = "8:"
- "Tag" = "8:"
- "Folder" = "8:_9CFE50635C5443E68113471C7E3235C3"
- "Condition" = "8:"
- "Transitive" = "11:FALSE"
- "Vital" = "11:TRUE"
- "ReadOnly" = "11:FALSE"
- "Hidden" = "11:FALSE"
- "System" = "11:FALSE"
- "Permanent" = "11:FALSE"
- "SharedLegacy" = "11:FALSE"
- "PackageAs" = "3:1"
- "Register" = "3:1"
- "Exclude" = "11:FALSE"
- "IsDependency" = "11:FALSE"
- "IsolateTo" = "8:"
- "ProjectOutputGroupRegister" = "3:1"
- "OutputConfiguration" = "8:"
- "OutputGroupCanonicalName" = "8:SourceFiles"
- "OutputProjectGuid" = "8:{9BD87B7A-517E-4900-B3EA-A358885CD876}"
- "ShowKeyOutput" = "11:TRUE"
- "ExcludeFilters"
- {
- "ExcludeFilter" = "8:*.vcproj"
- "ExcludeFilter" = "8:*.res"
- "ExcludeFilter" = "8:*.h"
- }
- }
- "{5259A561-127C-4D43-A0A1-72F10C7B3BF8}:_10C831C856C745B8862A1DA57473BE41"
- {
- "SourcePath" = "8:"
- "TargetName" = "8:"
- "Tag" = "8:"
- "Folder" = "8:_64AFC2E36B5346C08FF007A580F68304"
- "Condition" = "8:"
- "Transitive" = "11:FALSE"
- "Vital" = "11:TRUE"
- "ReadOnly" = "11:FALSE"
- "Hidden" = "11:FALSE"
- "System" = "11:FALSE"
- "Permanent" = "11:FALSE"
- "SharedLegacy" = "11:FALSE"
- "PackageAs" = "3:1"
- "Register" = "3:1"
- "Exclude" = "11:FALSE"
- "IsDependency" = "11:FALSE"
- "IsolateTo" = "8:"
- "ProjectOutputGroupRegister" = "3:1"
- "OutputConfiguration" = "8:"
- "OutputGroupCanonicalName" = "8:SourceFiles"
- "OutputProjectGuid" = "8:{9BD87B7A-517E-4900-B3EA-A358885CD876}"
- "ShowKeyOutput" = "11:TRUE"
- "ExcludeFilters"
- {
- "ExcludeFilter" = "8:*.vcproj"
- "ExcludeFilter" = "8:*.cxx"
- "ExcludeFilter" = "8:*.res"
- "ExcludeFilter" = "8:*.cpp"
- }
- }
- "{5259A561-127C-4D43-A0A1-72F10C7B3BF8}:_32C90C9C8FC242AE9C65DA1C92DA2700"
- {
- "SourcePath" = "8:..\\..\\release\\pcre.dll"
- "TargetName" = "8:"
- "Tag" = "8:"
- "Folder" = "8:_BE1B10BDB24D49EA8562F4B0A6596F21"
- "Condition" = "8:"
- "Transitive" = "11:FALSE"
- "Vital" = "11:TRUE"
- "ReadOnly" = "11:FALSE"
- "Hidden" = "11:FALSE"
- "System" = "11:FALSE"
- "Permanent" = "11:FALSE"
- "SharedLegacy" = "11:FALSE"
- "PackageAs" = "3:1"
- "Register" = "3:1"
- "Exclude" = "11:FALSE"
- "IsDependency" = "11:FALSE"
- "IsolateTo" = "8:"
- "ProjectOutputGroupRegister" = "3:1"
- "OutputConfiguration" = "8:"
- "OutputGroupCanonicalName" = "8:Built"
- "OutputProjectGuid" = "8:{D79FC143-498E-4342-B2C7-BDAD1B8D0E6B}"
- "ShowKeyOutput" = "11:TRUE"
- "ExcludeFilters"
- {
- }
- }
- "{5259A561-127C-4D43-A0A1-72F10C7B3BF8}:_3EE353CD5A944D589E7FD68F71A9F409"
- {
- "SourcePath" = "8:"
- "TargetName" = "8:"
- "Tag" = "8:"
- "Folder" = "8:_823268F0927E471C9AC8D4518AB6C2F5"
- "Condition" = "8:"
- "Transitive" = "11:FALSE"
- "Vital" = "11:TRUE"
- "ReadOnly" = "11:FALSE"
- "Hidden" = "11:FALSE"
- "System" = "11:FALSE"
- "Permanent" = "11:FALSE"
- "SharedLegacy" = "11:FALSE"
- "PackageAs" = "3:1"
- "Register" = "3:1"
- "Exclude" = "11:FALSE"
- "IsDependency" = "11:FALSE"
- "IsolateTo" = "8:"
- "ProjectOutputGroupRegister" = "3:1"
- "OutputConfiguration" = "8:"
- "OutputGroupCanonicalName" = "8:SourceFiles"
- "OutputProjectGuid" = "8:{B7F7F0F7-9029-4D1A-8CB4-C42DAF86A21C}"
- "ShowKeyOutput" = "11:TRUE"
- "ExcludeFilters"
- {
- }
- }
- "{5259A561-127C-4D43-A0A1-72F10C7B3BF8}:_587183B52DD64752997FFA522BC57D0A"
- {
- "SourcePath" = "8:c:\\users\\fcolin\\program files\\release\\IvyProbe.exe"
- "TargetName" = "8:"
- "Tag" = "8:"
- "Folder" = "8:_BE1B10BDB24D49EA8562F4B0A6596F21"
- "Condition" = "8:"
- "Transitive" = "11:FALSE"
- "Vital" = "11:TRUE"
- "ReadOnly" = "11:FALSE"
- "Hidden" = "11:FALSE"
- "System" = "11:FALSE"
- "Permanent" = "11:FALSE"
- "SharedLegacy" = "11:FALSE"
- "PackageAs" = "3:1"
- "Register" = "3:1"
- "Exclude" = "11:FALSE"
- "IsDependency" = "11:FALSE"
- "IsolateTo" = "8:"
- "ProjectOutputGroupRegister" = "3:1"
- "OutputConfiguration" = "8:"
- "OutputGroupCanonicalName" = "8:Built"
- "OutputProjectGuid" = "8:{B7F7F0F7-9029-4D1A-8CB4-C42DAF86A21C}"
- "ShowKeyOutput" = "11:TRUE"
- "ExcludeFilters"
- {
- }
- }
- "{5259A561-127C-4D43-A0A1-72F10C7B3BF8}:_BFED66BE7DFC4FC5B625527D0526B5A5"
- {
- "SourcePath" = "8:..\\..\\release\\Ivy.dll"
- "TargetName" = "8:"
- "Tag" = "8:"
- "Folder" = "8:_BE1B10BDB24D49EA8562F4B0A6596F21"
- "Condition" = "8:"
- "Transitive" = "11:FALSE"
- "Vital" = "11:TRUE"
- "ReadOnly" = "11:FALSE"
- "Hidden" = "11:FALSE"
- "System" = "11:FALSE"
- "Permanent" = "11:FALSE"
- "SharedLegacy" = "11:FALSE"
- "PackageAs" = "3:1"
- "Register" = "3:1"
- "Exclude" = "11:FALSE"
- "IsDependency" = "11:FALSE"
- "IsolateTo" = "8:"
- "ProjectOutputGroupRegister" = "3:1"
- "OutputConfiguration" = "8:"
- "OutputGroupCanonicalName" = "8:Built"
- "OutputProjectGuid" = "8:{9BD87B7A-517E-4900-B3EA-A358885CD876}"
- "ShowKeyOutput" = "11:TRUE"
- "ExcludeFilters"
- {
- }
- }
- }
- "VJSharpPlugin"
- {
- }
- }
-}
diff --git a/Bus/Ivy/InstIvyDev/InstIvyDev.vdproj.vspscc b/Bus/Ivy/InstIvyDev/InstIvyDev.vdproj.vspscc
deleted file mode 100644
index 587f3d9..0000000
--- a/Bus/Ivy/InstIvyDev/InstIvyDev.vdproj.vspscc
+++ /dev/null
@@ -1,10 +0,0 @@
-""
-{
-"FILE_VERSION" = "9237"
-"ENLISTMENT_CHOICE" = "NEVER"
-"PROJECT_FILE_RELATIVE_PATH" = ""
-"NUMBER_OF_EXCLUDED_FILES" = "0"
-"ORIGINAL_PROJECT_FILE_PATH" = ""
-"NUMBER_OF_NESTED_PROJECTS" = "0"
-"SOURCE_CONTROL_SETTINGS_PROVIDER" = "PROJECT"
-}
diff --git a/Bus/Ivy/InstallSource/InstallSource.vdproj b/Bus/Ivy/InstallSource/InstallSource.vdproj
deleted file mode 100644
index 72879da..0000000
--- a/Bus/Ivy/InstallSource/InstallSource.vdproj
+++ /dev/null
@@ -1,728 +0,0 @@
-"DeployProject"
-{
-"VSVersion" = "3:800"
-"ProjectType" = "8:{978C614F-708E-4E1A-B201-565925725DBA}"
-"IsWebType" = "8:FALSE"
-"ProjectName" = "8:InstallIvySources"
-"LanguageId" = "3:1036"
-"CodePage" = "3:1252"
-"UILanguageId" = "3:1036"
-"SccProjectName" = "8:SAK"
-"SccLocalPath" = "8:SAK"
-"SccAuxPath" = "8:SAK"
-"SccProvider" = "8:SAK"
- "Hierarchy"
- {
- }
- "Configurations"
- {
- "Debug"
- {
- "DisplayName" = "8:Debug"
- "IsDebugOnly" = "11:TRUE"
- "IsReleaseOnly" = "11:FALSE"
- "OutputFilename" = "8:Debug\\InstallSource.msi"
- "PackageFilesAs" = "3:2"
- "PackageFileSize" = "3:-2147483648"
- "CabType" = "3:1"
- "Compression" = "3:2"
- "SignOutput" = "11:FALSE"
- "CertificateFile" = "8:"
- "PrivateKeyFile" = "8:"
- "TimeStampServer" = "8:"
- "InstallerBootstrapper" = "3:2"
- "BootstrapperCfg:{63ACBE69-63AA-4F98-B2B6-99F9E24495F2}"
- {
- "Enabled" = "11:TRUE"
- "PromptEnabled" = "11:TRUE"
- "PrerequisitesLocation" = "2:1"
- "Url" = "8:"
- "ComponentsUrl" = "8:"
- "Items"
- {
- }
- }
- }
- "Release"
- {
- "DisplayName" = "8:Release"
- "IsDebugOnly" = "11:FALSE"
- "IsReleaseOnly" = "11:TRUE"
- "OutputFilename" = "8:..\\..\\..\\..\\Install\\InstallIvySources.msi"
- "PackageFilesAs" = "3:2"
- "PackageFileSize" = "3:-2147483648"
- "CabType" = "3:1"
- "Compression" = "3:2"
- "SignOutput" = "11:FALSE"
- "CertificateFile" = "8:"
- "PrivateKeyFile" = "8:"
- "TimeStampServer" = "8:"
- "InstallerBootstrapper" = "3:1"
- "BootstrapperCfg:{63ACBE69-63AA-4F98-B2B6-99F9E24495F2}"
- {
- "Enabled" = "11:FALSE"
- "PromptEnabled" = "11:TRUE"
- "PrerequisitesLocation" = "2:1"
- "Url" = "8:http://www.tls.cena.fr/products/ivy/download/packages"
- "ComponentsUrl" = "8:"
- "Items"
- {
- }
- }
- }
- }
- "Deployable"
- {
- "CustomAction"
- {
- }
- "DefaultFeature"
- {
- "Name" = "8:DefaultFeature"
- "Title" = "8:"
- "Description" = "8:"
- }
- "ExternalPersistence"
- {
- "LaunchCondition"
- {
- }
- }
- "File"
- {
- }
- "FileType"
- {
- }
- "Folder"
- {
- "{3C67513D-01DD-4637-8A68-80971EB9504F}:_B3B7EB8E946F45E1BA06E9D854393106"
- {
- "DefaultLocation" = "8:[ProgramFilesFolder][Manufacturer]\\[ProductName]"
- "Name" = "8:#1925"
- "AlwaysCreate" = "11:FALSE"
- "Condition" = "8:"
- "Transitive" = "11:FALSE"
- "Property" = "8:TARGETDIR"
- "Folders"
- {
- "{9EF0B969-E518-4E46-987F-47570745A589}:_982736CE041D479585A839B95041A4C3"
- {
- "Name" = "8:Ivy"
- "AlwaysCreate" = "11:FALSE"
- "Condition" = "8:"
- "Transitive" = "11:FALSE"
- "Property" = "8:_E96D066878304D268825DFE0DDE10D44"
- "Folders"
- {
- }
- }
- "{9EF0B969-E518-4E46-987F-47570745A589}:_D5ABE290941D4E11A32C1B4224453B50"
- {
- "Name" = "8:IvyProbe"
- "AlwaysCreate" = "11:FALSE"
- "Condition" = "8:"
- "Transitive" = "11:FALSE"
- "Property" = "8:_D6C5E160784140D3B122D7535BF25441"
- "Folders"
- {
- }
- }
- }
- }
- }
- "LaunchCondition"
- {
- }
- "Locator"
- {
- }
- "MsiBootstrapper"
- {
- "LangId" = "3:1036"
- }
- "Product"
- {
- "Name" = "8:Microsoft Visual Studio"
- "ProductName" = "8:IVY Sources"
- "ProductCode" = "8:{A4D80C7C-E792-43F3-97D5-F163E43C2592}"
- "PackageCode" = "8:{6C9A2D11-2E42-486D-84E1-C0A8A0AA3FB1}"
- "UpgradeCode" = "8:{779E9266-AC8C-490F-8519-7B26BDA9E0F3}"
- "RestartWWWService" = "11:FALSE"
- "RemovePreviousVersions" = "11:TRUE"
- "DetectNewerInstalledVersion" = "11:TRUE"
- "InstallAllUsers" = "11:FALSE"
- "ProductVersion" = "8:1.1.0"
- "Manufacturer" = "8:CENA PII"
- "ARPHELPTELEPHONE" = "8:"
- "ARPHELPLINK" = "8:http://www.tls.cena.fr/products/ivy"
- "Title" = "8:IVY Sources"
- "Subject" = "8:"
- "ARPCONTACT" = "8:CENA PII"
- "Keywords" = "8:Ivy"
- "ARPCOMMENTS" = "8:Source de Ivy IvyProbe "
- "ARPURLINFOABOUT" = "8:"
- "ARPPRODUCTICON" = "8:"
- "ARPIconIndex" = "3:0"
- "SearchPath" = "8:"
- "UseSystemSearchPath" = "11:TRUE"
- "TargetPlatform" = "3:0"
- "PreBuildEvent" = "8:"
- "PostBuildEvent" = "8:\"$(ProjectDir)..\\..\\UpdateIvyWeb.bat\" \"$(BuiltOuputPath)\""
- "RunPostBuildEvent" = "3:0"
- }
- "Registry"
- {
- "HKLM"
- {
- "Keys"
- {
- "{60EA8692-D2D5-43EB-80DC-7906BF13D6EF}:_53933E3AD9234F12A4873FFA9773F31B"
- {
- "Name" = "8:Software"
- "Condition" = "8:"
- "AlwaysCreate" = "11:FALSE"
- "DeleteAtUninstall" = "11:FALSE"
- "Transitive" = "11:FALSE"
- "Keys"
- {
- "{60EA8692-D2D5-43EB-80DC-7906BF13D6EF}:_7A4AE5DE0CDC412DB0987B541DAEEA5C"
- {
- "Name" = "8:[Manufacturer]"
- "Condition" = "8:"
- "AlwaysCreate" = "11:FALSE"
- "DeleteAtUninstall" = "11:FALSE"
- "Transitive" = "11:FALSE"
- "Keys"
- {
- }
- "Values"
- {
- }
- }
- }
- "Values"
- {
- }
- }
- }
- }
- "HKCU"
- {
- "Keys"
- {
- "{60EA8692-D2D5-43EB-80DC-7906BF13D6EF}:_44F3154318AA4F4E8261D87380278D24"
- {
- "Name" = "8:Software"
- "Condition" = "8:"
- "AlwaysCreate" = "11:FALSE"
- "DeleteAtUninstall" = "11:FALSE"
- "Transitive" = "11:FALSE"
- "Keys"
- {
- "{60EA8692-D2D5-43EB-80DC-7906BF13D6EF}:_9E06D03F3A794C62A13E46DD90ECF5C2"
- {
- "Name" = "8:[Manufacturer]"
- "Condition" = "8:"
- "AlwaysCreate" = "11:FALSE"
- "DeleteAtUninstall" = "11:FALSE"
- "Transitive" = "11:FALSE"
- "Keys"
- {
- }
- "Values"
- {
- }
- }
- }
- "Values"
- {
- }
- }
- }
- }
- "HKCR"
- {
- "Keys"
- {
- }
- }
- "HKU"
- {
- "Keys"
- {
- }
- }
- "HKPU"
- {
- "Keys"
- {
- }
- }
- }
- "Sequences"
- {
- }
- "Shortcut"
- {
- }
- "UserInterface"
- {
- "{DF760B10-853B-4699-99F2-AFF7185B4A62}:_0A813400DCAA4CA2AED300FE90057CD5"
- {
- "Name" = "8:#1902"
- "Sequence" = "3:1"
- "Attributes" = "3:3"
- "Dialogs"
- {
- "{688940B3-5CA9-4162-8DEE-2993FA9D8CBC}:_D10C5ED5EBA44D81A8E5ABCD373D3DFB"
- {
- "Sequence" = "3:100"
- "DisplayName" = "8:Finished"
- "UseDynamicProperties" = "11:TRUE"
- "IsDependency" = "11:FALSE"
- "SourcePath" = "8:<VsdDialogDir>\\VsdFinishedDlg.wid"
- "Properties"
- {
- "BannerBitmap"
- {
- "Name" = "8:BannerBitmap"
- "DisplayName" = "8:#1001"
- "Description" = "8:#1101"
- "Type" = "3:8"
- "ContextData" = "8:Bitmap"
- "Attributes" = "3:4"
- "Setting" = "3:1"
- "UsePlugInResources" = "11:TRUE"
- }
- "UpdateText"
- {
- "Name" = "8:UpdateText"
- "DisplayName" = "8:#1058"
- "Description" = "8:#1158"
- "Type" = "3:15"
- "ContextData" = "8:"
- "Attributes" = "3:0"
- "Setting" = "3:1"
- "Value" = "8:#1258"
- "DefaultValue" = "8:#1258"
- "UsePlugInResources" = "11:TRUE"
- }
- }
- }
- }
- }
- "{DF760B10-853B-4699-99F2-AFF7185B4A62}:_0BBD850026394B248C77CF0D6A143DCC"
- {
- "Name" = "8:#1901"
- "Sequence" = "3:2"
- "Attributes" = "3:2"
- "Dialogs"
- {
- "{688940B3-5CA9-4162-8DEE-2993FA9D8CBC}:_C6C426B741844BD2B3CEDB5637FA9398"
- {
- "Sequence" = "3:100"
- "DisplayName" = "8:Progress"
- "UseDynamicProperties" = "11:TRUE"
- "IsDependency" = "11:FALSE"
- "SourcePath" = "8:<VsdDialogDir>\\VsdAdminProgressDlg.wid"
- "Properties"
- {
- "BannerBitmap"
- {
- "Name" = "8:BannerBitmap"
- "DisplayName" = "8:#1001"
- "Description" = "8:#1101"
- "Type" = "3:8"
- "ContextData" = "8:Bitmap"
- "Attributes" = "3:4"
- "Setting" = "3:1"
- "UsePlugInResources" = "11:TRUE"
- }
- "ShowProgress"
- {
- "Name" = "8:ShowProgress"
- "DisplayName" = "8:#1009"
- "Description" = "8:#1109"
- "Type" = "3:5"
- "ContextData" = "8:1;True=1;False=0"
- "Attributes" = "3:0"
- "Setting" = "3:0"
- "Value" = "3:1"
- "DefaultValue" = "3:1"
- "UsePlugInResources" = "11:TRUE"
- }
- }
- }
- }
- }
- "{DF760B10-853B-4699-99F2-AFF7185B4A62}:_138810673D2A4B039E304596343A481D"
- {
- "Name" = "8:#1902"
- "Sequence" = "3:2"
- "Attributes" = "3:3"
- "Dialogs"
- {
- "{688940B3-5CA9-4162-8DEE-2993FA9D8CBC}:_F70B3043BFCB4E2CAE3E5D5165AEF3BE"
- {
- "Sequence" = "3:100"
- "DisplayName" = "8:Finished"
- "UseDynamicProperties" = "11:TRUE"
- "IsDependency" = "11:FALSE"
- "SourcePath" = "8:<VsdDialogDir>\\VsdAdminFinishedDlg.wid"
- "Properties"
- {
- "BannerBitmap"
- {
- "Name" = "8:BannerBitmap"
- "DisplayName" = "8:#1001"
- "Description" = "8:#1101"
- "Type" = "3:8"
- "ContextData" = "8:Bitmap"
- "Attributes" = "3:4"
- "Setting" = "3:1"
- "UsePlugInResources" = "11:TRUE"
- }
- }
- }
- }
- }
- "{2479F3F5-0309-486D-8047-8187E2CE5BA0}:_14D0F4EA9F4542A9A7180215B5B185E0"
- {
- "UseDynamicProperties" = "11:FALSE"
- "IsDependency" = "11:FALSE"
- "SourcePath" = "8:<VsdDialogDir>\\VsdBasicDialogs.wim"
- }
- "{DF760B10-853B-4699-99F2-AFF7185B4A62}:_A5F428FF10E64C82A99936F0EEFE6C9A"
- {
- "Name" = "8:#1900"
- "Sequence" = "3:1"
- "Attributes" = "3:1"
- "Dialogs"
- {
- "{688940B3-5CA9-4162-8DEE-2993FA9D8CBC}:_BC6CF4D097A54F8796A6DC0991F61A8A"
- {
- "Sequence" = "3:300"
- "DisplayName" = "8:Confirm Installation"
- "UseDynamicProperties" = "11:TRUE"
- "IsDependency" = "11:FALSE"
- "SourcePath" = "8:<VsdDialogDir>\\VsdConfirmDlg.wid"
- "Properties"
- {
- "BannerBitmap"
- {
- "Name" = "8:BannerBitmap"
- "DisplayName" = "8:#1001"
- "Description" = "8:#1101"
- "Type" = "3:8"
- "ContextData" = "8:Bitmap"
- "Attributes" = "3:4"
- "Setting" = "3:1"
- "UsePlugInResources" = "11:TRUE"
- }
- }
- }
- "{688940B3-5CA9-4162-8DEE-2993FA9D8CBC}:_C59FDD5750904CE69714920B25A7A1D5"
- {
- "Sequence" = "3:200"
- "DisplayName" = "8:Installation Folder"
- "UseDynamicProperties" = "11:TRUE"
- "IsDependency" = "11:FALSE"
- "SourcePath" = "8:<VsdDialogDir>\\VsdFolderDlg.wid"
- "Properties"
- {
- "BannerBitmap"
- {
- "Name" = "8:BannerBitmap"
- "DisplayName" = "8:#1001"
- "Description" = "8:#1101"
- "Type" = "3:8"
- "ContextData" = "8:Bitmap"
- "Attributes" = "3:4"
- "Setting" = "3:1"
- "UsePlugInResources" = "11:TRUE"
- }
- "InstallAllUsersVisible"
- {
- "Name" = "8:InstallAllUsersVisible"
- "DisplayName" = "8:#1059"
- "Description" = "8:#1159"
- "Type" = "3:5"
- "ContextData" = "8:1;True=1;False=0"
- "Attributes" = "3:0"
- "Setting" = "3:0"
- "Value" = "3:1"
- "DefaultValue" = "3:1"
- "UsePlugInResources" = "11:TRUE"
- }
- }
- }
- "{688940B3-5CA9-4162-8DEE-2993FA9D8CBC}:_F3608A2FED224610A31E8BA94D72172B"
- {
- "Sequence" = "3:100"
- "DisplayName" = "8:Welcome"
- "UseDynamicProperties" = "11:TRUE"
- "IsDependency" = "11:FALSE"
- "SourcePath" = "8:<VsdDialogDir>\\VsdWelcomeDlg.wid"
- "Properties"
- {
- "BannerBitmap"
- {
- "Name" = "8:BannerBitmap"
- "DisplayName" = "8:#1001"
- "Description" = "8:#1101"
- "Type" = "3:8"
- "ContextData" = "8:Bitmap"
- "Attributes" = "3:4"
- "Setting" = "3:1"
- "UsePlugInResources" = "11:TRUE"
- }
- "CopyrightWarning"
- {
- "Name" = "8:CopyrightWarning"
- "DisplayName" = "8:#1002"
- "Description" = "8:#1102"
- "Type" = "3:3"
- "ContextData" = "8:"
- "Attributes" = "3:0"
- "Setting" = "3:1"
- "Value" = "8:#1202"
- "DefaultValue" = "8:#1202"
- "UsePlugInResources" = "11:TRUE"
- }
- "Welcome"
- {
- "Name" = "8:Welcome"
- "DisplayName" = "8:#1003"
- "Description" = "8:#1103"
- "Type" = "3:3"
- "ContextData" = "8:"
- "Attributes" = "3:0"
- "Setting" = "3:1"
- "Value" = "8:#1203"
- "DefaultValue" = "8:#1203"
- "UsePlugInResources" = "11:TRUE"
- }
- }
- }
- }
- }
- "{2479F3F5-0309-486D-8047-8187E2CE5BA0}:_B959F1B9EF674DF1AAAC84393D11F1F4"
- {
- "UseDynamicProperties" = "11:FALSE"
- "IsDependency" = "11:FALSE"
- "SourcePath" = "8:<VsdDialogDir>\\VsdUserInterface.wim"
- }
- "{DF760B10-853B-4699-99F2-AFF7185B4A62}:_BF96EE5647E446EE8E09C7161F2D15C6"
- {
- "Name" = "8:#1900"
- "Sequence" = "3:2"
- "Attributes" = "3:1"
- "Dialogs"
- {
- "{688940B3-5CA9-4162-8DEE-2993FA9D8CBC}:_5DD5731B72974577BB1FE53249896CE6"
- {
- "Sequence" = "3:300"
- "DisplayName" = "8:Confirm Installation"
- "UseDynamicProperties" = "11:TRUE"
- "IsDependency" = "11:FALSE"
- "SourcePath" = "8:<VsdDialogDir>\\VsdAdminConfirmDlg.wid"
- "Properties"
- {
- "BannerBitmap"
- {
- "Name" = "8:BannerBitmap"
- "DisplayName" = "8:#1001"
- "Description" = "8:#1101"
- "Type" = "3:8"
- "ContextData" = "8:Bitmap"
- "Attributes" = "3:4"
- "Setting" = "3:1"
- "UsePlugInResources" = "11:TRUE"
- }
- }
- }
- "{688940B3-5CA9-4162-8DEE-2993FA9D8CBC}:_6CF0FA0D246440D18CF8219B20779B9B"
- {
- "Sequence" = "3:200"
- "DisplayName" = "8:Installation Folder"
- "UseDynamicProperties" = "11:TRUE"
- "IsDependency" = "11:FALSE"
- "SourcePath" = "8:<VsdDialogDir>\\VsdAdminFolderDlg.wid"
- "Properties"
- {
- "BannerBitmap"
- {
- "Name" = "8:BannerBitmap"
- "DisplayName" = "8:#1001"
- "Description" = "8:#1101"
- "Type" = "3:8"
- "ContextData" = "8:Bitmap"
- "Attributes" = "3:4"
- "Setting" = "3:1"
- "UsePlugInResources" = "11:TRUE"
- }
- }
- }
- "{688940B3-5CA9-4162-8DEE-2993FA9D8CBC}:_7232E533C8364A2481A6BF178EF00E6E"
- {
- "Sequence" = "3:100"
- "DisplayName" = "8:Welcome"
- "UseDynamicProperties" = "11:TRUE"
- "IsDependency" = "11:FALSE"
- "SourcePath" = "8:<VsdDialogDir>\\VsdAdminWelcomeDlg.wid"
- "Properties"
- {
- "BannerBitmap"
- {
- "Name" = "8:BannerBitmap"
- "DisplayName" = "8:#1001"
- "Description" = "8:#1101"
- "Type" = "3:8"
- "ContextData" = "8:Bitmap"
- "Attributes" = "3:4"
- "Setting" = "3:1"
- "UsePlugInResources" = "11:TRUE"
- }
- "CopyrightWarning"
- {
- "Name" = "8:CopyrightWarning"
- "DisplayName" = "8:#1002"
- "Description" = "8:#1102"
- "Type" = "3:3"
- "ContextData" = "8:"
- "Attributes" = "3:0"
- "Setting" = "3:1"
- "Value" = "8:#1202"
- "DefaultValue" = "8:#1202"
- "UsePlugInResources" = "11:TRUE"
- }
- "Welcome"
- {
- "Name" = "8:Welcome"
- "DisplayName" = "8:#1003"
- "Description" = "8:#1103"
- "Type" = "3:3"
- "ContextData" = "8:"
- "Attributes" = "3:0"
- "Setting" = "3:1"
- "Value" = "8:#1203"
- "DefaultValue" = "8:#1203"
- "UsePlugInResources" = "11:TRUE"
- }
- }
- }
- }
- }
- "{DF760B10-853B-4699-99F2-AFF7185B4A62}:_D683AF1F16134222A207B5C3D986AFD7"
- {
- "Name" = "8:#1901"
- "Sequence" = "3:1"
- "Attributes" = "3:2"
- "Dialogs"
- {
- "{688940B3-5CA9-4162-8DEE-2993FA9D8CBC}:_6A78AB4A47D846BE8BCFE2FD4B21FED4"
- {
- "Sequence" = "3:100"
- "DisplayName" = "8:Progress"
- "UseDynamicProperties" = "11:TRUE"
- "IsDependency" = "11:FALSE"
- "SourcePath" = "8:<VsdDialogDir>\\VsdProgressDlg.wid"
- "Properties"
- {
- "BannerBitmap"
- {
- "Name" = "8:BannerBitmap"
- "DisplayName" = "8:#1001"
- "Description" = "8:#1101"
- "Type" = "3:8"
- "ContextData" = "8:Bitmap"
- "Attributes" = "3:4"
- "Setting" = "3:1"
- "UsePlugInResources" = "11:TRUE"
- }
- "ShowProgress"
- {
- "Name" = "8:ShowProgress"
- "DisplayName" = "8:#1009"
- "Description" = "8:#1109"
- "Type" = "3:5"
- "ContextData" = "8:1;True=1;False=0"
- "Attributes" = "3:0"
- "Setting" = "3:0"
- "Value" = "3:1"
- "DefaultValue" = "3:1"
- "UsePlugInResources" = "11:TRUE"
- }
- }
- }
- }
- }
- }
- "MergeModule"
- {
- }
- "ProjectOutput"
- {
- "{5259A561-127C-4D43-A0A1-72F10C7B3BF8}:_31B0D0C4AA7F433F8B505436C2D1D325"
- {
- "SourcePath" = "8:"
- "TargetName" = "8:"
- "Tag" = "8:"
- "Folder" = "8:_D5ABE290941D4E11A32C1B4224453B50"
- "Condition" = "8:"
- "Transitive" = "11:FALSE"
- "Vital" = "11:TRUE"
- "ReadOnly" = "11:FALSE"
- "Hidden" = "11:FALSE"
- "System" = "11:FALSE"
- "Permanent" = "11:FALSE"
- "SharedLegacy" = "11:FALSE"
- "PackageAs" = "3:1"
- "Register" = "3:1"
- "Exclude" = "11:FALSE"
- "IsDependency" = "11:FALSE"
- "IsolateTo" = "8:"
- "ProjectOutputGroupRegister" = "3:1"
- "OutputConfiguration" = "8:"
- "OutputGroupCanonicalName" = "8:SourceFiles"
- "OutputProjectGuid" = "8:{B7F7F0F7-9029-4D1A-8CB4-C42DAF86A21C}"
- "ShowKeyOutput" = "11:TRUE"
- "ExcludeFilters"
- {
- }
- }
- "{5259A561-127C-4D43-A0A1-72F10C7B3BF8}:_F7CCDC767F0A43859A12C6B0D26950FD"
- {
- "SourcePath" = "8:"
- "TargetName" = "8:"
- "Tag" = "8:"
- "Folder" = "8:_982736CE041D479585A839B95041A4C3"
- "Condition" = "8:"
- "Transitive" = "11:FALSE"
- "Vital" = "11:TRUE"
- "ReadOnly" = "11:FALSE"
- "Hidden" = "11:FALSE"
- "System" = "11:FALSE"
- "Permanent" = "11:FALSE"
- "SharedLegacy" = "11:FALSE"
- "PackageAs" = "3:1"
- "Register" = "3:1"
- "Exclude" = "11:FALSE"
- "IsDependency" = "11:FALSE"
- "IsolateTo" = "8:"
- "ProjectOutputGroupRegister" = "3:1"
- "OutputConfiguration" = "8:"
- "OutputGroupCanonicalName" = "8:SourceFiles"
- "OutputProjectGuid" = "8:{9BD87B7A-517E-4900-B3EA-A358885CD876}"
- "ShowKeyOutput" = "11:TRUE"
- "ExcludeFilters"
- {
- }
- }
- }
- "VJSharpPlugin"
- {
- }
- }
-}
diff --git a/Bus/Ivy/InstallSource/InstallSource.vdproj.vspscc b/Bus/Ivy/InstallSource/InstallSource.vdproj.vspscc
deleted file mode 100644
index 65fed18..0000000
--- a/Bus/Ivy/InstallSource/InstallSource.vdproj.vspscc
+++ /dev/null
@@ -1,10 +0,0 @@
-""
-{
-"FILE_VERSION" = "9237"
-"ENLISTMENT_CHOICE" = "NEVER"
-"PROJECT_FILE_RELATIVE_PATH" = "relative:Ivy\\InstallSource"
-"NUMBER_OF_EXCLUDED_FILES" = "0"
-"ORIGINAL_PROJECT_FILE_PATH" = ""
-"NUMBER_OF_NESTED_PROJECTS" = "0"
-"SOURCE_CONTROL_SETTINGS_PROVIDER" = "PROVIDER"
-}
diff --git a/Bus/Ivy/Ivy.cxx b/Bus/Ivy/Ivy.cxx
deleted file mode 100644
index 4564c6f..0000000
--- a/Bus/Ivy/Ivy.cxx
+++ /dev/null
@@ -1,437 +0,0 @@
-// Ivy.cpp: implementation of the Ivy class.
-//
-//////////////////////////////////////////////////////////////////////
-
-#include "IvyStdAfx.h"
-
-#include "Ivy.h"
-
-#include "IvyWatcher.h"
-#include "IvyApplication.h"
-#include "IvySynchroWnd.h"
-#include "IvyBinding.h"
-#include "intervalRegexp.h"
-
-#define DEFAULT_ADDR "127.255.255.255"
-#define SEPARATOR ":"
-#define DEFAULT_PORT "2010"
-#define DEFAULT_DOMAIN DEFAULT_ADDR/**/SEPARATOR/**/DEFAULT_PORT
-
-
-//////////////////////////////////////////////////////////////////////
-// Construction/Destruction
-//////////////////////////////////////////////////////////////////////
-
-
-Ivy::~Ivy()
-{
- // remove all app and stop watcher
- stop();
- regexp_out.clear();
-
-
- if ( synchronous )
- {
- for ( unsigned int i = 0; i < callbacks.size(); i ++)
- {
- delete callbacks[i];
- }
- }
- callbacks.clear();
-
-
-// if ( direct_callback ) delete direct_callback;
-// if ( application_callback ) delete application_callback;
-
- delete watcher;
-// server->Close();
- delete server;
- if ( synchronous )
- {
- delete IvySynchronousCallback::m_synchro;
- delete application_callback;
- }
-}
-
-
-Ivy::Ivy(const char* name, const char * ready, IvyApplicationCallback *callback, bool Synchronous)
-{
- InitializeCriticalSection( &m_application_cs );
- regexp_id = 0;
- synchronous = Synchronous;
- if ( synchronous )
- IvySynchronousCallback::m_synchro = new IvySynchroWnd();
- ready_message = ready;
- ApplicationName = name;
-
- binding_callback = NULL;
- application_callback = synchronous ? new IvySynchronousApplicationCallback(callback) : callback;
- direct_callback = NULL;
- die_callback = NULL;
- server = new IvyApplication(this);
- applicationPort = server->Create();
- if ( !applicationPort )
- {
- TRACE( " Can't Create server %d\n", server->GetLastError( ) );
- return;
- }
- ApplicationID = GenApplicationUniqueIdentifier();
- watcher = new IvyWatcher(this);
-
-
-}
-const char *Ivy::GenApplicationUniqueIdentifier()
-{
- static char appid[2048];
- unsigned long curtime;
- curtime = GetTickCount();
- srand( curtime );
- sprintf(appid,"%d:%lu:%d",rand(),curtime,applicationPort);
- return appid;
-}
-
-const char * Ivy::GetDomain(const char *domainlist)
-{
- // determine domain to use
- // the syntax of domain is "IpBroadcastAddr1,IpBroadcastAddr2,IpBroadcastAddr2:port"
- if ( domainlist )
- {
- domain = domainlist;
- }
- if ( domain.empty() )
- {
-#ifndef UNDER_CE
- size_t requiredSize;
-
- getenv_s( &requiredSize, NULL, 0, "IVYBUS");
-
- if ( requiredSize )
- {
- char *env = (char*)malloc( requiredSize * sizeof(char));
- getenv_s( &requiredSize, env, requiredSize, "IVYBUS");
- domain = env;
- free( env );
- }
-#endif
- if ( domain.empty() )
- domain = DEFAULT_DOMAIN;
- }
- // first find our UDP port
- size_t sep_index = domain.rfind( ':' );
- if ( sep_index == -1 )
- {
- domain = DEFAULT_DOMAIN;
- TRACE(" Missing ':' in domain list using default domain %s\n", domain );
- }
- if ( sep_index == 0 )
- {
- /* missing addr using localhost */
- domain.insert(0,DEFAULT_ADDR);
- }
- return domain.c_str();
-}
-
-void Ivy::start(const char *domain)
-{
- watcher->start(domain);
-}
-void Ivy::stop()
-{
- watcher->stop();
-
- IvyApplicationList::iterator iter;
- for ( iter = applications.begin() ; iter != applications.end() ; ++iter )
- {
- IvyApplication *app = *iter;
- app->Close();
- delete app;
- }
- applications.clear();
-}
-int Ivy::BindMsg(const char *regexp, IvyMessageCallback *cb)
-{
- char buffer[8192];
-
- SubstituteInterval( regexp, buffer, sizeof( buffer ) );
- regexp_out.push_back( buffer );
- callbacks.push_back( synchronous ? new IvySynchronousMessageCallback(cb) : cb );
-
- /* send to already connected */
- IvyApplicationList::iterator iter;
- for ( iter = applications.begin() ; iter != applications.end() ; ++iter )
- {
- IvyApplication *app = *iter;
- app->SendMsg(IvyApplication::AddRegexp, regexp_id, buffer );
- }
- return regexp_id++;
-}
-int Ivy::BindMsg( IvyMessageCallback *cb, const char *regexp, ... )
-{
- char buffer[4096];
- char buffer2[8192];
- va_list args;
-
- va_start( args, regexp ); /* Initialize variable arguments. */
- _vsnprintf_s( buffer, sizeof(buffer), sizeof(buffer)-1, regexp, args );
- va_end( args);
-
- SubstituteInterval( buffer, buffer2, sizeof( buffer2 ) );
-
- regexp_out.push_back( buffer2 );
- callbacks.push_back( synchronous ? new IvySynchronousMessageCallback(cb) : cb );
-
- /* send to already connected */
- IvyApplicationList::iterator iter;
- for ( iter = applications.begin() ; iter != applications.end() ; ++iter )
- {
- IvyApplication *app = *iter;
- app->SendMsg(IvyApplication::AddRegexp, regexp_id, buffer2 );
- }
- return regexp_id++;
-}
-
-void Ivy::UnbindMsg(int id)
-{
- regexp_out[ id ] = "";
- callbacks[ id ] = NULL;
- /* send to already connected */
- IvyApplicationList::iterator iter;
- for ( iter = applications.begin() ; iter != applications.end() ; ++iter )
- {
- IvyApplication *app = *iter;
- app->SendMsg(IvyApplication::DelRegexp, id, "" );
- }
-
-}
-
-void Ivy::BindDirectMsg(IvyDirectMessageCallback *callback)
-{
-direct_callback = callback;
-}
-
-unsigned int Ivy::GetApplicationPort()
-{
- return applicationPort;
-}
-
-void Ivy::AddApplication(IvyApplication *app)
-{
- EnterCriticalSection( &m_application_cs );
- // Check for disconnected Application
- IvyApplicationList::iterator iter;
- for ( iter = applications.begin() ; iter != applications.end() ; )
- {
- IvyApplication *disc_app = *iter++;
- if ( disc_app->m_hSocket == INVALID_SOCKET )
- {
- applications.remove( disc_app );
- delete disc_app;
- }
- }
- applications.push_back( app );
- LeaveCriticalSection( &m_application_cs );
- SendSubscriptions( app );
-}
-void Ivy::RemoveApplication(IvyApplication * app)
-{
- /// OLD NOT called because of deallocation PB
- // the real remove is done at arrival of a new Application
- // or at the bus Stop
- TRACE( "Ivy::RemoveApplication %lu\n", app );
- if ( app )
- {
-
- EnterCriticalSection( &m_application_cs );
- applications.remove( app );
- LeaveCriticalSection( &m_application_cs );
- delete app;
- }
-}
-
-void Ivy::SendSubscriptions(IvyApplication *app)
-{
- app->SendMsg( IvyApplication::StartRegexp, GetApplicationPort(), ApplicationName.c_str());
- for ( unsigned int id = 0 ; id < regexp_out.size(); id++ )
- {
- const ivy::string& regexp = regexp_out[id];
- if ( !regexp.empty() )
- app->SendMsg( IvyApplication::AddRegexp, id, regexp.c_str());
- }
- app->SendMsg( IvyApplication::EndRegexp, 0);
-
-}
-
-
-int Ivy::SendMsg(const char * message, ... )
-{
- int count = 0;
- char buffer[4096];
- va_list args;
-
- va_start( args, message ); /* Initialize variable arguments. */
- _vsnprintf_s( buffer, sizeof(buffer), sizeof(buffer)-1, message, args );
- va_end( args);
- /* send to already connected */
- IvyApplicationList::iterator iter;
- for ( iter = applications.begin() ; iter != applications.end() ; ++iter )
- {
- IvyApplication *app = *iter;
- count += app->SendMsg( buffer );
- }
- return count;
-}
-void Ivy::SendDieMsg( IvyApplication *app )
-{
- app->SendMsg( IvyApplication::Die, 0 );
-}
-IvyApplication * Ivy::GetApplication(const char *name)
-{
- IvyApplication *app = NULL;
- EnterCriticalSection( &m_application_cs );
- IvyApplicationList::iterator iter;
- for ( iter = applications.begin() ; iter != applications.end() ; )
- {
- IvyApplication *ap = *iter++;
- if ( (ap->m_hSocket != INVALID_SOCKET) && ap->appname == name )
- {
- app = ap;
- break; // dont return because of LeaveCriticalSection !!!
- }
- }
- LeaveCriticalSection( &m_application_cs );
- return app;
-}
-
-
-void Ivy::CallMessageCallback(IvyApplication *app, int id, int argc, const char ** argv)
-{
- IvyMessageCallback *callback;
- callback = callbacks[ id ];
- if ( callback )
- {
- callback->OnMessage( app, argc, argv );
- }
-}
-
-void Ivy::CallDirectMessageCallback(IvyApplication *app, int id, const char *arg)
-{
- if ( direct_callback )
- {
- direct_callback->OnDirectMessage( app, id, arg );
- }
-}
-
-bool Ivy::CallDieCallback(IvyApplication *app, int id, const char *arg)
-{
- if ( die_callback )
- {
- return die_callback->OnDie( app, id, arg );
- }
- return TRUE;
-}
-
-void Ivy::CallApplicationConnectedCallback(IvyApplication * app)
-{
- if ( application_callback )
- {
- application_callback->OnApplicationConnected( app );
- }
-}
-void Ivy::CallApplicationDisconnectedCallback(IvyApplication * app)
-{
- if ( application_callback )
- {
- application_callback->OnApplicationDisconnected( app );
- }
-}
-void Ivy::CallBindingAddCallback(IvyApplication * app, int id, const char * regexp)
-{
- if ( binding_callback )
- {
- binding_callback->OnAddBind( app, id, regexp );
- }
-}
-void Ivy::CallBindingRemoveCallback(IvyApplication * app, int id, const char * regexp)
-{
- if ( binding_callback )
- {
- binding_callback->OnRemoveBind( app, id, regexp );
- }
-}
-void Ivy::CallBindingFilterCallback(IvyApplication * app, int id, const char * regexp)
-{
- if ( binding_callback )
- {
- binding_callback->OnFilterBind( app, id, regexp );
- }
-}
-void Ivy::SendDirectMsg(IvyApplication * app, int id, const char *message)
-{
- app->SendMsg( IvyApplication::DirectMsg, id, message );
-}
-
-void Ivy::SetBindCallback( IvyBindingCallback* bind_callback )
-{
- binding_callback = synchronous ? new IvySynchronousBindingCallback(bind_callback) : bind_callback;
-}
-
-void Ivy::SetFilter(int argc, const char **argv )
-{
- IvyBinding::SetFilter(argc, argv );
-}
-
-bool Ivy::CheckConnected(IvyApplication * app)
-{
- if (app->remoteService == 0) /* old application dont check */
- return false;
- /* check to see if app already connected */
- IvyApplicationList::iterator iter;
- for ( iter = applications.begin() ; iter != applications.end() ; ++iter )
- {
- IvyApplication *application = *iter;
- if ( application != app && application->SameApplication(app))
- return true;
- }
- return false;
-}
-void Ivy::SubstituteInterval (const char *src, char *dst, size_t dst_len)
-{
-
- // pas de traitement couteux s'il n'y a rien à interpoler
- if (strstr (src, "(?I") == NULL) {
- strcpy (dst,src);
- return;
- } else {
- char *curPos;
- char *itvPos;
- char *dstPos = dst;
-
- curPos = (char *)src;
- while ((itvPos = strstr (curPos, "(?I")) != NULL) {
- // copie depuis la position courante jusqu'à l'intervalle
- int lenCp, min,max;
- char withDecimal;
- lenCp = itvPos-curPos;
- memcpy ( dstPos, curPos, lenCp);
- curPos=itvPos;
- dstPos += lenCp;
-
- // extraction des paramètres de l'intervalle
- sscanf (itvPos, "(?I%d#%d%c", &min, &max, &withDecimal);
-
- // printf ("DBG> substituteInterval min=%d max=%d withDecimal=%d\n",
- // min, max, (withDecimal != 'i'));
-
- // generation et copie de l'intervalle
- regexpGen (dstPos, dst_len-(dstPos-dst), min, max, (withDecimal != 'i'));
- dstPos = dst + strlen (dst);
-
- // consommation des caractères décrivant intervalle dans la chaine source
- curPos = strstr (curPos, ")");
- curPos++;
- }
- strncat (dstPos, curPos, dst_len-(dstPos-dst));
- }
-
-}
-
diff --git a/Bus/Ivy/Ivy.dsp b/Bus/Ivy/Ivy.dsp
deleted file mode 100644
index d36f170..0000000
--- a/Bus/Ivy/Ivy.dsp
+++ /dev/null
@@ -1,196 +0,0 @@
-# Microsoft Developer Studio Project File - Name="Ivy" - Package Owner=<4>
-# Microsoft Developer Studio Generated Build File, Format Version 6.00
-# ** DO NOT EDIT **
-
-# TARGTYPE "Win32 (x86) Dynamic-Link Library" 0x0102
-
-CFG=Ivy - Win32 Debug
-!MESSAGE This is not a valid makefile. To build this project using NMAKE,
-!MESSAGE use the Export Makefile command and run
-!MESSAGE
-!MESSAGE NMAKE /f "Ivy.mak".
-!MESSAGE
-!MESSAGE You can specify a configuration when running NMAKE
-!MESSAGE by defining the macro CFG on the command line. For example:
-!MESSAGE
-!MESSAGE NMAKE /f "Ivy.mak" CFG="Ivy - Win32 Debug"
-!MESSAGE
-!MESSAGE Possible choices for configuration are:
-!MESSAGE
-!MESSAGE "Ivy - Win32 Release" (based on "Win32 (x86) Dynamic-Link Library")
-!MESSAGE "Ivy - Win32 Debug" (based on "Win32 (x86) Dynamic-Link Library")
-!MESSAGE
-
-# Begin Project
-# PROP AllowPerConfigDependencies 0
-# PROP Scc_ProjName ""$/Ivy", NBEAAAAA"
-# PROP Scc_LocalPath "."
-CPP=xicl6.exe
-MTL=midl.exe
-RSC=rc.exe
-
-!IF "$(CFG)" == "Ivy - Win32 Release"
-
-# PROP BASE Use_MFC 0
-# PROP BASE Use_Debug_Libraries 0
-# PROP BASE Output_Dir "Release"
-# PROP BASE Intermediate_Dir "Release"
-# PROP BASE Target_Dir ""
-# PROP Use_MFC 0
-# PROP Use_Debug_Libraries 0
-# PROP Output_Dir "Release"
-# PROP Intermediate_Dir "Release"
-# PROP Ignore_Export_Lib 0
-# PROP Target_Dir ""
-# ADD BASE CPP /nologo /MT /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_WINDOWS" /D "_MBCS" /D "_USRDLL" /D "IVY_EXPORTS" /YX /FD /c
-# ADD CPP /nologo /MDd /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_WINDOWS" /D "_MBCS" /D "_USRDLL" /D "IVY_EXPORTS" /YX /FD /c
-# ADD BASE MTL /nologo /D "NDEBUG" /mktyplib203 /win32
-# ADD MTL /nologo /D "NDEBUG" /mktyplib203 /win32
-# ADD BASE RSC /l 0x40c /d "NDEBUG"
-# ADD RSC /l 0x40c /d "NDEBUG"
-BSC32=bscmake.exe
-# ADD BASE BSC32 /nologo
-# ADD BSC32 /nologo
-LINK32=xilink6.exe
-# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /dll /machine:I386
-# ADD LINK32 wsock32.lib ws2_32.lib user32.lib /nologo /dll /machine:I386
-
-!ELSEIF "$(CFG)" == "Ivy - Win32 Debug"
-
-# PROP BASE Use_MFC 0
-# PROP BASE Use_Debug_Libraries 1
-# PROP BASE Output_Dir "Debug"
-# PROP BASE Intermediate_Dir "Debug"
-# PROP BASE Target_Dir ""
-# PROP Use_MFC 0
-# PROP Use_Debug_Libraries 1
-# PROP Output_Dir "Debug"
-# PROP Intermediate_Dir "Debug"
-# PROP Ignore_Export_Lib 0
-# PROP Target_Dir ""
-# ADD BASE CPP /nologo /MTd /W3 /Gm /GX /ZI /Od /D "WIN32" /D "_DEBUG" /D "_WINDOWS" /D "_MBCS" /D "_USRDLL" /D "IVY_EXPORTS" /YX /FD /GZ /c
-# ADD CPP /nologo /MDd /W3 /Gm /Gi /GX /ZI /Od /D "WIN32" /D "_DEBUG" /D "_WINDOWS" /D "IVY_EXPORTS" /D "NO_IVY_DEBUG" /FR /Yu"stdafx.h" /FD /GZ /c
-# ADD BASE MTL /nologo /D "_DEBUG" /mktyplib203 /win32
-# ADD MTL /nologo /D "_DEBUG" /mktyplib203 /win32
-# ADD BASE RSC /l 0x40c /d "_DEBUG"
-# ADD RSC /l 0x40c /d "_DEBUG"
-BSC32=bscmake.exe
-# ADD BASE BSC32 /nologo
-# ADD BSC32 /nologo
-LINK32=xilink6.exe
-# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /dll /debug /machine:I386 /pdbtype:sept
-# ADD LINK32 wsock32.lib user32.lib /nologo /dll /profile /debug /machine:I386 /out:"c:\users\fcolin\Program Files\Debug\Ivy.dll"
-
-!ENDIF
-
-# Begin Target
-
-# Name "Ivy - Win32 Release"
-# Name "Ivy - Win32 Debug"
-# Begin Group "Source Files"
-
-# PROP Default_Filter "cpp;c;cxx;rc;def;r;odl;idl;hpj;bat"
-# Begin Source File
-
-SOURCE=.\BufferedSocket.cxx
-# End Source File
-# Begin Source File
-
-SOURCE=.\Ivy.cxx
-# End Source File
-# Begin Source File
-
-SOURCE=.\IvyApplication.cxx
-# End Source File
-# Begin Source File
-
-SOURCE=.\IvyCbindings.cxx
-# End Source File
-# Begin Source File
-
-SOURCE=.\IvyDllMain.cpp
-# End Source File
-# Begin Source File
-
-SOURCE=.\IvySynchroWnd.cxx
-# End Source File
-# Begin Source File
-
-SOURCE=.\IvyWatcher.cxx
-# End Source File
-# Begin Source File
-
-SOURCE=.\Regexp.cxx
-# End Source File
-# Begin Source File
-
-SOURCE=.\StdAfx.cpp
-
-!IF "$(CFG)" == "Ivy - Win32 Release"
-
-!ELSEIF "$(CFG)" == "Ivy - Win32 Debug"
-
-# ADD CPP /Yc"stdafx.h"
-
-!ENDIF
-
-# End Source File
-# Begin Source File
-
-SOURCE=.\ThreadedSocket.cxx
-# End Source File
-# End Group
-# Begin Group "Header Files"
-
-# PROP Default_Filter "h;hpp;hxx;hm;inl"
-# Begin Source File
-
-SOURCE=.\BufferedSocket.h
-# End Source File
-# Begin Source File
-
-SOURCE=.\DataTypes.h
-# End Source File
-# Begin Source File
-
-SOURCE=.\Ivy.h
-# End Source File
-# Begin Source File
-
-SOURCE=.\IvyApplication.h
-# End Source File
-# Begin Source File
-
-SOURCE=.\IvyCallback.h
-# End Source File
-# Begin Source File
-
-SOURCE=.\IvyCbindings.h
-# End Source File
-# Begin Source File
-
-SOURCE=.\IvySynchroWnd.h
-# End Source File
-# Begin Source File
-
-SOURCE=.\IvyWatcher.h
-# End Source File
-# Begin Source File
-
-SOURCE=.\Regexp.h
-# End Source File
-# Begin Source File
-
-SOURCE=.\StdAfx.h
-# End Source File
-# Begin Source File
-
-SOURCE=.\ThreadedSocket.h
-# End Source File
-# End Group
-# Begin Group "Resource Files"
-
-# PROP Default_Filter "ico;cur;bmp;dlg;rc2;rct;bin;rgs;gif;jpg;jpeg;jpe"
-# End Group
-# End Target
-# End Project
diff --git a/Bus/Ivy/Ivy.h b/Bus/Ivy/Ivy.h
deleted file mode 100644
index cf90bdd..0000000
--- a/Bus/Ivy/Ivy.h
+++ /dev/null
@@ -1,119 +0,0 @@
-// Ivy.h: interface for the Ivy class.
-//
-//////////////////////////////////////////////////////////////////////
-
-
-#pragma once
-#pragma warning(disable: 4251)
-
-#ifdef WIN32
-#ifdef IVY_EXPORTS
-class _declspec(dllexport) IvyWatcher;
-class _declspec(dllexport) IvyApplication;
-class _declspec(dllexport) Ivy;
-class _declspec(dllexport) CThreadedSocket;
-class _declspec(dllexport) CBufferedSocket;
-#else
-#pragma comment(lib,"Ivy.LIB" )
-class _declspec(dllimport) IvyWatcher;
-class _declspec(dllimport) IvyApplication;
-class _declspec(dllimport) Ivy;
-class _declspec(dllimport) CThreadedSocket;
-class _declspec(dllimport) CBufferedSocket;
-#endif
-#endif
-
-#ifdef IVY_USE_OWN_DATATYPES
-
-#include "DataTypes.h"
-
-#else
-
-#include <string>
-#include <list>
-#include <vector>
-#include <map>
-
-namespace ivy = std;
-
-#endif
-
-#include "IvyCallback.h"
-
-
-class Ivy
-{
- friend class IvyWatcher;
-
- friend class IvyApplication;
-
-private:
- int regexp_id;
- unsigned int applicationPort;
- void SendSubscriptions(IvyApplication *app);
- bool synchronous; // use Window Shink to made CB mono thread like
- IvyApplication * server;
- IvyWatcher * watcher;
- IvyDieCallback *die_callback;
- IvyDirectMessageCallback *direct_callback;
- IvyApplicationCallback *application_callback;
- IvyBindingCallback *binding_callback;
- /* list des adresses de broadcast */
- ivy::string domain;
- /* nom de l'appliction */
- ivy::string ApplicationName;
- /* Aplication Unique ID */
- ivy::string ApplicationID;
- /* liste des clients connectes */
- CRITICAL_SECTION m_application_cs;
- typedef ivy::list<IvyApplication*> IvyApplicationList;
- IvyApplicationList applications;
-
- /* liste des souscriptions locale a emettre aux autres applications */
- ivy::vector<ivy::string> regexp_out;
- /* liste des callbacks a appeler */
- ivy::vector< IvyMessageCallback* > callbacks;
-
-protected:
- void SubstituteInterval (const char *src, char *dst, size_t dst_len);
- void AddApplication( IvyApplication *app );
- void RemoveApplication( IvyApplication *app);
-
- bool CheckConnected( IvyApplication *app );
- void CallApplicationConnectedCallback( IvyApplication *app );
- void CallApplicationDisconnectedCallback( IvyApplication *app );
- void CallBindingAddCallback(IvyApplication * app, int id, const char * regexp);
- void CallBindingRemoveCallback(IvyApplication * app, int id, const char * regexp);
- void CallBindingFilterCallback(IvyApplication * app, int id, const char * regexp);
- bool CallDieCallback( IvyApplication *app, int id, const char *arg );
- void CallDirectMessageCallback( IvyApplication *app, int id, const char *arg );
- void CallMessageCallback( IvyApplication *app, int id, int argc, const char **argv );
-
- const char *GenApplicationUniqueIdentifier();
-
- /* message a emettre sur connection nouvelle application */
- ivy::string ready_message;
-
-public:
-
- void SetBindCallback( IvyBindingCallback* bind_callback );
- void SetFilter( int argc, const char **argv );
- void SendDieMsg( IvyApplication *app );
- IvyApplication *GetApplication(const char *name);
- void SendDirectMsg( IvyApplication *app, int id, const char *message);
- void BindDirectMsg( IvyDirectMessageCallback *callback );
- int SendMsg( const char *message, ... );
-
- const char *GetDomain(const char *domainlist);
- unsigned int GetApplicationPort();
- int BindMsg( const char *regexp, IvyMessageCallback *cb );
- int BindMsg( IvyMessageCallback *cb, const char *regexp, ... );
- void UnbindMsg( int id );
- Ivy( const char *name, const char* ready, IvyApplicationCallback *callback, bool Synchronous = true );
- void start(const char *domain);
- void stop();
- virtual ~Ivy();
-
-
-
-};
diff --git a/Bus/Ivy/Ivy.vcproj b/Bus/Ivy/Ivy.vcproj
deleted file mode 100644
index f9e983a..0000000
--- a/Bus/Ivy/Ivy.vcproj
+++ /dev/null
@@ -1,590 +0,0 @@
-<?xml version="1.0" encoding="Windows-1252"?>
-<VisualStudioProject
- ProjectType="Visual C++"
- Version="8,00"
- Name="Ivy"
- ProjectGUID="{9818D652-CC05-463E-880D-AFCA2C7BFABE}"
- RootNamespace="Ivy"
- SccProjectName="&quot;$/Bus/Ivy&quot;, QPEAAAAA"
- SccLocalPath="."
- SccProvider="MSSCCI:Microsoft Visual SourceSafe"
- >
- <Platforms>
- <Platform
- Name="Win32"
- />
- <Platform
- Name="x64"
- />
- </Platforms>
- <ToolFiles>
- </ToolFiles>
- <Configurations>
- <Configuration
- Name="Debug|Win32"
- OutputDirectory="$(SolutionDir)$(ConfigurationName)"
- IntermediateDirectory="$(ConfigurationName)"
- ConfigurationType="2"
- InheritedPropertySheets="$(VCInstallDir)VCProjectDefaults\UpgradeFromVC71.vsprops"
- UseOfMFC="0"
- ATLMinimizesCRunTimeLibraryUsage="false"
- >
- <Tool
- Name="VCPreBuildEventTool"
- />
- <Tool
- Name="VCCustomBuildTool"
- />
- <Tool
- Name="VCXMLDataGeneratorTool"
- />
- <Tool
- Name="VCWebServiceProxyGeneratorTool"
- />
- <Tool
- Name="VCMIDLTool"
- PreprocessorDefinitions="_DEBUG"
- MkTypLibCompatible="true"
- SuppressStartupBanner="true"
- TargetEnvironment="1"
- TypeLibraryName=".\Debug/Ivy.tlb"
- />
- <Tool
- Name="VCCLCompilerTool"
- AdditionalOptions=""
- Optimization="0"
- AdditionalIncludeDirectories="&quot;..\..\..\pcre-6.4&quot;"
- PreprocessorDefinitions="WIN32;_DEBUG;_WINDOWS;IVY_EXPORTS;NO_IVY_DEBUG"
- BasicRuntimeChecks="3"
- RuntimeLibrary="3"
- BufferSecurityCheck="true"
- UsePrecompiledHeader="2"
- PrecompiledHeaderThrough="IvyStdAfx.h"
- BrowseInformation="1"
- WarningLevel="3"
- SuppressStartupBanner="true"
- Detect64BitPortabilityProblems="true"
- DebugInformationFormat="4"
- />
- <Tool
- Name="VCManagedResourceCompilerTool"
- />
- <Tool
- Name="VCResourceCompilerTool"
- PreprocessorDefinitions="_DEBUG"
- Culture="1036"
- />
- <Tool
- Name="VCPreLinkEventTool"
- />
- <Tool
- Name="VCLinkerTool"
- AdditionalDependencies="wsock32.lib"
- LinkIncremental="2"
- SuppressStartupBanner="true"
- AdditionalLibraryDirectories=""
- GenerateDebugInformation="true"
- />
- <Tool
- Name="VCALinkTool"
- />
- <Tool
- Name="VCManifestTool"
- />
- <Tool
- Name="VCXDCMakeTool"
- />
- <Tool
- Name="VCBscMakeTool"
- />
- <Tool
- Name="VCFxCopTool"
- />
- <Tool
- Name="VCAppVerifierTool"
- />
- <Tool
- Name="VCWebDeploymentTool"
- />
- <Tool
- Name="VCPostBuildEventTool"
- Description="Copying libraries, headers &amp; dll&apos;s..."
- CommandLine="rem copy &quot;$(TargetDir)$(TargetName).dll&quot; &quot;C:\users\fcolin\Program Files\$(OutDir)&quot;&#x0D;&#x0A;rem copy &quot;$(TargetDir)$(TargetName).lib&quot; &quot;C:\users\fcolin\Program Files\lib\$(OutDir)&quot;&#x0D;&#x0A;rem copy Ivy.h &quot;C:\users\fcolin\Program Files\Include\&quot;&#x0D;&#x0A;rem copy IvyApplication.h &quot;C:\users\fcolin\Program Files\Include\&quot;&#x0D;&#x0A;rem copy IvyCallback.h &quot;C:\users\fcolin\Program Files\Include\&quot;&#x0D;&#x0A;rem copy BufferedSocket.h &quot;C:\users\fcolin\Program Files\Include\&quot;&#x0D;&#x0A;rem copy ThreadedSocket.h &quot;C:\users\fcolin\Program Files\Include\&quot;&#x0D;&#x0A;rem copy DataTypes.h &quot;C:\users\fcolin\Program Files\Include\&quot;&#x0D;&#x0A;"
- />
- </Configuration>
- <Configuration
- Name="Debug|x64"
- OutputDirectory="$(SolutionDir)$(PlatformName)\$(ConfigurationName)"
- IntermediateDirectory="$(PlatformName)\$(ConfigurationName)"
- ConfigurationType="2"
- InheritedPropertySheets="$(VCInstallDir)VCProjectDefaults\UpgradeFromVC71.vsprops"
- UseOfMFC="0"
- ATLMinimizesCRunTimeLibraryUsage="false"
- >
- <Tool
- Name="VCPreBuildEventTool"
- />
- <Tool
- Name="VCCustomBuildTool"
- />
- <Tool
- Name="VCXMLDataGeneratorTool"
- />
- <Tool
- Name="VCWebServiceProxyGeneratorTool"
- />
- <Tool
- Name="VCMIDLTool"
- PreprocessorDefinitions="_DEBUG"
- MkTypLibCompatible="true"
- SuppressStartupBanner="true"
- TargetEnvironment="3"
- TypeLibraryName=".\Debug/Ivy.tlb"
- />
- <Tool
- Name="VCCLCompilerTool"
- AdditionalOptions=""
- Optimization="0"
- AdditionalIncludeDirectories="&quot;..\..\..\pcre-6.4&quot;"
- PreprocessorDefinitions="WIN32;_DEBUG;_WINDOWS;IVY_EXPORTS;NO_IVY_DEBUG"
- BasicRuntimeChecks="3"
- RuntimeLibrary="3"
- BufferSecurityCheck="true"
- UsePrecompiledHeader="2"
- PrecompiledHeaderThrough="IvyStdAfx.h"
- BrowseInformation="1"
- WarningLevel="3"
- SuppressStartupBanner="true"
- Detect64BitPortabilityProblems="true"
- DebugInformationFormat="3"
- />
- <Tool
- Name="VCManagedResourceCompilerTool"
- />
- <Tool
- Name="VCResourceCompilerTool"
- PreprocessorDefinitions="_DEBUG"
- Culture="1036"
- />
- <Tool
- Name="VCPreLinkEventTool"
- />
- <Tool
- Name="VCLinkerTool"
- AdditionalDependencies="wsock32.lib"
- SuppressStartupBanner="true"
- AdditionalLibraryDirectories=""
- GenerateDebugInformation="true"
- />
- <Tool
- Name="VCALinkTool"
- />
- <Tool
- Name="VCManifestTool"
- />
- <Tool
- Name="VCXDCMakeTool"
- />
- <Tool
- Name="VCBscMakeTool"
- />
- <Tool
- Name="VCFxCopTool"
- Rules="-Microsoft.Design#CA1012;-Microsoft.Design#CA2210;-Microsoft.Design#CA1040;-Microsoft.Design#CA1005;-Microsoft.Design#CA1020;-Microsoft.Design#CA1021;-Microsoft.Design#CA1010;-Microsoft.Design#CA1011;-Microsoft.Design#CA1009;-Microsoft.Design#CA1050;-Microsoft.Design#CA1026;-Microsoft.Design#CA1019;-Microsoft.Design#CA1031;-Microsoft.Design#CA1047;-Microsoft.Design#CA1000;-Microsoft.Design#CA1048;-Microsoft.Design#CA1051;-Microsoft.Design#CA1002;-Microsoft.Design#CA1061;-Microsoft.Design#CA1006;-Microsoft.Design#CA1046;-Microsoft.Design#CA1045;-Microsoft.Design#CA1038;-Microsoft.Design#CA1008;-Microsoft.Design#CA1028;-Microsoft.Design#CA1004;-Microsoft.Design#CA1035;-Microsoft.Design#CA1063;-Microsoft.Design#CA1032;-Microsoft.Design#CA1023;-Microsoft.Design#CA1033;-Microsoft.Design#CA1039;-Microsoft.Design#CA1016;-Microsoft.Design#CA1014;-Microsoft.Design#CA1017;-Microsoft.Design#CA1018;-Microsoft.Design#CA1027;-Microsoft.Design#CA1059;-Microsoft.Design#CA1060;-Microsoft.Design#CA1034;-Microsoft.Design#CA1013;-Microsoft.Design#CA1036;-Microsoft.Design#CA1044;-Microsoft.Design#CA1041;-Microsoft.Design#CA1025;-Microsoft.Design#CA1052;-Microsoft.Design#CA1053;-Microsoft.Design#CA1057;-Microsoft.Design#CA1058;-Microsoft.Design#CA1001;-Microsoft.Design#CA1049;-Microsoft.Design#CA1054;-Microsoft.Design#CA1056;-Microsoft.Design#CA1055;-Microsoft.Design#CA1030;-Microsoft.Design#CA1003;-Microsoft.Design#CA1007;-Microsoft.Design#CA1043;-Microsoft.Design#CA1024;-Microsoft.Design#CA1062;-Microsoft.Globalization#CA1301;-Microsoft.Globalization#CA1302;-Microsoft.Globalization#CA1303;-Microsoft.Globalization#CA1306;-Microsoft.Globalization#CA1304;-Microsoft.Globalization#CA1305;-Microsoft.Globalization#CA1300;-Microsoft.Mobility#CA1600;-Microsoft.Mobility#CA1601;-Microsoft.Naming#CA1718;-Microsoft.Naming#CA1720;-Microsoft.Naming#CA1700;-Microsoft.Naming#CA1712;-Microsoft.Naming#CA1713;-Microsoft.Naming#CA1709;-Microsoft.Naming#CA1708;-Microsoft.Naming#CA1715;-Microsoft.Naming#CA1710;-Microsoft.Naming#CA1707;-Microsoft.Naming#CA1722;-Microsoft.Naming#CA1711;-Microsoft.Naming#CA1716;-Microsoft.Naming#CA1705;-Microsoft.Naming#CA1725;-Microsoft.Naming#CA1719;-Microsoft.Naming#CA1721;-Microsoft.Naming#CA1706;-Microsoft.Naming#CA1724;-Microsoft.Naming#CA1726;-Microsoft.Usage#CA2209;-Microsoft.Usage#CA2236;-Microsoft.Usage#CA2227;-Microsoft.Usage#CA2213;-Microsoft.Usage#CA2216;-Microsoft.Usage#CA2215;-Microsoft.Usage#CA2214;-Microsoft.Usage#CA2222;-Microsoft.Usage#CA2202;-Microsoft.Usage#CA1806;-Microsoft.Usage#CA2217;-Microsoft.Usage#CA2212;-Microsoft.Usage#CA2219;-Microsoft.Usage#CA2201;-Microsoft.Usage#CA2228;-Microsoft.Usage#CA2221;-Microsoft.Usage#CA2220;-Microsoft.Usage#CA2240;-Microsoft.Usage#CA2229;-Microsoft.Usage#CA2238;-Microsoft.Usage#CA2207;-Microsoft.Usage#CA2208;-Microsoft.Usage#CA2235;-Microsoft.Usage#CA2237;-Microsoft.Usage#CA2232;-Microsoft.Usage#CA2223;-Microsoft.Usage#CA2211;-Microsoft.Usage#CA2233;-Microsoft.Usage#CA2225;-Microsoft.Usage#CA2226;-Microsoft.Usage#CA2231;-Microsoft.Usage#CA2224;-Microsoft.Usage#CA2218;-Microsoft.Usage#CA2234;-Microsoft.Usage#CA2241;-Microsoft.Usage#CA2239;-Microsoft.Usage#CA2200;-Microsoft.Usage#CA1801;-Microsoft.Usage#CA2205;-Microsoft.Usage#CA2230"
- />
- <Tool
- Name="VCAppVerifierTool"
- />
- <Tool
- Name="VCWebDeploymentTool"
- />
- <Tool
- Name="VCPostBuildEventTool"
- CommandLine=""
- />
- </Configuration>
- <Configuration
- Name="Release|Win32"
- OutputDirectory="$(SolutionDir)$(ConfigurationName)"
- IntermediateDirectory="$(ConfigurationName)"
- ConfigurationType="2"
- InheritedPropertySheets="$(VCInstallDir)VCProjectDefaults\UpgradeFromVC71.vsprops"
- UseOfMFC="0"
- ATLMinimizesCRunTimeLibraryUsage="false"
- CharacterSet="0"
- >
- <Tool
- Name="VCPreBuildEventTool"
- />
- <Tool
- Name="VCCustomBuildTool"
- />
- <Tool
- Name="VCXMLDataGeneratorTool"
- />
- <Tool
- Name="VCWebServiceProxyGeneratorTool"
- />
- <Tool
- Name="VCMIDLTool"
- PreprocessorDefinitions="NDEBUG"
- MkTypLibCompatible="true"
- SuppressStartupBanner="true"
- TargetEnvironment="1"
- TypeLibraryName=".\Release/Ivy.tlb"
- />
- <Tool
- Name="VCCLCompilerTool"
- AdditionalOptions=""
- InlineFunctionExpansion="1"
- AdditionalIncludeDirectories="&quot;..\..\..\pcre-6.4&quot;"
- PreprocessorDefinitions="WIN32;_WINDOWS;_USRDLL;IVY_EXPORTS"
- StringPooling="true"
- RuntimeLibrary="2"
- EnableFunctionLevelLinking="true"
- UsePrecompiledHeader="2"
- PrecompiledHeaderThrough="IvyStdAfx.h"
- WarningLevel="3"
- SuppressStartupBanner="true"
- />
- <Tool
- Name="VCManagedResourceCompilerTool"
- />
- <Tool
- Name="VCResourceCompilerTool"
- PreprocessorDefinitions="NDEBUG"
- Culture="1036"
- />
- <Tool
- Name="VCPreLinkEventTool"
- />
- <Tool
- Name="VCLinkerTool"
- AdditionalDependencies="wsock32.lib"
- LinkIncremental="1"
- SuppressStartupBanner="true"
- AdditionalLibraryDirectories=""
- />
- <Tool
- Name="VCALinkTool"
- />
- <Tool
- Name="VCManifestTool"
- />
- <Tool
- Name="VCXDCMakeTool"
- />
- <Tool
- Name="VCBscMakeTool"
- />
- <Tool
- Name="VCFxCopTool"
- />
- <Tool
- Name="VCAppVerifierTool"
- />
- <Tool
- Name="VCWebDeploymentTool"
- />
- <Tool
- Name="VCPostBuildEventTool"
- CommandLine=""
- />
- </Configuration>
- <Configuration
- Name="Release|x64"
- OutputDirectory="$(SolutionDir)$(PlatformName)\$(ConfigurationName)"
- IntermediateDirectory="$(PlatformName)\$(ConfigurationName)"
- ConfigurationType="2"
- InheritedPropertySheets="$(VCInstallDir)VCProjectDefaults\UpgradeFromVC71.vsprops"
- UseOfMFC="0"
- ATLMinimizesCRunTimeLibraryUsage="false"
- CharacterSet="0"
- >
- <Tool
- Name="VCPreBuildEventTool"
- />
- <Tool
- Name="VCCustomBuildTool"
- />
- <Tool
- Name="VCXMLDataGeneratorTool"
- />
- <Tool
- Name="VCWebServiceProxyGeneratorTool"
- />
- <Tool
- Name="VCMIDLTool"
- PreprocessorDefinitions="NDEBUG"
- MkTypLibCompatible="true"
- SuppressStartupBanner="true"
- TargetEnvironment="3"
- TypeLibraryName=".\Release/Ivy.tlb"
- />
- <Tool
- Name="VCCLCompilerTool"
- AdditionalOptions=""
- InlineFunctionExpansion="1"
- AdditionalIncludeDirectories="&quot;..\..\..\pcre-6.4&quot;"
- PreprocessorDefinitions="WIN32;_WINDOWS;_USRDLL;IVY_EXPORTS"
- StringPooling="true"
- RuntimeLibrary="2"
- EnableFunctionLevelLinking="true"
- UsePrecompiledHeader="2"
- PrecompiledHeaderThrough="IvyStdAfx.h"
- WarningLevel="3"
- SuppressStartupBanner="true"
- Detect64BitPortabilityProblems="true"
- />
- <Tool
- Name="VCManagedResourceCompilerTool"
- />
- <Tool
- Name="VCResourceCompilerTool"
- PreprocessorDefinitions="NDEBUG"
- Culture="1036"
- />
- <Tool
- Name="VCPreLinkEventTool"
- />
- <Tool
- Name="VCLinkerTool"
- AdditionalDependencies="wsock32.lib"
- LinkIncremental="1"
- SuppressStartupBanner="true"
- AdditionalLibraryDirectories=""
- TargetMachine="17"
- />
- <Tool
- Name="VCALinkTool"
- />
- <Tool
- Name="VCManifestTool"
- />
- <Tool
- Name="VCXDCMakeTool"
- />
- <Tool
- Name="VCBscMakeTool"
- />
- <Tool
- Name="VCFxCopTool"
- />
- <Tool
- Name="VCAppVerifierTool"
- />
- <Tool
- Name="VCWebDeploymentTool"
- />
- <Tool
- Name="VCPostBuildEventTool"
- CommandLine=""
- />
- </Configuration>
- </Configurations>
- <References>
- <ProjectReference
- ReferencedProjectIdentifier="{D79FC143-498E-4342-B2C7-BDAD1B8D0E6B}"
- RelativePathToProject="..\..\pcre\pcre.vcproj"
- />
- </References>
- <Files>
- <Filter
- Name="Source Files"
- Filter="cpp;c;cxx;rc;def;r;odl;idl;hpj;bat"
- >
- <File
- RelativePath=".\BufferedSocket.cxx"
- >
- </File>
- <File
- RelativePath=".\intervalRegexp.c"
- >
- <FileConfiguration
- Name="Debug|Win32"
- >
- <Tool
- Name="VCCLCompilerTool"
- UsePrecompiledHeader="0"
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Debug|x64"
- >
- <Tool
- Name="VCCLCompilerTool"
- UsePrecompiledHeader="0"
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Release|Win32"
- >
- <Tool
- Name="VCCLCompilerTool"
- UsePrecompiledHeader="0"
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Release|x64"
- >
- <Tool
- Name="VCCLCompilerTool"
- UsePrecompiledHeader="0"
- />
- </FileConfiguration>
- </File>
- <File
- RelativePath=".\Ivy.cxx"
- >
- </File>
- <File
- RelativePath=".\IvyApplication.cxx"
- >
- </File>
- <File
- RelativePath=".\IvyBinding.cxx"
- >
- </File>
- <File
- RelativePath=".\IvyCbindings.cxx"
- >
- </File>
- <File
- RelativePath=".\IvyDllMain.cpp"
- >
- </File>
- <File
- RelativePath=".\IvyStdAfx.cpp"
- >
- <FileConfiguration
- Name="Debug|Win32"
- >
- <Tool
- Name="VCCLCompilerTool"
- UsePrecompiledHeader="1"
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Debug|x64"
- >
- <Tool
- Name="VCCLCompilerTool"
- UsePrecompiledHeader="1"
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Release|Win32"
- >
- <Tool
- Name="VCCLCompilerTool"
- UsePrecompiledHeader="1"
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Release|x64"
- >
- <Tool
- Name="VCCLCompilerTool"
- UsePrecompiledHeader="1"
- />
- </FileConfiguration>
- </File>
- <File
- RelativePath=".\IvySynchroWnd.cxx"
- >
- </File>
- <File
- RelativePath=".\IvyWatcher.cxx"
- >
- </File>
- <File
- RelativePath=".\Regexp.cxx"
- >
- </File>
- <File
- RelativePath=".\ThreadedSocket.cxx"
- >
- <FileConfiguration
- Name="Release|Win32"
- >
- <Tool
- Name="VCCLCompilerTool"
- UsePrecompiledHeader="2"
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Release|x64"
- >
- <Tool
- Name="VCCLCompilerTool"
- UsePrecompiledHeader="2"
- />
- </FileConfiguration>
- </File>
- </Filter>
- <Filter
- Name="Header Files"
- Filter="h;hpp;hxx;hm;inl"
- >
- <File
- RelativePath=".\BufferedSocket.h"
- >
- </File>
- <File
- RelativePath=".\DataTypes.h"
- >
- </File>
- <File
- RelativePath=".\intervalRegexp.h"
- >
- </File>
- <File
- RelativePath=".\Ivy.h"
- >
- </File>
- <File
- RelativePath=".\IvyApplication.h"
- >
- </File>
- <File
- RelativePath=".\IvyBinding.h"
- >
- </File>
- <File
- RelativePath=".\IvyCallback.h"
- >
- </File>
- <File
- RelativePath=".\IvyCbindings.h"
- >
- </File>
- <File
- RelativePath=".\IvyStdAfx.h"
- >
- </File>
- <File
- RelativePath=".\IvySynchroWnd.h"
- >
- </File>
- <File
- RelativePath=".\IvyWatcher.h"
- >
- </File>
- <File
- RelativePath=".\Regexp.h"
- >
- </File>
- <File
- RelativePath=".\ThreadedSocket.h"
- >
- </File>
- </Filter>
- <Filter
- Name="Resource Files"
- Filter="ico;cur;bmp;dlg;rc2;rct;bin;rgs;gif;jpg;jpeg;jpe"
- >
- </Filter>
- </Files>
- <Globals>
- </Globals>
-</VisualStudioProject>
diff --git a/Bus/Ivy/Ivy.vcproj.vspscc b/Bus/Ivy/Ivy.vcproj.vspscc
deleted file mode 100644
index 794f014..0000000
--- a/Bus/Ivy/Ivy.vcproj.vspscc
+++ /dev/null
@@ -1,10 +0,0 @@
-""
-{
-"FILE_VERSION" = "9237"
-"ENLISTMENT_CHOICE" = "NEVER"
-"PROJECT_FILE_RELATIVE_PATH" = ""
-"NUMBER_OF_EXCLUDED_FILES" = "0"
-"ORIGINAL_PROJECT_FILE_PATH" = ""
-"NUMBER_OF_NESTED_PROJECTS" = "0"
-"SOURCE_CONTROL_SETTINGS_PROVIDER" = "PROJECT"
-}
diff --git a/Bus/Ivy/IvyApplication.cxx b/Bus/Ivy/IvyApplication.cxx
deleted file mode 100644
index 07f37be..0000000
--- a/Bus/Ivy/IvyApplication.cxx
+++ /dev/null
@@ -1,375 +0,0 @@
-// IvyApplication.cpp : implementation file
-//
-
-#include "IvyStdAfx.h"
-
-#include "IvyApplication.h"
-#include "IvyBinding.h"
-
-
-//#define IVY_DEBUG
-
-#define ARG_START 2
-#define ARG_END 3
-
-static char * firstArg( char *s, const char separator )
-{
- char *ptr = s;
-
- while ( *ptr && *ptr != separator )
- ptr++;
- if ( *ptr == separator )
- return ptr++ ;
- else return NULL;
-}
-/*
-function like strok but do not eat consecutive separator
-*/
-static char * nextArg( char **s, const char separator )
-{
- char *start = *s;
- char *end = *s;
-
- while ( *end && *end != separator )
- end++;
- if ( *end == separator ) *end++ = '\0';
- if ( end == start ) return NULL;
- *s = end;
- return start;
-}
-/////////////////////////////////////////////////////////////////////////////
-// IvyApplication
-
-IvyApplication::IvyApplication(Ivy * bus)
-{
- this->bus = bus;
- remoteService = 0; /* unknown or unconnected application */
- appname = "Unknown";
- AppConnectedCallbackCalled = false;
-}
-
-IvyApplication::~IvyApplication()
-{
-// bus->RemoveApplication( this );
- for ( Bindings::iterator iter = regexp_in.begin( ); iter != regexp_in.end( ); iter++ )
- delete iter->second;
- regexp_in.clear();
- if ( m_hSocket != INVALID_SOCKET )
- Close();
-}
-
-
-/////////////////////////////////////////////////////////////////////////////
-// IvyApplication member functions
-
-
-void IvyApplication::Create(const char* host, UINT & port, const char* name)
-{
- appname = name;
- // Exception to catch
- CBufferedSocket::Create();
- Connect(host, port);
-}
-
-
-
-UINT IvyApplication::Create()
-{
- ivy::string host;
- UINT port;
- CBufferedSocket::Create();
- // Max Listen Connexion
- Listen( SOMAXCONN );
- GetSockName( host, port );
- TRACE(" TCP %s:%d\n", host.c_str(), port );
-#ifdef IVY_DEBUG
- TRACE( "IvyApplication::Create server socket %d\n", m_hSocket );
-#endif
- return port;
-}
-
-void IvyApplication::OnReceive(char * line)
-{
- int err;
- unsigned int id;
- int kind_of_msg = Bye;
- char *arg;
- int argc = 0;
- char *arg_ptr;
- static const int max_subexp = 200;
- const char *argv[max_subexp];
-
- IvyBinding *exp;
- int erroffset;
- const char *errmsg;
-
-#ifdef IVY_DEBUG
- TRACE("Receive %s\n",line);
-#endif //IVY_DEBUG
-
- err = sscanf_s( line ,"%d %d", &kind_of_msg, &id);
- arg = firstArg( line , ARG_START );
- if ( (err != 2) || (arg == NULL) )
- {
- TRACE("Quitting bad format %s\n", line);
- SendMsg(Error, Error, "bad format request expected 'type id ...'");
-// bus->RemoveApplication( this );
- Close();
- return;
- }
- arg++;
- switch( kind_of_msg )
- {
- case Bye:
-
-#ifdef IVY_DEBUG
- TRACE("Quitting %s\n", line);
-#endif //IVY_DEBUG
-
-// bus->RemoveApplication( this );
- OnClose(0);
- //Close();
- break;
- case Error:
-
-#ifdef IVY_DEBUG
- TRACE("Receive error %d %s\n", id, arg);
-#endif //IVY_DEBUG
-
- break;
- case AddRegexp:
-
-#ifdef IVY_DEBUG
- TRACE("Regexp id=%d exp='%s'\n", id, arg);
-#endif //IVY_DEBUG
-
- if ( !IvyBinding::Filter( arg ) )
- {
-#ifdef IVY_DEBUG
- TRACE("Warning exp='%s' can't match removing from %s\n",arg,appname.c_str());
-#endif //IVY_DEBUG
- bus->CallBindingFilterCallback( this, id, arg );
- return;
- }
- exp = new IvyBinding();
- if ( !exp->Compile(arg, &erroffset, &errmsg ) )
- {
- ivy::string errstr( "Error can't compile regexp '" );
- errstr += arg;
- errstr += "' error ";
- errstr += errmsg;
- SendMsg( Error, Error, errstr.c_str() );
- TRACE("IvyApplication %s\n",errstr.c_str());
- delete exp;
- return;
- }
-
- /*if ( regexp_in.size() < (id + 1) )
- {
- regexp_in.resize( id + 1 );
- regexp_str_in.resize( id + 1 );
- }*/
- regexp_in[ id ] = exp;
- regexp_str_in[ id ] = arg;
-#ifdef IVY_DEBUG
- TRACE("Adding regexp[%d]='%s' size: %d\n",id,arg,regexp_in.size());
-#endif //IVY_DEBUG
- bus->CallBindingAddCallback( this, id, arg );
- break;
- case DelRegexp:
-
-#ifdef IVY_DEBUG
- TRACE("Regexp Delete id=%d\n", id);
-#endif //IVY_DEBUG
- if ( regexp_in[id] )
- {
- exp = regexp_in[ id ];
- bus->CallBindingRemoveCallback( this, id, regexp_str_in[id].c_str() );
-
- delete exp;
- regexp_in[ id ] = NULL;
- }
- break;
- case StartRegexp:
-
-#ifdef IVY_DEBUG
- TRACE("Regexp Start id=%d\n", id);
-#endif //IVY_DEBUG
-
- appname = arg;
- /* remote socket port */
- remoteService = id;
- if ( bus->CheckConnected( this ) )
- {
- TRACE("Quitting already connected %s\n", appname.c_str());
- SendMsg( Error, Error, "already connected" );
-// bus->RemoveApplication( this );
- Close();
- }
- break;
- case EndRegexp:
-
-#ifdef IVY_DEBUG
- TRACE("Regexp End id=%d\n", id);
-#endif //IVY_DEBUG
-
- bus->CallApplicationConnectedCallback( this );
- AppConnectedCallbackCalled = true;
- if ( !bus->ready_message.empty() )
- SendMsg( bus->ready_message.c_str() );
- break;
- case Msg:
-
-#ifdef IVY_DEBUG
- TRACE("Message id=%d msg='%s'\n", id, arg);
-#endif //IVY_DEBUG
-
- arg_ptr = arg;
- arg = nextArg( &arg_ptr, ARG_END);
- while ( arg )
- {
- argv[argc++] = arg;
- arg = nextArg( &arg_ptr, ARG_END );
- }
- bus->CallMessageCallback( this, id, argc, argv );
- break;
- case DirectMsg:
-
-#ifdef IVY_DEBUG
- TRACE("Direct Message id=%d msg='%s'\n", id, arg);
-#endif //IVY_DEBUG
-
- bus->CallDirectMessageCallback( this, id, arg );
- break;
- case Die:
-
-#ifdef IVY_DEBUG
- TRACE("Die Message id=%d msg='%s'\n", id, arg);
-#endif //IVY_DEBUG
-
- if ( bus->CallDieCallback( this, id, arg ) )
- {
- PostMessage( NULL, WM_CLOSE, 0, 0);
- exit(-1);
- }
- break;
- case Ping:
-#ifdef IVY_DEBUG
- TRACE("Ping Message\n");
-#endif //IVY_DEBUG
- this->SendMsg( Pong, 0, "beurk" );
- break;
-
- case Pong:
-#ifdef IVY_DEBUG
- TRACE("Pong Message\n");
-#endif //IVY_DEBUG
- TRACE("Receive unhandled Pong message (ivy-c++ not able to send ping)\n");
- break;
-
- default:
- TRACE("Receive unhandled message %s\n", line);
- break;
- }
-}
-
-
-void IvyApplication::SendMsg(MsgType msg, int id, const char * arg)
-{
- char buffer[1024];
- if ( arg )
- _snprintf_s( buffer, sizeof( buffer ),sizeof( buffer )-1, "%d %d%c%s\n", msg, id, ARG_START, arg );
- else sprintf_s( buffer,sizeof( buffer ), "%d %d%c\n", msg, id, ARG_START);
-
-#ifdef IVY_DEBUG
- TRACE("SendMsg %s\n",buffer);
-#endif //IVY_DEBUG
- Send( buffer );
-}
-
-void IvyApplication::OnAccept(int nErrorCode)
-{
- ivy::string remotehost;
- UINT remoteport;
-
- // construct a new, empty socket
-
- IvyApplication *newapp = new IvyApplication(bus);
-
- // accept connection
-
- Accept( *newapp );
- newapp->GetPeerName( remotehost, remoteport );
- TRACE("Connexion de %s:%u\n", remotehost.c_str(), remoteport );
- bus->AddApplication( newapp );
-}
-
-void IvyApplication::OnClose(int nErrorCode)
-{
- ivy::string remotehost;
- UINT remoteport;
- GetPeerName( remotehost, remoteport );
- TRACE("Deconnexion de %s:%u\n", remotehost.c_str(), remoteport );
- if ( AppConnectedCallbackCalled )
- bus->CallApplicationDisconnectedCallback( this );
-
- for ( Bindings::iterator iter = regexp_in.begin( ); iter != regexp_in.end( ); iter++)
- delete iter->second;
- regexp_in.clear();
- Close();
- //bus->RemoveApplication( this );
-}
-
-int IvyApplication::SendMsg(const char *message)
-{
- int count = 0;
- IvyBinding *exp;
-
- /* send to already connected */
- for ( Bindings::iterator iter = regexp_in.begin( ); iter != regexp_in.end( ); iter++ )
- {
- exp = iter->second;
- if ( !exp )
- continue;
- int match_count = exp->Exec( message );
- if ( match_count > 0 )
- {
- ivy::string buffer;
- int arglen;
- const char *arg;
-
- for ( int j = 1; j < match_count; j++ )
- {
- exp->Match(message, j, &arglen, &arg);
- buffer += ivy::string(arg,arglen );
- buffer += ARG_END;
- }
- SendMsg( Msg, iter->first, buffer.c_str() );
- count++;
- }
-
- }
- return count;
-}
-
-const char *IvyApplication::GetName(void)
-{
-return appname.c_str();
-}
-
-
-BOOL IvyApplication::SameApplication(IvyApplication * app)
-{
- ivy::string host1;
- UINT port1;
- ivy::string host2;
- UINT port2;
- if ( (remoteService != 0) && (remoteService == app->remoteService) )
- {
- GetPeerName( host1, port1 );
- app->GetPeerName( host2, port2 );
- TRACE( "IvyApplication::SameApplication %s:%d %s:%d\n", host1.c_str(),port1, host2.c_str(),port2);
- return ( host1 == host2 );
- }
- return false;
-}
diff --git a/Bus/Ivy/IvyApplication.h b/Bus/Ivy/IvyApplication.h
deleted file mode 100644
index 7191400..0000000
--- a/Bus/Ivy/IvyApplication.h
+++ /dev/null
@@ -1,69 +0,0 @@
-
-#pragma once
-
-// IvyApplication.h : header file
-//
-#include "BufferedSocket.h"
-#include "Ivy.h"
-#include "IvyBinding.h"
-
-/////////////////////////////////////////////////////////////////////////////
-// IvyApplication command target
-
-class IvyApplication : public CBufferedSocket
-{
-// Attributes
-public:
-
-
- typedef enum {
-
- Bye, /* quit l'application ( non utilise ) */
- AddRegexp, /* expression reguliere d'un client */
- Msg, /* message reel */
- Error, /* error message */
- DelRegexp, /* Remove expression reguliere */
- EndRegexp, /* end of the regexp list */
- StartRegexp, /* debut des expressions */
- DirectMsg, /* message direct a destination de l'appli */
- Die, /* demande de terminaison de l'appli */
- Ping, /* message de controle ivy */
- Pong /* ivy doit renvoyer ce message à la reception d'un ping */
-
- }MsgType;
-
-
-// Operations
-public:
- IvyApplication(Ivy *bus);
- virtual ~IvyApplication();
-
-// Overrides
-public:
- BOOL SameApplication( IvyApplication *app );
- UINT remoteService;
- const char *GetName(void);
- inline Ivy *GetBus(void){ return bus;};
- int SendMsg( const char *message );
- void SendMsg( MsgType msg, int id, const char * arg = NULL);
- UINT Create();
- void OnReceive( char *line );
- void Create( const char * host, UINT &port, const char* name );
- virtual void OnAccept(int nErrorCode);
- virtual void OnClose(int nErrorCode);
-
-
-// Implementation
-protected:
- ivy::string appname;
- bool AppConnectedCallbackCalled;
- Ivy *bus;
- /* liste des souscriptions remote */
- /* en clair */
- ivy::map<int,ivy::string> regexp_str_in;
- /* compile */
- typedef ivy::map<int,IvyBinding *> Bindings;
- Bindings regexp_in;
-
- friend class Ivy;
-};
diff --git a/Bus/Ivy/IvyBinding.cxx b/Bus/Ivy/IvyBinding.cxx
deleted file mode 100644
index f3000fd..0000000
--- a/Bus/Ivy/IvyBinding.cxx
+++ /dev/null
@@ -1,189 +0,0 @@
-/*
- * Ivy, C++ interface
- *
- * Copyright (C) 1997-2000
- * Centre d'Études de la Navigation Aérienne
- *
- * Bind syntax for extracting message comtent
- * using regexp or other
- *
- * Authors: François-Régis Colin <fcolin@cena.fr>
- *
- * $Id: ivybind.c,v 1.9.2.7 2006/06/01 12:07:17 bustico Exp $
- *
- * Please refer to file version.h for the
- * copyright notice regarding this software
- */
-/* Module de gestion de la syntaxe des messages Ivy */
-#include "IvyStdAfx.h"
-
-#include "IvyBinding.h"
-
-static int err_offset;
-
-#ifdef USE_PCRE
- static const char *err_buf;
-#else /* we don't USE_PCRE */
- static char err_buf[4096];
-#endif /* USE_PCRE */
-
-/* classes de messages emis par l'application utilise pour le filtrage */
-static int messages_classes_count = 0;
-static const char **messages_classes = 0;
-/* regexp d'extraction du mot clef des regexp client pour le filtrage des regexp , ca va c'est clair ??? */
-static IvyBinding token_extract;
-
-IvyBinding::IvyBinding()
-{
-#ifdef USE_PCRE
- regexp = NULL;
- inspect = NULL;
-#else /* we don't USE_PCRE */
- free( regexp );
-#endif /* USE_PCRE */
- nb_match = 0;
-}
-IvyBinding::~IvyBinding()
-{
-#ifdef USE_PCRE
- if (inspect!=NULL)
- pcre_free(inspect);
- if (regexp!=NULL)
- pcre_free(regexp);
-#else /* we don't USE_PCRE */
- free( regexp );
-#endif /* USE_PCRE */
-}
-bool IvyBinding::Compile( const char * expression, int *erroffset, const char **errmessage )
-{
- bool compile = false;
-#ifdef USE_PCRE
- regexp = pcre_compile(expression, PCRE_CASELESS, &err_buf, &err_offset, NULL);
- if ( regexp != NULL )
- {
- this->inspect = pcre_study(regexp,0,&err_buf);
- if (err_buf!=NULL)
- {
- printf("Error studying %s, message: %s\n",expression,err_buf);
- }
- compile = true;
- }
- else
- {
- *erroffset = err_offset;
- *errmessage = err_buf;
- printf("Error compiling '%s', %s\n", expression, err_buf);
- }
-#else /* we don't USE_PCRE */
- regex_t regexp;
- int reg;
- reg = regcomp(&regexp, expression, REGCOMP_OPT|REG_EXTENDED);
- if ( reg == 0 )
- {
- this->next = NULL;
- }
- else
- {
- regerror (reg, &regexp, err_buf, sizeof(err_buf) );
- *erroffset = err_offset;
- *errmessage = err_buf;
- printf("Error compiling '%s', %s\n", expression, err_buf);
- }
-#endif /* USE_PCRE */
- return compile;
-}
-
-
-int IvyBinding::Exec( const char * message )
-{
-#ifdef USE_PCRE
-
- nb_match = pcre_exec(
- regexp,
- inspect,
- message,
- strlen(message),
- 0, /* debut */
- 0, /* no other regexp option */
- ovector,
- OVECSIZE);
- if (nb_match<1) return 0; /* no match */
-#else /* we don't USE_PCRE */
- memset( match, -1, sizeof(match )); /* work around bug !!!*/
- nb_match = regexec (&regexp, message, MAX_MSG_FIELDS, match, 0)
- if (nb_match == REG_NOMATCH)
- return 0;
- for ( index = 1; index < MAX_MSG_FIELDS; index++ )
- {
- if ( match[i].rm_so != -1 )
- nb_match++;
- }
-#endif /* USE_PCRE */
- return nb_match;
-}
-
-void IvyBinding::Match( const char *message, int argnum, int *arglen, const char **arg)
-{
-#ifdef USE_PCRE
-
- *arglen = ovector[2*argnum+1]- ovector[2*argnum];
- *arg = message + ovector[2*argnum];
-#else /* we don't USE_PCRE */
-
- regmatch_t* p;
-
- p = &match[argnum+1];
- if ( p->rm_so != -1 ) {
- *arglen = p->rm_eo - p->rm_so;
- *arg = message + p->rm_so;
- } else { // ARG VIDE
- *arglen = 0;
- *arg = NULL;
- }
-#endif /* USE_PCRE */
-
-}
-
-//filter Expression Bind
-void IvyBinding::SetFilter( int argc, const char **argv)
-{
- const char *errbuf;
- int erroffset;
-
- messages_classes_count = argc;
- messages_classes = argv;
- /* compile the token extraction regexp */
-
- if ( !token_extract.Compile("^\\^([a-zA-Z_0-9-]+).*", & erroffset, & errbuf) )
- {
- printf("Error compiling Token Extract regexp: %s\n", errbuf);
- }
-}
-
-int IvyBinding::Filter(const char *expression)
-{
- int i;
- int err;
- int regexp_ok = 1; /* accepte tout par default */
- int tokenlen;
- const char *token;
-
- if ( *expression =='^' && messages_classes_count !=0 )
- {
- regexp_ok = 0;
-
- /* extract token */
- err = token_extract.Exec( expression );
- if ( err < 1 ) return 1;
- token_extract.Match( expression , 1, &tokenlen, &token );
- for ( i = 0 ; i < messages_classes_count; i++ )
- {
- if (strncmp( messages_classes[i], token, tokenlen ) == 0) {
- return 1; }
- // else {
- //printf ("DBG> %s eliminé [%s]\n", token, expression);
- //}
- }
- }
- return regexp_ok;
-}
diff --git a/Bus/Ivy/IvyBinding.h b/Bus/Ivy/IvyBinding.h
deleted file mode 100644
index 44a87ee..0000000
--- a/Bus/Ivy/IvyBinding.h
+++ /dev/null
@@ -1,58 +0,0 @@
-/*
- * Ivy, C interface
- *
- * Copyright (C) 1997-2006
- * Centre d'Études de la Navigation Aérienne
- *
- * Bind syntax for extracting message comtent
- * using regexp or other
- *
- * Authors: François-Régis Colin <fcolin@cena.fr>
- *
- * $Id: ivybind.h,v 1.5.2.3 2006/04/21 15:51:55 fcolin Exp $
- *
- * Please refer to file version.h for the
- * copyright notice regarding this software
- */
-/* Module de gestion de la syntaxe des messages Ivy */
-#pragma once
-
-#define USE_PCRE
-
-#ifdef USE_PCRE
-#define OVECSIZE 60 /* must be multiple of 3, for regexp return */
-#include <pcre.h>
-#else /* we don't USE_PCRE */
-#define MAX_MSG_FIELDS 200
-#include "Regex.h"
-#endif /* USE_PCRE */
-
-class IvyBinding
-{
-public:
- /* Creation, Compilation */
- IvyBinding();
- ~IvyBinding();
-
- /* Mise en place des Filtrages */
- static void SetFilter( int argc, const char ** argv );
- static int Filter( const char *expression );
-
- /* Creation, Compilation */
- bool Compile( const char *expression, int *erroffset, const char **errmessage );
- /* Execution , extraction */
- int Exec( const char * message );
- void Match( const char *message, int argnum, int *arglen, const char **arg );
-
-private:
-#ifdef USE_PCRE
- pcre *regexp;
- pcre_extra *inspect;
- int nb_match;
- int ovector[OVECSIZE];
-#else /* we don't USE_PCRE */
- regex_t regexp; /* la regexp sous forme machine */
- regmatch_t match[MAX_MSG_FIELDS+1]; /* resultat du match */
-#endif /* USE_PCRE */
-
-}; \ No newline at end of file
diff --git a/Bus/Ivy/IvyCallback.h b/Bus/Ivy/IvyCallback.h
deleted file mode 100644
index ede0ef4..0000000
--- a/Bus/Ivy/IvyCallback.h
+++ /dev/null
@@ -1,180 +0,0 @@
-// IvyCallback.h : Interface for the IvyMessageCallback Class
-// : Interface for the IvyDirectMessageCallback Class
-// : Interface for the IvyApplicationCallback Class
-//
-
-
-#pragma once
-
-class IvyApplication;
-
-/* Callback for the normal bus Message */
-
-class IvyMessageCallback {
-public:
- virtual void OnMessage (IvyApplication *app, int argc, const char **argv )=0;
- virtual ~IvyMessageCallback()
- {
- }
-};
-class IvyMessageCallbackFunction: public IvyMessageCallback {
-public:
- typedef void ( *IvyMessageCallback_fun )( IvyApplication *app, void *user_data, int argc, const char **argv );
- IvyMessageCallback_fun MessageCb;
- void *data;
-
-public:
- IvyMessageCallbackFunction ( IvyMessageCallback_fun m_cb, void *udata = NULL ) : MessageCb( m_cb )
- {
- data = udata;
- }
- ~IvyMessageCallbackFunction ()
- {
- }
- void OnMessage (IvyApplication *app, int argc, const char **argv)
- {
- (*MessageCb) (app, data, argc, argv);
- }
-/* raccourci d'ecriture */
-#define BUS_CALLBACK( m , d ) new IvyMessageCallbackFunction( m, d )
-};
-/* template Class Callback for the normal bus Message */
-template <class T> class IvyMessageCallbackOf : public IvyMessageCallback {
-
-protected:
- T* Object;
- typedef void ( T::*IvyMessageCallback_fun )( IvyApplication *app, int argc, const char **argv );
- IvyMessageCallback_fun MessageCb;
-
-public:
- IvyMessageCallbackOf ( T* o, IvyMessageCallback_fun m_cb ) : Object (o), MessageCb( m_cb )
- {
- }
- ~IvyMessageCallbackOf ()
- {
- }
- void OnMessage (IvyApplication *app, int argc, const char **argv)
- {
- (Object->*MessageCb) (app, argc, argv);
- }
-/* raccourci d'ecriture */
-#define BUS_CALLBACK_OF( cl, m ) new IvyMessageCallbackOf<cl>( this, &cl::m )
-};
-/* Callback for the direct Message */
-class IvyDirectMessageCallback {
-public:
- virtual void OnDirectMessage (IvyApplication *app, int id, const char *arg ) = 0;
-};
-
-/* Application Callback */
-
-class IvyApplicationCallback {
-public:
- virtual void OnApplicationConnected (IvyApplication *app) = 0;
- virtual void OnApplicationDisconnected (IvyApplication *app) = 0;
- virtual ~IvyApplicationCallback()
- {
- }
-};
-class IvyApplicationNullCallback : public IvyApplicationCallback {
-public:
- virtual void OnApplicationConnected (IvyApplication *app)
- {};
- virtual void OnApplicationDisconnected (IvyApplication *app)
- {};
- virtual ~IvyApplicationNullCallback()
- {
- }
-};
-// Static function CB
-class IvyApplicationCallbackFunction: public IvyApplicationCallback {
-public:
- typedef void ( *IvyApplicationCallback_fun )( IvyApplication *app );
- IvyApplicationCallback_fun ApplicationConnectedCb;
- IvyApplicationCallback_fun ApplicationDisconnectedCb;
-
-public:
- IvyApplicationCallbackFunction ( IvyApplicationCallback_fun con_cb, IvyApplicationCallback_fun disc_cb)
- : ApplicationConnectedCb( con_cb ), ApplicationDisconnectedCb( disc_cb )
- {
- }
- ~IvyApplicationCallbackFunction ()
- {
- }
- virtual void OnApplicationConnected (IvyApplication *app)
- {
- if ( ApplicationConnectedCb ) (*ApplicationConnectedCb) (app);
- };
- virtual void OnApplicationDisconnected (IvyApplication *app)
- {
- if ( ApplicationDisconnectedCb ) (*ApplicationDisconnectedCb) (app);
- };
-
-/* raccourci d'ecriture */
-#define BUS_APPLICATION_CALLBACK( conn, disconn ) new IvyApplicationCallbackFunction( conn, disconn )
-};
-
-/* Binding Callback */
-
-class IvyBindingCallback {
-public:
- virtual void OnAddBind (IvyApplication *app, int id, const char * regexp) = 0;
- virtual void OnRemoveBind (IvyApplication *app, int id, const char * regexp) = 0;
- virtual void OnFilterBind (IvyApplication *app, int id, const char * regexp) = 0;
- virtual ~IvyBindingCallback()
- {
- }
-};
-class IvyBindingNullCallback : public IvyBindingCallback {
-public:
- virtual void OnAddBind (IvyApplication *app, int id, const char * regexp)
- {};
- virtual void OnRemoveBind (IvyApplication *app, int id, const char * regexp)
- {};
- virtual void OnFilterBind (IvyApplication *app, int id, const char * regexp)
- {};
- virtual ~IvyBindingNullCallback()
- {
- }
-};
-// Static function CB
-class IvyBindingCallbackFunction: public IvyBindingCallback {
-public:
- typedef void ( *IvyBindingCallback_fun )( IvyApplication *app, int id, const char * regexp );
- IvyBindingCallback_fun BindingAddCb;
- IvyBindingCallback_fun BindingRemoveCb;
- IvyBindingCallback_fun BindingFilterCb;
-
-public:
- IvyBindingCallbackFunction ( IvyBindingCallback_fun add_cb, IvyBindingCallback_fun remove_cb, IvyBindingCallback_fun filter_cb )
- : BindingAddCb( add_cb ), BindingRemoveCb( remove_cb ), BindingFilterCb( filter_cb )
- {
- }
- ~IvyBindingCallbackFunction ()
- {
- }
- virtual void OnAddBind (IvyApplication *app, int id, const char * regexp)
- {
- if(BindingAddCb) (*BindingAddCb) (app, id, regexp);
- };
- virtual void OnRemoveBind (IvyApplication *app, int id, const char * regexp)
- {
- if (BindingRemoveCb) (*BindingRemoveCb) (app, id, regexp);
- };
- virtual void OnFilterBind (IvyApplication *app, int id, const char * regexp)
- {
- if(BindingFilterCb ) (*BindingFilterCb) (app, id, regexp);
- };
-
-/* raccourci d'ecriture */
-#define BUS_BINDING_CALLBACK( add, remove, filter ) new IvyBindingCallbackFunction( add, remove, filter )
-};
-
-/* Callback for the die Message */
-class IvyDieCallback {
-public:
- virtual bool OnDie (IvyApplication *app, int id, const char *arg ) = 0;
- virtual ~IvyDieCallback()
- {
- }
-};
diff --git a/Bus/Ivy/IvyCbindings.cxx b/Bus/Ivy/IvyCbindings.cxx
deleted file mode 100644
index 8876bbf..0000000
--- a/Bus/Ivy/IvyCbindings.cxx
+++ /dev/null
@@ -1,129 +0,0 @@
-
-#include "IvyStdAfx.h"
-#include <stdarg.h>
-#include "Ivy.h"
-#include "IvyApplication.h"
-
-#include "IvyCbindings.h"
-
-static Ivy *bus = NULL;
-
-// application callback wrappers
-IvyCApplicationCallback app_cb = NULL;
-void * app_user_data = NULL;
-void app_conn( IvyApplication *app )
-{
- (*app_cb)(app, app_user_data, IvyApplicationConnected );
-}
-void app_discon( IvyApplication *app )
-{
- (*app_cb)(app, app_user_data, IvyApplicationDisconnected );
-}
-
-void IvyInit(
- const char *AppName, /* nom de l'application */
- const char *ready, /* ready Message peut etre NULL */
- IvyCApplicationCallback callback, /* callback appele sur connection deconnection d'une appli */
- void *data, /* user data passe au callback */
- IvyCDieCallback die_callback, /* last change callback before die */
- void *die_data ) /* user data */
-{
- bus = new Ivy(AppName, ready, BUS_APPLICATION_CALLBACK(app_conn,app_discon) );
-}
-/* filtrage des regexps */
-void IvySetFilter( int argc, const char **argv)
-{
- bus->SetFilter( argc, argv );
-}
-
-void IvyStart (const char* domain)
-{
- bus->start(domain);
-}
-void IvyStop ()
-{
- bus->stop();
-}
-
-/* query sur les applications connectees */
-const char *IvyGetApplicationName( IvyClientPtr app )
-{
- return ((IvyApplication*)app)->GetName();
-}
-const char *IvyGetApplicationHost( IvyClientPtr app )
-{
- ivy::string host;
- UINT port;
- ((IvyApplication*)app)->GetPeerName(host,port);
- return host.c_str();
-}
-IvyClientPtr IvyGetApplication( char *name )
-{
- return NULL;
-}
-const char *IvyGetApplicationList()
-{
- return "Not yiet implemented";
-}
-const char **IvyGetApplicationMessages( IvyClientPtr app)
-{
- return NULL;
-}
-
-MsgRcvPtr IvyBindMsg( IvyCMsgCallback callback, void *user_data, const char *fmt_regexp, ... )
-{
- int count;
- char buf_regexp[2048];
- va_list args;
- va_start( args, fmt_regexp );
- _vsnprintf_s( buf_regexp, sizeof(buf_regexp), sizeof(buf_regexp)-1, fmt_regexp, args );
- count = bus->BindMsg(buf_regexp, BUS_CALLBACK( ((IvyMessageCallbackFunction::IvyMessageCallback_fun)callback), user_data ) );
- va_end( args );
- return count;
-}
-void IvyUnbindMsg( MsgRcvPtr id )
-{
- bus->UnbindMsg( id );
-}
-
-/* emission d'un message d'erreur */
-void IvySendError( IvyClientPtr app, int id, const char *fmt, ... )
-{
- char buf[2048];
- va_list args;
- va_start( args, fmt );
- _vsnprintf_s( buf, sizeof(buf), sizeof(buf)-1, fmt, args );
- ((IvyApplication*)app)->SendMsg( IvyApplication::Error, id, buf );
- va_end( args );
-}
-
-/* emmission d'un message die pour terminer l'application */
-void IvySendDieMsg( IvyClientPtr app )
-{
- ((IvyApplication*)app)->SendMsg( IvyApplication::Die, 0 );
-}
-
-/* emission d'un message retourne le nb effectivement emis */
-
-int IvySendMsg( const char *fmt_message, ... )
-{
- int count;
- char buf[2048];
- va_list args;
- va_start( args, fmt_message );
- _vsnprintf_s( buf, sizeof(buf), sizeof(buf)-1, fmt_message, args );
- count = bus->SendMsg(buf);
- va_end( args );
- return count;
-}
-
-void IvyBindDirectMsg( IvyCMsgDirectCallback callback, void *user_data)
-{
-}
-void IvySendDirectMsg( IvyClientPtr app, int id, char *msg )
-{
-}
-void IvyMainLoop( void(*hook)(void) )
-{
- Sleep( INFINITE );
-}
diff --git a/Bus/Ivy/IvyCbindings.h b/Bus/Ivy/IvyCbindings.h
deleted file mode 100644
index 38ccfd6..0000000
--- a/Bus/Ivy/IvyCbindings.h
+++ /dev/null
@@ -1,108 +0,0 @@
-/*
- * Ivy, C interface
- *
- * Copyright (C) 1997-2000
- * Centre d'Études de la Navigation Aérienne
- *
- * Main functions
- *
- * Authors: François-Régis Colin <fcolin@cena.dgac.fr>
- * Stéphane Chatty <chatty@cena.dgac.fr>
- *
- * $Id: ivy.h,v 1.8 2000/08/07 11:29:29 sc Exp $
- *
- * Please refer to file version.h for the
- * copyright notice regarding this software
- */
-
-#ifndef IVY_C_BINDINGS_H
-#define IVY_C_BINDINGS_H
-
-
-#ifdef __cplusplus
-extern "C" {
-#endif
-
-#ifdef WIN32
-#ifdef IVY_EXPORTS
-#define DLL_EXPORT _declspec(dllexport)
-#else
-#pragma comment(lib,"Ivy.LIB" )
-#define DLL_EXPORT /*_declspec(dllimport)*/
-#endif
-#endif
-
-
-/* numero par default du bus */
-
-#define DEFAULT_BUS 2010
-
-typedef void * Channel ;
-typedef int TimerId;
-
-typedef void * IvyClientPtr;
-
-typedef enum { IvyApplicationConnected, IvyApplicationDisconnected } IvyApplicationEvent;
-
-extern void IvyDefaultApplicationCallback( IvyClientPtr app, void *user_data, IvyApplicationEvent evt ) ;
-
-/* callback callback appele sur connexion deconnexion d'une appli */
-typedef void (*IvyCApplicationCallback)( IvyClientPtr app, void *user_data, IvyApplicationEvent evt ) ;
-
-/* callback appele sur reception de die */
-typedef void (*IvyCDieCallback)( IvyClientPtr app, void *user_data, int id ) ;
-
-/* callback appele sur reception de messages normaux */
-typedef void (*IvyCMsgCallback)( IvyClientPtr app, void *user_data, int argc, const char **argv ) ;
-
-/* callback appele sur reception de messages directs */
-typedef void (*IvyCMsgDirectCallback)( IvyClientPtr app, void *user_data, int id, char *msg ) ;
-
-/* identifiant d'une expression reguliere ( Bind/Unbind ) */
-typedef int MsgRcvPtr;
-
-/* filtrage des regexps */
-DLL_EXPORT void IvyClasses( int argc, const char **argv);
-
-DLL_EXPORT void IvyInit(
- const char *AppName, /* nom de l'application */
- const char *ready, /* ready Message peut etre NULL */
- IvyCApplicationCallback callback, /* callback appele sur connection deconnection d'une appli */
- void *data, /* user data passe au callback */
- IvyCDieCallback die_callback, /* last change callback before die */
- void *die_data ); /* user data */
-
-DLL_EXPORT void IvyStart (const char*);
-DLL_EXPORT void IvyStop ();
-
-/* query sur les applications connectees */
-DLL_EXPORT const char *IvyGetApplicationName( IvyClientPtr app );
-DLL_EXPORT const char *IvyGetApplicationHost( IvyClientPtr app );
-DLL_EXPORT IvyClientPtr IvyGetApplication( char *name );
-DLL_EXPORT const char *IvyGetApplicationList();
-DLL_EXPORT const char **IvyGetApplicationMessages( IvyClientPtr app); /* demande de reception d'un message */
-
-DLL_EXPORT MsgRcvPtr IvyBindMsg( IvyCMsgCallback callback, void *user_data, const char *fmt_regexp, ... ); /* avec sprintf prealable */
-DLL_EXPORT void IvyUnbindMsg( MsgRcvPtr id );
-
-/* emission d'un message d'erreur */
-DLL_EXPORT void IvySendError( IvyClientPtr app, int id, const char *fmt, ... );
-
-/* emmission d'un message die pour terminer l'application */
-DLL_EXPORT void IvySendDieMsg( IvyClientPtr app );
-
-/* emission d'un message retourne le nb effectivement emis */
-
-DLL_EXPORT int IvySendMsg( const char *fmt_message, ... ); /* avec sprintf prealable */
-
-/* Message Direct Inter-application */
-
-DLL_EXPORT void IvyBindDirectMsg( IvyCMsgDirectCallback callback, void *user_data);
-DLL_EXPORT void IvySendDirectMsg( IvyClientPtr app, int id, char *msg );
-DLL_EXPORT void IvyMainLoop( void(*hook)(void) );
-
-#ifdef __cplusplus
-}
-#endif
-
-#endif
diff --git a/Bus/Ivy/IvyDllMain.cpp b/Bus/Ivy/IvyDllMain.cpp
deleted file mode 100644
index e8c13f4..0000000
--- a/Bus/Ivy/IvyDllMain.cpp
+++ /dev/null
@@ -1,42 +0,0 @@
-// libIvy.cpp : Defines the initialization routines for the DLL.
-//
-
-#include "IvyStdAfx.h"
-
-BOOL APIENTRY DllMain(HANDLE hInstance,
- DWORD dwReason,
- LPVOID lpReserved)
-{
- // Remove this if you use lpReserved
- UNREFERENCED_PARAMETER(lpReserved);
-
- if (dwReason == DLL_PROCESS_ATTACH)
- {
- TRACE("IVY.DLL Initializing!\n");
-
- // Extension DLL one-time initialization
-
- WORD wVersionRequested;
- WSADATA wsaData;
- int err;
-
- wVersionRequested = MAKEWORD( 2, 0 );
-
- err = WSAStartup( wVersionRequested, &wsaData );
- if ( err != 0 ) {
- /* Tell the user that we could not find a usable */
- /* WinSock DLL. */
- return 0;
- }
-
-
-
- }
- else if (dwReason == DLL_PROCESS_DETACH)
- {
- TRACE("IVY.DLL Terminating!\n");
- // Terminate the library before destructors are called
- WSACleanup();
- }
- return 1; // ok
-}
diff --git a/Bus/Ivy/IvyLib/IvyLib.vdproj b/Bus/Ivy/IvyLib/IvyLib.vdproj
deleted file mode 100644
index e8a78e1..0000000
--- a/Bus/Ivy/IvyLib/IvyLib.vdproj
+++ /dev/null
@@ -1,264 +0,0 @@
-"DeployProject"
-{
-"VSVersion" = "3:800"
-"ProjectType" = "8:{06A35CCD-C46D-44D5-987B-CF40FF872267}"
-"IsWebType" = "8:FALSE"
-"ProjectName" = "8:InstallIvyLib"
-"LanguageId" = "3:1033"
-"CodePage" = "3:1252"
-"UILanguageId" = "3:1033"
-"SccProjectName" = "8:SAK"
-"SccLocalPath" = "8:SAK"
-"SccAuxPath" = "8:SAK"
-"SccProvider" = "8:SAK"
- "Hierarchy"
- {
- "Entry"
- {
- "MsmKey" = "8:_66D910CBB02B47569794CF954A72E057"
- "OwnerKey" = "8:_UNDEFINED"
- "MsmSig" = "8:_UNDEFINED"
- }
- "Entry"
- {
- "MsmKey" = "8:_DE30DB02DD7494AFFBB32B50F67B491E"
- "OwnerKey" = "8:_66D910CBB02B47569794CF954A72E057"
- "MsmSig" = "8:_UNDEFINED"
- }
- "Entry"
- {
- "MsmKey" = "8:_EF9BC5D6F4274E54867D4FB7F7A33653"
- "OwnerKey" = "8:_UNDEFINED"
- "MsmSig" = "8:_UNDEFINED"
- }
- }
- "Configurations"
- {
- "Debug"
- {
- "DisplayName" = "8:Debug"
- "IsDebugOnly" = "11:TRUE"
- "IsReleaseOnly" = "11:FALSE"
- "OutputFilename" = "8:Debug\\IvyLib.msm"
- "PackageFilesAs" = "3:2"
- "PackageFileSize" = "3:-2147483648"
- "CabType" = "3:1"
- "Compression" = "3:2"
- "SignOutput" = "11:FALSE"
- "CertificateFile" = "8:"
- "PrivateKeyFile" = "8:"
- "TimeStampServer" = "8:"
- "InstallerBootstrapper" = "3:1"
- "BootstrapperCfg:{63ACBE69-63AA-4F98-B2B6-99F9E24495F2}"
- {
- "Enabled" = "11:FALSE"
- "PromptEnabled" = "11:TRUE"
- "PrerequisitesLocation" = "2:1"
- "Url" = "8:"
- "ComponentsUrl" = "8:"
- "Items"
- {
- }
- }
- }
- "Release"
- {
- "DisplayName" = "8:Release"
- "IsDebugOnly" = "11:FALSE"
- "IsReleaseOnly" = "11:TRUE"
- "OutputFilename" = "8:Release\\IvyLib.msm"
- "PackageFilesAs" = "3:2"
- "PackageFileSize" = "3:-2147483648"
- "CabType" = "3:1"
- "Compression" = "3:2"
- "SignOutput" = "11:FALSE"
- "CertificateFile" = "8:"
- "PrivateKeyFile" = "8:"
- "TimeStampServer" = "8:"
- "InstallerBootstrapper" = "3:1"
- "BootstrapperCfg:{63ACBE69-63AA-4F98-B2B6-99F9E24495F2}"
- {
- "Enabled" = "11:FALSE"
- "PromptEnabled" = "11:TRUE"
- "PrerequisitesLocation" = "2:1"
- "Url" = "8:"
- "ComponentsUrl" = "8:"
- "Items"
- {
- }
- }
- }
- }
- "Deployable"
- {
- "CustomAction"
- {
- }
- "DefaultFeature"
- {
- "Name" = "8:DefaultFeature"
- "Title" = "8:"
- "Description" = "8:"
- }
- "File"
- {
- "{1FB2D0AE-D3B9-43D4-B9DD-F88EC61E35DE}:_DE30DB02DD7494AFFBB32B50F67B491E"
- {
- "SourcePath" = "8:WSOCK32.dll"
- "TargetName" = "8:WSOCK32.dll"
- "Tag" = "8:"
- "Folder" = "8:_E128D81775304F09A5707F244264031A"
- "Condition" = "8:"
- "Transitive" = "11:FALSE"
- "Vital" = "11:TRUE"
- "ReadOnly" = "11:FALSE"
- "Hidden" = "11:FALSE"
- "System" = "11:FALSE"
- "Permanent" = "11:FALSE"
- "SharedLegacy" = "11:FALSE"
- "PackageAs" = "3:1"
- "Register" = "3:1"
- "Exclude" = "11:TRUE"
- "IsDependency" = "11:TRUE"
- "IsolateTo" = "8:"
- }
- }
- "FileType"
- {
- }
- "Folder"
- {
- "{F4FE1E22-A4D2-4EE8-9259-29A1CE8BB2FF}:_E128D81775304F09A5707F244264031A"
- {
- "DefaultLocation" = "8:[TARGETDIR]"
- "DisplayName" = "8:Module Retargetable Folder"
- "Description" = "8:"
- "Name" = "8:Module Retargetable Folder"
- "AlwaysCreate" = "11:FALSE"
- "Condition" = "8:"
- "Transitive" = "11:TRUE"
- "Property" = "8:NEWRETARGETABLEPROPERTY1"
- "Folders"
- {
- }
- }
- }
- "Sequences"
- {
- }
- "MergeModule"
- {
- }
- "Module"
- {
- "ModuleSignature" = "8:MergeModule.B704211C29924E868D1D16832CA83D91"
- "Version" = "8:1.0.0.0"
- "Title" = "8:IvyLib"
- "Subject" = "8:"
- "Author" = "8:DTI/SDER"
- "Keywords" = "8:Ivy"
- "Comments" = "8:"
- "SearchPath" = "8:"
- "UseSystemSearchPath" = "11:TRUE"
- "TargetPlatform" = "3:0"
- "PreBuildEvent" = "8:"
- "PostBuildEvent" = "8:\"$(ProjectDir)..\\..\\UpdateIvyWeb.bat\" \"$(BuiltOuputPath)\""
- "RunPostBuildEvent" = "3:0"
- }
- "ProjectOutput"
- {
- "{5259A561-127C-4D43-A0A1-72F10C7B3BF8}:_66D910CBB02B47569794CF954A72E057"
- {
- "SourcePath" = "8:..\\..\\release\\Ivy.dll"
- "TargetName" = "8:"
- "Tag" = "8:"
- "Folder" = "8:_E128D81775304F09A5707F244264031A"
- "Condition" = "8:"
- "Transitive" = "11:FALSE"
- "Vital" = "11:TRUE"
- "ReadOnly" = "11:FALSE"
- "Hidden" = "11:FALSE"
- "System" = "11:FALSE"
- "Permanent" = "11:FALSE"
- "SharedLegacy" = "11:FALSE"
- "PackageAs" = "3:1"
- "Register" = "3:1"
- "Exclude" = "11:FALSE"
- "IsDependency" = "11:FALSE"
- "IsolateTo" = "8:"
- "ProjectOutputGroupRegister" = "3:1"
- "OutputConfiguration" = "8:"
- "OutputGroupCanonicalName" = "8:Built"
- "OutputProjectGuid" = "8:{9BD87B7A-517E-4900-B3EA-A358885CD876}"
- "ShowKeyOutput" = "11:FALSE"
- "ExcludeFilters"
- {
- }
- }
- "{5259A561-127C-4D43-A0A1-72F10C7B3BF8}:_EF9BC5D6F4274E54867D4FB7F7A33653"
- {
- "SourcePath" = "8:..\\..\\release\\pcre.dll"
- "TargetName" = "8:"
- "Tag" = "8:"
- "Folder" = "8:_E128D81775304F09A5707F244264031A"
- "Condition" = "8:"
- "Transitive" = "11:FALSE"
- "Vital" = "11:TRUE"
- "ReadOnly" = "11:FALSE"
- "Hidden" = "11:FALSE"
- "System" = "11:FALSE"
- "Permanent" = "11:FALSE"
- "SharedLegacy" = "11:FALSE"
- "PackageAs" = "3:1"
- "Register" = "3:1"
- "Exclude" = "11:FALSE"
- "IsDependency" = "11:FALSE"
- "IsolateTo" = "8:"
- "ProjectOutputGroupRegister" = "3:1"
- "OutputConfiguration" = "8:"
- "OutputGroupCanonicalName" = "8:Built"
- "OutputProjectGuid" = "8:{D79FC143-498E-4342-B2C7-BDAD1B8D0E6B}"
- "ShowKeyOutput" = "11:FALSE"
- "ExcludeFilters"
- {
- }
- }
- }
- "Registry"
- {
- "HKLM"
- {
- "Keys"
- {
- }
- }
- "HKCU"
- {
- "Keys"
- {
- }
- }
- "HKCR"
- {
- "Keys"
- {
- }
- }
- "HKU"
- {
- "Keys"
- {
- }
- }
- "HKPU"
- {
- "Keys"
- {
- }
- }
- }
- "Shortcut"
- {
- }
- }
-}
diff --git a/Bus/Ivy/IvyLib/IvyLib.vdproj.vspscc b/Bus/Ivy/IvyLib/IvyLib.vdproj.vspscc
deleted file mode 100644
index 1cf11d0..0000000
--- a/Bus/Ivy/IvyLib/IvyLib.vdproj.vspscc
+++ /dev/null
@@ -1,10 +0,0 @@
-""
-{
-"FILE_VERSION" = "9237"
-"ENLISTMENT_CHOICE" = "NEVER"
-"PROJECT_FILE_RELATIVE_PATH" = "relative:Ivy\\IvyLib"
-"NUMBER_OF_EXCLUDED_FILES" = "0"
-"ORIGINAL_PROJECT_FILE_PATH" = ""
-"NUMBER_OF_NESTED_PROJECTS" = "0"
-"SOURCE_CONTROL_SETTINGS_PROVIDER" = "PROVIDER"
-}
diff --git a/Bus/Ivy/IvyStdAfx.cpp b/Bus/Ivy/IvyStdAfx.cpp
deleted file mode 100644
index 2fe8012..0000000
--- a/Bus/Ivy/IvyStdAfx.cpp
+++ /dev/null
@@ -1,27 +0,0 @@
-// stdafx.cpp : source file that includes just the standard includes
-// libIvy.pch will be the pre-compiled header
-// stdafx.obj will contain the pre-compiled type information
-
-#include "IvyStdAfx.h"
-
-#include <windows.h>
-
-void DebugTrace ( const char *fmt , ... )
-{
- char buffer[4096];
-#ifdef UNDER_CE
- TCHAR CEBuffer[4096];
-#endif
- va_list args;
-
- va_start( args, fmt );
- _vsnprintf_s( buffer, sizeof(buffer), sizeof(buffer)-1, fmt, args );
- va_end( args );
-#ifdef UNDER_CE
- MultiByteToWideChar( CP_ACP, MB_PRECOMPOSED, buffer, -1, CEBuffer, 4096 );
-
- OutputDebugString( CEBuffer );
-#else
- OutputDebugString( buffer );
-#endif
-}
diff --git a/Bus/Ivy/IvyStdAfx.h b/Bus/Ivy/IvyStdAfx.h
deleted file mode 100644
index 58a16bb..0000000
--- a/Bus/Ivy/IvyStdAfx.h
+++ /dev/null
@@ -1,91 +0,0 @@
-// stdafx.h : include file for standard system include files,
-// or project specific include files that are used frequently, but
-// are changed infrequently
-//
-
-#pragma once
-
-#if defined( WIN32 ) || defined( UNDER_CE )
-#pragma warning( disable : 4786 ) // identifier was truncated to '255' characters in the debug information
-#pragma warning( disable : 4275 ) // non dll-interface class 'X' used as base for dll-interface class 'Y'
-#pragma warning( disable : 4251 ) // 'm' : class 'X' needs to have dll-interface to be used by clients of class 'Y'
-
-#endif
-#include <winsock.h>
-
-#include <stdio.h>
-#include <stdarg.h>
-#include <stdlib.h>
-
-//#include <assert.h>
-#ifdef _WINSOCK2API_
-// Some definition missing from winsock2
-/*
- * Options for use with [gs]etsockopt at the IP level.
- */
-#define IP_OPTIONS 1 /* set/get IP per-packet options */
-#define IP_MULTICAST_IF 2 /* set/get IP multicast interface */
-#define IP_MULTICAST_TTL 3 /* set/get IP multicast timetolive */
-#define IP_MULTICAST_LOOP 4 /* set/get IP multicast loopback */
-#define IP_ADD_MEMBERSHIP 5 /* add an IP group membership */
-#define IP_DROP_MEMBERSHIP 6 /* drop an IP group membership */
-#define IP_TTL 7 /* set/get IP Time To Live */
-#define IP_TOS 8 /* set/get IP Type Of Service */
-#define IP_DONTFRAGMENT 9 /* set/get IP Don't Fragment flag */
-/*
- * Argument structure for IP_ADD_MEMBERSHIP and IP_DROP_MEMBERSHIP.
- */
-struct ip_mreq {
- struct in_addr imr_multiaddr; /* IP multicast address of group */
- struct in_addr imr_interface; /* local IP address of interface */
-};
-#endif
-
-#ifndef IN_CLASSD
-#define IN_CLASSD(i) (((long)(i) & 0xf0000000) == 0xe0000000)
-#endif
-
-#ifdef IVY_USE_OWN_DATATYPES
-
-#include "DataTypes.h"
-
-#else
-
-#include <string>
-#include <list>
-#include <vector>
-#include <map>
-
-namespace ivy = std;
-
-#endif
-
-
-#ifdef WIN32
-
-#ifndef TRACE
-void DebugTrace ( const char *fmt , ... );
-#define TRACE DebugTrace
-#endif
-
-#if defined(_WIN32_WCE)
-#undef ASSERT
-#endif // _WIN32_WCE
-
-#ifndef ASSERT
-#define ASSERT(expr) \
- do { \
- if (! (expr) ) \
- {\
- TRACE( "Assert (%s) failed in file %s at line %d\r\n", TEXT(#expr), __FILE__ , __LINE__ ); \
- DebugBreak(); \
- }\
- } while (0)
-#endif
-
-#else
-#include <assert.h>
-#define TRACE printf
-#define ASSERT(expr) assert( expr )
-#endif
-
diff --git a/Bus/Ivy/IvySynchroWnd.cxx b/Bus/Ivy/IvySynchroWnd.cxx
deleted file mode 100644
index 2109a61..0000000
--- a/Bus/Ivy/IvySynchroWnd.cxx
+++ /dev/null
@@ -1,243 +0,0 @@
-// SynchroWnd.cpp : implementation file
-//
-
-#include "IvyStdAfx.h"
-
-
-#include "IvySynchroWnd.h"
-
-
-#define WM_IVY_CB WM_USER + 1001
-
-
-IvySynchroWnd* IvySynchronousCallback::m_synchro = NULL;
-IvySynchroWnd* IvySynchroWnd::m_synchro = NULL;
-
-/////////////////////////////////////////////////////////////////////////////
-// IvySynchroWnd
-
-IvySynchroWnd::IvySynchroWnd()
-{
- m_hWnd = NULL;
- m_synchro = this;
-
- WNDCLASS wc;
-
- // Fill in the window class structure with parameters
- // that describe the main window.
-
- wc.style = 0; // noredraw if size changes
- wc.lpfnWndProc = WindowProc; // points to window procedure
- wc.cbClsExtra = 0; // no extra class memory
- wc.cbWndExtra = 0; // no extra window memory
- wc.hInstance = 0; // handle to instance
- wc.hIcon = NULL; // predefined app. icon
- wc.hCursor = NULL; // predefined arrow
- wc.hbrBackground = 0; // white background brush
- wc.lpszMenuName = NULL; // no menu
- wc.lpszClassName = TEXT("IvySynchroClass"); // name of window class
-
- // Register the window class.
-
- if ( ! RegisterClass(&wc) )
- {
- TRACE("Warning: unable to create Ivy Synchro notify window!\n");
- //AfxThrowResourceException();
- }
-
- // Create the syncrho window.
- m_hWnd = CreateWindowEx(0, TEXT("IvySynchroClass"), TEXT("Ivy Synchro Notification Sink"),
- WS_OVERLAPPED, 0, 0, 0, 0, NULL , NULL, NULL, NULL);
- if (!m_hWnd)
- {
- TRACE("Warning: unable to create Ivy Synchro notify window!\n");
- //AfxThrowResourceException();
- }
- InitializeCriticalSection( &m_CritSection );
-
-}
-IvySynchroWnd::~IvySynchroWnd()
-{
-}
-
-
-LRESULT CALLBACK IvySynchroWnd::WindowProc( HWND hwnd, UINT uMsg, WPARAM wParam, LPARAM lParam )
-{
- switch ( uMsg )
- {
- case WM_IVY_CB:
- m_synchro->OnIvyCB( wParam, lParam );
- break;
- //
- // Process other messages.
- //
-
- default:
- return DefWindowProc(hwnd, uMsg, wParam, lParam);
- }
- return 0;
-}
-
-
-
-
-/////////////////////////////////////////////////////////////////////////////
-// IvySynchroWnd message handlers
-
-
-LRESULT IvySynchroWnd::OnIvyCB(WPARAM wParam, LPARAM lParam)
-{
- IvySynchronousCallbackList::iterator iter;
- EnterCriticalSection( &m_CritSection );
-
- for ( iter = callbacklist.begin(); iter != callbacklist.end(); )
- {
- IvySynchronousCallback *param = *iter++;
- param->CallCallback();
- delete param;
- }
- callbacklist.clear();
- LeaveCriticalSection( &m_CritSection );
- return 0L;
-}
-void IvySynchroWnd::PostIvyCB( IvySynchronousCallback *cb )
-{
- EnterCriticalSection( &m_CritSection );
- if ( m_synchro->callbacklist.empty() )
- ASSERT(PostMessage(m_synchro->m_hWnd, WM_IVY_CB, 0, 0 ));
- m_synchro->callbacklist.push_back( cb );
- LeaveCriticalSection( &m_CritSection );
-}
-//
-//
-IvySynchronousMessageCallback::IvySynchronousMessageCallback( IvyMessageCallback *cb )
-{
- target = cb;
- app = 0;
- argc = 0;
- argv = 0;
-}
-IvySynchronousMessageCallback::~IvySynchronousMessageCallback()
-{
- //delete target;
- for( int i = 0; i < argc ; i++ )
- {
- delete argv[i];
- }
- if ( argv ) delete argv;
-}
-void IvySynchronousMessageCallback::OnMessage(IvyApplication *app, int argc, const char **argv )
-{
- static int msg_count = 0;
- // duplicate on the Message Queue
- IvySynchronousMessageCallback *param = new IvySynchronousMessageCallback(target);
- param->app = app;
- param->argc = argc;
- param->argv = new char*[argc];
- for( int i = 0; i < argc ; i++ )
- {
-#ifdef UNDER_CE
- param->argv[i] = _strdup( argv[i]);
-#else
- param->argv[i] = _strdup( argv[i]);
-#endif
- }
-// TRACE( "IvySynchronousMessageCallback::OnMessage msg count %d\n",wParam);
- m_synchro->PostIvyCB( param );
-
-}
-void IvySynchronousMessageCallback::CallCallback()
-{
- target->OnMessage( app, argc, (const char **) argv );
- for( int i = 0; i < argc ; i++ )
- delete argv[i];
- delete argv;
-}
-
-
-IvySynchronousApplicationCallback::IvySynchronousApplicationCallback( IvyApplicationCallback *cb )
-{
- target = cb;
-}
-void IvySynchronousApplicationCallback::OnApplicationConnected( IvyApplication *app)
-{
- // duplicate on the Message Queue
- IvySynchronousApplicationCallback *param = new IvySynchronousApplicationCallback(target);
- param->type = CONNECTED_CB;
- param->app = app;
- m_synchro->PostIvyCB( param );
-}
-
-void IvySynchronousApplicationCallback::OnApplicationDisconnected( IvyApplication *app)
-{
- // duplicate on the Message Queue
- IvySynchronousApplicationCallback *param = new IvySynchronousApplicationCallback(target);
- param->type = DISCONNECTED_CB;
- param->app = app;
- m_synchro->PostIvyCB( param );
-}
-void IvySynchronousApplicationCallback::CallCallback()
-{
- switch ( type )
- {
- case CONNECTED_CB:
- target->OnApplicationConnected( app );
- break;
- case DISCONNECTED_CB:
- target->OnApplicationDisconnected( app );
- break;
- }
-}
-
-
-IvySynchronousBindingCallback::IvySynchronousBindingCallback( IvyBindingCallback *cb )
-{
- target = cb;
-}
-void IvySynchronousBindingCallback::OnAddBind( IvyApplication *app, int id, const char *regexp)
-{
- // duplicate on the Message Queue
- IvySynchronousBindingCallback *param = new IvySynchronousBindingCallback(target);
- param->type = ADD_CB;
- param->app = app;
- param->id = id;
- param->regexp = _strdup(regexp);
- m_synchro->PostIvyCB( param );
-}
-
-void IvySynchronousBindingCallback::OnRemoveBind( IvyApplication *app, int id, const char *regexp)
-{
- // duplicate on the Message Queue
- IvySynchronousBindingCallback *param = new IvySynchronousBindingCallback(target);
- param->type = REMOVE_CB;
- param->app = app;
- param->id = id;
- param->regexp = _strdup(regexp);
- m_synchro->PostIvyCB( param );
-}
-void IvySynchronousBindingCallback::OnFilterBind( IvyApplication *app, int id, const char *regexp)
-{
- // duplicate on the Message Queue
- IvySynchronousBindingCallback *param = new IvySynchronousBindingCallback(target);
- param->type = FILTER_CB;
- param->app = app;
- param->id = id;
- param->regexp = _strdup(regexp);
- m_synchro->PostIvyCB( param );
-}
-void IvySynchronousBindingCallback::CallCallback()
-{
- switch ( type )
- {
- case ADD_CB:
- target->OnAddBind( app, id, regexp );
- break;
- case REMOVE_CB:
- target->OnRemoveBind( app, id, regexp );
- break;
- case FILTER_CB:
- target->OnFilterBind( app, id, regexp );
- break;
- }
- delete regexp;
-} \ No newline at end of file
diff --git a/Bus/Ivy/IvySynchroWnd.h b/Bus/Ivy/IvySynchroWnd.h
deleted file mode 100644
index ffa44ba..0000000
--- a/Bus/Ivy/IvySynchroWnd.h
+++ /dev/null
@@ -1,109 +0,0 @@
-//
-// SynchroWnd.h : header file
-//
-#pragma once
-/////////////////////////////////////////////////////////////////////////////
-// IvySynchroWnd window
-
-#include "IvyApplication.h"
-
-class IvySynchronousCallback;
-
-class IvySynchroWnd
-{
-// Construction
-public:
- IvySynchroWnd();
-
-// Attributes
-public:
-
-
-// Operations
-public:
- void PostIvyCB( IvySynchronousCallback *cb );
-
-// Implementation
-public:
- virtual ~IvySynchroWnd();
-protected:
- HWND m_hWnd;
-
-protected:
- // Unique instance of this class
- static IvySynchroWnd *m_synchro;
- // Generated message map functions
- static LRESULT CALLBACK WindowProc(
- HWND hwnd, // handle to window
- UINT uMsg, // message identifier
- WPARAM wParam, // first message parameter
- LPARAM lParam // second message parameter
- );
- // Buffer Emission
- CRITICAL_SECTION m_CritSection;
- typedef ivy::list<IvySynchronousCallback*> IvySynchronousCallbackList;
- IvySynchronousCallbackList callbacklist;
-
-protected:
-
- LRESULT OnIvyCB(WPARAM wParam, LPARAM lParam);
- friend class IvySynchronousMessageCallback;
- friend class IvySynchronousApplicationCallback;
-
-};
-class IvySynchronousCallback
-{
-protected:
- IvyApplication *app;
- static IvySynchroWnd *m_synchro;
- friend class Ivy;
-public:
- virtual void CallCallback() = 0;
-
-};
-class IvySynchronousMessageCallback: public IvySynchronousCallback, public IvyMessageCallback
-{
-public:
- IvySynchronousMessageCallback( IvyMessageCallback *cb );
- virtual ~IvySynchronousMessageCallback();
- virtual void CallCallback();
- virtual void OnMessage (IvyApplication *app, int argc, const char **argv );
-
-protected:
- IvyMessageCallback *target;
- int argc;
- char **argv;
-
- friend class IvySynchroWnd;
-};
-class IvySynchronousApplicationCallback: public IvySynchronousCallback, public IvyApplicationCallback
-{
-public:
- IvySynchronousApplicationCallback( IvyApplicationCallback *cb );
- virtual void CallCallback();
- virtual void OnApplicationConnected (IvyApplication *app);
- virtual void OnApplicationDisconnected (IvyApplication *app);
-protected:
- IvyApplicationCallback *target;
- typedef enum { CONNECTED_CB, DISCONNECTED_CB } CallbackType;
- CallbackType type;
-
- friend class IvySynchroWnd;
-};
-class IvySynchronousBindingCallback: public IvySynchronousCallback, public IvyBindingCallback
-{
-public:
- IvySynchronousBindingCallback( IvyBindingCallback *cb );
- virtual void CallCallback();
- virtual void OnAddBind (IvyApplication *app, int id, const char *regexp);
- virtual void OnRemoveBind (IvyApplication *app, int id, const char *regexp);
- virtual void OnFilterBind (IvyApplication *app, int id, const char *regexp);
-protected:
- IvyBindingCallback *target;
- typedef enum { ADD_CB, REMOVE_CB, FILTER_CB } CallbackType;
- CallbackType type;
- int id;
- const char *regexp;
-
- friend class IvySynchroWnd;
-};
diff --git a/Bus/Ivy/IvyWatcher.cxx b/Bus/Ivy/IvyWatcher.cxx
deleted file mode 100644
index 4cbf604..0000000
--- a/Bus/Ivy/IvyWatcher.cxx
+++ /dev/null
@@ -1,124 +0,0 @@
-// IvyWatcher.cpp : implementation file
-//
-
-#include "IvyStdAfx.h"
-
-
-#include "IvyWatcher.h"
-#include "IvyApplication.h"
-
-/////////////////////////////////////////////////////////////////////////////
-// IvyWatcher
-
-
-#define VERSION 3
-
-IvyWatcher::IvyWatcher(Ivy * bus)
-{
- this->bus = bus;
-}
-IvyWatcher::~IvyWatcher()
-{
-}
-
-
-
-/////////////////////////////////////////////////////////////////////////////
-// IvyWatcher member functions
-
-void IvyWatcher::OnReceive(int nErrorCode)
-{
- size_t err;
- int version;
- char buffer[2048];
- ivy::string remotehost;
- UINT remoteport;
- UINT serviceport;
- char appid[2048];
- char appname[2048];
-
- memset( appid, 0, sizeof( appid ) );
- memset( appname, 0, sizeof( appname ) );
-
- err = ReceiveFrom( buffer, sizeof(buffer), remotehost, remoteport );
- if ( err == SOCKET_ERROR )
- {
- TRACE("Receive Broadcast error %d\n",this->GetLastError());
- return;
- }
- if ( err < 255 ) buffer[err] ='\0';
- err = sscanf_s(buffer,"%d %u %s %[^\n]",&version, &serviceport,appid, sizeof(appid), appname,sizeof(appname));
- if ( err < 2 )
- {
- /* ignore the message */
- TRACE(" Bad Supervision message expected 'version port'\n");
- return;
- }
- if ( version != VERSION )
- {
- /* ignore the message */
- TRACE(" Bad Ivy verion number expected %d receive %d from %s:%d\n", VERSION,version, remotehost.c_str(), remoteport);
- return;
- }
- /* check if we received our own message. SHOULD ALSO TEST THE HOST */
- if ( strcmp( appid , bus->ApplicationID.c_str()) ==0 ) return;
-
- /* check if we receive our own message should test also the host */
- if ( serviceport == bus->GetApplicationPort() /*&& remotehost == "localhost"*/) return;
- TRACE(" Broadcast de %s:%u port %u\n", remotehost.c_str(), remoteport, serviceport );
-
- /* connect to the service and send the regexp */
- IvyApplication *newapp = new IvyApplication(bus);
- // exception to catch
- newapp->Create(remotehost.c_str(), serviceport, appname );
- // delete newapp;
- // return;
-
- bus->AddApplication( newapp );
- TRACE(" Connecting to %s:%u\n", remotehost.c_str(), serviceport );
-
-}
-
-void IvyWatcher::start(const char *domainlist)
-{
- BOOL reuse = TRUE;
- ivy::string domain;
- UINT port=0;
- // determine domain to use
- domain = bus->GetDomain( domainlist );
-
- // first find our UDP port
- size_t sep_index = domain.rfind( ':' );
- if ( sep_index != -1 )
- {
- port = atoi ( domain.substr( sep_index +1 ).c_str() );
- // supress port number from end of domain list
- domain.erase( sep_index, domain.length() - sep_index );
- }
- // create UDP receiver
- // catch exception !!!
- Socket(SOCK_DGRAM);
- SetSockOpt( SO_REUSEADDR, &reuse, sizeof(BOOL) );
- Bind(port);
- StartListener();
-
- ivy::string addr;
- char hello[2048];
- int len = _snprintf_s( hello, sizeof(hello), sizeof(hello)-1, "%d %u %s %s\n", VERSION, bus->GetApplicationPort(), bus->ApplicationID.c_str(), bus->ApplicationName.c_str() );
-
- // send broadcast to domain list
- while ( !domain.empty() )
- {
- // find addr up to separator
- size_t index = domain.find_first_of( ", \t" );
- addr = domain.substr( 0, index );
- domain.erase( 0, addr.length() +1 );
- TRACE("Ivy Broadcasting on %s:%d\n", addr.c_str(), port );
- AddMember( addr.c_str() );
- SendTo( hello, len, port, addr.c_str() );
- }
-}
-void IvyWatcher::stop()
-{
- Close();
-}
diff --git a/Bus/Ivy/IvyWatcher.h b/Bus/Ivy/IvyWatcher.h
deleted file mode 100644
index 1eb0718..0000000
--- a/Bus/Ivy/IvyWatcher.h
+++ /dev/null
@@ -1,34 +0,0 @@
-
-#pragma once
-
-// IvyWatcher.h : header file
-//
-
-
-#include "ThreadedSocket.h"
-#include "Ivy.h"
-
-/////////////////////////////////////////////////////////////////////////////
-// IvyWatcher command target
-
-class IvyWatcher : public CThreadedSocket
-{
-// Attributes
-public:
-
-// Operations
-public:
- IvyWatcher(Ivy *bus);
- virtual ~IvyWatcher();
-// Overrides
-public:
- void start(const char *domain);
- void stop();
- virtual void OnReceive(int nErrorCode);
-
-// Implementation
-protected:
- Ivy * bus;
-
-};
-
diff --git a/Bus/Ivy/Regexp.cxx b/Bus/Ivy/Regexp.cxx
deleted file mode 100644
index 4dc1823..0000000
--- a/Bus/Ivy/Regexp.cxx
+++ /dev/null
@@ -1,1758 +0,0 @@
-// Win32 porting notes.
-
-#if defined( _MBCS )
-#pragma message( __FILE__ "This code is broken under _MBCS, " \
- "see the comments at the top of this file." )
-#endif //_MBCS
-//
-//
-// In case this isn't obvious from the later comments this is an ALTERED
-// version of the software. If you like my changes then cool, but nearly
-// all of the functionality here is derived from Henry Spencer's original
-// work.
-//
-// This code should work correctly under both _SBCS and _UNICODE, I did
-// start working on making it work with _MBCS but gave up after a while
-// since I don't need this particular port and it's not going to be as
-// straight forward as the other two.
-//
-// The problem stems from the compiled program being stored as TCHARS,
-// the individual items need to be wide enough to hold whatever character
-// is thrown at them, but currently they are accessed as an array of
-// whatever size integral type is appropriate. _MBCS would cause this
-// to be char, but at times it would need to be larger. This would
-// require making the program be an array of short with the appropriate
-// conversions used everywhere. Certainly it's doable, but it's a pain.
-// What's worse is that the current code will compile and run under _MBCS,
-// only breaking when it gets wide characters thrown against it.
-//
-// I've marked at least one bit of code with #pragma messages, I may not
-// get all of them, but they should be a start
-//
-// Guy Gascoigne - Piggford (ggp@bigfoot.com) Friday, February 27, 1998
-
-
-// regcomp and regexec -- regsub and regerror are elsewhere
-// @(#)regexp.c 1.3 of 18 April 87
-//
-// Copyright (c) 1986 by University of Toronto.
-// Written by Henry Spencer. Not derived from licensed software.
-//
-// Permission is granted to anyone to use this software for any
-// purpose on any computer system, and to redistribute it freely,
-// subject to the following restrictions:
-//
-// 1. The author is not responsible for the consequences of use of
-// this software, no matter how awful, even if they arise
-// from defects in it.
-//
-// 2. The origin of this software must not be misrepresented, either
-// by explicit claim or by omission.
-//
-// 3. Altered versions must be plainly marked as such, and must not
-// be misrepresented as being the original software.
-// *** THIS IS AN ALTERED VERSION. It was altered by John Gilmore,
-// *** hoptoad!gnu, on 27 Dec 1986, to add \< and \> for word-matching
-// *** as in BSD grep and ex.
-// *** THIS IS AN ALTERED VERSION. It was altered by John Gilmore,
-// *** hoptoad!gnu, on 28 Dec 1986, to optimize characters quoted with \.
-// *** THIS IS AN ALTERED VERSION. It was altered by James A. Woods,
-// *** ames!jaw, on 19 June 1987, to quash a regcomp() redundancy.
-// *** THIS IS AN ALTERED VERSION. It was altered by Geoffrey Noer,
-// *** THIS IS AN ALTERED VERSION. It was altered by Guy Gascoigne - Piggford
-// *** guy@wyrdrune.com, on 15 March 1998, porting it to C++ and converting
-// *** it to be the engine for the Regexp class
-//
-// Beware that some of this code is subtly aware of the way operator
-// precedence is structured in regular expressions. Serious changes in
-// regular-expression syntax might require a total rethink.
-
-#include "IvyStdAfx.h"
-#include "regexp.h"
-
-// The first byte of the regexp internal "program" is actually this magic
-// number; the start node begins in the second byte.
-
-const char MAGIC = '\234';
-
-#pragma warning( disable : 4711 ) // automatic inline selected
-
-// The "internal use only" fields in regexp.h are present to pass info from
-// compile to execute that permits the execute phase to run lots faster on
-// simple cases. They are:
-//
-// regstart char that must begin a match; '\0' if none obvious
-// reganch is the match anchored (at beginning-of-line only)?
-// regmust string (pointer into program) that match must include, or NULL
-// regmlen length of regmust string
-//
-// Regstart and reganch permit very fast decisions on suitable starting
-// points for a match, cutting down the work a lot. Regmust permits fast
-// rejection of lines that cannot possibly match. The regmust tests are
-// costly enough that regcomp() supplies a regmust only if the
-// r.e. contains something potentially expensive (at present, the only
-// such thing detected is * or + at the start of the r.e., which can
-// involve a lot of backup). Regmlen is supplied because the test in
-// regexec() needs it and regcomp() is computing it anyway.
-
-// Structure for regexp "program". This is essentially a linear encoding
-// of a nondeterministic finite-state machine (aka syntax charts or
-// "railroad normal form" in parsing technology). Each node is an opcode
-// plus a "next" pointer, possibly plus an operand. "Next" pointers of
-// all nodes except BRANCH implement concatenation; a "next" pointer with
-// a BRANCH on both ends of it is connecting two alternatives. (Here we
-// have one of the subtle syntax dependencies: an individual BRANCH (as
-// opposed to a collection of them) is never concatenated with anything
-// because of operator precedence.) The operand of some types of node is
-// a literal string; for others, it is a node leading into a sub-FSM. In
-// particular, the operand of a BRANCH node is the first node of the
-// branch. (NB this is *not* a tree structure: the tail of the branch
-// connects to the thing following the set of BRANCHes.) The opcodes
-// are:
-
-enum {
-// definition number opnd? meaning
- END = 0, // no End of program.
- BOL = 1, // no Match beginning of line.
- EOL = 2, // no Match end of line.
- ANY = 3, // no Match any character.
- ANYOF = 4, // str Match any of these.
- ANYBUT = 5, // str Match any but one of these.
- BRANCH = 6, // node Match this, or the next..\&.
- BACK = 7, // no "next" ptr points backward.
- EXACTLY = 8, // str Match this string.
- NOTHING = 9, // no Match empty string.
- STAR = 10, // node Match this 0 or more times.
- PLUS = 11, // node Match this 1 or more times.
- WORDA = 12, // no Match "" at wordchar, where prev is nonword
- WORDZ = 13, // no Match "" at nonwordchar, where prev is word
- OPEN = 20, // no Sub-RE starts here.
- // OPEN+1 is number 1, etc.
- CLOSE = 40 // no Analogous to OPEN.
-};
-
-// Opcode notes:
-//
-// BRANCH The set of branches constituting a single choice are hooked
-// together with their "next" pointers, since precedence prevents
-// anything being concatenated to any individual branch. The
-// "next" pointer of the last BRANCH in a choice points to the
-// thing following the whole choice. This is also where the
-// final "next" pointer of each individual branch points; each
-// branch starts with the operand node of a BRANCH node.
-//
-// BACK Normal "next" pointers all implicitly point forward; BACK
-// exists to make loop structures possible.
-//
-// STAR,PLUS '?', and complex '*' and '+', are implemented as circular
-// BRANCH structures using BACK. Simple cases (one character
-// per match) are implemented with STAR and PLUS for speed
-// and to minimize recursive plunges.
-//
-// OPEN,CLOSE ...are numbered at compile time.
-
-// A node is one char of opcode followed by two chars of "next" pointer.
-// "Next" pointers are stored as two 8-bit pieces, high order first. The
-// value is a positive offset from the opcode of the node containing it.
-// An operand, if any, simply follows the node. (Note that much of the
-// code generation knows about this implicit relationship.)
-//
-// Using two bytes for the "next" pointer is vast overkill for most things,
-// but allows patterns to get big without disasters.
-
-
-enum
-{
- REGERR_SENTINEL_VALUE = 0,
- REGERR_NULLARG = 1, REGERR_CORRUPTED, REGERR_CORRUPTION, REGERR_CORRUPTED_POINTERS,
- REGERR_BAD_REGREPEAT, REGERR_CORRUPTED_OPCODE, REGERR_NULL_TO_REGSUB,
- REGERR_DAMAGED_REGEXP_REGSUB, REGERR_DAMAGED_MATCH_STRING, REGERR_NULL_TO_REGCOMP,
- REGERR_TO_BIG, REGERR_TO_MANY_PAREN, REGERR_UNTERMINATED_PAREN, REGERR_UNMATCHED_PAREN,
- REGERR_INTERNAL_ERROR_JUNK, REGERR_OP_COULD_BE_EMPTY, REGERR_NESTED_OP, REGERR_INVALID_RANGE,
- REGERR_UNMATCHED_BRACE, REGERR_INTERNAL_UNEXPECTED_CHAR, REGERR_OP_FOLLOWS_NOTHING,
- REGERR_TRAILING_ESC, REGERR_INTERNAL_STRSCSPN, REGERR_NO_REGEXP
-};
-
-struct regErr
-{
- int m_id;
- const char * m_err;
-} errors[] = {
- { REGERR_NULLARG, "NULL argument to regexec" },
- { REGERR_CORRUPTED, "corrupted regexp" },
- { REGERR_CORRUPTION, "regexp corruption" },
- { REGERR_CORRUPTED_POINTERS, "corrupted pointers" },
- { REGERR_BAD_REGREPEAT, "internal error: bad call of regrepeat" },
- { REGERR_CORRUPTED_OPCODE, "corrupted opcode" },
- { REGERR_NULL_TO_REGSUB, "NULL parm to regsub" },
- { REGERR_DAMAGED_REGEXP_REGSUB, "damaged regexp fed to regsub" },
- { REGERR_DAMAGED_MATCH_STRING, "damaged match string" },
- { REGERR_NULL_TO_REGCOMP, "NULL argument to regcomp" },
- { REGERR_TO_BIG, "regexp too big" },
- { REGERR_TO_MANY_PAREN, "too many ()" },
- { REGERR_UNTERMINATED_PAREN, "unterminated ()" },
- { REGERR_UNMATCHED_PAREN, "unmatched ()" },
- { REGERR_INTERNAL_ERROR_JUNK, "internal error: junk on end" },
- { REGERR_OP_COULD_BE_EMPTY, "*+ operand could be empty" },
- { REGERR_NESTED_OP, "nested *?+" },
- { REGERR_INVALID_RANGE, "invalid [] range" },
- { REGERR_UNMATCHED_BRACE, "unmatched []" },
- { REGERR_INTERNAL_UNEXPECTED_CHAR, "internal error: \\0|) unexpected" },
- { REGERR_OP_FOLLOWS_NOTHING, "?+* follows nothing" },
- { REGERR_TRAILING_ESC, "trailing \\" },
- { REGERR_INTERNAL_STRSCSPN, "internal error: strcspn 0" },
- { REGERR_NO_REGEXP, "NULL regexp" },
- { REGERR_SENTINEL_VALUE, "Unknown error" } // must be last value
-};
-
-// Flags to be passed up and down.
-
-enum {
- HASWIDTH = 01, // Known never to match null string.
- SIMPLE = 02, // Simple enough to be STAR/PLUS operand.
- SPSTART = 04, // Starts with * or +.
- WORST = 0 // Worst case.
-};
-
-///////////////////////////////////////////////////////////////////////////////
-
-class CRegErrorHandler
-{
- friend Regexp;
- mutable ivy::string m_szError;
- static const char * FindErr( int id );
-protected:
- void ClearErrorString() const;
- void regerror( const char * s ) const;
- void regerror( int id ) const;
-public:
- CRegErrorHandler() { }
- CRegErrorHandler( const CRegErrorHandler & reh ) : m_szError( reh.m_szError ) {}
-
- const ivy::string & GetErrorString() const;
-};
-
-void CRegErrorHandler::regerror( const char * s ) const
-{
- TRACE( "regerror: %s\n", s );
- m_szError = s;
-}
-
-void CRegErrorHandler::regerror( int id ) const
-{
- regerror( FindErr( id ) );
-}
-
-const ivy::string & CRegErrorHandler::GetErrorString() const
-{
- return m_szError;
-}
-
-void CRegErrorHandler::ClearErrorString() const
-{
- m_szError.erase() ;
-}
-
-const char * CRegErrorHandler::FindErr( int id )
-{
- struct regErr * perr;
- for ( perr = errors; perr->m_id != REGERR_SENTINEL_VALUE; perr++ )
- if ( perr->m_id == id )
- return perr->m_err;
-
- return perr->m_err; // since we've fallen off the array, perr->m_id == 0
-}
-
-///////////////////////////////////////////////////////////////////////////////
-
-// All of the functions required to directly access the 'program'
-class CRegProgramAccessor : public CRegErrorHandler
-{
-public:
- static inline char OP( char * p )
- {
- return (*(p));
- }
- static inline char * OPERAND( char * p )
- {
- return p + 3;
- }
- static inline char * regnext( char * p )
- {
- const short offset = *((short*)(p+1));
-
- if (offset == 0)
- return(NULL);
-
- return((OP(p) == BACK) ? p-offset : p+offset);
- }
-#ifdef _RE_DEBUG
- char * CRegProgramAccessor::regprop( char * op );
-#endif
-};
-
-///////////////////////////////////////////////////////////////////////////////
-
-// The internal interface to the regexp, wrapping the compilation as well as the
-// execution of the regexp (matching)
-
-class regexp : public CRegProgramAccessor
-{
- friend class CRegExecutor;
- friend class Regexp;
-
- int m_programSize;
- char * startp[Regexp::NSUBEXP];
- char * endp[Regexp::NSUBEXP];
- char regstart; // Internal use only.
- char reganch; // Internal use only.
- char * regmust; // Internal use only.
- int regmlen; // Internal use only.
- char * program;
-
- bool status;
- int count; // used by Regexp to manage the reference counting of regexps
- int numSubs;
-public:
-
- regexp( const char * exp, bool iCase );
- regexp( const regexp & r );
- ~regexp();
-
- void ignoreCase( const char * in, char * out );
-
- bool regcomp( const char * exp );
- bool regexec( const char * string );
- bool Status() const { return status; }
-
- ivy::string GetReplaceString( const char* sReplaceExp ) const;
-
- regexp * getCopy();
-
-#ifdef _RE_DEBUG
- void regdump();
-#endif
-
-#ifdef _DEBUG
- ivy::string m_originalPattern;
- ivy::string m_modifiedPattern;
-#endif
-};
-
-///////////////////////////////////////////////////////////////////////////////
-// Compile / Validate the regular expression - ADT
-
-class CRegCompilerBase : public CRegProgramAccessor
-{
-public:
- CRegCompilerBase( const char * parse );
-
- char * reg(int paren, int *flagp);
-protected:
- char * regparse; // Input-scan pointer.
- int regnpar; // () count.
-
- char * regbranch(int *flagp);
- char * regpiece(int *flagp);
- char * regatom(int *flagp);
- inline bool ISREPN( char c ) { return ((c) == '*' || (c) == '+' || (c) == '?'); }
-
- virtual void regc(int c) = 0;
- virtual char * regnode(int op) = 0;
- virtual void reginsert(char op, char * opnd) = 0;
- virtual void regtail(char * p, char * val) = 0;
- virtual void regoptail(char * p, char * val) = 0;
-};
-
-///////////////////////////////////////////////////////////////////////////////
-// First pass over the expression, testing for validity and returning the
-// program size
-
-class CRegValidator : public CRegCompilerBase
-{
-public:
- CRegValidator( const char * parse );
-
- inline long Size() const { return regsize; }
-private:
- long regsize; // Code size.
- char regdummy[3]; // NOTHING, 0 next ptr
-protected:
- char * regnode(int) { regsize += 3; return regdummy; }
- void regc(int) { regsize++; }
- void reginsert(char, char *) { regsize += 3; }
- void regtail(char *, char *) { return; }
- void regoptail(char *, char *) { return; }
-};
-
-///////////////////////////////////////////////////////////////////////////////
-// Second pass, actually generating the program
-
-class CRegCompiler : public CRegCompilerBase
-{
-public:
- CRegCompiler( const char * parse, char * prog );
-private:
- char * regcode;
-protected:
- // regc - emit (if appropriate) a byte of code
- void regc(int b)
- {
- *regcode++ = (char)b;
- }
- char * regnode(int op);
- void reginsert(char op, char * opnd);
- void regtail(char * p, char * val);
- void regoptail(char * p, char * val);
-};
-
-// regnode - emit a node
-char * CRegCompiler::regnode(int op)
-{
- char * const ret = regcode;
-
- char * ptr = ret;
- *ptr++ = (char)op;
- *ptr++ = '\0'; // Null next pointer.
- *ptr++ = '\0';
- regcode = ptr;
-
- return(ret);
-}
-
-// reginsert - insert an operator in front of already-emitted operand
-//
-// Means relocating the operand.
-void CRegCompiler::reginsert(char op, char * opnd)
-{
- char * place;
-
- (void) memmove(opnd+3, opnd, (size_t)((regcode - opnd)*sizeof(char)));
- regcode += 3;
-
- place = opnd; // Op node, where operand used to be.
- *place++ = op;
- *place++ = '\0';
- *place++ = '\0';
-}
-
-// regtail - set the next-pointer at the end of a node chain
-void CRegCompiler::regtail(char * p, char * val)
-{
- char * scan;
- char * temp;
-
- // Find last node.
- for (scan = p; (temp = regnext(scan)) != NULL; scan = temp)
- continue;
-
- *((short *)(scan+1)) = (short)((OP(scan) == BACK) ? scan - val : val - scan);
-}
-
-// regoptail - regtail on operand of first argument; nop if operandless
-void CRegCompiler::regoptail(char * p, char * val)
-{
- // "Operandless" and "op != BRANCH" are synonymous in practice.
- if (OP(p) == BRANCH)
- regtail(OPERAND(p), val);
-}
-
-///////////////////////////////////////////////////////////////////////////////
-
-CRegCompilerBase::CRegCompilerBase( const char * parse )
- : regparse( (char *)parse ),
- regnpar(1)
-{
-}
-
-CRegValidator::CRegValidator( const char * parse )
- : CRegCompilerBase( parse ),
- regsize(0)
-{
- regc(MAGIC);
- regdummy[0] = NOTHING;
- regdummy[1] = regdummy[2] = 0;
-}
-
-CRegCompiler::CRegCompiler( const char * parse, char * prog )
- : CRegCompilerBase( parse ),
- regcode(prog)
-{
- regc(MAGIC);
-}
-
-///////////////////////////////////////////////////////////////////////////////
-
-regexp::regexp( const char * exp, bool iCase )
- : regstart(0),
- reganch(0),
- regmust(0),
- regmlen(0),
- program(0),
- m_programSize(0)
-{
-#if _DEBUG
- m_originalPattern = exp; // keep a version of the pattern for debugging
-#endif
-
- if ( iCase )
- {
- char * out = new char[(strlen( exp ) * 4) + 1];
- ignoreCase( exp, out );
-
-#if _DEBUG
- m_modifiedPattern = out; // and the modified version if there is one
-#endif
- status = regcomp( out );
- delete [] out;
- }
- else
- status = regcomp( exp );
-
- count = numSubs = 0;
-}
-
-regexp::regexp( const regexp & orig )
- : regstart(orig.regstart),
- reganch(orig.reganch),
- regmlen(orig.regmlen),
- m_programSize(orig.m_programSize),
- numSubs(orig.numSubs),
- regmust(0)
-{
-#if _DEBUG
- m_originalPattern = orig.m_originalPattern;
- m_modifiedPattern = orig.m_modifiedPattern;
-#endif
- status = orig.status;
- count = 0;
- program = new char[m_programSize];
- memcpy( program, orig.program, m_programSize * sizeof( char ) );
- if ( orig.regmust )
- regmust = program + ( orig.regmust - orig.program );
-
- for ( int i = Regexp::NSUBEXP - 1; i >= 0; i--)
- {
- startp[i] = orig.startp[i];
- endp[i] = orig.endp[i];
- }
-}
-
-regexp::~regexp()
-{
- delete [] program;
-}
-
-
-// regcomp - compile a regular expression into internal code
-//
-// We can't allocate space until we know how big the compiled form will
-// be, but we can't compile it (and thus know how big it is) until we've
-// got a place to put the code. So we cheat: we compile it twice, once
-// with code generation turned off and size counting turned on, and once
-// "for real". This also means that we don't allocate space until we are
-// sure that the thing really will compile successfully, and we never
-// have to move the code and thus invalidate pointers into it. (Note
-// that it has to be in one piece because free() must be able to free it
-// all.)
-//
-// Beware that the optimization-preparation code in here knows about some
-// of the structure of the compiled regexp.
-
-bool regexp::regcomp(const char * exp)
-{
- char * scan;
- int flags;
-
- if (exp == NULL)
- {
- regerror( REGERR_NULL_TO_REGCOMP );
- return NULL;
- }
-
- // First pass: determine size, legality.
- CRegValidator tester( exp );
-
- if (tester.reg(0, &flags) == NULL)
- return false;
-
- // Small enough for pointer-storage convention?
- if (tester.Size() >= 0x7fffL) // Probably could be 0xffffL.
- {
- regerror(REGERR_TO_BIG);
- return NULL;
- }
-
- m_programSize = tester.Size();
- // Allocate space.
- program = new char[m_programSize];
-
- CRegCompiler comp( exp, program );
- // Second pass: emit code.
- if (comp.reg(0, &flags) == NULL)
- return false;
-
- scan = program + 1; // First BRANCH.
- if (OP(regnext(scan)) == END)
- { // Only one top-level choice.
- scan = OPERAND(scan);
-
- // Starting-point info.
- if (OP(scan) == EXACTLY)
- regstart = *OPERAND(scan);
- else if (OP(scan) == BOL)
- reganch = 1;
-
- // If there's something expensive in the r.e., find the
- // longest literal string that must appear and make it the
- // regmust. Resolve ties in favor of later strings, since
- // the regstart check works with the beginning of the r.e.
- // and avoiding duplication strengthens checking. Not a
- // strong reason, but sufficient in the absence of others.
-
- if (flags&SPSTART)
- {
- char * longest = NULL;
- size_t len = 0;
-
- for (; scan != NULL; scan = regnext(scan))
- if (OP(scan) == EXACTLY && strlen(OPERAND(scan)) >= len)
- {
- longest = OPERAND(scan);
- len = strlen(OPERAND(scan));
- }
- regmust = longest;
- regmlen = (int)len;
- }
- }
-
- return true;
-}
-
-regexp * regexp::getCopy()
-{
- return new regexp( *this );
-}
-
-// reg - regular expression, i.e. main body or parenthesized thing
-//
-// Caller must absorb opening parenthesis.
-//
-// Combining parenthesis handling with the base level of regular expression
-// is a trifle forced, but the need to tie the tails of the branches to what
-// follows makes it hard to avoid.
-
-char * CRegCompilerBase::reg( int paren, int *flagp )
-{
- char * ret = NULL;
- char * br;
- char * ender;
- int parno = 0;
- int flags;
-
- *flagp = HASWIDTH; // Tentatively.
-
- if (paren)
- {
- // Make an OPEN node.
- if (regnpar >= Regexp::NSUBEXP)
- {
- regerror(REGERR_TO_MANY_PAREN);
- return NULL;
- }
- parno = regnpar;
- regnpar++;
- ret = regnode(OPEN+parno);
- }
-
- // Pick up the branches, linking them together.
- br = regbranch(&flags);
- if (br == NULL)
- return(NULL);
- if (paren)
- regtail(ret, br); // OPEN -> first.
- else
- ret = br;
- *flagp &= ~(~flags&HASWIDTH); // Clear bit if bit 0.
- *flagp |= flags&SPSTART;
- while (*regparse == '|')
- {
- regparse++;
- br = regbranch(&flags);
- if (br == NULL)
- return(NULL);
- regtail(ret, br); // BRANCH -> BRANCH.
- *flagp &= ~(~flags&HASWIDTH);
- *flagp |= flags&SPSTART;
- }
-
- // Make a closing node, and hook it on the end.
- ender = regnode((paren) ? CLOSE+parno : END);
- regtail(ret, ender);
-
- // Hook the tails of the branches to the closing node.
- for (br = ret; br != NULL; br = regnext(br))
- regoptail(br, ender);
-
- // Check for proper termination.
- if (paren && *regparse++ != ')')
- {
- regerror( REGERR_UNTERMINATED_PAREN );
- return NULL;
- }
- else if (!paren && *regparse != '\0')
- {
- if (*regparse == ')')
- {
- regerror( REGERR_UNMATCHED_PAREN );
- return NULL;
- }
- else
- {
- regerror( REGERR_INTERNAL_ERROR_JUNK );
- return NULL;
- }
- // NOTREACHED
- }
-
- return(ret);
-}
-
-// regbranch - one alternative of an | operator
-//
-// Implements the concatenation operator.
-
-char * CRegCompilerBase::regbranch(int *flagp)
-{
- char * ret;
- char * chain;
- char * latest;
- int flags;
- int c;
-
- *flagp = WORST; // Tentatively.
-
- ret = regnode(BRANCH);
- chain = NULL;
- while ((c = *regparse) != '\0' && c != '|' && c != ')')
- {
- latest = regpiece(&flags);
- if (latest == NULL)
- return(NULL);
- *flagp |= flags&HASWIDTH;
- if (chain == NULL) // First piece.
- *flagp |= flags&SPSTART;
- else
- regtail(chain, latest);
- chain = latest;
- }
- if (chain == NULL) // Loop ran zero times.
- (void) regnode(NOTHING);
-
- return(ret);
-}
-
-// regpiece - something followed by possible [*+?]
-//
-// Note that the branching code sequences used for ? and the general cases
-// of * and + are somewhat optimized: they use the same NOTHING node as
-// both the endmarker for their branch list and the body of the last branch.
-// It might seem that this node could be dispensed with entirely, but the
-// endmarker role is not redundant.
-
-char * CRegCompilerBase::regpiece(int *flagp)
-{
- char * ret;
- char op;
- char * next;
- int flags;
-
- ret = regatom(&flags);
- if (ret == NULL)
- return(NULL);
-
- op = *regparse;
- if (!ISREPN(op))
- {
- *flagp = flags;
- return(ret);
- }
-
- if (!(flags&HASWIDTH) && op != '?' )
- {
- regerror( REGERR_OP_COULD_BE_EMPTY );
- return NULL;
- }
- switch (op)
- {
- case '*' : *flagp = WORST|SPSTART; break;
- case '+' : *flagp = WORST|SPSTART|HASWIDTH; break;
- case '?' : *flagp = WORST; break;
- }
-
- if (op == '*' && (flags&SIMPLE))
- reginsert(STAR, ret);
- else if (op == '*' )
- {
- // Emit x* as (x&|), where & means "self".
- reginsert(BRANCH, ret); // Either x
- regoptail(ret, regnode(BACK)); // and loop
- regoptail(ret, ret); // back
- regtail(ret, regnode(BRANCH)); // or
- regtail(ret, regnode(NOTHING)); // null.
- }
- else if (op == '+' && (flags&SIMPLE))
- reginsert(PLUS, ret);
- else if (op == '+' )
- {
- // Emit x+ as x(&|), where & means "self".
- next = regnode(BRANCH); // Either
- regtail(ret, next);
- regtail(regnode(BACK), ret); // loop back
- regtail(next, regnode(BRANCH)); // or
- regtail(ret, regnode(NOTHING)); // null.
- }
- else if (op == '?' )
- {
- // Emit x? as (x|)
- reginsert(BRANCH, ret); // Either x
- regtail(ret, regnode(BRANCH)); // or
- next = regnode(NOTHING); // null.
- regtail(ret, next);
- regoptail(ret, next);
- }
- regparse++;
- if (ISREPN(*regparse))
- {
- regerror( REGERR_NESTED_OP );
- return NULL;
- }
-
- return(ret);
-}
-
-// regatom - the lowest level
-//
-// Optimization: gobbles an entire sequence of ordinary characters so that
-// it can turn them into a single node, which is smaller to store and
-// faster to run. Backslashed characters are exceptions, each becoming a
-// separate node; the code is simpler that way and it's not worth fixing.
-
-char * CRegCompilerBase::regatom(int * flagp)
-{
- char * ret;
- int flags;
-
- *flagp = WORST; // Tentatively.
-
- switch ( *regparse++ )
- {
- // FIXME: these chars only have meaning at beg/end of pat?
- case '^':
- ret = regnode(BOL);
- break;
- case '$':
- ret = regnode(EOL);
- break;
- case '.':
- ret = regnode(ANY);
- *flagp |= HASWIDTH|SIMPLE;
- break;
- case '[':
- {
- int range;
- int rangeend;
- int c;
-
- if (*regparse == '^')
- { // Complement of range.
- ret = regnode(ANYBUT);
- regparse++;
- }
- else
- ret = regnode(ANYOF);
- if ((c = *regparse) == ']' || c == '-')
- {
- regc(c);
- regparse++;
- }
- while ((c = *regparse++ ) != '\0' && c != ']')
- {
- if (c != '-')
- regc(c);
- else if ((c = *regparse) == ']' || c == '\0')
- regc('-');
- else
- {
- range = (char)*(regparse-2);
- rangeend = (char)c;
- if (range > rangeend)
- {
- regerror( REGERR_INVALID_RANGE );
- return NULL;
- }
- for (range++; range <= rangeend; range++)
- regc(range);
- regparse++;
- }
- }
- regc('\0');
- if (c != ']')
- {
- regerror( REGERR_UNMATCHED_BRACE );
- return NULL;
- }
- *flagp |= HASWIDTH|SIMPLE;
- break;
- }
- case '(':
- ret = reg(1, &flags);
- if (ret == NULL)
- return(NULL);
- *flagp |= flags&(HASWIDTH|SPSTART);
- break;
- case '\0':
- case '|':
- case ')':
- // supposed to be caught earlier
- regerror( REGERR_INTERNAL_UNEXPECTED_CHAR );
- return NULL;
- case '?':
- case '+':
- case '*':
- {
- regerror( REGERR_OP_FOLLOWS_NOTHING );
- return NULL;
- }
- case '\\':
- switch (*regparse++)
- {
- case '\0':
- {
- regerror( REGERR_TRAILING_ESC );
- return NULL;
- }
- case '<':
- ret = regnode(WORDA);
- break;
- case '>':
- ret = regnode(WORDZ);
- break;
- /* FIXME: Someday handle \1, \2, ... */
- default:
- /* Handle general quoted chars in exact-match routine */
- goto de_fault;
- }
- break;
- de_fault:
- default:
- // Encode a string of characters to be matched exactly.
- //
- // This is a bit tricky due to quoted chars and due to
- // '*', '+', and '?' taking the SINGLE char previous
- // as their operand.
- //
- // On entry, the char at regparse[-1] is going to go
- // into the string, no matter what it is. (It could be
- // following a \ if we are entered from the '\' case.)
- //
- // Basic idea is to pick up a good char in ch and
- // examine the next char. If it's *+? then we twiddle.
- // If it's \ then we frozzle. If it's other magic char
- // we push ch and terminate the string. If none of the
- // above, we push ch on the string and go around again.
- //
- // regprev is used to remember where "the current char"
- // starts in the string, if due to a *+? we need to back
- // up and put the current char in a separate, 1-char, string.
- // When regprev is NULL, ch is the only char in the
- // string; this is used in *+? handling, and in setting
- // flags |= SIMPLE at the end.
- {
- char *regprev;
- register char ch;
-
- regparse--; /* Look at cur char */
- ret = regnode(EXACTLY);
- for ( regprev = 0 ; ; ) {
- ch = *regparse++; /* Get current char */
- switch (*regparse) { /* look at next one */
-
- default:
- regc(ch); /* Add cur to string */
- break;
-
- case '.': case '[': case '(':
- case ')': case '|': case '\n':
- case '$': case '^':
- case '\0':
- /* FIXME, $ and ^ should not always be magic */
- magic:
- regc(ch); /* dump cur char */
- goto done; /* and we are done */
-
- case '?': case '+': case '*':
- if (!regprev) /* If just ch in str, */
- goto magic; /* use it */
- /* End mult-char string one early */
- regparse = regprev; /* Back up parse */
- goto done;
-
- case '\\':
- regc(ch); /* Cur char OK */
- switch (regparse[1]){ /* Look after \ */
- case '\0':
- case '<':
- case '>':
- /* FIXME: Someday handle \1, \2, ... */
- goto done; /* Not quoted */
- default:
- /* Backup point is \, scan * point is after it. */
- regprev = regparse;
- regparse++;
- continue; /* NOT break; */
- }
- }
- regprev = regparse; /* Set backup point */
- }
- done:
- regc('\0');
- *flagp |= HASWIDTH;
- if (!regprev) /* One char? */
- *flagp |= SIMPLE;
- }
- break;
- }
-
- return(ret);
-}
-
-////////////////////////////////////////////////////////////////////////////////
-// regexec and friends
-
-// Work-variable struct for regexec().
-
-class CRegExecutor : public CRegProgramAccessor
-{
- friend bool regexp::regexec( const char * str );
-
- char * reginput; // string-input pointer.
- char * regbol; // Beginning of input, for ^ check.
- char * * regstartp; // Pointer to startp array.
- char * * regendp; // Ditto for endp.
-
- regexp * prog;
-public:
- CRegExecutor( regexp * prog, char * string );
-protected:
- bool regtry( char * string );
- bool regmatch( char * prog );
- size_t regrepeat( char * node );
-};
-
-CRegExecutor::CRegExecutor( regexp * p, char * string )
- : regbol( string ),
- regstartp( p->startp ),
- regendp( p->endp ),
- prog(p)
-{
-}
-
-#ifdef _RE_DEBUG
-int regnarrate = 0;
-#endif
-
-// regexec - match a regexp against a string
-
-bool regexp::regexec( const char * str )
-{
- char * string = (char *)str; // avert const poisoning
-
- // Be paranoid.
- if ( string == NULL )
- {
- regerror( REGERR_NULLARG );
- return false;
- }
-
- // Check validity of program.
- if (*program != MAGIC)
- {
- regerror( REGERR_CORRUPTED );
- return false;
- }
-
- // If there is a "must appear" string, look for it.
- if ( regmust != NULL && strstr( string, regmust ) == NULL )
- return false;
-
- CRegExecutor executor( this, string );
-
- // Simplest case: anchored match need be tried only once.
- if ( reganch )
- return( executor.regtry( string ) );
-
- // Messy cases: unanchored match.
- if ( regstart != '\0' )
- {
- // We know what char it must start with.
- for ( char * s = string; s != NULL; s = strchr( s+1 , regstart ) )
- if ( executor.regtry( s) )
- return true;
- return false;
- }
- else
- {
- // We don't -- general case.
- for ( char * s = string; ! executor.regtry( s ); s++ )
- if (*s == '\0')
- return false;
- }
- return true;
-}
-
-// regtry - try match at specific point
-bool CRegExecutor::regtry( char * string )
-{
- int i;
- char * * stp;
- char * * enp;
-
- reginput = string;
-
- stp = prog->startp;
- enp = prog->endp;
- for (i = Regexp::NSUBEXP; i > 0; i--)
- {
- *stp++ = NULL;
- *enp++ = NULL;
- }
- if ( regmatch( prog->program + 1 ) )
- {
- prog->startp[0] = string;
- prog->endp[0] = reginput;
- return true;
- }
- else
- return false;
-}
-
-// regmatch - main matching routine
-//
-// Conceptually the strategy is simple: check to see whether the current
-// node matches, call self recursively to see whether the rest matches,
-// and then act accordingly. In practice we make some effort to avoid
-// recursion, in particular by going through "ordinary" nodes (that don't
-// need to know whether the rest of the match failed) by a loop instead of
-// by recursion.
-
-bool CRegExecutor::regmatch( char * prog )
-{
- char * scan; // Current node.
- char * next; // Next node.
-
-#ifdef _RE_DEBUG
- if (prog != NULL && regnarrate)
- fprintf(stderr, "%s(\n", regprop(prog));
-#endif
- for (scan = prog; scan != NULL; scan = next)
- {
-#ifdef _RE_DEBUG
- if (regnarrate)
- fprintf(stderr, "%s...\n", regprop(scan));
-#endif
- next = regnext(scan);
-
- switch (OP(scan))
- {
- case BOL:
- if (reginput != regbol)
- return false;
- break;
- case EOL:
- if (*reginput != '\0')
- return false;
- break;
- case WORDA:
- /* Must be looking at a letter, digit, or _ */
- if ((!isalnum(*reginput)) && *reginput != '_')
- return(0);
- /* Prev must be BOL or nonword */
- if (reginput > regbol &&
- (isalnum(reginput[-1]) || reginput[-1] == '_'))
- return(0);
- break;
- case WORDZ:
- /* Must be looking at non letter, digit, or _ */
- if (isalnum(*reginput) || *reginput == '_')
- return(0);
- /* We don't care what the previous char was */
- break;
- case ANY:
- if (*reginput == '\0')
- return false;
- reginput++;
- break;
- case EXACTLY:
- {
- size_t len;
- char * const opnd = OPERAND(scan);
-
- // Inline the first character, for speed.
- if (*opnd != *reginput)
- return false;
- len = strlen(opnd);
- if (len > 1 && strncmp(opnd, reginput, len) != 0)
- return false;
- reginput += len;
-
- break;
- }
- case ANYOF:
- if (*reginput == '\0' ||
- strchr(OPERAND(scan), *reginput) == NULL)
- return false;
- reginput++;
- break;
- case ANYBUT:
- if (*reginput == '\0' ||
- strchr(OPERAND(scan), *reginput) != NULL)
- return false;
- reginput++;
- break;
- case NOTHING:
- break;
- case BACK:
- break;
- case OPEN+1: case OPEN+2: case OPEN+3:
- case OPEN+4: case OPEN+5: case OPEN+6:
- case OPEN+7: case OPEN+8: case OPEN+9:
- case OPEN+10: case OPEN+11: case OPEN+12:
- case OPEN+13: case OPEN+14: case OPEN+15:
- case OPEN+16: case OPEN+17: case OPEN+18:
- case OPEN+19:
- {
- const int no = OP(scan) - OPEN;
- char * const input = reginput;
-
- if (regmatch(next))
- {
- // Don't set startp if some later
- // invocation of the same parentheses
- // already has.
-
- if (regstartp[no] == NULL)
- regstartp[no] = input;
- return true;
- }
- else
- return false;
- break;
- }
- case CLOSE+1: case CLOSE+2: case CLOSE+3:
- case CLOSE+4: case CLOSE+5: case CLOSE+6:
- case CLOSE+7: case CLOSE+8: case CLOSE+9:
- case CLOSE+10: case CLOSE+11: case CLOSE+12:
- case CLOSE+13: case CLOSE+14: case CLOSE+15:
- case CLOSE+16: case CLOSE+17: case CLOSE+18:
- case CLOSE+19:
- {
- const int no = OP(scan) - CLOSE;
- char * const input = reginput;
-
- if (regmatch(next))
- {
- // Don't set endp if some later
- // invocation of the same parentheses
- // already has.
-
- if (regendp[no] == NULL)
- regendp[no] = input;
- return true;
- }
- else
- return false;
- break;
- }
- case BRANCH:
- {
- char * const save = reginput;
-
- if (OP(next) != BRANCH) // No choice.
- next = OPERAND(scan); // Avoid recursion.
- else
- {
- while (OP(scan) == BRANCH)
- {
- if (regmatch(OPERAND(scan)))
- return true;
- reginput = save;
- scan = regnext(scan);
- }
- return false;
- // NOTREACHED
- }
- break;
- }
- case STAR: case PLUS:
- {
- const char nextch = (OP(next) == EXACTLY) ? *OPERAND(next) : '\0';
- size_t no;
- char * const save = reginput;
- const size_t min = (OP(scan) == STAR) ? 0 : 1;
-
- for (no = regrepeat(OPERAND(scan)) + 1; no > min; no--)
- {
- reginput = save + no - 1;
- // If it could work, try it.
- if (nextch == '\0' || *reginput == nextch)
- if (regmatch(next))
- return true;
- }
- return false;
- break;
- }
- case END:
- return true; // Success!
- break;
- default:
- regerror( REGERR_CORRUPTION );
- return false;
- break;
- }
- }
-
- // We get here only if there's trouble -- normally "case END" is
- // the terminating point.
-
- regerror( REGERR_CORRUPTED_POINTERS );
- return false;
-}
-
-// regrepeat - report how many times something simple would match
-
-size_t CRegExecutor::regrepeat( char * node )
-{
- size_t count;
- char * scan;
- char ch;
-
- switch (OP(node))
- {
- case ANY:
- return(strlen(reginput));
- break;
- case EXACTLY:
- ch = *OPERAND(node);
- count = 0;
- for (scan = reginput; *scan == ch; scan++)
- count++;
- return(count);
- break;
- case ANYOF:
- return(strspn(reginput, OPERAND(node)));
- break;
- case ANYBUT:
- return(strcspn(reginput, OPERAND(node)));
- break;
- default: // Oh dear. Called inappropriately.
- regerror( REGERR_BAD_REGREPEAT );
- return(0); // Best compromise.
- break;
- }
- // NOTREACHED
-}
-
-#ifdef _RE_DEBUG
-
-// regdump - dump a regexp onto stdout in vaguely comprehensible form
-
-void regexp::regdump()
-{
- char * s;
- char op = EXACTLY; // Arbitrary non-END op.
- char * next;
-
- s = program + 1;
- while (op != END)
- { // While that wasn't END last time...
- op = OP(s);
- printf("%2d%s", s-program, regprop(s)); // Where, what.
- next = regnext(s);
- if (next == NULL) // Next ptr.
- printf("(0)" );
- else
- printf("(%d)", (s-program)+(next-s));
- s += 3;
- if (op == ANYOF || op == ANYBUT || op == EXACTLY)
- {
- // Literal string, where present.
- while (*s != '\0')
- {
- putchar(*s);
- s++;
- }
- s++;
- }
- putchar('\n');
- }
-
- // Header fields of interest.
- if (regstart != '\0')
- printf("start `%c' ", regstart);
- if (reganch)
- printf("anchored ");
- if (regmust != NULL)
- printf("must have \"%s\"" , regmust);
- printf("\n");
-}
-
-// regprop - printable representation of opcode
-
-#define OUTPUT(s) case s: p = #s; break
-char * CRegProgramAccessor::regprop( char * op )
-{
- char * p = NULL;
- static char buf[50];
-
- (void) strcpy(buf, ":" );
-
- switch (OP(op))
- {
- OUTPUT( BOL );
- OUTPUT( EOL );
- OUTPUT( ANY );
- OUTPUT( ANYOF );
- OUTPUT( ANYBUT );
- OUTPUT( BRANCH );
- OUTPUT( EXACTLY );
- OUTPUT( NOTHING );
- OUTPUT( BACK );
- OUTPUT( END );
- OUTPUT( STAR );
- OUTPUT( PLUS );
- OUTPUT( WORDA );
- OUTPUT( WORDZ );
- case OPEN+1: case OPEN+2: case OPEN+3:
- case OPEN+4: case OPEN+5: case OPEN+6:
- case OPEN+7: case OPEN+8: case OPEN+9:
- case OPEN+10: case OPEN+11: case OPEN+12:
- case OPEN+13: case OPEN+14: case OPEN+15:
- case OPEN+16: case OPEN+17: case OPEN+18:
- case OPEN+19:
- sprintf(buf+strlen(buf), "OPEN%d", OP(op)-OPEN);
- p = NULL;
- break;
- case CLOSE+1: case CLOSE+2: case CLOSE+3:
- case CLOSE+4: case CLOSE+5: case CLOSE+6:
- case CLOSE+7: case CLOSE+8: case CLOSE+9:
- case CLOSE+10: case CLOSE+11: case CLOSE+12:
- case CLOSE+13: case CLOSE+14: case CLOSE+15:
- case CLOSE+16: case CLOSE+17: case CLOSE+18:
- case CLOSE+19:
- sprintf(buf+strlen(buf), "CLOSE%d", OP(op)-CLOSE);
- p = NULL;
- break;
- default:
- regerror( REGERR_CORRUPTED_OPCODE );
- break;
- }
- if (p != NULL)
- (void) strcat(buf, p);
- return(buf);
-}
-#endif
-
-///////////////////////////////////////////////////////////////////////////////
-
-Regexp::Regexp()
- : rc(0),
- str(0)
-{
-}
-
-Regexp::Regexp( const char * exp, bool iCase )
- : rc( new regexp( exp, iCase ) ),
- str( 0 )
-{
-}
-
-Regexp::Regexp( const Regexp &r )
- : rc( r.rc ),
- m_szError(r.m_szError),
- str(r.str)
-{
- if ( rc )
- rc->count++;
-}
-
-const Regexp & Regexp::operator=( const Regexp & r )
-{
- if ( this != &r )
- {
- if ( rc && rc->count-- == 0 )
- delete rc;
-
- rc = r.rc;
- if ( rc )
- rc->count++;
-
- str = r.str;
- m_szError = r.m_szError;
- }
- return *this;
-}
-
-Regexp::~Regexp()
-{
- if ( rc && rc->count-- == 0 )
- delete rc;
-}
-
-bool Regexp::Match( const char * s )
-{
- ClearErrorString();
- str = s;
- bool ret = false;
- if ( rc )
- {
- // copy on write !
-
- if ( rc->count )
- {
- rc->count--;
- rc = rc->getCopy();
- }
-
- ret = rc->regexec( s );
- int i = 0;
- if ( ret )
- for ( i = 0; i < Regexp::NSUBEXP && rc->startp[i] ; i++ )
- ;
- rc->numSubs = i - 1;
- }
- else
- m_szError = CRegErrorHandler::FindErr( REGERR_NO_REGEXP );
- return ret;
-}
-
-ivy::string Regexp::GetReplaceString( const char * source ) const
-{
- ClearErrorString();
- if ( rc )
- return rc->GetReplaceString( source );
- else
- m_szError = CRegErrorHandler::FindErr( REGERR_NO_REGEXP );
- return "";
-}
-
-int Regexp::SubStrings() const
-{
- ClearErrorString();
- int ret = -1;
- if ( rc )
- ret = rc->numSubs;
- else
- m_szError = CRegErrorHandler::FindErr( REGERR_NO_REGEXP );
- return ret;
-}
-
-size_t Regexp::SubStart( size_t i ) const
-{
- ClearErrorString();
- size_t ret = -1;
- if ( rc )
- ret = rc->startp[safeIndex(i)] - str;
- else
- m_szError = CRegErrorHandler::FindErr( REGERR_NO_REGEXP );
- return ret;
-}
-
-size_t Regexp::SubLength( size_t i ) const
-{
- ClearErrorString();
- size_t ret = -1;
- if ( rc )
- {
- i = safeIndex(i);
- ret = rc->endp[i] - rc->startp[i];
- }
- else
- m_szError = CRegErrorHandler::FindErr( REGERR_NO_REGEXP );
- return ret;
-}
-
-bool Regexp::CompiledOK() const
-{
- return rc ? rc->Status() : false;
-}
-
-#ifdef _RE_DEBUG
-void Regexp::Dump()
-{
- if ( rc )
- rc->regdump();
-#if defined( _DEBUG )
- else
- TRACE( "No regexp to dump out\n" );
-#endif
-}
-#endif
-
-size_t Regexp::safeIndex( size_t i ) const
-{
- return i < Regexp::NSUBEXP ? i : Regexp::NSUBEXP;
-}
-
-const ivy::string Regexp::operator[]( size_t i ) const
-{
- ivy::string value;
- ClearErrorString();
- ASSERT( rc );
- if ( rc )
- {
- size_t len = SubLength(i);
- //char * szbuf = buffer.GetBufferSetLength( len );
- //memcpy( szbuf, rc->startp[i], len * sizeof(char) );
- //buffer.ReleaseBuffer();
- value = ivy::string ( rc->startp[i], len );
- }
- else
- {
- m_szError = CRegErrorHandler::FindErr( REGERR_NO_REGEXP );
- }
- return value;
-}
-
-void regexp::ignoreCase( const char * in, char * out )
-{
- // copy in to out making every top level character a [Aa] set
- bool inRange = false;
- while( *in )
- {
- if ( *in == '[' )
- inRange = true;
- if ( *in == ']' )
- inRange = false;
- if ( ! inRange && isalpha( *in ) )
- {
- *out++ = '[';
- *out++ = (char)toupper( *in );
- *out++ = (char)tolower( *in );
- *out++ = ']';
- }
- else
- *out++ = *in;
- in++;
- }
- *out = 0;
-}
-
-// GetReplaceString - Converts a replace expression to a string
-// - perform substitutions after a regexp match
-// Returns - The resultant string
-ivy::string regexp::GetReplaceString( const char* sReplaceExp ) const
-{
- ivy::string szEmpty( "" );
-
- char *src = (char *)sReplaceExp;
- //char *buf;
- char c;
- int no;
- size_t len;
-
- if( sReplaceExp == NULL )
- {
- regerror( REGERR_NULL_TO_REGSUB );
- return szEmpty;
- }
- if ( *program != MAGIC)
- {
- regerror( REGERR_DAMAGED_REGEXP_REGSUB );
- return szEmpty;
- }
-
- // First compute the length of the string
- size_t replacelen = 0;
- while ((c = *src++) != '\0')
- {
- if (c == '&')
- no = 0;
- else if (c == '\\' && isdigit(*src))
- no = *src++ - '0';
- else
- no = -1;
-
- if (no < 0)
- {
- // Ordinary character.
- if (c == '\\' && (*src == '\\' || *src == '&'))
- c = *src++;
- replacelen++;
- }
- else if (startp[no] != NULL && endp[no] != NULL &&
- endp[no] > startp[no])
- {
- // Get tagged expression
- len = endp[no] - startp[no];
- replacelen += len;
- }
- }
-
- ivy::string szReplace;
-
- //buf = szReplace.GetBufferSetLength( replacelen );
-
- // Now we can create the string
- src = (char *)sReplaceExp;
- while ((c = *src++) != '\0')
- {
- if (c == '&')
- no = 0;
- else if (c == '\\' && isdigit(*src))
- no = *src++ - '0';
- else
- no = -1;
-
- if (no < 0)
- {
- // Ordinary character.
- if (c == '\\' && (*src == '\\' || *src == '&'))
- c = *src++;
- //*buf++ = c;
- szReplace += c ;
- }
- else if (startp[no] != NULL && endp[no] != NULL &&
- endp[no] > startp[no])
- {
- // Get tagged expression
- len = endp[no] - startp[no];
- //strncpy(buf, startp[no], len);
- //buf += len;
- szReplace.append( startp[no], len );
-// if (len != 0 && *(buf-1) == '\0' ))
-// { /* strncpy hit NUL. */
-// regerror( REGERR_DAMAGED_MATCH_STRING );
-// return szEmpty;
-// }
- }
- }
-
- //szReplace.ReleaseBuffer( replacelen );
- return szReplace;
-}
-
-ivy::string Regexp::GetErrorString() const
-{
- // make sure that if status == 0 that we have an error string
- //assert( ( ! CompiledOK() ) ? ( rc ? rc->GetErrorString() : m_szError).length() != 0 : 1 );
- return rc ? rc->GetErrorString() : m_szError ;
-}
-
-void Regexp::ClearErrorString() const
-{
- if ( rc )
- rc->ClearErrorString();
- m_szError.erase();
-}
-
diff --git a/Bus/Ivy/Regexp.h b/Bus/Ivy/Regexp.h
deleted file mode 100644
index b41d88e..0000000
--- a/Bus/Ivy/Regexp.h
+++ /dev/null
@@ -1,41 +0,0 @@
-#pragma once
-
-class regexp;
-
-class Regexp
-{
-public:
- enum { NSUBEXP = 40 };
-
- Regexp();
- Regexp( const char * exp, bool iCase = 0 );
- Regexp( const Regexp &r );
- ~Regexp();
- const Regexp & operator=( const Regexp & r );
-
- bool Match( const char * s );
- int SubStrings() const;
-
- const ivy::string operator[]( size_t i ) const;
- size_t SubStart( size_t i ) const;
- size_t SubLength( size_t i ) const;
-
- ivy::string GetReplaceString( const char * source ) const;
-
- ivy::string GetErrorString() const;
- bool CompiledOK() const;
-
-#if defined( _RE_DEBUG )
- void Dump();
-#endif
-private:
- const char * str; /* used to return substring offsets only */
- mutable ivy::string m_szError;
- regexp * rc;
-
- void ClearErrorString() const;
- size_t safeIndex( size_t i ) const;
-
-};
-
-
diff --git a/Bus/Ivy/ThreadedSocket.cxx b/Bus/Ivy/ThreadedSocket.cxx
deleted file mode 100644
index ee1e03b..0000000
--- a/Bus/Ivy/ThreadedSocket.cxx
+++ /dev/null
@@ -1,547 +0,0 @@
-// ThreadedSocket.cpp: implementation of the CThreadedSocket class.
-//
-//////////////////////////////////////////////////////////////////////
-
-#include "IvyStdAfx.h"
-
-
-#include "ThreadedSocket.h"
-
-
-
-//////////////////////////////////////////////////////////////////////
-// Construction/Destruction
-//////////////////////////////////////////////////////////////////////
-
-CThreadedSocket::CThreadedSocket()
-{
-
- m_hSocket = INVALID_SOCKET;
- h_reader = NULL;
- h_writer = NULL;
- reader_id = 0;
- writer_id = 0;
- listen_mode = false;
- connect_pending = true;
- send_pending = false;
-}
-
-CThreadedSocket::~CThreadedSocket()
-{
- if (m_hSocket != INVALID_SOCKET)
- Close();
-}
-int CThreadedSocket::Create(UINT nSocketPort, int nSocketType, const char * lpszSocketAddress)
-{
- if ( Socket(nSocketType) < 0 )
- return SOCKET_ERROR;
-
- send_count = CreateSemaphore( NULL, 0, 100, NULL); // unnamed semaphore
- if (send_count == NULL)
- return SOCKET_ERROR;
-
- return Bind(nSocketPort,lpszSocketAddress);
-}
-
-/////////////////////////////////////////////////////////////////////////////
-// CThreadedSocket Attributes
-
-
-
-void CThreadedSocket::GetPeerName(ivy::string & rPeerAddress, UINT& rPeerPort)
-{
- SOCKADDR_IN sockAddr;
- memset(&sockAddr, 0, sizeof(sockAddr));
-
- int nSockAddrLen = sizeof(sockAddr);
- GetPeerName((SOCKADDR*)&sockAddr, &nSockAddrLen);
- rPeerPort = ntohs(sockAddr.sin_port);
- rPeerAddress = inet_ntoa(sockAddr.sin_addr);
-}
-
-void CThreadedSocket::GetSockName(ivy::string & rSocketAddress, UINT& rSocketPort)
-{
- SOCKADDR_IN sockAddr;
- memset(&sockAddr, 0, sizeof(sockAddr));
-
- int nSockAddrLen = sizeof(sockAddr);
- GetSockName((SOCKADDR*)&sockAddr, &nSockAddrLen);
- rSocketPort = ntohs(sockAddr.sin_port);
- rSocketAddress = inet_ntoa(sockAddr.sin_addr);
-}
-
-/////////////////////////////////////////////////////////////////////////////
-// CAscynSocket Operations
-
-SOCKET CThreadedSocket::Accept(CThreadedSocket& rConnectedSocket,
- SOCKADDR* lpSockAddr, int* lpSockAddrLen)
-{
- ASSERT(rConnectedSocket.m_hSocket == INVALID_SOCKET);
-
- SOCKET hTemp = accept(m_hSocket, lpSockAddr, lpSockAddrLen);
-
- if (hTemp == INVALID_SOCKET)
- {
- rConnectedSocket.m_hSocket = INVALID_SOCKET;
- return SOCKET_ERROR;
- }
- else
- {
- rConnectedSocket.m_hSocket = hTemp;
- rConnectedSocket.send_count = CreateSemaphore( NULL, 0, 100, NULL); // unnamed semaphore
- if (rConnectedSocket.send_count == NULL)
- return SOCKET_ERROR;
-
- rConnectedSocket.StartListener();
- return hTemp;
- }
-}
-
-int CThreadedSocket::Bind(UINT nSocketPort, const char * lpszSocketAddress)
-{
-
- SOCKADDR_IN sockAddr;
- memset(&sockAddr,0,sizeof(sockAddr));
-
- sockAddr.sin_family = AF_INET;
-
- if (lpszSocketAddress == NULL)
- sockAddr.sin_addr.s_addr = htonl(INADDR_ANY);
- else
- {
- DWORD lResult = inet_addr(lpszSocketAddress);
- if (lResult == INADDR_NONE)
- {
- WSASetLastError(WSAEINVAL);
- return SOCKET_ERROR;
- }
- sockAddr.sin_addr.s_addr = lResult;
- }
-
- sockAddr.sin_port = htons((u_short)nSocketPort);
-
- return Bind((SOCKADDR*)&sockAddr, sizeof(sockAddr));
-}
-
-void CThreadedSocket::Close()
-{
- long PreviousCount = 0;
- int err;
- DWORD currentThreadId;
-
-
- if (m_hSocket != INVALID_SOCKET)
- {
- currentThreadId = GetCurrentThreadId();
-
- //ASSERT(SOCKET_ERROR != closesocket(m_hSocket));
- SOCKET temp = m_hSocket; // Thread ACK
- m_hSocket = INVALID_SOCKET;
- TRACE( "CThreadedSocket::Close (reader=0x%0lx) (writer=0x%0lx)\n", reader_id, writer_id );
- closesocket(temp); // close silently
-
- //if ( thread ) // On fait de l'auto delete mais dans le cas de terminaison anormale l'object reste ????!!!
- // delete thread;
-// TRACE("CThreadedSocket waiting for thread end ...\n");
- if ( h_reader && currentThreadId != reader_id )
- WaitForSingleObject( h_reader, 5000 );
- // wake up writer
- if ( h_writer && currentThreadId != writer_id )
- {
- err = ReleaseSemaphore(send_count, 1, &PreviousCount);
- WaitForSingleObject( h_writer, 5000 );
- }
-// TRACE("CThreadedSocket all thread ended\n");
- }
-}
-int CThreadedSocket::Listen(int nConnectionBacklog)
-{
- int err = listen(m_hSocket, nConnectionBacklog);
- if ( !err )
- listen_mode = true;
- return StartListener();
-}
-
-int CThreadedSocket::Connect(const SOCKADDR* lpSockAddr, int nSockAddrLen)
-{
- int ok;
- fd_set writefds;
-
- FD_ZERO(&writefds);
-
- FD_SET(m_hSocket, &writefds);
-
- ok = connect(m_hSocket, lpSockAddr, nSockAddrLen);
- if ( ok != 0 )
- {
- int err = this->GetLastError();
- if ( err == 0 ) return err;
- TRACE( "***************************************Error connect %d\n", err);
- if ( err != WSAEWOULDBLOCK )
- return -1;
- // Wait for connection to complete
- TRACE( "***************************************Waiting for connection to complete\n");
- FD_SET(m_hSocket, &writefds);
- err = select( 1, NULL, &writefds, NULL, NULL );
- //TRACE( "Thread socket %d wait return %d\n", m_hSocket, err );
- if ( !err )
- connect_pending = true;
- return err;
- }
- connect_pending = true;
- return StartListener();
-}
-
-int CThreadedSocket::Connect(const char * lpszHostAddress, UINT nHostPort)
-{
-
- ASSERT(lpszHostAddress != NULL);
-
- SOCKADDR_IN sockAddr;
- memset(&sockAddr,0,sizeof(sockAddr));
-
- sockAddr.sin_family = AF_INET;
- sockAddr.sin_addr.s_addr = inet_addr(lpszHostAddress);
-
- if (sockAddr.sin_addr.s_addr == INADDR_NONE)
- {
- LPHOSTENT lphost;
- lphost = gethostbyname(lpszHostAddress);
- if (lphost != NULL)
- sockAddr.sin_addr.s_addr = ((LPIN_ADDR)lphost->h_addr)->s_addr;
- else
- {
- WSASetLastError(WSAEINVAL);
- return SOCKET_ERROR;
- }
- }
-
- sockAddr.sin_port = htons((u_short)nHostPort);
-
- return Connect((SOCKADDR*)&sockAddr, sizeof(sockAddr));
-}
-
-size_t CThreadedSocket::Receive(void* lpBuf, size_t nBufLen, int nFlags)
-{
- int lg = recv(m_hSocket, (LPSTR)lpBuf, (int)nBufLen, nFlags);
- return lg;
-}
-
-size_t CThreadedSocket::ReceiveFrom(void* lpBuf, size_t nBufLen, ivy::string & rSocketAddress, UINT& rSocketPort, int nFlags)
-{
- SOCKADDR_IN sockAddr;
-
- memset(&sockAddr, 0, sizeof(sockAddr));
-
- size_t nSockAddrLen = sizeof(sockAddr);
- size_t nResult = ReceiveFrom(lpBuf, nBufLen, (SOCKADDR*)&sockAddr, &nSockAddrLen, nFlags);
- rSocketPort = ntohs(sockAddr.sin_port);
- rSocketAddress = inet_ntoa(sockAddr.sin_addr);
-
- return nResult;
-}
-
-size_t CThreadedSocket::Send(const void* lpBuf, size_t nBufLen, int nFlags)
-{
- return send(m_hSocket, (LPSTR)lpBuf, (int)nBufLen, nFlags);
-}
-
-size_t CThreadedSocket::SendTo(const void* lpBuf, size_t nBufLen, UINT nHostPort, const char * lpszHostAddress, int nFlags)
-{
- SOCKADDR_IN sockAddr;
-
- memset(&sockAddr,0,sizeof(sockAddr));
-
- sockAddr.sin_family = AF_INET;
-
- if (lpszHostAddress == NULL)
- sockAddr.sin_addr.s_addr = htonl(INADDR_BROADCAST);
- else
- {
- sockAddr.sin_addr.s_addr = inet_addr(lpszHostAddress);
- if (sockAddr.sin_addr.s_addr == INADDR_NONE)
- {
- LPHOSTENT lphost;
- lphost = gethostbyname(lpszHostAddress);
- if (lphost != NULL)
- sockAddr.sin_addr.s_addr = ((LPIN_ADDR)lphost->h_addr)->s_addr;
- else
- {
- WSASetLastError(WSAEINVAL);
- return SOCKET_ERROR;
- }
- }
- }
-
- sockAddr.sin_port = htons((u_short)nHostPort);
-
- return SendTo(lpBuf, nBufLen, (SOCKADDR*)&sockAddr, sizeof(sockAddr), nFlags);
- }
-int CThreadedSocket::AddMember( const char * lpszHostAddress )
-{
- int multicast_ttl = 64; // region
- struct ip_mreq imr;
-
- TRACE("CThreadedSocket::AddMember adding %s\n", lpszHostAddress );
- imr.imr_multiaddr.s_addr = INADDR_ANY;
- imr.imr_interface.s_addr = INADDR_ANY;
-
- if (lpszHostAddress )
- {
- imr.imr_multiaddr.s_addr = inet_addr(lpszHostAddress);
- if (imr.imr_multiaddr.s_addr == INADDR_NONE)
- {
- LPHOSTENT lphost;
- lphost = gethostbyname(lpszHostAddress);
- if (lphost != NULL)
- imr.imr_multiaddr.s_addr = ((LPIN_ADDR)lphost->h_addr)->s_addr;
- else
- {
- WSASetLastError(WSAEINVAL);
- return SOCKET_ERROR;
- }
- }
- }
- if ( IN_CLASSD( htonl(imr.imr_multiaddr.s_addr) ) )
- {
- SetSockOpt( IP_MULTICAST_TTL, &multicast_ttl, sizeof( multicast_ttl ), IPPROTO_IP );
- SetSockOpt( IP_ADD_MEMBERSHIP, &imr, sizeof( imr ), IPPROTO_IP );
- }
- return 0;
-}
-
-/////////////////////////////////////////////////////////////////////////////
-// CThreadedSocket Overridable callbacks
-void CThreadedSocket::OnReceive(int /*nErrorCode*/)
-{
-}
-
-void CThreadedSocket::OnSend(int /*nErrorCode*/)
-{
-}
-
-void CThreadedSocket::OnOutOfBandData(int /*nErrorCode*/)
-{
-}
-
-void CThreadedSocket::OnAccept(int /*nErrorCode*/)
-{
-}
-
-void CThreadedSocket::OnConnect(int /*nErrorCode*/)
-{
-}
-
-void CThreadedSocket::OnClose(int /*nErrorCode*/)
-{
-}
-
-/////////////////////////////////////////////////////////////////////////////
-// CThreadedSocket Implementation
-
-
-SOCKET CThreadedSocket::Socket(int nSocketType, int nProtocolType, int nAddressFormat)
-{
- ASSERT(m_hSocket == INVALID_SOCKET);
-
- m_hSocket = socket(nAddressFormat,nSocketType,nProtocolType);
-
- return m_hSocket;
- //return StartListener();
-}
-
-int CThreadedSocket::StartListener()
-{
- h_reader = CreateThread(NULL,0,SocketReaderProc, this, 0, &reader_id);
- return h_reader != NULL ? 0 : SOCKET_ERROR;
-}
-int CThreadedSocket::StartWriter()
-{
- h_writer = CreateThread(NULL,0,SocketWriterProc, this, 0, &writer_id);
- return h_writer != NULL ? 0 : SOCKET_ERROR;
-}
-bool CThreadedSocket::SignalWriter()
-{
- long PreviousCount = 0;
- BOOL err;
- err = ReleaseSemaphore(send_count, 1, &PreviousCount);
-// TRACE("CThreadedSocket::SignalWriter() PreviousCount = %ld \n", PreviousCount );
- return (err != 0);
-}
-
-// Implementation
-DWORD WINAPI CThreadedSocket::SocketReaderProc( LPVOID pParam )
-{
- CThreadedSocket* pObject = (CThreadedSocket*)pParam;
-
- if (pObject == NULL )
- {
- return SOCKET_ERROR; // if pObject is not valid
- }
-
- return pObject->SocketReader();
-}
-// Implementation
-DWORD WINAPI CThreadedSocket::SocketWriterProc( LPVOID pParam )
-{
- CThreadedSocket* pObject = (CThreadedSocket*)pParam;
-
- if (pObject == NULL )
- {
- return SOCKET_ERROR; // if pObject is not valid
- }
-
- return pObject->SocketWriter();
-}
-
-UINT CThreadedSocket::SocketReader( )
-{
- int err;
- int sock_err;
- unsigned long readcount = 0;
- fd_set readfds;
- fd_set writefds;
- fd_set exceptfds;
-
- TRACE( "CThreadedSocket::SocketReader( START thread_id =( 0x%x) )\n",reader_id);
-
- FD_ZERO(&readfds);
- FD_ZERO(&writefds);
- FD_ZERO(&exceptfds);
-
- while ( m_hSocket != INVALID_SOCKET )
- {
- FD_SET(m_hSocket, &readfds);
- if ( connect_pending )
- FD_SET(m_hSocket, &writefds);
- else
- FD_CLR(m_hSocket, &writefds);
- FD_SET(m_hSocket, &exceptfds);
-
- err = select( 1, &readfds, &writefds, &exceptfds, NULL );
- sock_err = this->GetLastError();
-
- switch ( err )
- {
- case 0:
- TRACE( "CThreadedSocket::SocketThread Unhandled Timeout Event !\n");
- break;
- case SOCKET_ERROR:
-
- TRACE( "CThreadedSocket::SocketReader( select error thread_id =( 0x%x) )\n",reader_id);
- if ( (sock_err != WSAENOTSOCK ) && ( m_hSocket != INVALID_SOCKET )) // could be Invalid if close when in select
- Close();
- h_reader = NULL;
- return sock_err;
- break;
- default:
-
-
- if ( FD_ISSET(m_hSocket, &readfds) )
- {
- readcount = 0;
- IOCtl( FIONREAD, &readcount );
- if ( listen_mode )
- OnAccept( sock_err );
- else if ( ! readcount )
- OnClose( sock_err );
- else OnReceive(sock_err);
- }
-
- if ( FD_ISSET(m_hSocket, &writefds) )
- {
- if ( connect_pending )
- {
- OnConnect( sock_err );
- connect_pending = false;
- }
- }
-
- if ( FD_ISSET(m_hSocket, &exceptfds) )
- OnOutOfBandData( sock_err );
-
-
- break;
- }
- }
- if (m_hSocket != INVALID_SOCKET)
- Close();
- h_reader = NULL;
- TRACE( "CThreadedSocket::SocketReader( END thread_id =( 0x%x) )\n",reader_id);
-
- return 0;
-}
-
-UINT CThreadedSocket::SocketWriter( )
-{
- int err;
- int sock_err;
- fd_set writefds;
-
- TRACE( "CThreadedSocket::SocketWriter( START thread_id =( 0x%x) )\n",writer_id);
-
- FD_ZERO(&writefds);
-
-
- while ( m_hSocket != INVALID_SOCKET )
- {
- DWORD dwWaitResult;
-
- // Wait for message to send
-
- dwWaitResult = WaitForSingleObject( send_count, INFINITE );
-
- switch (dwWaitResult) {
-
- // The semaphore object was signaled.
- case WAIT_OBJECT_0:
- // OK to really send the message.
- break;
-
- // Semaphore was nonsignaled, so a time-out occurred.
- case WAIT_TIMEOUT:
- case WAIT_FAILED:
- default:
- TRACE( "CThreadedSocket::SocketWriter( WaitForSingleObject error thread_id =( %d) )\n",writer_id);
- if (m_hSocket != INVALID_SOCKET)
- Close();
- h_writer = NULL;
- return this->GetLastError();
- break;
- }
- if (m_hSocket != INVALID_SOCKET)
- {
- FD_SET(m_hSocket, &writefds);
-
- err = select( 1, NULL, &writefds, NULL, NULL );
- sock_err = this->GetLastError();
-
- switch ( err )
- {
- case 0:
- TRACE( "CThreadedSocket::SocketThread Unhandled Timeout Event !\n");
- break;
- case SOCKET_ERROR:
- TRACE( "CThreadedSocketException( select )\n");
- if ( (sock_err != WSAENOTSOCK ) && ( m_hSocket != INVALID_SOCKET )) // could be Invalid if close when in select
- Close();
- h_reader = NULL;
- return sock_err;
- break;
- default:
-
- if ( FD_ISSET(m_hSocket, &writefds) )
- {
- OnSend( sock_err );
- }
-
- break;
- }
- }
- }
- Close();
- h_writer = NULL;
- TRACE( "CThreadedSocket::SocketWriter( END thread_id =( 0x%x) )\n",writer_id);
-
- return 0;
-}
diff --git a/Bus/Ivy/ThreadedSocket.h b/Bus/Ivy/ThreadedSocket.h
deleted file mode 100644
index ad33c3e..0000000
--- a/Bus/Ivy/ThreadedSocket.h
+++ /dev/null
@@ -1,135 +0,0 @@
-// ThreadedSocket.h: interface for the CThreadedSocket class.
-//
-//////////////////////////////////////////////////////////////////////
-
-
-#pragma once
-
-
-
-class CThreadedSocket
-{
-
-public:
- CThreadedSocket();
- virtual ~CThreadedSocket();
-// Construction
-public:
- int Create(unsigned int nSocketPort = 0, int nSocketType=SOCK_STREAM, const char * lpszSocketAddress = 0);
-
-// Attributes
-public:
- SOCKET m_hSocket;
-
- inline operator SOCKET() const { return m_hSocket; };
-
- void GetPeerName(ivy::string & rPeerAddress, unsigned int& rPeerPort);
-
- void GetSockName(ivy::string & rSocketAddress, unsigned int& rSocketPort);
-
-// Operations
-public:
- SOCKET Socket(int nSocketType=SOCK_STREAM, int nProtocolType = 0, int nAddressFormat = PF_INET);
-
- int AddMember( const char * lpszHostAddress );
-
- virtual SOCKET Accept(CThreadedSocket& rConnectedSocket,
- SOCKADDR* lpSockAddr = NULL, int* lpSockAddrLen = NULL);
-
- int Bind(unsigned int nSocketPort, const char * lpszSocketAddress = 0);
-
- virtual void Close();
-
- int Connect(const char * lpszHostAddress, unsigned int nHostPort);
- int Connect(const SOCKADDR* lpSockAddr, int nSockAddrLen);
- int Listen(int nConnectionBacklog=5);
-
- virtual size_t Receive(void* lpBuf, size_t nBufLen, int nFlags = 0);
-
- size_t ReceiveFrom(void* lpBuf, size_t nBufLen,
- ivy::string & rSocketAddress, unsigned int & rSocketPort, int nFlags = 0);
-
- enum { receives = 0, sends = 1, both = 2 };
-
- virtual size_t Send(const void* lpBuf, size_t nBufLen, int nFlags = 0);
-
- size_t SendTo(const void* lpBuf, size_t nBufLen,
- unsigned int nHostPort, const char * lpszHostAddress = 0, int nFlags = 0);
-
-
-inline int GetPeerName(SOCKADDR* lpSockAddr, int* lpSockAddrLen)
- {
- return getpeername(m_hSocket, lpSockAddr, lpSockAddrLen);
- }
-inline int GetSockName(SOCKADDR* lpSockAddr, int* lpSockAddrLen)
- {
- return getsockname(m_hSocket, lpSockAddr, lpSockAddrLen);
- }
-inline int SetSockOpt(int nOptionName, const void* lpOptionValue, int nOptionLen, int nLevel = SOL_SOCKET)
- {
- return setsockopt(m_hSocket, nLevel, nOptionName, (LPCSTR)lpOptionValue, nOptionLen);
- }
-inline int GetSockOpt(int nOptionName, void* lpOptionValue, int* lpOptionLen, int nLevel = SOL_SOCKET)
- {
- return getsockopt(m_hSocket, nLevel, nOptionName, (LPSTR)lpOptionValue, lpOptionLen);
- }
-
-static inline int CThreadedSocket::GetLastError()
- { return ::WSAGetLastError(); }
-inline int Bind(const SOCKADDR* lpSockAddr, int nSockAddrLen)
- {
- return bind(m_hSocket, lpSockAddr, nSockAddrLen);
- }
-
-inline int IOCtl(long lCommand, unsigned long* lpArgument)
- {
- return ioctlsocket(m_hSocket, lCommand, lpArgument);
- }
-
-inline size_t ReceiveFrom(void* lpBuf, size_t nBufLen, SOCKADDR* lpSockAddr, size_t* lpSockAddrLen, int nFlags = 0)
- {
- int len = (int)*lpSockAddrLen; // Non conforme a Unix
- size_t lg = recvfrom(m_hSocket, (LPSTR)lpBuf, (int)nBufLen, nFlags, lpSockAddr, &len);
- *lpSockAddrLen = len;
- return lg;
- }
-inline int ShutDown(int nHow = sends)
- {
- return shutdown(m_hSocket,nHow);
- }
-inline size_t SendTo(const void* lpBuf, size_t nBufLen, const SOCKADDR* lpSockAddr, size_t nSockAddrLen, int nFlags = 0)
- {
- return sendto(m_hSocket, (LPSTR)lpBuf, (int)nBufLen, nFlags, lpSockAddr, (int)nSockAddrLen);
- }
-
-
-// Overridable callbacks
-protected:
- virtual void OnReceive(int nErrorCode);
- virtual void OnSend(int nErrorCode);
- virtual void OnOutOfBandData(int nErrorCode);
- virtual void OnAccept(int nErrorCode);
- virtual void OnConnect(int nErrorCode);
- virtual void OnClose(int nErrorCode);
-// Implementation
- int StartListener();
- int StartWriter();
- bool SignalWriter();
-
- HANDLE h_reader;
- HANDLE h_writer;
- unsigned long reader_id;
- unsigned long writer_id;
- unsigned int SocketReader(); //Receiver Thread
- unsigned int SocketWriter(); //Sender Thread
- bool listen_mode;
- bool connect_pending;
- bool send_pending;
- HANDLE send_count;
-
-
-// wrapper for thread routine
-static DWORD WINAPI SocketReaderProc( void * pParam );
-static DWORD WINAPI SocketWriterProc( void * pParam );
-
-};
diff --git a/Bus/Ivy/intervalRegexp.c b/Bus/Ivy/intervalRegexp.c
deleted file mode 100644
index 6efcd72..0000000
--- a/Bus/Ivy/intervalRegexp.c
+++ /dev/null
@@ -1,432 +0,0 @@
-#include <sys/types.h>
-#include <stdio.h>
-#include <stdlib.h>
-#include <string.h>
-#include <stdarg.h>
-
-#include "intervalRegexp.h"
-
-#ifdef __PRETTY_FUNCTION__
-#else
-#define __PRETTY_FUNCTION__ __FUNCTION__
-#endif
-
-
-#define MAXINT( a , b ) ((a) > (b) ? (a) : (b))
-#define MININT( a , b ) ((a) < (b) ? (a) : (b))
-
-#define Perr(...) (perr ( __PRETTY_FUNCTION__, __VA_ARGS__))
-#define CHECK_AND_RETURN(a) if (strlen (locBuf) <= buflen) { \
- strcpy (a, locBuf); \
- return success; \
- } else { \
- return Perr ("CHECK_AND_RETURN"); }
-
-#define EndLocBuf (&(locBuf[strlen(locBuf)]))
-#ifdef WIN32
-#define snprintf _snprintf
-#endif
-#define AddLocBuf(...) snprintf (EndLocBuf, sizeof (locBuf)-strlen(locBuf), __VA_ARGS__)
-
-typedef struct {
- int max;
- int rank;
-} NextMax ;
-
-
-typedef char bool;
-
-const bool success = 1;
-const bool fail = 0;
-
-
-static bool strictPosRegexpGen (char *regexp, size_t buflen, long min, long max, const char* decimalPart,
- const char* boundDecimalPart);
-static bool genAtRank (char *regexp, size_t buflen, const char *min, const char *max, int rank);
-static bool genPreRank (char *preRank, size_t buflen, const char *min, const char *max, int rank);
-static bool genRank (char *outRank, size_t buflen, const char *min, const char *max, int rank);
-static bool genPostRank (char *postRank, size_t buflen, int rank);
-static bool substr (char *substring, size_t buflen, const char* expr, size_t pos, size_t len);
-static char* reverse (char *string);
-static char* longtoa (char *string, size_t buflen, long n);
-static NextMax nextMax (const char *min, const char *max);
-static bool perr (const char* func, const char *fmt, ...);
-
-
-
-/*
-# __ _ _ __ _____
-# / _` | | '_ \ / ____|
-# _ __ ___ | (_| | ___ __ __ | |_) | | | __ ___ _ __
-# | '__| / _ \ \__, | / _ \ \ \/ / | .__/ | | |_ | / _ \ | '_ \
-# | | | __/ __/ | | __/ > < | | | |__| | | __/ | | | |
-# |_| \___| |___/ \___| /_/\_\ |_| \_____| \___| |_| |_|
-*/
-int regexpGen (char *regexp, size_t buflen, long min, long max, int flottant)
-{
- char *decimalPart = "";
- char *boundDecimalPart = "";
- char locBuf [8192] = "(?:";
-
-
- if (flottant) {
- decimalPart = "(?:\\.\\d+)?";
- boundDecimalPart = "(?:\\.0+)?";
- }
-
- if (min > max) {
- int nmin = max;
- max = min;
- min = nmin;
- }
-
- if (min == max) {
- AddLocBuf ("%ld%s", min, decimalPart);
- } else if (min < 0) {
- if (max < 0) {
- // reg = '\-(?:' . strictPosRegexpGen (-max, -min, decimalPart, boundDecimalPart). ')';
- AddLocBuf ("\\-(?:");
- if (strictPosRegexpGen (EndLocBuf, sizeof (locBuf)-strlen(locBuf), -min, -max, decimalPart,
- boundDecimalPart) == fail) return fail;
- AddLocBuf (")");
- } else if (max == 0) {
- AddLocBuf ("(?:0%s)|(?:-0%s)|-(?:", boundDecimalPart, decimalPart);
- if (strictPosRegexpGen (EndLocBuf, sizeof (locBuf)-strlen(locBuf), 1, -min, decimalPart,
- boundDecimalPart)== fail) return fail;
- AddLocBuf (")");
- } else {
- //reg ='(?:' . regexpGen (min, 0,withDecimal) . '|' . regexpGen (0, max, withDecimal). ')' ;
- AddLocBuf ("(?:");
- if (regexpGen (EndLocBuf, sizeof (locBuf)-strlen(locBuf), min, 0, flottant)== fail) return fail;
- AddLocBuf ("|");
- if (regexpGen (EndLocBuf, sizeof (locBuf)-strlen(locBuf), 0, max, flottant)== fail) return fail;
- AddLocBuf (")");
- }
- } else if (min == 0) {
- // reg = "(?:0{decimalPart})|" . strictPosRegexpGen (1, max, decimalPart,boundDecimalPart) ;
- AddLocBuf ("(?:0%s)|",decimalPart);
- if (strictPosRegexpGen (EndLocBuf, sizeof (locBuf)-strlen(locBuf), 1, max, decimalPart,
- boundDecimalPart)== fail) return fail;
- } else {
- if (strictPosRegexpGen (EndLocBuf, sizeof (locBuf)-strlen(locBuf), min, max, decimalPart,
- boundDecimalPart)== fail) return fail;
- }
-
- AddLocBuf (")(?![\\d.])");
- CHECK_AND_RETURN (regexp);
-}
-
-/*
-# _ _ _ _____
-# | | (_) | | | __ \
-# ___ | |_ _ __ _ ___ | |_ | |__) | ___ ___
-# / __| | __| | '__| | | / __| | __| | ___/ / _ \ / __|
-# \__ \ \ |_ | | | | | (__ \ |_ | | | (_) | \__ \
-# |___/ \__| |_| |_| \___| \__| |_| \___/ |___/
-# _____ __ _ _ __ _____
-# | __ \ / _` | | '_ \ / ____|
-# | |__) | ___ | (_| | ___ __ __ | |_) | | | __ ___ _ __
-# | _ / / _ \ \__, | / _ \ \ \/ / | .__/ | | |_ | / _ \ | '_ \
-# | | \ \ | __/ __/ | | __/ > < | | | |__| | | __/ | | | |
-# |_| \_\ \___| |___/ \___| /_/\_\ |_| \_____| \___| |_| |_|
-*/
-static bool strictPosRegexpGen (char *regexp, size_t buflen, long min, long max, const char* decimalPart,
- const char* boundDecimalPart)
-{
-
-#define maxSubReg 64
-#define digitRegSize 128
-
- char regList[maxSubReg][digitRegSize];
- char locBuf[maxSubReg*digitRegSize] ;
- size_t regIndex=0,i;
- size_t nbRank;
- char maxAsString[32], minAsString[32];
- NextMax nMax;
-
-
- if ((min <= 0) || (max <= 0)) return Perr ("min or max <= 0");
- if (min == max) {
- sprintf (EndLocBuf, "%ld", max);
- } else {
-
- max--;
-
- nbRank = strlen (longtoa (maxAsString, sizeof (maxAsString), max));
- do {
- nMax = nextMax (longtoa (minAsString, sizeof (minAsString), min),
- longtoa (maxAsString, sizeof (maxAsString), max));
- if (genAtRank (regList[regIndex++], digitRegSize, minAsString,
- longtoa (maxAsString, sizeof (maxAsString),
- nMax.max), nMax.rank) == fail) return fail;
- if (regIndex == maxSubReg) return Perr ("regIndex == maxSubReg");
- min = nMax.max +1;
- } while (nMax.max != max);
-
- locBuf[0] = 0;
- for (i=0; i<regIndex; i++) {
- sprintf (EndLocBuf, "(?:%s%s)|", regList[i], decimalPart);
- }
-
- if (locBuf[strlen(locBuf)-1] == '|') {
- locBuf[strlen(locBuf)-1] = 0;
- }
- max++;
- sprintf (EndLocBuf, "|(?:%s%s)",
- longtoa (maxAsString, sizeof (maxAsString), max), boundDecimalPart);
- }
-
- CHECK_AND_RETURN (regexp);
-}
-
-/*
-# _ __ __
-# | | | \/ |
-# _ __ ___ __ __ | |_ | \ / | __ _ __ __
-# | '_ \ / _ \ \ \/ / | __| | |\/| | / _` | \ \/ /
-# | | | | | __/ > < \ |_ | | | | | (_| | > <
-# |_| |_| \___| /_/\_\ \__| |_| |_| \__,_| /_/\_\
-*/
-static NextMax nextMax (const char *min, const char *max)
-{
- NextMax nextMax ={0,0};
- char revMin[32], revMax[32];
- size_t nbDigitsMin, nbDigitsMax;
- size_t rankRev=0, rankForw, rank=0;
- int i;
- int currMax;
-
- nbDigitsMin = strlen (min);
- nbDigitsMax = strlen (max);
-
- for (i=nbDigitsMin-1; i >= 0; i--) {
- revMin[nbDigitsMin-i-1]= min[i];
- // printf ("DBG> nextMax revMin[%d]= %c\n", nbDigitsMin-i-1, min[i]);
- }
- for (i=nbDigitsMax-nbDigitsMin; i >= 0; i--) {
- revMin[nbDigitsMax-i]= '0';
- // printf ("DBG> nextMax revMin[%d]= %c\n", nbDigitsMax-i, '0');
- }
-
- for (i=nbDigitsMax-1; i >= 0; i--) {
- revMax[nbDigitsMax-i-1]= max[i];
- }
- revMin[nbDigitsMax] = revMax[nbDigitsMax] = 0;
- rankForw = nbDigitsMax -1;
-
- // printf ("DBG> nextMax rev(%s)=%s rev(%s)=%s rankForw=%d\n", min, revMin, max, revMax, rankForw);
-
- // en partant des unitées (digit de poids faible), premier digit de min != 0
- while ((revMin[rankRev] == '0') && (rankRev < nbDigitsMax)) rankRev++;
- // en partant du digit de poids fort, premier digit de max != du même digit de revMin
- while ((revMin[rankForw] == revMax[rankForw]) && rankForw > 0) rankForw--;
-
- if (rankForw <= rankRev) {
- rank = rankForw;
- revMin[rankForw]= revMax[rankForw] - (rankForw ? 1 : 0);
- for (i=0; i<rankForw; i++) revMin[i] = '9';
- } else {
- rank = rankRev;
- for (i=0; i<=rankRev; i++) revMin[i] = '9';
- }
-
- nextMax.max = atoi (reverse (revMin));
- nextMax.rank = rank+1;
-
- currMax = atoi (max);
- if (nextMax.max > currMax) nextMax.max = currMax;
-
- // printf ("DBG> nextMax ('%s', '%s') = %d@%d\n", min, max, nextMax.max, nextMax.rank);
- return (nextMax);
-}
-
-
-/*
-# __ _ ____ _
-# / _` | / __ \ | |
-# | (_| | ___ _ __ / / _` | _ __ __ _ _ __ | | _
-# \__, | / _ \ | '_ \ | | (_| | | '__| / _` | | '_ \ | |/ /
-# __/ | | __/ | | | | \ \__,_| | | | (_| | | | | | | <
-# |___/ \___| |_| |_| \____/ |_| \__,_| |_| |_| |_|\_\
-*/
-static bool genAtRank (char *regexp, size_t buflen, const char *min, const char *max, int rank)
-{
- char locBuf [512];
-
- if (genPreRank (locBuf, sizeof (locBuf), min, max, rank) == fail) return (fail);
- if (genRank (EndLocBuf, sizeof (locBuf)-strlen(locBuf), min, max, rank) == fail) return (fail);
- if (genPostRank (EndLocBuf, sizeof (locBuf)-strlen(locBuf), rank) == fail) return (fail);
-
-
- CHECK_AND_RETURN (regexp);
-}
-
-/*
-# __ _ _____ _____ _
-# / _` | | __ \ | __ \ | |
-# | (_| | ___ _ __ | |__) | _ __ ___ | |__) | __ _ _ __ | | _
-# \__, | / _ \ | '_ \ | ___/ | '__| / _ \ | _ / / _` | | '_ \ | |/ /
-# __/ | | __/ | | | | | | | | | __/ | | \ \ | (_| | | | | | | <
-# |___/ \___| |_| |_| |_| |_| \___| |_| \_\ \__,_| |_| |_| |_|\_\
-*/
-static bool genPreRank (char *preRank, size_t buflen, const char *min, const char *max, int rank)
-{
- char locBuf [512], locBufMax[512];
- const char *lmin, *lmax;
- int i=0, j=0;
-
- while (min[i] == '0') i++;
- while (max[j] == '0') j++;
-
- lmin = &(min[i]);
- lmax = &(max[j]);
-
- // printf ("DBG> genPreRank (lmin='%s'[%d], lmax='%s'[%d], rank=%d\n", lmin, (int) strlen (lmin), lmax,
- // (int) strlen (lmax), rank);
-
- if (substr (locBuf, sizeof (locBuf), lmin, 0, strlen (lmin) - rank) == fail) return fail;
- if (substr (locBufMax, sizeof (locBufMax), lmax, 0, strlen (lmax) - rank) == fail) return fail;
-
- if (strncmp (locBuf, locBufMax, MININT (sizeof (locBuf), sizeof (locBufMax))) != 0)
- return Perr ("min=%s[%s] and max=%s[%s] should be invariants at rank %d", locBuf, min, locBufMax, max, rank);
-
- // printf ("DBG> genPreRank ('%s', '%s', %d) = '%s'\n", min, max, rank, locBuf);
-
- CHECK_AND_RETURN (preRank);
-}
-
-
-/*
-# __ _ _____ _
-# / _` | | __ \ | |
-# | (_| | ___ _ __ | |__) | __ _ _ __ | | _
-# \__, | / _ \ | '_ \ | _ / / _` | | '_ \ | |/ /
-# __/ | | __/ | | | | | | \ \ | (_| | | | | | | <
-# |___/ \___| |_| |_| |_| \_\ \__,_| |_| |_| |_|\_\
-*/
-static bool genRank (char *outRank, size_t buflen, const char *min, const char *max, int rank)
-{
- char locBuf [512];
-
- char a,b,lmin,lmax;
- a = min[strlen(min)-rank];
- b = max[strlen(max)-rank];
-
- lmin = MININT (a,b);
- lmax = MAXINT (a,b);
-
- if ((lmin == '0') && (lmax == '9')) {
- strcpy (locBuf, "\\d");
- } else if (lmin == lmax) {
- locBuf[0] = lmin;
- locBuf[1] = 0;
- } else if (lmax == (lmin+1)) {
- sprintf (locBuf, "[%c%c]", lmin, lmax);
- } else {
- sprintf (locBuf, "[%c-%c]", lmin, lmax);
- }
-
- CHECK_AND_RETURN (outRank);
-}
-
-/*
-# __ _ _____ _ _____
-# / _` | | __ \ | | | __ \
-# | (_| | ___ _ __ | |__) | ___ ___ | |_ | |__) | __ _ _ __
-# \__, | / _ \ | '_ \ | ___/ / _ \ / __| | __| | _ / / _` | | '_ \
-# __/ | | __/ | | | | | | | (_) | \__ \ \ |_ | | \ \ | (_| | | | | |
-# |___/ \___| |_| |_| |_| \___/ |___/ \__| |_| \_\ \__,_| |_| |_|
-*/
-static bool genPostRank (char *postRank, size_t buflen, int rank)
-{
- char locBuf [512];
-
- if (rank <= 1) {
- strcpy (locBuf, "");
- } else if (rank == 2) {
- sprintf (locBuf, "\\d");
- } else {
- sprintf (locBuf, "\\d{%d}", rank -1);
- }
-
- CHECK_AND_RETURN (postRank);
-}
-
-/*
-# _ _
-# | | | |
-# ___ _ _ | |__ ___ | |_ _ __
-# / __| | | | | | '_ \ / __| | __| | '__|
-# \__ \ | |_| | | |_) | \__ \ \ |_ | |
-# |___/ \__,_| |_.__/ |___/ \__| |_|
-*/
-static bool substr (char *substring, size_t buflen, const char* expr, size_t pos, size_t len)
-{
- char locBuf [512];
- size_t i, j=0;
-
- len = MAXINT (0, MININT (len, strlen (expr) - pos));
- for (i=pos; i<(pos+len); i++) {
- locBuf[j++]= expr[i];
- }
- locBuf[j] = 0;
-
- // printf ("DBG> substr ('%s', %d, %d) = '%s'\n", expr, pos, len, locBuf);
- CHECK_AND_RETURN (substring);
-}
-
-/*
-#
-#
-# _ __ ___ __ __ ___ _ __ ___ ___
-# | '__| / _ \ \ \ / / / _ \ | '__| / __| / _ \
-# | | | __/ \ V / | __/ | | \__ \ | __/
-# |_| \___| \_/ \___| |_| |___/ \___|
-*/
-static char* reverse (char *string)
-{
- char *locBuf ;
- int i;
- size_t len = strlen (string);
-
- locBuf = malloc (len+1);
- for (i=len-1; i >= 0; i--) {
- locBuf[len-i-1]= string[i];
- //printf ("DBG> reverse locBuf[%d]= %c\n",len- i-1, string[i]);
- }
- locBuf [len] = 0;
-
- // printf ("DBG> reverse '%s' = '%s'\n", string, locBuf);
- strcpy (string, locBuf);
- free (locBuf);
- return (string);
-}
-
-static char* longtoa (char *string, size_t buflen, long n)
-{
- snprintf (string, buflen, "%ld", n);
- return (string);
-}
-
-
-/*
-# _ __
-# | '_ \
-# | |_) | ___ _ __ _ __
-# | .__/ / _ \ | '__| | '__|
-# | | | __/ | | | |
-# |_| \___| |_| |_|
-*/
-static bool perr (const char* func, const char *fmt, ...)
-{
- char err[4096], buffer[2048];
- va_list args;
- va_start( args, fmt );
- vsprintf( buffer, fmt, args );
- va_end( args );
-
-
- sprintf (err, "Erreur %s @ %s\n", buffer, func);
- fprintf (stderr, err);
- return (fail);
-}
diff --git a/Bus/Ivy/intervalRegexp.h b/Bus/Ivy/intervalRegexp.h
deleted file mode 100644
index c1176ff..0000000
--- a/Bus/Ivy/intervalRegexp.h
+++ /dev/null
@@ -1,14 +0,0 @@
-#ifndef INTERVALREGEXP_H
-#define INTERVALREGEXP_H
-
-#ifdef __cplusplus
-extern "C" {
-#endif
-
-int regexpGen (char *regexp, size_t buflen, long min, long max, int flottant);
-
-#ifdef __cplusplus
-}
-#endif
-
-#endif
diff --git a/Bus/IvyAudioMon/InstIvyAudioMonitor/InstIvyAudioMonitor.vdproj b/Bus/IvyAudioMon/InstIvyAudioMonitor/InstIvyAudioMonitor.vdproj
deleted file mode 100644
index 8747e9e..0000000
--- a/Bus/IvyAudioMon/InstIvyAudioMonitor/InstIvyAudioMonitor.vdproj
+++ /dev/null
@@ -1,811 +0,0 @@
-"DeployProject"
-{
-"VSVersion" = "3:701"
-"ProjectType" = "8:{2C2AF0D9-9B47-4FE5-BEF2-169778172667}"
-"IsWebType" = "8:FALSE"
-"ProjectName" = "8:Install"
-"LanguageId" = "3:1036"
-"CodePage" = "3:1252"
-"UILanguageId" = "3:1036"
-"SccProjectName" = "8:SAK"
-"SccLocalPath" = "8:SAK"
-"SccAuxPath" = "8:SAK"
-"SccProvider" = "8:SAK"
- "Hierarchy"
- {
- "Entry"
- {
- "MsmKey" = "8:_1FFF66C6BAC84098B44C4BFB77CF31BA"
- "OwnerKey" = "8:_UNDEFINED"
- "MsmSig" = "8:_UNDEFINED"
- }
- "Entry"
- {
- "MsmKey" = "8:_24D4F2F7205D4B84A9A179397CA5449D"
- "OwnerKey" = "8:_UNDEFINED"
- "MsmSig" = "8:_UNDEFINED"
- }
- "Entry"
- {
- "MsmKey" = "8:_280A192E83624205B038236965792BA6"
- "OwnerKey" = "8:_24D4F2F7205D4B84A9A179397CA5449D"
- "MsmSig" = "8:_UNDEFINED"
- }
- "Entry"
- {
- "MsmKey" = "8:_29B546875AD67FD9DDEB3787BB5634AC"
- "OwnerKey" = "8:_24D4F2F7205D4B84A9A179397CA5449D"
- "MsmSig" = "8:_UNDEFINED"
- }
- "Entry"
- {
- "MsmKey" = "8:_63D08CD46ADD4B6981762367F1A8B4B4"
- "OwnerKey" = "8:_24D4F2F7205D4B84A9A179397CA5449D"
- "MsmSig" = "8:_UNDEFINED"
- }
- }
- "Configurations"
- {
- "Debug"
- {
- "DisplayName" = "8:Debug"
- "IsDebugOnly" = "11:TRUE"
- "IsReleaseOnly" = "11:FALSE"
- "OutputFilename" = "8:Debug\\InstIvyAudioMonitor.msi"
- "PackageFilesAs" = "3:2"
- "PackageFileSize" = "3:-2147483648"
- "CabType" = "3:1"
- "Compression" = "3:2"
- "SignOutput" = "11:FALSE"
- "CertificateFile" = "8:"
- "PrivateKeyFile" = "8:"
- "TimeStampServer" = "8:"
- "InstallerBootstrapper" = "3:2"
- }
- "Release"
- {
- "DisplayName" = "8:Release"
- "IsDebugOnly" = "11:FALSE"
- "IsReleaseOnly" = "11:TRUE"
- "OutputFilename" = "8:..\\..\\..\\..\\Install\\IvyAudioMon.msi"
- "PackageFilesAs" = "3:2"
- "PackageFileSize" = "3:-2147483648"
- "CabType" = "3:1"
- "Compression" = "3:2"
- "SignOutput" = "11:FALSE"
- "CertificateFile" = "8:"
- "PrivateKeyFile" = "8:"
- "TimeStampServer" = "8:"
- "InstallerBootstrapper" = "3:1"
- }
- }
- "Deployable"
- {
- "CustomAction"
- {
- }
- "DefaultFeature"
- {
- "Name" = "8:DefaultFeature"
- "Title" = "8:"
- "Description" = "8:"
- }
- "ExternalPersistence"
- {
- "LaunchCondition"
- {
- }
- }
- "Feature"
- {
- }
- "File"
- {
- "{A582A373-4685-4296-BEFE-614B80A702C3}:_29B546875AD67FD9DDEB3787BB5634AC"
- {
- "SourcePath" = "8:WSOCK32.dll"
- "TargetName" = "8:WSOCK32.dll"
- "Tag" = "8:"
- "Folder" = "8:_B77ADBA35B9B4DABB6315373618206DF"
- "Condition" = "8:"
- "Transitive" = "11:FALSE"
- "Vital" = "11:TRUE"
- "ReadOnly" = "11:FALSE"
- "Hidden" = "11:FALSE"
- "System" = "11:FALSE"
- "Permanent" = "11:FALSE"
- "SharedLegacy" = "11:FALSE"
- "PackageAs" = "3:1"
- "Register" = "3:1"
- "Exclude" = "11:TRUE"
- "IsDependency" = "11:TRUE"
- "IsolateTo" = "8:"
- }
- }
- "FileType"
- {
- }
- "Folder"
- {
- "{78BAF5CE-F2E5-45BE-83BC-DB6AF387E941}:_9C9C3F0E7D0440BD8FC950681C8BDFF5"
- {
- "Name" = "8:#1919"
- "AlwaysCreate" = "11:FALSE"
- "Condition" = "8:"
- "Transitive" = "11:FALSE"
- "Property" = "8:ProgramMenuFolder"
- "Folders"
- {
- }
- }
- "{58C0ADA3-3CEA-43BD-A3B3-2EA121BC8217}:_B77ADBA35B9B4DABB6315373618206DF"
- {
- "DefaultLocation" = "8:[ProgramFilesFolder][Manufacturer]\\[ProductName]"
- "Name" = "8:#1925"
- "AlwaysCreate" = "11:FALSE"
- "Condition" = "8:"
- "Transitive" = "11:FALSE"
- "Property" = "8:TARGETDIR"
- "Folders"
- {
- }
- }
- "{78BAF5CE-F2E5-45BE-83BC-DB6AF387E941}:_CBE0581308BE453A8D2918CCA90E7FA2"
- {
- "Name" = "8:#1916"
- "AlwaysCreate" = "11:FALSE"
- "Condition" = "8:"
- "Transitive" = "11:FALSE"
- "Property" = "8:DesktopFolder"
- "Folders"
- {
- }
- }
- }
- "LaunchCondition"
- {
- }
- "Locator"
- {
- }
- "MsiBootstrapper"
- {
- "LangId" = "3:1036"
- }
- "Product"
- {
- "Name" = "8:Microsoft Visual Studio"
- "ProductName" = "8:IvyAudioMon"
- "ProductCode" = "8:{1D4F0F46-9EC2-422B-AC5E-7407448D5E1B}"
- "PackageCode" = "8:{21119BEA-2AC8-47AE-9174-7F3FC1074FF8}"
- "UpgradeCode" = "8:{63A0EA16-E436-46F8-A5D0-22C992240CE4}"
- "RestartWWWService" = "11:FALSE"
- "RemovePreviousVersions" = "11:TRUE"
- "DetectNewerInstalledVersion" = "11:TRUE"
- "ProductVersion" = "8:1.0.1"
- "Manufacturer" = "8:CENA PII"
- "ARPHELPTELEPHONE" = "8:"
- "ARPHELPLINK" = "8:"
- "Title" = "8:IvyAudioMon"
- "Subject" = "8:"
- "ARPCONTACT" = "8:CENA"
- "Keywords" = "8:ivy"
- "ARPCOMMENTS" = "8:Audio monitor for Ivy"
- "ARPURLINFOABOUT" = "8:"
- "ARPPRODUCTICON" = "8:"
- "ARPIconIndex" = "3:0"
- "SearchPath" = "8:"
- "UseSystemSearchPath" = "11:TRUE"
- }
- "Registry"
- {
- "HKLM"
- {
- "Keys"
- {
- "{6A471EEF-D31B-40F8-BCF6-C9E8EC783F36}:_8E97A3A6197D41C18F825E47B18A63B8"
- {
- "Name" = "8:Software"
- "Condition" = "8:"
- "AlwaysCreate" = "11:FALSE"
- "DeleteAtUninstall" = "11:FALSE"
- "Transitive" = "11:FALSE"
- "Keys"
- {
- "{6A471EEF-D31B-40F8-BCF6-C9E8EC783F36}:_BFB0F7EE6461455A82D21F6B188BC952"
- {
- "Name" = "8:[Manufacturer]"
- "Condition" = "8:"
- "AlwaysCreate" = "11:FALSE"
- "DeleteAtUninstall" = "11:FALSE"
- "Transitive" = "11:FALSE"
- "Keys"
- {
- }
- "Values"
- {
- }
- }
- }
- "Values"
- {
- }
- }
- }
- }
- "HKCU"
- {
- "Keys"
- {
- "{6A471EEF-D31B-40F8-BCF6-C9E8EC783F36}:_30F0AB285F08494B99DEDF264CB58AED"
- {
- "Name" = "8:Software"
- "Condition" = "8:"
- "AlwaysCreate" = "11:FALSE"
- "DeleteAtUninstall" = "11:FALSE"
- "Transitive" = "11:FALSE"
- "Keys"
- {
- "{6A471EEF-D31B-40F8-BCF6-C9E8EC783F36}:_C112641E4EDD452ABF4B8361F38D8039"
- {
- "Name" = "8:[Manufacturer]"
- "Condition" = "8:"
- "AlwaysCreate" = "11:FALSE"
- "DeleteAtUninstall" = "11:FALSE"
- "Transitive" = "11:FALSE"
- "Keys"
- {
- }
- "Values"
- {
- }
- }
- }
- "Values"
- {
- }
- }
- }
- }
- "HKCR"
- {
- "Keys"
- {
- }
- }
- "HKU"
- {
- "Keys"
- {
- }
- }
- "HKPU"
- {
- "Keys"
- {
- }
- }
- }
- "Sequences"
- {
- }
- "Shortcut"
- {
- "{478F747B-8505-45D1-9AAE-8C3B645C26E3}:_2240A7D62F4F410F896ABD1A12FC17CE"
- {
- "Name" = "8:IvyAudioMon"
- "Arguments" = "8:"
- "Description" = "8:"
- "ShowCmd" = "3:1"
- "IconIndex" = "3:0"
- "Transitive" = "11:FALSE"
- "Target" = "8:_1FFF66C6BAC84098B44C4BFB77CF31BA"
- "Folder" = "8:_9C9C3F0E7D0440BD8FC950681C8BDFF5"
- "WorkingFolder" = "8:_B77ADBA35B9B4DABB6315373618206DF"
- "Icon" = "8:"
- "Feature" = "8:"
- }
- }
- "UserInterface"
- {
- "{8D9DEE8B-DD8B-4F48-9072-C4364E4F4011}:_0FC4A48F6C1A48898536C7D225CDBD18"
- {
- "Name" = "8:#1901"
- "Sequence" = "3:1"
- "Attributes" = "3:2"
- "Dialogs"
- {
- "{18ADD6EC-89FE-4ED7-AD3E-211C40278470}:_C14469C50F234DB7BF4FDDC77E614389"
- {
- "Sequence" = "3:100"
- "DisplayName" = "8:Progression"
- "UseDynamicProperties" = "11:TRUE"
- "IsDependency" = "11:FALSE"
- "SourcePath" = "8:<VsdDialogDir>\\VsdProgressDlg.wid"
- "Properties"
- {
- "BannerBitmap"
- {
- "Name" = "8:BannerBitmap"
- "DisplayName" = "8:#1001"
- "Description" = "8:#1101"
- "Type" = "3:8"
- "ContextData" = "8:Bitmap"
- "Attributes" = "3:4"
- "Setting" = "3:1"
- "UsePlugInResources" = "11:TRUE"
- }
- "ShowProgress"
- {
- "Name" = "8:ShowProgress"
- "DisplayName" = "8:#1009"
- "Description" = "8:#1109"
- "Type" = "3:5"
- "ContextData" = "8:1;True=1;False=0"
- "Attributes" = "3:0"
- "Setting" = "3:0"
- "Value" = "3:1"
- "DefaultValue" = "3:1"
- "UsePlugInResources" = "11:TRUE"
- }
- }
- }
- }
- }
- "{8D9DEE8B-DD8B-4F48-9072-C4364E4F4011}:_1C654AAF7E24483CACE80660DD7DD7C1"
- {
- "Name" = "8:#1902"
- "Sequence" = "3:2"
- "Attributes" = "3:3"
- "Dialogs"
- {
- "{18ADD6EC-89FE-4ED7-AD3E-211C40278470}:_246CADC3304E4D458C7209E11813417D"
- {
- "Sequence" = "3:100"
- "DisplayName" = "8:Terminé"
- "UseDynamicProperties" = "11:TRUE"
- "IsDependency" = "11:FALSE"
- "SourcePath" = "8:<VsdDialogDir>\\VsdAdminFinishedDlg.wid"
- "Properties"
- {
- "BannerBitmap"
- {
- "Name" = "8:BannerBitmap"
- "DisplayName" = "8:#1001"
- "Description" = "8:#1101"
- "Type" = "3:8"
- "ContextData" = "8:Bitmap"
- "Attributes" = "3:4"
- "Setting" = "3:1"
- "UsePlugInResources" = "11:TRUE"
- }
- }
- }
- }
- }
- "{B654A020-6903-4E6A-A86C-75DC463DB54B}:_202BE75FFB354259B74198A8BC0E6543"
- {
- "UseDynamicProperties" = "11:FALSE"
- "IsDependency" = "11:FALSE"
- "SourcePath" = "8:<VsdDialogDir>\\VsdUserInterface.wim"
- }
- "{B654A020-6903-4E6A-A86C-75DC463DB54B}:_2F02F6743C41431E8CDF97AF5ADCE2C7"
- {
- "UseDynamicProperties" = "11:FALSE"
- "IsDependency" = "11:FALSE"
- "SourcePath" = "8:<VsdDialogDir>\\VsdBasicDialogs.wim"
- }
- "{8D9DEE8B-DD8B-4F48-9072-C4364E4F4011}:_40B3D65F18C347949729D8727EAFCF5A"
- {
- "Name" = "8:#1902"
- "Sequence" = "3:1"
- "Attributes" = "3:3"
- "Dialogs"
- {
- "{18ADD6EC-89FE-4ED7-AD3E-211C40278470}:_C79367C78F8D4CFAAFDBA76CE26440A9"
- {
- "Sequence" = "3:100"
- "DisplayName" = "8:Terminé"
- "UseDynamicProperties" = "11:TRUE"
- "IsDependency" = "11:FALSE"
- "SourcePath" = "8:<VsdDialogDir>\\VsdFinishedDlg.wid"
- "Properties"
- {
- "BannerBitmap"
- {
- "Name" = "8:BannerBitmap"
- "DisplayName" = "8:#1001"
- "Description" = "8:#1101"
- "Type" = "3:8"
- "ContextData" = "8:Bitmap"
- "Attributes" = "3:4"
- "Setting" = "3:1"
- "UsePlugInResources" = "11:TRUE"
- }
- "UpdateText"
- {
- "Name" = "8:UpdateText"
- "DisplayName" = "8:#1058"
- "Description" = "8:#1158"
- "Type" = "3:15"
- "ContextData" = "8:"
- "Attributes" = "3:0"
- "Setting" = "3:1"
- "Value" = "8:#1258"
- "DefaultValue" = "8:#1258"
- "UsePlugInResources" = "11:TRUE"
- }
- }
- }
- }
- }
- "{8D9DEE8B-DD8B-4F48-9072-C4364E4F4011}:_48B2B2E5F721448E897D9B22396E09E5"
- {
- "Name" = "8:#1901"
- "Sequence" = "3:2"
- "Attributes" = "3:2"
- "Dialogs"
- {
- "{18ADD6EC-89FE-4ED7-AD3E-211C40278470}:_AF79945CD8DC4C0090DAFF213ADDD226"
- {
- "Sequence" = "3:100"
- "DisplayName" = "8:Progression"
- "UseDynamicProperties" = "11:TRUE"
- "IsDependency" = "11:FALSE"
- "SourcePath" = "8:<VsdDialogDir>\\VsdAdminProgressDlg.wid"
- "Properties"
- {
- "BannerBitmap"
- {
- "Name" = "8:BannerBitmap"
- "DisplayName" = "8:#1001"
- "Description" = "8:#1101"
- "Type" = "3:8"
- "ContextData" = "8:Bitmap"
- "Attributes" = "3:4"
- "Setting" = "3:1"
- "UsePlugInResources" = "11:TRUE"
- }
- "ShowProgress"
- {
- "Name" = "8:ShowProgress"
- "DisplayName" = "8:#1009"
- "Description" = "8:#1109"
- "Type" = "3:5"
- "ContextData" = "8:1;True=1;False=0"
- "Attributes" = "3:0"
- "Setting" = "3:0"
- "Value" = "3:1"
- "DefaultValue" = "3:1"
- "UsePlugInResources" = "11:TRUE"
- }
- }
- }
- }
- }
- "{8D9DEE8B-DD8B-4F48-9072-C4364E4F4011}:_56DDF779024C4B7DA283A20E4EDF975B"
- {
- "Name" = "8:#1900"
- "Sequence" = "3:2"
- "Attributes" = "3:1"
- "Dialogs"
- {
- "{18ADD6EC-89FE-4ED7-AD3E-211C40278470}:_9F1357406D3C4391A37026DB5ACACBFE"
- {
- "Sequence" = "3:200"
- "DisplayName" = "8:Dossier d'installation"
- "UseDynamicProperties" = "11:TRUE"
- "IsDependency" = "11:FALSE"
- "SourcePath" = "8:<VsdDialogDir>\\VsdAdminFolderDlg.wid"
- "Properties"
- {
- "BannerBitmap"
- {
- "Name" = "8:BannerBitmap"
- "DisplayName" = "8:#1001"
- "Description" = "8:#1101"
- "Type" = "3:8"
- "ContextData" = "8:Bitmap"
- "Attributes" = "3:4"
- "Setting" = "3:1"
- "UsePlugInResources" = "11:TRUE"
- }
- }
- }
- "{18ADD6EC-89FE-4ED7-AD3E-211C40278470}:_A806909CFAC14B269567508382146607"
- {
- "Sequence" = "3:300"
- "DisplayName" = "8:Confirmer l'installation"
- "UseDynamicProperties" = "11:TRUE"
- "IsDependency" = "11:FALSE"
- "SourcePath" = "8:<VsdDialogDir>\\VsdAdminConfirmDlg.wid"
- "Properties"
- {
- "BannerBitmap"
- {
- "Name" = "8:BannerBitmap"
- "DisplayName" = "8:#1001"
- "Description" = "8:#1101"
- "Type" = "3:8"
- "ContextData" = "8:Bitmap"
- "Attributes" = "3:4"
- "Setting" = "3:1"
- "UsePlugInResources" = "11:TRUE"
- }
- }
- }
- "{18ADD6EC-89FE-4ED7-AD3E-211C40278470}:_FA35B731B6424407886715895D826B0B"
- {
- "Sequence" = "3:100"
- "DisplayName" = "8:Bienvenue"
- "UseDynamicProperties" = "11:TRUE"
- "IsDependency" = "11:FALSE"
- "SourcePath" = "8:<VsdDialogDir>\\VsdAdminWelcomeDlg.wid"
- "Properties"
- {
- "BannerBitmap"
- {
- "Name" = "8:BannerBitmap"
- "DisplayName" = "8:#1001"
- "Description" = "8:#1101"
- "Type" = "3:8"
- "ContextData" = "8:Bitmap"
- "Attributes" = "3:4"
- "Setting" = "3:1"
- "UsePlugInResources" = "11:TRUE"
- }
- "CopyrightWarning"
- {
- "Name" = "8:CopyrightWarning"
- "DisplayName" = "8:#1002"
- "Description" = "8:#1102"
- "Type" = "3:3"
- "ContextData" = "8:"
- "Attributes" = "3:0"
- "Setting" = "3:1"
- "Value" = "8:#1202"
- "DefaultValue" = "8:#1202"
- "UsePlugInResources" = "11:TRUE"
- }
- "Welcome"
- {
- "Name" = "8:Welcome"
- "DisplayName" = "8:#1003"
- "Description" = "8:#1103"
- "Type" = "3:3"
- "ContextData" = "8:"
- "Attributes" = "3:0"
- "Setting" = "3:1"
- "Value" = "8:#1203"
- "DefaultValue" = "8:#1203"
- "UsePlugInResources" = "11:TRUE"
- }
- }
- }
- }
- }
- "{8D9DEE8B-DD8B-4F48-9072-C4364E4F4011}:_D17F3ACD1241458BA747EBBB3776DA42"
- {
- "Name" = "8:#1900"
- "Sequence" = "3:1"
- "Attributes" = "3:1"
- "Dialogs"
- {
- "{18ADD6EC-89FE-4ED7-AD3E-211C40278470}:_5BBB4A316E4647FEB34D20AB70320849"
- {
- "Sequence" = "3:200"
- "DisplayName" = "8:Dossier d'installation"
- "UseDynamicProperties" = "11:TRUE"
- "IsDependency" = "11:FALSE"
- "SourcePath" = "8:<VsdDialogDir>\\VsdFolderDlg.wid"
- "Properties"
- {
- "BannerBitmap"
- {
- "Name" = "8:BannerBitmap"
- "DisplayName" = "8:#1001"
- "Description" = "8:#1101"
- "Type" = "3:8"
- "ContextData" = "8:Bitmap"
- "Attributes" = "3:4"
- "Setting" = "3:1"
- "UsePlugInResources" = "11:TRUE"
- }
- }
- }
- "{18ADD6EC-89FE-4ED7-AD3E-211C40278470}:_81BFECCD2AFE47F3899A9A1E5CD1A9CF"
- {
- "Sequence" = "3:300"
- "DisplayName" = "8:Confirmer l'installation"
- "UseDynamicProperties" = "11:TRUE"
- "IsDependency" = "11:FALSE"
- "SourcePath" = "8:<VsdDialogDir>\\VsdConfirmDlg.wid"
- "Properties"
- {
- "BannerBitmap"
- {
- "Name" = "8:BannerBitmap"
- "DisplayName" = "8:#1001"
- "Description" = "8:#1101"
- "Type" = "3:8"
- "ContextData" = "8:Bitmap"
- "Attributes" = "3:4"
- "Setting" = "3:1"
- "UsePlugInResources" = "11:TRUE"
- }
- }
- }
- "{18ADD6EC-89FE-4ED7-AD3E-211C40278470}:_ACD3BF5E8B1443F1993A861355C9AFC5"
- {
- "Sequence" = "3:100"
- "DisplayName" = "8:Bienvenue"
- "UseDynamicProperties" = "11:TRUE"
- "IsDependency" = "11:FALSE"
- "SourcePath" = "8:<VsdDialogDir>\\VsdWelcomeDlg.wid"
- "Properties"
- {
- "BannerBitmap"
- {
- "Name" = "8:BannerBitmap"
- "DisplayName" = "8:#1001"
- "Description" = "8:#1101"
- "Type" = "3:8"
- "ContextData" = "8:Bitmap"
- "Attributes" = "3:4"
- "Setting" = "3:1"
- "UsePlugInResources" = "11:TRUE"
- }
- "CopyrightWarning"
- {
- "Name" = "8:CopyrightWarning"
- "DisplayName" = "8:#1002"
- "Description" = "8:#1102"
- "Type" = "3:3"
- "ContextData" = "8:"
- "Attributes" = "3:0"
- "Setting" = "3:1"
- "Value" = "8:#1202"
- "DefaultValue" = "8:#1202"
- "UsePlugInResources" = "11:TRUE"
- }
- "Welcome"
- {
- "Name" = "8:Welcome"
- "DisplayName" = "8:#1003"
- "Description" = "8:#1103"
- "Type" = "3:3"
- "ContextData" = "8:"
- "Attributes" = "3:0"
- "Setting" = "3:1"
- "Value" = "8:#1203"
- "DefaultValue" = "8:#1203"
- "UsePlugInResources" = "11:TRUE"
- }
- }
- }
- }
- }
- }
- "MergeModule"
- {
- "{35A69C6E-5BA4-440D-803D-762B59A45393}:_280A192E83624205B038236965792BA6"
- {
- "UseDynamicProperties" = "11:TRUE"
- "IsDependency" = "11:TRUE"
- "SourcePath" = "8:vc_user_stl71_rtl_x86_---.msm"
- "Properties"
- {
- }
- "LanguageId" = "3:0"
- "Exclude" = "11:FALSE"
- "Folder" = "8:"
- "Feature" = "8:"
- "IsolateTo" = "8:"
- }
- "{35A69C6E-5BA4-440D-803D-762B59A45393}:_63D08CD46ADD4B6981762367F1A8B4B4"
- {
- "UseDynamicProperties" = "11:TRUE"
- "IsDependency" = "11:TRUE"
- "SourcePath" = "8:vc_user_crt71_rtl_x86_---.msm"
- "Properties"
- {
- }
- "LanguageId" = "3:0"
- "Exclude" = "11:FALSE"
- "Folder" = "8:"
- "Feature" = "8:"
- "IsolateTo" = "8:"
- }
- }
- "ProjectOutput"
- {
- "{8062640A-2EEE-46E9-AB67-688E9A886E9F}:_1FFF66C6BAC84098B44C4BFB77CF31BA"
- {
- "SourcePath" = "8:..\\Release\\IvyAudioMon.exe"
- "TargetName" = "8:"
- "Tag" = "8:"
- "Folder" = "8:_B77ADBA35B9B4DABB6315373618206DF"
- "Condition" = "8:"
- "Transitive" = "11:FALSE"
- "Vital" = "11:TRUE"
- "ReadOnly" = "11:FALSE"
- "Hidden" = "11:FALSE"
- "System" = "11:FALSE"
- "Permanent" = "11:FALSE"
- "SharedLegacy" = "11:FALSE"
- "PackageAs" = "3:1"
- "Register" = "3:1"
- "Exclude" = "11:FALSE"
- "IsDependency" = "11:FALSE"
- "IsolateTo" = "8:"
- "ProjectOutputGroupRegister" = "3:1"
- "OutputConfiguration" = "8:"
- "OutputGroupCanonicalName" = "8:Built"
- "OutputProjectGuid" = "8:{1CE6AEB9-1360-44A0-ABB6-44324A0E5812}"
- "ShowKeyOutput" = "11:TRUE"
- "ExcludeFilters"
- {
- }
- }
- "{8062640A-2EEE-46E9-AB67-688E9A886E9F}:_24D4F2F7205D4B84A9A179397CA5449D"
- {
- "SourcePath" = "8:..\\..\\Bus\\Ivy\\Release\\Ivy.dll"
- "TargetName" = "8:"
- "Tag" = "8:"
- "Folder" = "8:_B77ADBA35B9B4DABB6315373618206DF"
- "Condition" = "8:"
- "Transitive" = "11:FALSE"
- "Vital" = "11:TRUE"
- "ReadOnly" = "11:FALSE"
- "Hidden" = "11:FALSE"
- "System" = "11:FALSE"
- "Permanent" = "11:FALSE"
- "SharedLegacy" = "11:FALSE"
- "PackageAs" = "3:1"
- "Register" = "3:1"
- "Exclude" = "11:FALSE"
- "IsDependency" = "11:FALSE"
- "IsolateTo" = "8:"
- "ProjectOutputGroupRegister" = "3:1"
- "OutputConfiguration" = "8:"
- "OutputGroupCanonicalName" = "8:Built"
- "OutputProjectGuid" = "8:{84E0039A-6721-4B18-9792-E9AE4274AC0E}"
- "ShowKeyOutput" = "11:TRUE"
- "ExcludeFilters"
- {
- }
- }
- "{8062640A-2EEE-46E9-AB67-688E9A886E9F}:_955505C784224888BF1CFB0776E09565"
- {
- "SourcePath" = "8:"
- "TargetName" = "8:"
- "Tag" = "8:"
- "Folder" = "8:_B77ADBA35B9B4DABB6315373618206DF"
- "Condition" = "8:"
- "Transitive" = "11:FALSE"
- "Vital" = "11:TRUE"
- "ReadOnly" = "11:FALSE"
- "Hidden" = "11:FALSE"
- "System" = "11:FALSE"
- "Permanent" = "11:FALSE"
- "SharedLegacy" = "11:FALSE"
- "PackageAs" = "3:1"
- "Register" = "3:1"
- "Exclude" = "11:FALSE"
- "IsDependency" = "11:FALSE"
- "IsolateTo" = "8:"
- "ProjectOutputGroupRegister" = "3:1"
- "OutputConfiguration" = "8:"
- "OutputGroupCanonicalName" = "8:ContentFiles"
- "OutputProjectGuid" = "8:{1CE6AEB9-1360-44A0-ABB6-44324A0E5812}"
- "ShowKeyOutput" = "11:TRUE"
- "ExcludeFilters"
- {
- }
- }
- }
- "VJSharpPlugin"
- {
- }
- }
-}
diff --git a/Bus/IvyAudioMon/InstIvyAudioMonitor/InstIvyAudioMonitor.vdproj.vspscc b/Bus/IvyAudioMon/InstIvyAudioMonitor/InstIvyAudioMonitor.vdproj.vspscc
deleted file mode 100644
index 853b643..0000000
--- a/Bus/IvyAudioMon/InstIvyAudioMonitor/InstIvyAudioMonitor.vdproj.vspscc
+++ /dev/null
@@ -1,10 +0,0 @@
-""
-{
-"FILE_VERSION" = "9237"
-"ENLISTMENT_CHOICE" = "NEVER"
-"PROJECT_FILE_RELATIVE_PATH" = "relative:InstIvyAudioMonitor"
-"NUMBER_OF_EXCLUDED_FILES" = "0"
-"ORIGINAL_PROJECT_FILE_PATH" = ""
-"NUMBER_OF_NESTED_PROJECTS" = "0"
-"SOURCE_CONTROL_SETTINGS_PROVIDER" = "PROVIDER"
-}
diff --git a/Bus/IvyAudioMon/IvyAudioMon.exe.manifest b/Bus/IvyAudioMon/IvyAudioMon.exe.manifest
deleted file mode 100644
index 4b4b9ea..0000000
--- a/Bus/IvyAudioMon/IvyAudioMon.exe.manifest
+++ /dev/null
@@ -1,22 +0,0 @@
-<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
-<assembly
- xmlns="urn:schemas-microsoft-com:asm.v1"
- manifestVersion="1.0">
-<assemblyIdentity
- processorArchitecture="x86"
- version="5.1.0.0"
- type="win32"
- name="IvyAudioMon.exe"/>
- <description>IvyAudioMon</description>
- <dependency>
- <dependentAssembly>
- <assemblyIdentity
- type="win32"
- name="Microsoft.Windows.Common-Controls"
- version="6.0.0.0"
- publicKeyToken="6595b64144ccf1df"
- language="*"
- processorArchitecture="x86"/>
- </dependentAssembly>
- </dependency>
-</assembly>
diff --git a/Bus/IvyAudioMon/IvyAudioMon.sln b/Bus/IvyAudioMon/IvyAudioMon.sln
deleted file mode 100644
index 9bf1146..0000000
--- a/Bus/IvyAudioMon/IvyAudioMon.sln
+++ /dev/null
@@ -1,54 +0,0 @@
-Microsoft Visual Studio Solution File, Format Version 8.00
-Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "IvyAudioMon", "Meter.vcproj", "{1CE6AEB9-1360-44A0-ABB6-44324A0E5812}"
- ProjectSection(ProjectDependencies) = postProject
- {84E0039A-6721-4B18-9792-E9AE4274AC0E} = {84E0039A-6721-4B18-9792-E9AE4274AC0E}
- EndProjectSection
-EndProject
-Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "Ivy", "..\Bus\Ivy\Ivy.vcproj", "{84E0039A-6721-4B18-9792-E9AE4274AC0E}"
- ProjectSection(ProjectDependencies) = postProject
- EndProjectSection
-EndProject
-Project("{54435603-DBB4-11D2-8724-00A0C9A8B90C}") = "Install", "InstIvyAudioMonitor\InstIvyAudioMonitor.vdproj", "{F1B2FDBA-BFA9-4738-9A7A-A02015B2020C}"
- ProjectSection(ProjectDependencies) = postProject
- EndProjectSection
-EndProject
-Global
- GlobalSection(SourceCodeControl) = preSolution
- SccNumberOfProjects = 4
- SccLocalPath0 = .
- CanCheckoutShared = false
- SolutionUniqueID = {7EBE2858-5CAE-4B88-9010-B3E88451FDCD}
- SccProjectUniqueName1 = ..\\Bus\\Ivy\\Ivy.vcproj
- SccProjectName1 = \u0022$/Bus/Ivy\u0022,\u0020QPEAAAAA
- SccLocalPath1 = ..\\Bus\\Ivy
- CanCheckoutShared = false
- SccProjectUniqueName2 = InstIvyAudioMonitor\\InstIvyAudioMonitor.vdproj
- SccLocalPath2 = .
- CanCheckoutShared = false
- SccProjectFilePathRelativizedFromConnection2 = InstIvyAudioMonitor\\
- SccProjectUniqueName3 = Meter.vcproj
- SccLocalPath3 = .
- CanCheckoutShared = false
- EndGlobalSection
- GlobalSection(SolutionConfiguration) = preSolution
- Debug = Debug
- Release = Release
- EndGlobalSection
- GlobalSection(ProjectConfiguration) = postSolution
- {1CE6AEB9-1360-44A0-ABB6-44324A0E5812}.Debug.ActiveCfg = Debug|Win32
- {1CE6AEB9-1360-44A0-ABB6-44324A0E5812}.Debug.Build.0 = Debug|Win32
- {1CE6AEB9-1360-44A0-ABB6-44324A0E5812}.Release.ActiveCfg = Release|Win32
- {1CE6AEB9-1360-44A0-ABB6-44324A0E5812}.Release.Build.0 = Release|Win32
- {84E0039A-6721-4B18-9792-E9AE4274AC0E}.Debug.ActiveCfg = Debug|Win32
- {84E0039A-6721-4B18-9792-E9AE4274AC0E}.Debug.Build.0 = Debug|Win32
- {84E0039A-6721-4B18-9792-E9AE4274AC0E}.Release.ActiveCfg = Release|Win32
- {84E0039A-6721-4B18-9792-E9AE4274AC0E}.Release.Build.0 = Release|Win32
- {F1B2FDBA-BFA9-4738-9A7A-A02015B2020C}.Debug.ActiveCfg = Debug
- {F1B2FDBA-BFA9-4738-9A7A-A02015B2020C}.Release.ActiveCfg = Release
- {F1B2FDBA-BFA9-4738-9A7A-A02015B2020C}.Release.Build.0 = Release
- EndGlobalSection
- GlobalSection(ExtensibilityGlobals) = postSolution
- EndGlobalSection
- GlobalSection(ExtensibilityAddIns) = postSolution
- EndGlobalSection
-EndGlobal
diff --git a/Bus/IvyAudioMon/IvyAudioMon.vssscc b/Bus/IvyAudioMon/IvyAudioMon.vssscc
deleted file mode 100644
index 794f014..0000000
--- a/Bus/IvyAudioMon/IvyAudioMon.vssscc
+++ /dev/null
@@ -1,10 +0,0 @@
-""
-{
-"FILE_VERSION" = "9237"
-"ENLISTMENT_CHOICE" = "NEVER"
-"PROJECT_FILE_RELATIVE_PATH" = ""
-"NUMBER_OF_EXCLUDED_FILES" = "0"
-"ORIGINAL_PROJECT_FILE_PATH" = ""
-"NUMBER_OF_NESTED_PROJECTS" = "0"
-"SOURCE_CONTROL_SETTINGS_PROVIDER" = "PROJECT"
-}
diff --git a/Bus/IvyAudioMon/Meter.cpp b/Bus/IvyAudioMon/Meter.cpp
deleted file mode 100644
index 5df8655..0000000
--- a/Bus/IvyAudioMon/Meter.cpp
+++ /dev/null
@@ -1,72 +0,0 @@
-// Meter.cpp : Defines the class behaviors for the application.
-//
-
-#include "stdafx.h"
-#include "Meter.h"
-#include "MeterDlg.h"
-
-#ifdef _DEBUG
-#define new DEBUG_NEW
-#undef THIS_FILE
-static char THIS_FILE[] = __FILE__;
-#endif
-
-/////////////////////////////////////////////////////////////////////////////
-// CMeterApp
-
-BEGIN_MESSAGE_MAP(CMeterApp, CWinApp)
- //{{AFX_MSG_MAP(CMeterApp)
- // NOTE - the ClassWizard will add and remove mapping macros here.
- // DO NOT EDIT what you see in these blocks of generated code!
- //}}AFX_MSG
- ON_COMMAND(ID_HELP, CWinApp::OnHelp)
-END_MESSAGE_MAP()
-
-/////////////////////////////////////////////////////////////////////////////
-// CMeterApp construction
-
-CMeterApp::CMeterApp()
-{
- // TODO: add construction code here,
- // Place all significant initialization in InitInstance
-}
-
-/////////////////////////////////////////////////////////////////////////////
-// The one and only CMeterApp object
-
-CMeterApp theApp;
-
-/////////////////////////////////////////////////////////////////////////////
-// CMeterApp initialization
-
-BOOL CMeterApp::InitInstance()
-{
- // Standard initialization
- // If you are not using these features and wish to reduce the size
- // of your final executable, you should remove from the following
- // the specific initialization routines you do not need.
-
-#ifdef _AFXDLL
- //Enable3dControls(); // Call this when using MFC in a shared DLL
-#else
- //Enable3dControlsStatic(); // Call this when linking to MFC statically
-#endif
-
- CMeterDlg dlg;
- m_pMainWnd = &dlg;
- int nResponse = dlg.DoModal();
- if (nResponse == IDOK)
- {
- // TODO: Place code here to handle when the dialog is
- // dismissed with OK
- }
- else if (nResponse == IDCANCEL)
- {
- // TODO: Place code here to handle when the dialog is
- // dismissed with Cancel
- }
-
- // Since the dialog has been closed, return FALSE so that we exit the
- // application, rather than start the application's message pump.
- return FALSE;
-}
diff --git a/Bus/IvyAudioMon/Meter.h b/Bus/IvyAudioMon/Meter.h
deleted file mode 100644
index 4e9e30a..0000000
--- a/Bus/IvyAudioMon/Meter.h
+++ /dev/null
@@ -1,49 +0,0 @@
-// Meter.h : main header file for the METER application
-//
-
-#if !defined(AFX_METER_H__3A48D835_F4B7_11D1_9F80_006008984DF6__INCLUDED_)
-#define AFX_METER_H__3A48D835_F4B7_11D1_9F80_006008984DF6__INCLUDED_
-
-#if _MSC_VER >= 1000
-#pragma once
-#endif // _MSC_VER >= 1000
-
-#ifndef __AFXWIN_H__
- #error include 'stdafx.h' before including this file for PCH
-#endif
-
-#include "resource.h" // main symbols
-
-/////////////////////////////////////////////////////////////////////////////
-// CMeterApp:
-// See Meter.cpp for the implementation of this class
-//
-
-class CMeterApp : public CWinApp
-{
-public:
- CMeterApp();
-
-// Overrides
- // ClassWizard generated virtual function overrides
- //{{AFX_VIRTUAL(CMeterApp)
- public:
- virtual BOOL InitInstance();
- //}}AFX_VIRTUAL
-
-// Implementation
-
- //{{AFX_MSG(CMeterApp)
- // NOTE - the ClassWizard will add and remove member functions here.
- // DO NOT EDIT what you see in these blocks of generated code !
- //}}AFX_MSG
- DECLARE_MESSAGE_MAP()
-};
-
-
-/////////////////////////////////////////////////////////////////////////////
-
-//{{AFX_INSERT_LOCATION}}
-// Microsoft Developer Studio will insert additional declarations immediately before the previous line.
-
-#endif // !defined(AFX_METER_H__3A48D835_F4B7_11D1_9F80_006008984DF6__INCLUDED_)
diff --git a/Bus/IvyAudioMon/Meter.rc b/Bus/IvyAudioMon/Meter.rc
deleted file mode 100644
index b7c7058..0000000
--- a/Bus/IvyAudioMon/Meter.rc
+++ /dev/null
@@ -1,206 +0,0 @@
-// Microsoft Visual C++ generated resource script.
-//
-#include "resource.h"
-
-#define APSTUDIO_READONLY_SYMBOLS
-/////////////////////////////////////////////////////////////////////////////
-//
-// Generated from the TEXTINCLUDE 2 resource.
-//
-#include "afxres.h"
-
-/////////////////////////////////////////////////////////////////////////////
-#undef APSTUDIO_READONLY_SYMBOLS
-
-/////////////////////////////////////////////////////////////////////////////
-// Anglais (États-Unis) resources
-
-#if !defined(AFX_RESOURCE_DLL) || defined(AFX_TARG_ENU)
-#ifdef _WIN32
-LANGUAGE LANG_ENGLISH, SUBLANG_ENGLISH_US
-#pragma code_page(1252)
-#endif //_WIN32
-
-#ifdef APSTUDIO_INVOKED
-/////////////////////////////////////////////////////////////////////////////
-//
-// TEXTINCLUDE
-//
-
-1 TEXTINCLUDE
-BEGIN
- "resource.h\0"
-END
-
-2 TEXTINCLUDE
-BEGIN
- "#include ""afxres.h""\r\n"
- "\0"
-END
-
-3 TEXTINCLUDE
-BEGIN
- "#define _AFX_NO_SPLITTER_RESOURCES\r\n"
- "#define _AFX_NO_OLE_RESOURCES\r\n"
- "#define _AFX_NO_TRACKER_RESOURCES\r\n"
- "#define _AFX_NO_PROPERTY_RESOURCES\r\n"
- "\r\n"
- "#if !defined(AFX_RESOURCE_DLL) || defined(AFX_TARG_ENU)\r\n"
- "#ifdef _WIN32\r\n"
- "LANGUAGE 9, 1\r\n"
- "#pragma code_page(1252)\r\n"
- "#endif\r\n"
- "#include ""res\\Meter.rc2"" // non-Microsoft Visual C++ edited resources\r\n"
- "#include ""afxres.rc"" // Standard components\r\n"
- "#endif\0"
-END
-
-#endif // APSTUDIO_INVOKED
-
-
-/////////////////////////////////////////////////////////////////////////////
-//
-// Icon
-//
-
-// Icon with lowest ID value placed first to ensure application icon
-// remains consistent on all systems.
-IDR_MAINFRAME ICON "res\\Meter.ico"
-
-/////////////////////////////////////////////////////////////////////////////
-//
-// Dialog
-//
-
-IDD_ABOUTBOX DIALOGEX 0, 0, 197, 78
-STYLE DS_SETFONT | DS_MODALFRAME | WS_POPUP | WS_CAPTION | WS_SYSMENU
-CAPTION "About Ivy Audio Monitor"
-FONT 8, "MS Sans Serif", 0, 0, 0x0
-BEGIN
- ICON IDR_MAINFRAME,IDC_STATIC,11,17,20,20
- LTEXT "Ivy Audio Monitor",IDC_STATIC,40,12,143,8,SS_NOPREFIX
- LTEXT "Copyright (C) PII 2002 - 2115",IDC_STATIC,40,36,143,8
- DEFPUSHBUTTON "OK",IDOK,83,51,32,14,WS_GROUP
- LTEXT "Version 1.0",IDC_STATIC,40,24,143,8
-END
-
-IDD_METER_DIALOG DIALOGEX 0, 0, 214, 84
-STYLE DS_SETFONT | DS_MODALFRAME | WS_POPUP | WS_VISIBLE | WS_CAPTION |
- WS_SYSMENU
-EXSTYLE WS_EX_APPWINDOW
-CAPTION "Ivy Audio Monitor"
-FONT 8, "MS Sans Serif", 0, 0, 0x1
-BEGIN
- CONTROL "Progress1",IDC_PROGRESS,"msctls_progress32",WS_BORDER,
- 20,38,173,14
- CONTROL "",IDC_PEEK,"msctls_progress32",WS_BORDER,19,58,173,14
- EDITTEXT IDC_BUS,20,17,172,15,ES_AUTOHSCROLL
-END
-
-
-/////////////////////////////////////////////////////////////////////////////
-//
-// Version
-//
-
-VS_VERSION_INFO VERSIONINFO
- FILEVERSION 1,2,0,0
- PRODUCTVERSION 1,2,0,0
- FILEFLAGSMASK 0x3fL
-#ifdef _DEBUG
- FILEFLAGS 0x1L
-#else
- FILEFLAGS 0x0L
-#endif
- FILEOS 0x4L
- FILETYPE 0x1L
- FILESUBTYPE 0x0L
-BEGIN
- BLOCK "StringFileInfo"
- BEGIN
- BLOCK "040904b0"
- BEGIN
- VALUE "CompanyName", "chensu"
- VALUE "FileDescription", "Audio Mixer Functions Demo - Wave Meter"
- VALUE "FileVersion", "1.2"
- VALUE "InternalName", "Wave Meter"
- VALUE "LegalCopyright", "Copyright (C) chensu 1998 - 2002"
- VALUE "OriginalFilename", "Meter.EXE"
- VALUE "ProductName", "Audio Mixer Functions Demo"
- VALUE "ProductVersion", "1.2"
- END
- END
- BLOCK "VarFileInfo"
- BEGIN
- VALUE "Translation", 0x409, 1200
- END
-END
-
-
-/////////////////////////////////////////////////////////////////////////////
-//
-// DESIGNINFO
-//
-
-#ifdef APSTUDIO_INVOKED
-GUIDELINES DESIGNINFO
-BEGIN
- IDD_ABOUTBOX, DIALOG
- BEGIN
- LEFTMARGIN, 7
- RIGHTMARGIN, 190
- TOPMARGIN, 7
- BOTTOMMARGIN, 71
- END
-
- IDD_METER_DIALOG, DIALOG
- BEGIN
- LEFTMARGIN, 7
- RIGHTMARGIN, 207
- TOPMARGIN, 7
- BOTTOMMARGIN, 77
- END
-END
-#endif // APSTUDIO_INVOKED
-
-
-/////////////////////////////////////////////////////////////////////////////
-//
-// String Table
-//
-
-STRINGTABLE
-BEGIN
- IDS_ABOUTBOX "&About Wave Meter..."
- IDS_FMTNUMMIXERS "%u mixer(s)"
- IDS_FMTCAPS "%s, %lu destination line(s)"
- IDS_FMTNAMES "%s - %s"
- IDS_NOCONTROL "The control does not exist."
-END
-
-#endif // Anglais (États-Unis) resources
-/////////////////////////////////////////////////////////////////////////////
-
-
-
-#ifndef APSTUDIO_INVOKED
-/////////////////////////////////////////////////////////////////////////////
-//
-// Generated from the TEXTINCLUDE 3 resource.
-//
-#define _AFX_NO_SPLITTER_RESOURCES
-#define _AFX_NO_OLE_RESOURCES
-#define _AFX_NO_TRACKER_RESOURCES
-#define _AFX_NO_PROPERTY_RESOURCES
-
-#if !defined(AFX_RESOURCE_DLL) || defined(AFX_TARG_ENU)
-#ifdef _WIN32
-LANGUAGE 9, 1
-#pragma code_page(1252)
-#endif
-#include "res\Meter.rc2" // non-Microsoft Visual C++ edited resources
-#include "afxres.rc" // Standard components
-#endif
-/////////////////////////////////////////////////////////////////////////////
-#endif // not APSTUDIO_INVOKED
-
diff --git a/Bus/IvyAudioMon/Meter.vcproj b/Bus/IvyAudioMon/Meter.vcproj
deleted file mode 100644
index 0278e48..0000000
--- a/Bus/IvyAudioMon/Meter.vcproj
+++ /dev/null
@@ -1,250 +0,0 @@
-<?xml version="1.0" encoding="Windows-1252"?>
-<VisualStudioProject
- ProjectType="Visual C++"
- Version="7.10"
- Name="IvyAudioMon"
- SccProjectName="SAK"
- SccAuxPath="SAK"
- SccLocalPath="SAK"
- SccProvider="SAK"
- Keyword="MFCProj">
- <Platforms>
- <Platform
- Name="Win32"/>
- </Platforms>
- <Configurations>
- <Configuration
- Name="Debug|Win32"
- OutputDirectory=".\Debug"
- IntermediateDirectory=".\Debug"
- ConfigurationType="1"
- UseOfMFC="1"
- ATLMinimizesCRunTimeLibraryUsage="FALSE">
- <Tool
- Name="VCCLCompilerTool"
- Optimization="0"
- AdditionalIncludeDirectories="..\Ivy"
- PreprocessorDefinitions="WIN32;_DEBUG;_WINDOWS"
- RuntimeLibrary="1"
- UsePrecompiledHeader="3"
- PrecompiledHeaderThrough="stdafx.h"
- PrecompiledHeaderFile=".\Debug/Meter.pch"
- AssemblerListingLocation=".\Debug/"
- ObjectFile=".\Debug/"
- ProgramDataBaseFileName=".\Debug/"
- WarningLevel="4"
- SuppressStartupBanner="TRUE"
- DebugInformationFormat="4"/>
- <Tool
- Name="VCCustomBuildTool"/>
- <Tool
- Name="VCLinkerTool"
- AdditionalDependencies="winmm.lib"
- LinkIncremental="1"
- SuppressStartupBanner="TRUE"
- GenerateDebugInformation="TRUE"
- ProgramDatabaseFile=".\Debug/Meter.pdb"
- SubSystem="2"
- TargetMachine="1"/>
- <Tool
- Name="VCMIDLTool"
- PreprocessorDefinitions="_DEBUG"
- MkTypLibCompatible="TRUE"
- SuppressStartupBanner="TRUE"
- TargetEnvironment="1"
- TypeLibraryName=".\Debug/Meter.tlb"
- HeaderFileName=""/>
- <Tool
- Name="VCPostBuildEventTool"/>
- <Tool
- Name="VCPreBuildEventTool"/>
- <Tool
- Name="VCPreLinkEventTool"/>
- <Tool
- Name="VCResourceCompilerTool"
- PreprocessorDefinitions="_DEBUG"
- Culture="1033"/>
- <Tool
- Name="VCWebServiceProxyGeneratorTool"/>
- <Tool
- Name="VCXMLDataGeneratorTool"/>
- <Tool
- Name="VCWebDeploymentTool"/>
- <Tool
- Name="VCManagedWrapperGeneratorTool"/>
- <Tool
- Name="VCAuxiliaryManagedWrapperGeneratorTool"/>
- </Configuration>
- <Configuration
- Name="Release|Win32"
- OutputDirectory=".\Release"
- IntermediateDirectory=".\Release"
- ConfigurationType="1"
- UseOfMFC="1"
- ATLMinimizesCRunTimeLibraryUsage="FALSE">
- <Tool
- Name="VCCLCompilerTool"
- Optimization="1"
- InlineFunctionExpansion="1"
- AdditionalIncludeDirectories="..\Ivy"
- PreprocessorDefinitions="WIN32;NDEBUG;_WINDOWS"
- StringPooling="TRUE"
- RuntimeLibrary="0"
- EnableFunctionLevelLinking="TRUE"
- UsePrecompiledHeader="3"
- PrecompiledHeaderThrough="stdafx.h"
- PrecompiledHeaderFile=".\Release/Meter.pch"
- AssemblerListingLocation=".\Release/"
- ObjectFile=".\Release/"
- ProgramDataBaseFileName=".\Release/"
- WarningLevel="4"
- SuppressStartupBanner="TRUE"/>
- <Tool
- Name="VCCustomBuildTool"/>
- <Tool
- Name="VCLinkerTool"
- AdditionalDependencies="winmm.lib"
- LinkIncremental="1"
- SuppressStartupBanner="TRUE"
- ProgramDatabaseFile=".\Release/Meter.pdb"
- SubSystem="2"
- TargetMachine="1"/>
- <Tool
- Name="VCMIDLTool"
- PreprocessorDefinitions="NDEBUG"
- MkTypLibCompatible="TRUE"
- SuppressStartupBanner="TRUE"
- TargetEnvironment="1"
- TypeLibraryName=".\Release/Meter.tlb"
- HeaderFileName=""/>
- <Tool
- Name="VCPostBuildEventTool"/>
- <Tool
- Name="VCPreBuildEventTool"/>
- <Tool
- Name="VCPreLinkEventTool"/>
- <Tool
- Name="VCResourceCompilerTool"
- PreprocessorDefinitions="NDEBUG"
- Culture="1033"/>
- <Tool
- Name="VCWebServiceProxyGeneratorTool"/>
- <Tool
- Name="VCXMLDataGeneratorTool"/>
- <Tool
- Name="VCWebDeploymentTool"/>
- <Tool
- Name="VCManagedWrapperGeneratorTool"/>
- <Tool
- Name="VCAuxiliaryManagedWrapperGeneratorTool"/>
- </Configuration>
- </Configurations>
- <References>
- </References>
- <Files>
- <Filter
- Name="Source Files"
- Filter="cpp;c;cxx;rc;def;r;odl;idl;hpj;bat">
- <File
- RelativePath="Meter.cpp">
- <FileConfiguration
- Name="Debug|Win32">
- <Tool
- Name="VCCLCompilerTool"
- Optimization="0"
- PreprocessorDefinitions=""/>
- </FileConfiguration>
- <FileConfiguration
- Name="Release|Win32">
- <Tool
- Name="VCCLCompilerTool"
- Optimization="1"
- PreprocessorDefinitions=""/>
- </FileConfiguration>
- </File>
- <File
- RelativePath="Meter.rc">
- </File>
- <File
- RelativePath="MeterDlg.cpp">
- <FileConfiguration
- Name="Debug|Win32">
- <Tool
- Name="VCCLCompilerTool"
- Optimization="0"
- PreprocessorDefinitions=""/>
- </FileConfiguration>
- <FileConfiguration
- Name="Release|Win32">
- <Tool
- Name="VCCLCompilerTool"
- Optimization="1"
- PreprocessorDefinitions=""/>
- </FileConfiguration>
- </File>
- <File
- RelativePath=".\ParseCmdLine.cpp">
- </File>
- <File
- RelativePath="StdAfx.cpp">
- <FileConfiguration
- Name="Debug|Win32">
- <Tool
- Name="VCCLCompilerTool"
- Optimization="0"
- PreprocessorDefinitions=""
- UsePrecompiledHeader="1"/>
- </FileConfiguration>
- <FileConfiguration
- Name="Release|Win32">
- <Tool
- Name="VCCLCompilerTool"
- Optimization="1"
- PreprocessorDefinitions=""
- UsePrecompiledHeader="1"/>
- </FileConfiguration>
- </File>
- </Filter>
- <Filter
- Name="Header Files"
- Filter="h;hpp;hxx;hm;inl">
- <File
- RelativePath="Meter.h">
- </File>
- <File
- RelativePath="MeterDlg.h">
- </File>
- <File
- RelativePath=".\ParseCmdLine.h">
- </File>
- <File
- RelativePath="Resource.h">
- </File>
- <File
- RelativePath="StdAfx.h">
- </File>
- </Filter>
- <Filter
- Name="Resource Files"
- Filter="ico;cur;bmp;dlg;rc2;rct;bin;cnt;rtf;gif;jpg;jpeg;jpe">
- <File
- RelativePath="res\Meter.ico">
- </File>
- <File
- RelativePath="res\Meter.rc2">
- </File>
- </Filter>
- <File
- RelativePath=".\IvyAudioMon.exe.manifest"
- DeploymentContent="TRUE">
- </File>
- <File
- RelativePath="ReadMe.txt">
- </File>
- </Files>
- <Globals>
- <Global
- Name="RESOURCE_FILE"
- Value="Meter.rc"/>
- </Globals>
-</VisualStudioProject>
diff --git a/Bus/IvyAudioMon/Meter.vcproj.vspscc b/Bus/IvyAudioMon/Meter.vcproj.vspscc
deleted file mode 100644
index feffdec..0000000
--- a/Bus/IvyAudioMon/Meter.vcproj.vspscc
+++ /dev/null
@@ -1,10 +0,0 @@
-""
-{
-"FILE_VERSION" = "9237"
-"ENLISTMENT_CHOICE" = "NEVER"
-"PROJECT_FILE_RELATIVE_PATH" = ""
-"NUMBER_OF_EXCLUDED_FILES" = "0"
-"ORIGINAL_PROJECT_FILE_PATH" = ""
-"NUMBER_OF_NESTED_PROJECTS" = "0"
-"SOURCE_CONTROL_SETTINGS_PROVIDER" = "PROVIDER"
-}
diff --git a/Bus/IvyAudioMon/MeterDlg.cpp b/Bus/IvyAudioMon/MeterDlg.cpp
deleted file mode 100644
index 1749e28..0000000
--- a/Bus/IvyAudioMon/MeterDlg.cpp
+++ /dev/null
@@ -1,365 +0,0 @@
-// MeterDlg.cpp : implementation file
-//
-
-#include "stdafx.h"
-#include <stdlib.h> // abs, __max
-#include <math.h>
-#include "Meter.h"
-#include "MeterDlg.h"
-#include "ParseCmdLine.h"
-
-#ifdef _DEBUG
-#define new DEBUG_NEW
-#undef THIS_FILE
-static char THIS_FILE[] = __FILE__;
-#endif
-
-
-const char * CONVSTR( const CString& str )
-{
-#ifdef UNDER_CE
-
- static char buffer[4096];
- int len = str.GetLength();
- buffer[len] = '\0';
- if ( len )
- {
- int err = WideCharToMultiByte( CP_ACP, 0, str, len, buffer, 4096, NULL, NULL );
- if ( err == 0 )
- TRACE(TEXT("Error converting chars %d\n"),GetLastError());
- }
- return buffer;
-#else
- return (LPCSTR) str;
-#endif
-
-}
-/////////////////////////////////////////////////////////////////////////////
-// CAboutDlg dialog used for App About
-
-class CAboutDlg : public CDialog
-{
-public:
- CAboutDlg();
-
-// Dialog Data
- //{{AFX_DATA(CAboutDlg)
- enum { IDD = IDD_ABOUTBOX };
- //}}AFX_DATA
-
- // ClassWizard generated virtual function overrides
- //{{AFX_VIRTUAL(CAboutDlg)
- protected:
- virtual void DoDataExchange(CDataExchange* pDX); // DDX/DDV support
- //}}AFX_VIRTUAL
-
-// Implementation
-protected:
- //{{AFX_MSG(CAboutDlg)
- //}}AFX_MSG
- DECLARE_MESSAGE_MAP()
-};
-
-CAboutDlg::CAboutDlg() : CDialog(CAboutDlg::IDD)
-{
- //{{AFX_DATA_INIT(CAboutDlg)
- //}}AFX_DATA_INIT
-}
-
-void CAboutDlg::DoDataExchange(CDataExchange* pDX)
-{
- CDialog::DoDataExchange(pDX);
- //{{AFX_DATA_MAP(CAboutDlg)
- //}}AFX_DATA_MAP
-}
-
-BEGIN_MESSAGE_MAP(CAboutDlg, CDialog)
- //{{AFX_MSG_MAP(CAboutDlg)
- // No message handlers
- //}}AFX_MSG_MAP
-END_MESSAGE_MAP()
-
-/////////////////////////////////////////////////////////////////////////////
-// CMeterDlg dialog
-
-CMeterDlg::CMeterDlg(CWnd* pParent /*=NULL*/)
- : CDialog(CMeterDlg::IDD, pParent)
- , m_busnumber(_T(""))
-{
- //{{AFX_DATA_INIT(CMeterDlg)
- //}}AFX_DATA_INIT
- // Note that LoadIcon does not require a subsequent DestroyIcon in Win32
- m_hIcon = AfxGetApp()->LoadIcon(IDR_MAINFRAME);
-}
-
-void CMeterDlg::DoDataExchange(CDataExchange* pDX)
-{
- CDialog::DoDataExchange(pDX);
- //{{AFX_DATA_MAP(CMeterDlg)
- DDX_Control(pDX, IDC_PROGRESS, m_ctrlProgress);
- DDX_Control(pDX, IDC_PEEK, m_ctrlPeekValue);
- DDX_Text(pDX, IDC_BUS, m_busnumber);
- //}}AFX_DATA_MAP
-
-
-}
-
-BEGIN_MESSAGE_MAP(CMeterDlg, CDialog)
- //{{AFX_MSG_MAP(CMeterDlg)
- ON_WM_DESTROY()
- ON_WM_SYSCOMMAND()
- ON_WM_PAINT()
- ON_WM_QUERYDRAGICON()
- //}}AFX_MSG_MAP
-END_MESSAGE_MAP()
-
-/////////////////////////////////////////////////////////////////////////////
-// CMeterDlg message handlers
-
-BOOL CMeterDlg::OnInitDialog()
-{
- CDialog::OnInitDialog();
-
- // Add "About..." menu item to system menu.
-
- // IDM_ABOUTBOX must be in the system command range.
- ASSERT((IDM_ABOUTBOX & 0xFFF0) == IDM_ABOUTBOX);
- ASSERT(IDM_ABOUTBOX < 0xF000);
-
- CMenu* pSysMenu = GetSystemMenu(FALSE);
- if (pSysMenu != NULL)
- {
- CString strAboutMenu;
- strAboutMenu.LoadString(IDS_ABOUTBOX);
- if (!strAboutMenu.IsEmpty())
- {
- pSysMenu->AppendMenu(MF_SEPARATOR);
- pSysMenu->AppendMenu(MF_STRING, IDM_ABOUTBOX, strAboutMenu);
- }
- }
-
- // Set the icon for this dialog. The framework does this automatically
- // when the application's main window is not a dialog
- SetIcon(m_hIcon, TRUE); // Set big icon
- SetIcon(m_hIcon, FALSE); // Set small icon
- m_ctrlProgress.SetRange( 0 , 255 );
- m_ctrlPeekValue.SetRange( 0 , 255 );
-
- nb_buffers = 0;
- peekValue = 0.0;
- lastValue = 0.0;
- m_seuil = 15.0;
-
- openWaveDev();
-
- // parse command Line Info
- ParseCmdLine cmd;
- AfxGetApp()->ParseCommandLine( cmd );
-
- // Set Argument from Command Line
- m_seuil = cmd.m_seuil;
- m_busnumber = cmd.m_busNumber;
- bus = new Ivy( "IvyAudioMon","IvyAudioMon Ready",this,FALSE);
-
-// bus->BindMsg("(.*)", BUS_CALLBACK_OF(CTestDlg, IvyCallback ));
-
- //bus->BindMsg("^S( A=([0-9]+))?( B=([0-9]+))?",cb);
-
- // force bus start in case of start
- m_busnumber = bus->GetDomain( CONVSTR(m_busnumber) );
- bus->start(CONVSTR(m_busnumber));
-
-
- VERIFY(this->UpdateData(FALSE));
-
- return TRUE; // return TRUE unless you set the focus to a control
-}
-void CMeterDlg::OnApplicationConnected(IvyApplication *app)
-{
-// TRACE( "Application: %s ready",(LPCSTR)(app->GetName()) );
-}
-void CMeterDlg::OnApplicationDisconnected(IvyApplication *app)
-{
-// TRACE( "Application: %s bye",(LPCSTR)(app->GetName()) );
-}
-void CMeterDlg::OnOK()
-{
- VERIFY(this->UpdateData(TRUE));
- m_busnumber = bus->GetDomain( CONVSTR(m_busnumber) );
- if ( m_busnumber.FindOneOf(":") )
- {
- bus->stop();
- bus->start(CONVSTR(m_busnumber));
- }
- VERIFY(this->UpdateData(FALSE));
-
- // Do not close on return key
- return;
-
- // CDialog::OnOK(); // This will close the dialog and DoModal will return.
-}
-
-
-void CMeterDlg::OnDestroy()
-{
- bus->stop();
- delete bus;
- CDialog::OnDestroy();
-}
-
-void CMeterDlg::OnSysCommand(UINT nID, LPARAM lParam)
-{
- if ((nID & 0xFFF0) == IDM_ABOUTBOX)
- {
- CAboutDlg dlgAbout;
- dlgAbout.DoModal();
- }
- else
- {
- CDialog::OnSysCommand(nID, lParam);
- }
-}
-
-// If you add a minimize button to your dialog, you will need the code below
-// to draw the icon. For MFC applications using the document/view model,
-// this is automatically done for you by the framework.
-
-void CMeterDlg::OnPaint()
-{
- if (IsIconic())
- {
- CPaintDC dc(this); // device context for painting
-
- SendMessage(WM_ICONERASEBKGND, (WPARAM) dc.GetSafeHdc(), 0);
-
- // Center icon in client rectangle
- int cxIcon = GetSystemMetrics(SM_CXICON);
- int cyIcon = GetSystemMetrics(SM_CYICON);
- CRect rect;
- GetClientRect(&rect);
- int x = (rect.Width() - cxIcon + 1) / 2;
- int y = (rect.Height() - cyIcon + 1) / 2;
-
- // Draw the icon
- dc.DrawIcon(x, y, m_hIcon);
- }
- else
- {
- CDialog::OnPaint();
- }
-}
-
-// The system calls this to obtain the cursor to display while the user drags
-// the minimized window.
-HCURSOR CMeterDlg::OnQueryDragIcon()
-{
- return (HCURSOR) m_hIcon;
-}
-
-
-/*
-* Callback function when WAVE input buffer is full
-*/
-void CALLBACK CMeterDlg::recordCallBack(HWAVEIN hWaveIn, UINT uMsg, DWORD dwInstance, DWORD dwParam1, DWORD dwParam2)
-{
- CMeterDlg* ctrl = (CMeterDlg*) dwInstance;
- ctrl->recordCB( hWaveIn, uMsg, dwInstance, dwParam1, dwParam2 );
-}
-void CALLBACK CMeterDlg::recordCB(HWAVEIN hWaveIn, UINT uMsg, DWORD dwInstance, DWORD dwParam1, DWORD dwParam2)
-{
- WAVEHDR *waveHeader = (WAVEHDR*)dwParam1;
- float lVal =0;
- switch ( uMsg )
- {
- case WIM_OPEN:
- TRACE("WIM_OPEN\n");
- break;
- case WIM_DATA:
- for ( DWORD i = 0; i < waveHeader->dwBytesRecorded; i++ )
- {
- //TRACE("WIM_DATA[%d]= %02x\n",i,waveHeader->lpData[i]);
- lVal += abs( (float)( unsigned char )waveHeader->lpData[i] - 127.0f) ;
- }
- lVal /= waveHeader->dwBytesRecorded ;
- lVal *= 2;
- TRACE("WIM_DATA %d %d %f\n",waveHeader->dwBufferLength,waveHeader->dwBytesRecorded,lVal);
- nb_buffers++;
- peekValue = max( peekValue, lVal );
- // moyenne sur 1 seconde
- if ( nb_buffers*BUFSIZE > 8000 )
- {
- nb_buffers = 0;
- peekValue = lVal;
- }
- m_ctrlPeekValue.SetPos( peekValue );
- m_ctrlProgress.SetPos(lVal);
- if ( lVal > m_seuil || lastValue > m_seuil )
- {
- lastValue = lVal;
- if ( lVal < m_seuil ) peekValue = lVal = 0.0;
- bus->SendMsg("AudioMonitor Change value=%.2f peak=%.2f",lVal,peekValue);
- }
- if (waveInUnprepareHeader(hWaveIn, &WaveHeader,sizeof(WAVEHDR)))
- {
- //cerr << "WAVE unprepare input buffer error\n";
- //exit(1);
- }
- WaveHeader.dwFlags = 0;
-
- if (waveInPrepareHeader(hWaveIn, &WaveHeader,sizeof(WAVEHDR)))
- {
- }
- if (waveInAddBuffer(hWaveIn, &WaveHeader,sizeof(WAVEHDR)))
- {
- }
- break;
- case WIM_CLOSE:
- TRACE("WIM_CLOSE\n");
- break;
- }
-}
-void CMeterDlg::openWaveDev()
-{
- MMRESULT Rc;
- WAVEFORMATEX PCMWaveFmtRecord;
-
- PCMWaveFmtRecord.wFormatTag = WAVE_FORMAT_PCM;
- PCMWaveFmtRecord.nChannels = 1;
- PCMWaveFmtRecord.nSamplesPerSec = 8000;
- PCMWaveFmtRecord.wBitsPerSample = 8;
- PCMWaveFmtRecord.nAvgBytesPerSec = PCMWaveFmtRecord.nSamplesPerSec
- * PCMWaveFmtRecord.wBitsPerSample / 8;
- PCMWaveFmtRecord.nBlockAlign = PCMWaveFmtRecord.nChannels *
- PCMWaveFmtRecord.wBitsPerSample / 8;
-
- Rc = waveInOpen(&hWaveIn, WAVE_MAPPER, &PCMWaveFmtRecord, (DWORD_PTR)CMeterDlg::recordCallBack, (DWORD_PTR)this, CALLBACK_FUNCTION);
- if (Rc)
- {
- }
- WaveHeader.dwBufferLength = BUFSIZE;
- WaveHeader.lpData = (LPSTR) (inbuf);
- WaveHeader.dwFlags = WaveHeader.reserved = 0;
- WaveHeader.dwLoops = 0;
- WaveHeader.lpNext = 0;
- Rc = waveInPrepareHeader(hWaveIn, &WaveHeader,
- sizeof(WAVEHDR));
- if (Rc)
- {
- waveInClose(hWaveIn);
- }
- Rc = waveInAddBuffer(hWaveIn, &WaveHeader,
- sizeof(WAVEHDR));
- if (Rc)
- {
- waveInClose(hWaveIn);
- }
-
-
- ResetEvent(recordDone);
-
- if (Rc = waveInStart(hWaveIn))
- {
- waveInClose(hWaveIn);
- }
-}
-
diff --git a/Bus/IvyAudioMon/MeterDlg.h b/Bus/IvyAudioMon/MeterDlg.h
deleted file mode 100644
index dcd007d..0000000
--- a/Bus/IvyAudioMon/MeterDlg.h
+++ /dev/null
@@ -1,80 +0,0 @@
-// MeterDlg.h : header file
-//
-
-#include "afxcmn.h"
-#if !defined(AFX_METERDLG_H__3A48D837_F4B7_11D1_9F80_006008984DF6__INCLUDED_)
-#define AFX_METERDLG_H__3A48D837_F4B7_11D1_9F80_006008984DF6__INCLUDED_
-
-#if _MSC_VER >= 1000
-#pragma once
-#endif // _MSC_VER >= 1000
-#include "Ivy.h"
-
-#define BUFSIZE 800 // size of audio in buffer
-
-/////////////////////////////////////////////////////////////////////////////
-// CMeterDlg dialog
-
-class CMeterDlg : public CDialog, public IvyApplicationCallback
-{
-// Construction
-public:
- CMeterDlg(CWnd* pParent = NULL); // standard constructor
-
-// Dialog Data
- //{{AFX_DATA(CMeterDlg)
- enum { IDD = IDD_METER_DIALOG };
- CProgressCtrl m_ctrlProgress;
- CProgressCtrl m_ctrlPeekValue;
- //}}AFX_DATA
-
- // ClassWizard generated virtual function overrides
- //{{AFX_VIRTUAL(CMeterDlg)
- protected:
- virtual void DoDataExchange(CDataExchange* pDX); // DDX/DDV support
- //}}AFX_VIRTUAL
-
-// Implementation
-protected:
- HICON m_hIcon;
-
- // Generated message map functions
- //{{AFX_MSG(CMeterDlg)
- virtual BOOL OnInitDialog();
- afx_msg void OnDestroy();
- afx_msg void OnSysCommand(UINT nID, LPARAM lParam);
- afx_msg void OnPaint();
- afx_msg HCURSOR OnQueryDragIcon();
- virtual void OnOK( );
-
- //}}AFX_MSG
- DECLARE_MESSAGE_MAP()
-
-private:
-
-
- void openWaveDev();
- static void CALLBACK recordCallBack(HWAVEIN hWaveIn, UINT uMsg, DWORD p1, DWORD p2, DWORD p3);
- void CALLBACK recordCB(HWAVEIN hWaveIn, UINT uMsg, DWORD p1, DWORD p2, DWORD p3);
- HANDLE recordDone; // event of audio input completion
- HWAVEIN hWaveIn; // onput WAVE audio device handle
- char inbuf[BUFSIZE]; // WAVE input data buffer area
- WAVEHDR WaveHeader;
- long nb_buffers;
- float peekValue;
- float lastValue;
- float m_seuil;
-
- Ivy *bus;
- void WriteMessage(const char * format, ...);
- void OnApplicationConnected( IvyApplication *app );
- void OnApplicationDisconnected( IvyApplication *app );
- void OnDirectMessage( IvyApplication *app, int id, const char *arg );
- void SendIvyFile( const CString & strFileName );
- CString m_busnumber;
-};
-
-//{{AFX_INSERT_LOCATION}}
-// Microsoft Developer Studio will insert additional declarations immediately before the previous line.
-
-#endif // !defined(AFX_METERDLG_H__3A48D837_F4B7_11D1_9F80_006008984DF6__INCLUDED_)
diff --git a/Bus/IvyAudioMon/ParseCmdLine.cpp b/Bus/IvyAudioMon/ParseCmdLine.cpp
deleted file mode 100644
index 59a27ce..0000000
--- a/Bus/IvyAudioMon/ParseCmdLine.cpp
+++ /dev/null
@@ -1,76 +0,0 @@
-// ParseCmdLine.cpp: implementation of the ParseCmdLine class.
-//
-//////////////////////////////////////////////////////////////////////
-
-#include "stdafx.h"
-
-#include "ParseCmdLine.h"
-
-#ifdef _DEBUG
-#undef THIS_FILE
-static char THIS_FILE[]=__FILE__;
-#define new DEBUG_NEW
-#endif
-
-//////////////////////////////////////////////////////////////////////
-// Construction/Destruction
-//////////////////////////////////////////////////////////////////////
-
-ParseCmdLine::ParseCmdLine()
-{
- m_start = TRUE;
- m_busNumber = "";
- m_prefix = "IvyAudioMon ";
- m_seuil = 15.0;
- m_extent = "*.txt";
-}
-
-ParseCmdLine::~ParseCmdLine()
-{
-
-}
-
-void ParseCmdLine::ParseParam(LPCTSTR lpszParam, BOOL bFlag, BOOL bLast)
-{
- if (bFlag)
- {
- ParseParamFlag(lpszParam);
- }
- else
- ParseParamNotFlag(lpszParam);
-
-}
-
-void ParseCmdLine::ParseParamFlag(LPCTSTR pszParam)
-{
-
- if (lstrcmpi(pszParam, TEXT("start")) == 0)
- m_start = TRUE;
- else if (lstrcmpi(pszParam, TEXT("bus")) == 0)
- m_shellCommand = BusNumber;
- else if (lstrcmpi(pszParam, TEXT("seuil")) == 0)
- m_shellCommand = Seuil;
- else if (lstrcmpi(pszParam, TEXT("prefix")) == 0)
- m_shellCommand = Prefix;
- else if (lstrcmpi(pszParam, TEXT("extent")) == 0)
- m_shellCommand = Extent;
-}
-
-void ParseCmdLine::ParseParamNotFlag(LPCTSTR pszParam)
-{
- switch ( m_shellCommand )
- {
- case BusNumber:
- m_busNumber = pszParam;
- break;
- case Seuil:
- m_seuil = atof(pszParam);
- break;
- case Prefix:
- m_prefix = pszParam;
- break;
- case Extent:
- m_extent = pszParam;
- break;
- }
-}
diff --git a/Bus/IvyAudioMon/ParseCmdLine.h b/Bus/IvyAudioMon/ParseCmdLine.h
deleted file mode 100644
index 281491e..0000000
--- a/Bus/IvyAudioMon/ParseCmdLine.h
+++ /dev/null
@@ -1,37 +0,0 @@
-// TestParseCmdLine.h: interface for the TestParseCmdLine class.
-//
-//////////////////////////////////////////////////////////////////////
-
-#if !defined(AFX_FXParseCMDLINE_H__20232B92_AB99_11D2_898F_00A0245B298A__INCLUDED_)
-#define AFX_FXParseCMDLINE_H__20232B92_AB99_11D2_898F_00A0245B298A__INCLUDED_
-
-#if _MSC_VER > 1000
-#pragma once
-#endif // _MSC_VER > 1000
-
-class ParseCmdLine : public CCommandLineInfo
-{
-public:
-
- BOOL m_start;
- CString m_busNumber;
- float m_seuil;
- CString m_extent;
- CString m_prefix;
- virtual void ParseParam( LPCTSTR lpszParam, BOOL bFlag, BOOL bLast );
- ParseCmdLine();
- virtual ~ParseCmdLine();
- enum {
- BusNumber,
- Start,
- Seuil,
- Extent,
- Prefix
- }m_shellCommand;
-
-protected:
- void ParseParamNotFlag(LPCTSTR pszParam);
- void ParseParamFlag(LPCTSTR pszParam);
-};
-
-#endif // !defined(AFX_FXParseCMDLINE_H__20232B92_AB99_11D2_898F_00A0245B298A__INCLUDED_)
diff --git a/Bus/IvyAudioMon/StdAfx.cpp b/Bus/IvyAudioMon/StdAfx.cpp
deleted file mode 100644
index c6c47aa..0000000
--- a/Bus/IvyAudioMon/StdAfx.cpp
+++ /dev/null
@@ -1,6 +0,0 @@
-// stdafx.cpp : source file that includes just the standard includes
-// Meter.pch will be the pre-compiled header
-// stdafx.obj will contain the pre-compiled type information
-
-#include "stdafx.h"
-
diff --git a/Bus/IvyAudioMon/StdAfx.h b/Bus/IvyAudioMon/StdAfx.h
deleted file mode 100644
index dbe11c7..0000000
--- a/Bus/IvyAudioMon/StdAfx.h
+++ /dev/null
@@ -1,28 +0,0 @@
-// stdafx.h : include file for standard system include files,
-// or project specific include files that are used frequently, but
-// are changed infrequently
-//
-
-#if !defined(AFX_STDAFX_H__3A48D839_F4B7_11D1_9F80_006008984DF6__INCLUDED_)
-#define AFX_STDAFX_H__3A48D839_F4B7_11D1_9F80_006008984DF6__INCLUDED_
-
-#if _MSC_VER >= 1000
-#pragma once
-#endif // _MSC_VER >= 1000
-
-#define VC_EXTRALEAN // Exclude rarely-used stuff from Windows headers
-
-#include <afxwin.h> // MFC core and standard components
-#include <afxext.h> // MFC extensions
-#ifndef _AFX_NO_AFXCMN_SUPPORT
-#include <afxcmn.h> // MFC support for Windows Common Controls
-#endif // _AFX_NO_AFXCMN_SUPPORT
-
-
-#include <mmsystem.h>
-
-
-//{{AFX_INSERT_LOCATION}}
-// Microsoft Developer Studio will insert additional declarations immediately before the previous line.
-
-#endif // !defined(AFX_STDAFX_H__3A48D839_F4B7_11D1_9F80_006008984DF6__INCLUDED_)
diff --git a/Bus/IvyAudioMon/res/Meter.ico b/Bus/IvyAudioMon/res/Meter.ico
deleted file mode 100644
index 44e26f0..0000000
--- a/Bus/IvyAudioMon/res/Meter.ico
+++ /dev/null
Binary files differ
diff --git a/Bus/IvyAudioMon/res/Meter.rc2 b/Bus/IvyAudioMon/res/Meter.rc2
deleted file mode 100644
index 357866f..0000000
--- a/Bus/IvyAudioMon/res/Meter.rc2
+++ /dev/null
@@ -1,13 +0,0 @@
-//
-// METER.RC2 - resources Microsoft Visual C++ does not edit directly
-//
-
-#ifdef APSTUDIO_INVOKED
- #error this file is not editable by Microsoft Visual C++
-#endif //APSTUDIO_INVOKED
-
-
-/////////////////////////////////////////////////////////////////////////////
-// Add manually edited resources here...
-
-/////////////////////////////////////////////////////////////////////////////
diff --git a/Bus/IvyAudioMon/resource.h b/Bus/IvyAudioMon/resource.h
deleted file mode 100644
index 4039cb3..0000000
--- a/Bus/IvyAudioMon/resource.h
+++ /dev/null
@@ -1,30 +0,0 @@
-//{{NO_DEPENDENCIES}}
-// Microsoft Visual C++ generated include file.
-// Used by Meter.rc
-//
-#define IDM_ABOUTBOX 0x0010
-#define IDD_ABOUTBOX 100
-#define IDS_ABOUTBOX 101
-#define IDD_METER_DIALOG 102
-#define IDS_FMTNUMMIXERS 102
-#define IDS_FMTCAPS 103
-#define IDS_FMTNAMES 104
-#define IDS_NOCONTROL 105
-#define IDR_MAINFRAME 128
-#define IDC_PROGRESS 1000
-#define IDC_EDIT1 1001
-#define IDC_PEEK 1001
-#define IDC_EDIT2 1002
-#define IDC_BUS 1002
-#define IDC_EDIT3 1003
-
-// Next default values for new objects
-//
-#ifdef APSTUDIO_INVOKED
-#ifndef APSTUDIO_READONLY_SYMBOLS
-#define _APS_NEXT_RESOURCE_VALUE 129
-#define _APS_NEXT_COMMAND_VALUE 32771
-#define _APS_NEXT_CONTROL_VALUE 1005
-#define _APS_NEXT_SYMED_VALUE 101
-#endif
-#endif
diff --git a/Bus/IvyCursor/InstIvyCursor/InstIvyCursor.vdproj b/Bus/IvyCursor/InstIvyCursor/InstIvyCursor.vdproj
deleted file mode 100644
index 69a3248..0000000
--- a/Bus/IvyCursor/InstIvyCursor/InstIvyCursor.vdproj
+++ /dev/null
@@ -1,797 +0,0 @@
-"DeployProject"
-{
-"VSVersion" = "3:701"
-"ProjectType" = "8:{2C2AF0D9-9B47-4FE5-BEF2-169778172667}"
-"IsWebType" = "8:FALSE"
-"ProjectName" = "8:Install"
-"LanguageId" = "3:1036"
-"CodePage" = "3:1252"
-"UILanguageId" = "3:1036"
-"SccProjectName" = "8:SAK"
-"SccLocalPath" = "8:SAK"
-"SccAuxPath" = "8:SAK"
-"SccProvider" = "8:SAK"
- "Hierarchy"
- {
- "Entry"
- {
- "MsmKey" = "8:_4E16B1233013473896B5B14884B766C6"
- "OwnerKey" = "8:_UNDEFINED"
- "MsmSig" = "8:_UNDEFINED"
- }
- "Entry"
- {
- "MsmKey" = "8:_5A688E16C8FB4F969BAAF36ACF9DE131"
- "OwnerKey" = "8:_UNDEFINED"
- "MsmSig" = "8:_UNDEFINED"
- }
- "Entry"
- {
- "MsmKey" = "8:_8E374943E56221993853F7D9051D7B42"
- "OwnerKey" = "8:_4E16B1233013473896B5B14884B766C6"
- "MsmSig" = "8:_UNDEFINED"
- }
- "Entry"
- {
- "MsmKey" = "8:_CD5F4F48D63B4317962CABF981642C29"
- "OwnerKey" = "8:_4E16B1233013473896B5B14884B766C6"
- "MsmSig" = "8:_UNDEFINED"
- }
- "Entry"
- {
- "MsmKey" = "8:_CE3A08225274427BA9D9B77094DAD99A"
- "OwnerKey" = "8:_4E16B1233013473896B5B14884B766C6"
- "MsmSig" = "8:_UNDEFINED"
- }
- }
- "Configurations"
- {
- "Debug"
- {
- "DisplayName" = "8:Debug"
- "IsDebugOnly" = "11:TRUE"
- "IsReleaseOnly" = "11:FALSE"
- "OutputFilename" = "8:Debug\\InstIvyCursor.msi"
- "PackageFilesAs" = "3:2"
- "PackageFileSize" = "3:-2147483648"
- "CabType" = "3:1"
- "Compression" = "3:2"
- "SignOutput" = "11:FALSE"
- "CertificateFile" = "8:"
- "PrivateKeyFile" = "8:"
- "TimeStampServer" = "8:"
- "InstallerBootstrapper" = "3:2"
- }
- "Release"
- {
- "DisplayName" = "8:Release"
- "IsDebugOnly" = "11:FALSE"
- "IsReleaseOnly" = "11:TRUE"
- "OutputFilename" = "8:..\\..\\..\\..\\Install\\IvyCursor.msi"
- "PackageFilesAs" = "3:2"
- "PackageFileSize" = "3:-2147483648"
- "CabType" = "3:1"
- "Compression" = "3:2"
- "SignOutput" = "11:FALSE"
- "CertificateFile" = "8:"
- "PrivateKeyFile" = "8:"
- "TimeStampServer" = "8:"
- "InstallerBootstrapper" = "3:1"
- }
- }
- "Deployable"
- {
- "CustomAction"
- {
- }
- "DefaultFeature"
- {
- "Name" = "8:DefaultFeature"
- "Title" = "8:"
- "Description" = "8:"
- }
- "ExternalPersistence"
- {
- "LaunchCondition"
- {
- }
- }
- "Feature"
- {
- }
- "File"
- {
- "{A582A373-4685-4296-BEFE-614B80A702C3}:_8E374943E56221993853F7D9051D7B42"
- {
- "SourcePath" = "8:WSOCK32.dll"
- "TargetName" = "8:WSOCK32.dll"
- "Tag" = "8:"
- "Folder" = "8:_4032CB2519934BECBD77C58A883B04AC"
- "Condition" = "8:"
- "Transitive" = "11:FALSE"
- "Vital" = "11:TRUE"
- "ReadOnly" = "11:FALSE"
- "Hidden" = "11:FALSE"
- "System" = "11:FALSE"
- "Permanent" = "11:FALSE"
- "SharedLegacy" = "11:FALSE"
- "PackageAs" = "3:1"
- "Register" = "3:1"
- "Exclude" = "11:TRUE"
- "IsDependency" = "11:TRUE"
- "IsolateTo" = "8:"
- }
- }
- "FileType"
- {
- }
- "Folder"
- {
- "{58C0ADA3-3CEA-43BD-A3B3-2EA121BC8217}:_4032CB2519934BECBD77C58A883B04AC"
- {
- "DefaultLocation" = "8:[ProgramFilesFolder][Manufacturer]\\[ProductName]"
- "Name" = "8:#1925"
- "AlwaysCreate" = "11:FALSE"
- "Condition" = "8:"
- "Transitive" = "11:FALSE"
- "Property" = "8:TARGETDIR"
- "Folders"
- {
- }
- }
- "{78BAF5CE-F2E5-45BE-83BC-DB6AF387E941}:_664713DFF3804FDBAB8E117608A0FABC"
- {
- "Name" = "8:#1919"
- "AlwaysCreate" = "11:FALSE"
- "Condition" = "8:"
- "Transitive" = "11:FALSE"
- "Property" = "8:ProgramMenuFolder"
- "Folders"
- {
- }
- }
- "{78BAF5CE-F2E5-45BE-83BC-DB6AF387E941}:_A192F2DB771043B083A2C45490FA442F"
- {
- "Name" = "8:#1916"
- "AlwaysCreate" = "11:FALSE"
- "Condition" = "8:"
- "Transitive" = "11:FALSE"
- "Property" = "8:DesktopFolder"
- "Folders"
- {
- }
- }
- }
- "LaunchCondition"
- {
- }
- "Locator"
- {
- }
- "MsiBootstrapper"
- {
- "LangId" = "3:1036"
- }
- "Product"
- {
- "Name" = "8:Microsoft Visual Studio"
- "ProductName" = "8:IvyCursor"
- "ProductCode" = "8:{0A313183-7BCE-4AD0-B5BB-FD4A32104B32}"
- "PackageCode" = "8:{60E055D3-3D7E-4515-9203-37EB79A12EF3}"
- "UpgradeCode" = "8:{B9048C4D-4B78-4498-8634-FA5726303A10}"
- "RestartWWWService" = "11:FALSE"
- "RemovePreviousVersions" = "11:FALSE"
- "DetectNewerInstalledVersion" = "11:TRUE"
- "ProductVersion" = "8:1.0.0"
- "Manufacturer" = "8:CENA"
- "ARPHELPTELEPHONE" = "8:"
- "ARPHELPLINK" = "8:"
- "Title" = "8:IvyCursor"
- "Subject" = "8:"
- "ARPCONTACT" = "8:CENA"
- "Keywords" = "8:"
- "ARPCOMMENTS" = "8:"
- "ARPURLINFOABOUT" = "8:"
- "ARPPRODUCTICON" = "8:"
- "ARPIconIndex" = "3:0"
- "SearchPath" = "8:"
- "UseSystemSearchPath" = "11:TRUE"
- }
- "Registry"
- {
- "HKLM"
- {
- "Keys"
- {
- "{6A471EEF-D31B-40F8-BCF6-C9E8EC783F36}:_F6740CA6BCA84BB49508BADA0BBCBBBF"
- {
- "Name" = "8:Software"
- "Condition" = "8:"
- "AlwaysCreate" = "11:FALSE"
- "DeleteAtUninstall" = "11:FALSE"
- "Transitive" = "11:FALSE"
- "Keys"
- {
- "{6A471EEF-D31B-40F8-BCF6-C9E8EC783F36}:_C20FFB7B3DF34F7280C6464E7AB3F96F"
- {
- "Name" = "8:[Manufacturer]"
- "Condition" = "8:"
- "AlwaysCreate" = "11:FALSE"
- "DeleteAtUninstall" = "11:FALSE"
- "Transitive" = "11:FALSE"
- "Keys"
- {
- }
- "Values"
- {
- }
- }
- }
- "Values"
- {
- }
- }
- }
- }
- "HKCU"
- {
- "Keys"
- {
- "{6A471EEF-D31B-40F8-BCF6-C9E8EC783F36}:_79D7593CDD5549DC9DD26DC610419BB0"
- {
- "Name" = "8:Software"
- "Condition" = "8:"
- "AlwaysCreate" = "11:FALSE"
- "DeleteAtUninstall" = "11:FALSE"
- "Transitive" = "11:FALSE"
- "Keys"
- {
- "{6A471EEF-D31B-40F8-BCF6-C9E8EC783F36}:_F5467127899F4382B8608654B9BD162D"
- {
- "Name" = "8:[Manufacturer]"
- "Condition" = "8:"
- "AlwaysCreate" = "11:FALSE"
- "DeleteAtUninstall" = "11:FALSE"
- "Transitive" = "11:FALSE"
- "Keys"
- {
- }
- "Values"
- {
- }
- }
- }
- "Values"
- {
- }
- }
- }
- }
- "HKCR"
- {
- "Keys"
- {
- }
- }
- "HKU"
- {
- "Keys"
- {
- }
- }
- "HKPU"
- {
- "Keys"
- {
- }
- }
- }
- "Sequences"
- {
- }
- "Shortcut"
- {
- "{478F747B-8505-45D1-9AAE-8C3B645C26E3}:_1DD319DEBF174F32B022569E0FDC8231"
- {
- "Name" = "8:IvyCursor"
- "Arguments" = "8:"
- "Description" = "8:"
- "ShowCmd" = "3:1"
- "IconIndex" = "3:0"
- "Transitive" = "11:FALSE"
- "Target" = "8:_5A688E16C8FB4F969BAAF36ACF9DE131"
- "Folder" = "8:_A192F2DB771043B083A2C45490FA442F"
- "WorkingFolder" = "8:_4032CB2519934BECBD77C58A883B04AC"
- "Icon" = "8:"
- "Feature" = "8:"
- }
- "{478F747B-8505-45D1-9AAE-8C3B645C26E3}:_FFDAE000C8814769B666A79E1A1874E9"
- {
- "Name" = "8:IvyCursor"
- "Arguments" = "8:"
- "Description" = "8:"
- "ShowCmd" = "3:1"
- "IconIndex" = "3:0"
- "Transitive" = "11:FALSE"
- "Target" = "8:_5A688E16C8FB4F969BAAF36ACF9DE131"
- "Folder" = "8:_664713DFF3804FDBAB8E117608A0FABC"
- "WorkingFolder" = "8:_4032CB2519934BECBD77C58A883B04AC"
- "Icon" = "8:"
- "Feature" = "8:"
- }
- }
- "UserInterface"
- {
- "{8D9DEE8B-DD8B-4F48-9072-C4364E4F4011}:_0636F50D084F44628ABC60E0B92F6482"
- {
- "Name" = "8:#1901"
- "Sequence" = "3:2"
- "Attributes" = "3:2"
- "Dialogs"
- {
- "{18ADD6EC-89FE-4ED7-AD3E-211C40278470}:_9DF06B29188C410D86056403380FE6D0"
- {
- "Sequence" = "3:100"
- "DisplayName" = "8:Progression"
- "UseDynamicProperties" = "11:TRUE"
- "IsDependency" = "11:FALSE"
- "SourcePath" = "8:<VsdDialogDir>\\VsdAdminProgressDlg.wid"
- "Properties"
- {
- "BannerBitmap"
- {
- "Name" = "8:BannerBitmap"
- "DisplayName" = "8:#1001"
- "Description" = "8:#1101"
- "Type" = "3:8"
- "ContextData" = "8:Bitmap"
- "Attributes" = "3:4"
- "Setting" = "3:1"
- "UsePlugInResources" = "11:TRUE"
- }
- "ShowProgress"
- {
- "Name" = "8:ShowProgress"
- "DisplayName" = "8:#1009"
- "Description" = "8:#1109"
- "Type" = "3:5"
- "ContextData" = "8:1;True=1;False=0"
- "Attributes" = "3:0"
- "Setting" = "3:0"
- "Value" = "3:1"
- "DefaultValue" = "3:1"
- "UsePlugInResources" = "11:TRUE"
- }
- }
- }
- }
- }
- "{8D9DEE8B-DD8B-4F48-9072-C4364E4F4011}:_18CABE436CC84533888CCE0E7AFABFC7"
- {
- "Name" = "8:#1902"
- "Sequence" = "3:2"
- "Attributes" = "3:3"
- "Dialogs"
- {
- "{18ADD6EC-89FE-4ED7-AD3E-211C40278470}:_4BBF6ECCF3FF4CCE9DF57D69257EACFE"
- {
- "Sequence" = "3:100"
- "DisplayName" = "8:Terminé"
- "UseDynamicProperties" = "11:TRUE"
- "IsDependency" = "11:FALSE"
- "SourcePath" = "8:<VsdDialogDir>\\VsdAdminFinishedDlg.wid"
- "Properties"
- {
- "BannerBitmap"
- {
- "Name" = "8:BannerBitmap"
- "DisplayName" = "8:#1001"
- "Description" = "8:#1101"
- "Type" = "3:8"
- "ContextData" = "8:Bitmap"
- "Attributes" = "3:4"
- "Setting" = "3:1"
- "UsePlugInResources" = "11:TRUE"
- }
- }
- }
- }
- }
- "{8D9DEE8B-DD8B-4F48-9072-C4364E4F4011}:_2A026925638547F882E2143EB6CBFB47"
- {
- "Name" = "8:#1900"
- "Sequence" = "3:1"
- "Attributes" = "3:1"
- "Dialogs"
- {
- "{18ADD6EC-89FE-4ED7-AD3E-211C40278470}:_BA40ECBCA4F74472B6B4A2B850EF0B58"
- {
- "Sequence" = "3:200"
- "DisplayName" = "8:Dossier d'installation"
- "UseDynamicProperties" = "11:TRUE"
- "IsDependency" = "11:FALSE"
- "SourcePath" = "8:<VsdDialogDir>\\VsdFolderDlg.wid"
- "Properties"
- {
- "BannerBitmap"
- {
- "Name" = "8:BannerBitmap"
- "DisplayName" = "8:#1001"
- "Description" = "8:#1101"
- "Type" = "3:8"
- "ContextData" = "8:Bitmap"
- "Attributes" = "3:4"
- "Setting" = "3:1"
- "UsePlugInResources" = "11:TRUE"
- }
- }
- }
- "{18ADD6EC-89FE-4ED7-AD3E-211C40278470}:_CA4454662068449AB70A51A0D6B62F45"
- {
- "Sequence" = "3:300"
- "DisplayName" = "8:Confirmer l'installation"
- "UseDynamicProperties" = "11:TRUE"
- "IsDependency" = "11:FALSE"
- "SourcePath" = "8:<VsdDialogDir>\\VsdConfirmDlg.wid"
- "Properties"
- {
- "BannerBitmap"
- {
- "Name" = "8:BannerBitmap"
- "DisplayName" = "8:#1001"
- "Description" = "8:#1101"
- "Type" = "3:8"
- "ContextData" = "8:Bitmap"
- "Attributes" = "3:4"
- "Setting" = "3:1"
- "UsePlugInResources" = "11:TRUE"
- }
- }
- }
- "{18ADD6EC-89FE-4ED7-AD3E-211C40278470}:_D88802A5F2B14E358204211F16EB4FAE"
- {
- "Sequence" = "3:100"
- "DisplayName" = "8:Bienvenue"
- "UseDynamicProperties" = "11:TRUE"
- "IsDependency" = "11:FALSE"
- "SourcePath" = "8:<VsdDialogDir>\\VsdWelcomeDlg.wid"
- "Properties"
- {
- "BannerBitmap"
- {
- "Name" = "8:BannerBitmap"
- "DisplayName" = "8:#1001"
- "Description" = "8:#1101"
- "Type" = "3:8"
- "ContextData" = "8:Bitmap"
- "Attributes" = "3:4"
- "Setting" = "3:1"
- "UsePlugInResources" = "11:TRUE"
- }
- "CopyrightWarning"
- {
- "Name" = "8:CopyrightWarning"
- "DisplayName" = "8:#1002"
- "Description" = "8:#1102"
- "Type" = "3:3"
- "ContextData" = "8:"
- "Attributes" = "3:0"
- "Setting" = "3:1"
- "Value" = "8:#1202"
- "DefaultValue" = "8:#1202"
- "UsePlugInResources" = "11:TRUE"
- }
- "Welcome"
- {
- "Name" = "8:Welcome"
- "DisplayName" = "8:#1003"
- "Description" = "8:#1103"
- "Type" = "3:3"
- "ContextData" = "8:"
- "Attributes" = "3:0"
- "Setting" = "3:1"
- "Value" = "8:#1203"
- "DefaultValue" = "8:#1203"
- "UsePlugInResources" = "11:TRUE"
- }
- }
- }
- }
- }
- "{8D9DEE8B-DD8B-4F48-9072-C4364E4F4011}:_6987FD35A7A4427285F47DF69B3F46AC"
- {
- "Name" = "8:#1902"
- "Sequence" = "3:1"
- "Attributes" = "3:3"
- "Dialogs"
- {
- "{18ADD6EC-89FE-4ED7-AD3E-211C40278470}:_0B3BD974222A492098588B27DB307CDA"
- {
- "Sequence" = "3:100"
- "DisplayName" = "8:Terminé"
- "UseDynamicProperties" = "11:TRUE"
- "IsDependency" = "11:FALSE"
- "SourcePath" = "8:<VsdDialogDir>\\VsdFinishedDlg.wid"
- "Properties"
- {
- "BannerBitmap"
- {
- "Name" = "8:BannerBitmap"
- "DisplayName" = "8:#1001"
- "Description" = "8:#1101"
- "Type" = "3:8"
- "ContextData" = "8:Bitmap"
- "Attributes" = "3:4"
- "Setting" = "3:1"
- "UsePlugInResources" = "11:TRUE"
- }
- "UpdateText"
- {
- "Name" = "8:UpdateText"
- "DisplayName" = "8:#1058"
- "Description" = "8:#1158"
- "Type" = "3:15"
- "ContextData" = "8:"
- "Attributes" = "3:0"
- "Setting" = "3:1"
- "Value" = "8:#1258"
- "DefaultValue" = "8:#1258"
- "UsePlugInResources" = "11:TRUE"
- }
- }
- }
- }
- }
- "{B654A020-6903-4E6A-A86C-75DC463DB54B}:_BD34D23EE7874F2E8422867476425191"
- {
- "UseDynamicProperties" = "11:FALSE"
- "IsDependency" = "11:FALSE"
- "SourcePath" = "8:<VsdDialogDir>\\VsdBasicDialogs.wim"
- }
- "{B654A020-6903-4E6A-A86C-75DC463DB54B}:_CF0CE67F9DDB4AF5A48F2F086BAB4C42"
- {
- "UseDynamicProperties" = "11:FALSE"
- "IsDependency" = "11:FALSE"
- "SourcePath" = "8:<VsdDialogDir>\\VsdUserInterface.wim"
- }
- "{8D9DEE8B-DD8B-4F48-9072-C4364E4F4011}:_D9A2328703204827A30713BEAC6CF403"
- {
- "Name" = "8:#1901"
- "Sequence" = "3:1"
- "Attributes" = "3:2"
- "Dialogs"
- {
- "{18ADD6EC-89FE-4ED7-AD3E-211C40278470}:_F15ADAF16F724C85916FA31593F72F8D"
- {
- "Sequence" = "3:100"
- "DisplayName" = "8:Progression"
- "UseDynamicProperties" = "11:TRUE"
- "IsDependency" = "11:FALSE"
- "SourcePath" = "8:<VsdDialogDir>\\VsdProgressDlg.wid"
- "Properties"
- {
- "BannerBitmap"
- {
- "Name" = "8:BannerBitmap"
- "DisplayName" = "8:#1001"
- "Description" = "8:#1101"
- "Type" = "3:8"
- "ContextData" = "8:Bitmap"
- "Attributes" = "3:4"
- "Setting" = "3:1"
- "UsePlugInResources" = "11:TRUE"
- }
- "ShowProgress"
- {
- "Name" = "8:ShowProgress"
- "DisplayName" = "8:#1009"
- "Description" = "8:#1109"
- "Type" = "3:5"
- "ContextData" = "8:1;True=1;False=0"
- "Attributes" = "3:0"
- "Setting" = "3:0"
- "Value" = "3:1"
- "DefaultValue" = "3:1"
- "UsePlugInResources" = "11:TRUE"
- }
- }
- }
- }
- }
- "{8D9DEE8B-DD8B-4F48-9072-C4364E4F4011}:_F12D846FFE1A4DC9B3126FA263DFD826"
- {
- "Name" = "8:#1900"
- "Sequence" = "3:2"
- "Attributes" = "3:1"
- "Dialogs"
- {
- "{18ADD6EC-89FE-4ED7-AD3E-211C40278470}:_30F0F9F2A1834E0BA3D83DBD6F9BFAE9"
- {
- "Sequence" = "3:200"
- "DisplayName" = "8:Dossier d'installation"
- "UseDynamicProperties" = "11:TRUE"
- "IsDependency" = "11:FALSE"
- "SourcePath" = "8:<VsdDialogDir>\\VsdAdminFolderDlg.wid"
- "Properties"
- {
- "BannerBitmap"
- {
- "Name" = "8:BannerBitmap"
- "DisplayName" = "8:#1001"
- "Description" = "8:#1101"
- "Type" = "3:8"
- "ContextData" = "8:Bitmap"
- "Attributes" = "3:4"
- "Setting" = "3:1"
- "UsePlugInResources" = "11:TRUE"
- }
- }
- }
- "{18ADD6EC-89FE-4ED7-AD3E-211C40278470}:_53970AAC5A024A3681F861F4BE2D650B"
- {
- "Sequence" = "3:100"
- "DisplayName" = "8:Bienvenue"
- "UseDynamicProperties" = "11:TRUE"
- "IsDependency" = "11:FALSE"
- "SourcePath" = "8:<VsdDialogDir>\\VsdAdminWelcomeDlg.wid"
- "Properties"
- {
- "BannerBitmap"
- {
- "Name" = "8:BannerBitmap"
- "DisplayName" = "8:#1001"
- "Description" = "8:#1101"
- "Type" = "3:8"
- "ContextData" = "8:Bitmap"
- "Attributes" = "3:4"
- "Setting" = "3:1"
- "UsePlugInResources" = "11:TRUE"
- }
- "CopyrightWarning"
- {
- "Name" = "8:CopyrightWarning"
- "DisplayName" = "8:#1002"
- "Description" = "8:#1102"
- "Type" = "3:3"
- "ContextData" = "8:"
- "Attributes" = "3:0"
- "Setting" = "3:1"
- "Value" = "8:#1202"
- "DefaultValue" = "8:#1202"
- "UsePlugInResources" = "11:TRUE"
- }
- "Welcome"
- {
- "Name" = "8:Welcome"
- "DisplayName" = "8:#1003"
- "Description" = "8:#1103"
- "Type" = "3:3"
- "ContextData" = "8:"
- "Attributes" = "3:0"
- "Setting" = "3:1"
- "Value" = "8:#1203"
- "DefaultValue" = "8:#1203"
- "UsePlugInResources" = "11:TRUE"
- }
- }
- }
- "{18ADD6EC-89FE-4ED7-AD3E-211C40278470}:_A92D8986A08B4691BE0869927B5BCF43"
- {
- "Sequence" = "3:300"
- "DisplayName" = "8:Confirmer l'installation"
- "UseDynamicProperties" = "11:TRUE"
- "IsDependency" = "11:FALSE"
- "SourcePath" = "8:<VsdDialogDir>\\VsdAdminConfirmDlg.wid"
- "Properties"
- {
- "BannerBitmap"
- {
- "Name" = "8:BannerBitmap"
- "DisplayName" = "8:#1001"
- "Description" = "8:#1101"
- "Type" = "3:8"
- "ContextData" = "8:Bitmap"
- "Attributes" = "3:4"
- "Setting" = "3:1"
- "UsePlugInResources" = "11:TRUE"
- }
- }
- }
- }
- }
- }
- "MergeModule"
- {
- "{35A69C6E-5BA4-440D-803D-762B59A45393}:_CD5F4F48D63B4317962CABF981642C29"
- {
- "UseDynamicProperties" = "11:TRUE"
- "IsDependency" = "11:TRUE"
- "SourcePath" = "8:vc_user_stl71_rtl_x86_---.msm"
- "Properties"
- {
- }
- "LanguageId" = "3:0"
- "Exclude" = "11:FALSE"
- "Folder" = "8:"
- "Feature" = "8:"
- "IsolateTo" = "8:"
- }
- "{35A69C6E-5BA4-440D-803D-762B59A45393}:_CE3A08225274427BA9D9B77094DAD99A"
- {
- "UseDynamicProperties" = "11:TRUE"
- "IsDependency" = "11:TRUE"
- "SourcePath" = "8:vc_user_crt71_rtl_x86_---.msm"
- "Properties"
- {
- }
- "LanguageId" = "3:0"
- "Exclude" = "11:FALSE"
- "Folder" = "8:"
- "Feature" = "8:"
- "IsolateTo" = "8:"
- }
- }
- "ProjectOutput"
- {
- "{8062640A-2EEE-46E9-AB67-688E9A886E9F}:_4E16B1233013473896B5B14884B766C6"
- {
- "SourcePath" = "8:..\\..\\Ivy\\Release\\Ivy.dll"
- "TargetName" = "8:"
- "Tag" = "8:"
- "Folder" = "8:_4032CB2519934BECBD77C58A883B04AC"
- "Condition" = "8:"
- "Transitive" = "11:FALSE"
- "Vital" = "11:TRUE"
- "ReadOnly" = "11:FALSE"
- "Hidden" = "11:FALSE"
- "System" = "11:FALSE"
- "Permanent" = "11:FALSE"
- "SharedLegacy" = "11:FALSE"
- "PackageAs" = "3:1"
- "Register" = "3:1"
- "Exclude" = "11:FALSE"
- "IsDependency" = "11:FALSE"
- "IsolateTo" = "8:"
- "ProjectOutputGroupRegister" = "3:1"
- "OutputConfiguration" = "8:"
- "OutputGroupCanonicalName" = "8:Built"
- "OutputProjectGuid" = "8:{84E0039A-6721-4B18-9792-E9AE4274AC0E}"
- "ShowKeyOutput" = "11:TRUE"
- "ExcludeFilters"
- {
- }
- }
- "{8062640A-2EEE-46E9-AB67-688E9A886E9F}:_5A688E16C8FB4F969BAAF36ACF9DE131"
- {
- "SourcePath" = "8:..\\Release\\IvyCursor.exe"
- "TargetName" = "8:"
- "Tag" = "8:"
- "Folder" = "8:_4032CB2519934BECBD77C58A883B04AC"
- "Condition" = "8:"
- "Transitive" = "11:FALSE"
- "Vital" = "11:TRUE"
- "ReadOnly" = "11:FALSE"
- "Hidden" = "11:FALSE"
- "System" = "11:FALSE"
- "Permanent" = "11:FALSE"
- "SharedLegacy" = "11:FALSE"
- "PackageAs" = "3:1"
- "Register" = "3:1"
- "Exclude" = "11:FALSE"
- "IsDependency" = "11:FALSE"
- "IsolateTo" = "8:"
- "ProjectOutputGroupRegister" = "3:1"
- "OutputConfiguration" = "8:"
- "OutputGroupCanonicalName" = "8:Built"
- "OutputProjectGuid" = "8:{5353F53D-8047-42AB-A3E1-73E6EAAFBBE6}"
- "ShowKeyOutput" = "11:TRUE"
- "ExcludeFilters"
- {
- }
- }
- }
- "VJSharpPlugin"
- {
- }
- }
-}
diff --git a/Bus/IvyCursor/InstIvyCursor/InstIvyCursor.vdproj.vspscc b/Bus/IvyCursor/InstIvyCursor/InstIvyCursor.vdproj.vspscc
deleted file mode 100644
index 326225f..0000000
--- a/Bus/IvyCursor/InstIvyCursor/InstIvyCursor.vdproj.vspscc
+++ /dev/null
@@ -1,10 +0,0 @@
-""
-{
-"FILE_VERSION" = "9237"
-"ENLISTMENT_CHOICE" = "NEVER"
-"PROJECT_FILE_RELATIVE_PATH" = "relative:InstIvyCursor"
-"NUMBER_OF_EXCLUDED_FILES" = "0"
-"ORIGINAL_PROJECT_FILE_PATH" = ""
-"NUMBER_OF_NESTED_PROJECTS" = "0"
-"SOURCE_CONTROL_SETTINGS_PROVIDER" = "PROVIDER"
-}
diff --git a/Bus/IvyCursor/IvyCursor.cpp b/Bus/IvyCursor/IvyCursor.cpp
deleted file mode 100644
index 8b5e48e..0000000
--- a/Bus/IvyCursor/IvyCursor.cpp
+++ /dev/null
@@ -1,325 +0,0 @@
-// IvyCursor.cpp : définit le point d'entrée pour l'application.
-//
-
-#include "stdafx.h"
-#include <winuser.h>
-#include <crtdbg.h>
-#include <shellapi.h>
-#include "Ivy.h"
-#include "IvyCursor.h"
-#define MAX_LOADSTRING 100
-
-#define WM_ICONTRAY_NOTIFY (WM_USER+150)
-// Variables globales :
-HINSTANCE hInst; // instance actuelle
-TCHAR szTitle[MAX_LOADSTRING]; // Le texte de la barre de titre
-TCHAR szWindowClass[MAX_LOADSTRING]; // le nom de la classe de fenêtre principale
-HMENU hMenu; // handle menu icontray
-HMENU hmenuTrackPopup;
-
-// Ivy
-Ivy* ivy;
-
-// Pré-déclarations des fonctions incluses dans ce module de code :
-ATOM MyRegisterClass(HINSTANCE hInstance);
-BOOL InitInstance(HINSTANCE, int);
-LRESULT CALLBACK WndProc(HWND, UINT, WPARAM, LPARAM);
-LRESULT CALLBACK About(HWND, UINT, WPARAM, LPARAM);
-
-
-void ivyCursorMouve(IvyApplication *app, void *user_data, int argc, const char **argv)
-{
- UINT nb;
- INPUT Inputs;
- int x,y;
- double xf = atof( *argv++ );
- double yf = atof( *argv++ );
- x = (int)(65535 * xf / 100.0 + 0.5);
- y = (int)(65535 * yf / 100.0 + 0.5);
- Inputs.type = INPUT_MOUSE;
- Inputs.mi.dwFlags = MOUSEEVENTF_MOVE | MOUSEEVENTF_ABSOLUTE;
- Inputs.mi.time = 0; // system provide it
- Inputs.mi.dx = x;
- Inputs.mi.dy = y;
- nb = SendInput( 1, &Inputs, sizeof(INPUT));
-
- if ( nb != 1 )
- {
- _RPT3(_CRT_WARN,"ivyCursorMouve can move to x=%d y=%d error=%d\n",x,y,GetLastError());
- }
-}
-void ivyCursorClick(IvyApplication *app, void *user_data, int argc, const char **argv)
-{
- UINT nb;
- INPUT Inputs[2];
- int x,y;
- double xf = atof( *argv++ );
- double yf = atof( *argv++ );
- x = (int)(65535 * xf / 100.0 + 0.5);
- y = (int)(65535 * yf / 100.0 + 0.5);
- Inputs[0].type = INPUT_MOUSE;
- Inputs[0].mi.dwFlags = MOUSEEVENTF_MOVE | MOUSEEVENTF_LEFTDOWN | MOUSEEVENTF_ABSOLUTE;
- Inputs[0].mi.time = 0; // system provide it
- Inputs[0].mi.dx = x;
- Inputs[0].mi.dy = y;
- Inputs[1].type = INPUT_MOUSE;
- Inputs[1].mi.dwFlags = MOUSEEVENTF_MOVE | MOUSEEVENTF_LEFTUP | MOUSEEVENTF_ABSOLUTE;
- Inputs[1].mi.time = 0; // system provide it
- Inputs[1].mi.dx = x;
- Inputs[1].mi.dy = y;
- nb = SendInput( 2, Inputs, sizeof(INPUT));
-
- if ( nb != 2 )
- {
- _RPT3(_CRT_WARN,"ivyCursorClick can click to x=%d y=%d error=%d\n",x,y,GetLastError());
- }
-}
-int APIENTRY _tWinMain(HINSTANCE hInstance,
- HINSTANCE hPrevInstance,
- LPTSTR lpCmdLine,
- int nCmdShow)
-{
- MSG msg;
- // Initialise les chaînes globales
- LoadString(hInstance, IDS_APP_TITLE, szTitle, MAX_LOADSTRING);
- LoadString(hInstance, IDC_IVYCURSOR, szWindowClass, MAX_LOADSTRING);
- hMenu = LoadMenu(hInstance, MAKEINTRESOURCE( IDR_MENU1 ) );
-
- // TrackPopupMenu cannot display the menu bar so get
- // a handle to the first shortcut menu.
-
- hmenuTrackPopup = GetSubMenu(hMenu, 0);
-
- if ( hmenuTrackPopup == NULL )
- {
- return FALSE;
- }
- MyRegisterClass(hInstance);
-
- // Effectue l'initialisation de l'application :
- if (!InitInstance (hInstance, nCmdShow))
- {
- return FALSE;
- }
- // Initoiailize ivy
- ivy = new Ivy("IvyCursor", "IvyCursor Ready", 0, FALSE );
- ivy->BindMsg(BUS_CALLBACK(ivyCursorMouve,0),"Cigale SetCursorPosition x=([0-9.]+) y=([0-9.]+)");
- ivy->BindMsg(BUS_CALLBACK(ivyCursorClick,0),"Cigale CursorSelectEvent x=([0-9.]+) y=([0-9.]+)");
- ivy->start( 0 );
-
- // Boucle de messages principale :
- while (GetMessage(&msg, NULL, 0, 0))
- {
- TranslateMessage(&msg);
- DispatchMessage(&msg);
- }
-
- return (int) msg.wParam;
-}
-
-
-
-//
-// FONCTION : MyRegisterClass()
-//
-// BUT : inscrit la classe de fenêtre.
-//
-// COMMENTAIRES :
-//
-// Cette fonction et son utilisation sont nécessaires uniquement si vous souhaitez que ce code
-// soit compatible avec les systèmes Win32 avant la fonction 'RegisterClassEx'
-// qui a été ajoutée à Windows 95. Il est important d'appeler cette fonction
-// afin que l'application dispose des petites icônes correctes qui lui sont
-// associées.
-//
-ATOM MyRegisterClass(HINSTANCE hInstance)
-{
- WNDCLASSEX wcex;
-
- wcex.cbSize = sizeof(WNDCLASSEX);
-
- wcex.style = CS_HREDRAW | CS_VREDRAW;
- wcex.lpfnWndProc = (WNDPROC)WndProc;
- wcex.cbClsExtra = 0;
- wcex.cbWndExtra = 0;
- wcex.hInstance = hInstance;
- wcex.hIcon = LoadIcon(hInstance, (LPCTSTR)IDI_IVYCURSOR);
- wcex.hCursor = LoadCursor(NULL, IDC_ARROW);
- wcex.hbrBackground = (HBRUSH)(COLOR_WINDOW+1);
- wcex.lpszMenuName = NULL;
- wcex.lpszClassName = szWindowClass;
- wcex.hIconSm = LoadIcon(wcex.hInstance, (LPCTSTR)IDI_SMALL);
-
- return RegisterClassEx(&wcex);
-}
-
-//
-// FONCTION : InitInstance(HANDLE, int)
-//
-// BUT : enregistre le handle de l'instance et crée une fenêtre principale
-//
-// COMMENTAIRES :
-//
-// Dans cette fonction, nous enregistrons le handle de l'instance dans une variable globale, puis
-// créons et affichons la fenêtre principale du programme.
-//
-BOOL InitInstance(HINSTANCE hInstance, int nCmdShow)
-{
- HWND hWnd;
- NOTIFYICONDATA icodata;
-
-
- hInst = hInstance; // Stocke le handle d'instance dans la variable globale
-
- hWnd = CreateWindow(szWindowClass, szTitle, WS_OVERLAPPEDWINDOW,
- CW_USEDEFAULT, 0, CW_USEDEFAULT, 0, HWND_MESSAGE, NULL, hInstance, NULL);
-
- if (!hWnd)
- {
- return FALSE;
- }
-
- ShowWindow(hWnd, nCmdShow);
- UpdateWindow(hWnd);
-
- icodata.cbSize = sizeof(NOTIFYICONDATA);
- icodata.uFlags = NIF_ICON | NIF_MESSAGE | NIF_TIP ;
- icodata.hWnd = hWnd;
- icodata.hIcon = LoadIcon(hInstance, (LPCTSTR)IDI_IVYCURSOR);
- icodata.uID = 0;
- icodata.uVersion = NOTIFYICON_VERSION;
- icodata.uCallbackMessage = WM_ICONTRAY_NOTIFY;
- strcpy ( icodata.szTip, "IvyCursor Event redirector");
-
- if (! Shell_NotifyIcon( NIM_ADD, &icodata) )
- {
- return FALSE;
- }
- if (! Shell_NotifyIcon( NIM_SETVERSION, &icodata) )
- {
- return FALSE;
- }
- icodata.uFlags = NIF_INFO;
- // Info
- icodata.dwInfoFlags = NIIF_INFO;
- strcpy ( icodata.szInfoTitle, "IvyCursor Event redirector");
- strcpy (icodata.szInfo , "IvyCursor Event redirector" );
- icodata.uTimeout = 10000; // 10 seconds
- if (! Shell_NotifyIcon( NIM_MODIFY, &icodata) )
- {
- return FALSE;
- }
-
- return TRUE;
-}
-void RemoveTrayIcon(HWND hWnd)
-{
- NOTIFYICONDATA icodata;
- icodata.cbSize = sizeof( icodata );
- icodata.uFlags = 0;
- icodata.hWnd = hWnd;
- icodata.uID = 0;
- Shell_NotifyIcon( NIM_DELETE, &icodata);
-}
-void ReturnFocus(HWND hWnd)
-{
- NOTIFYICONDATA icodata;
- icodata.cbSize = sizeof( icodata );
- icodata.uFlags = 0;
- icodata.hWnd = hWnd;
- icodata.uID = 0;
- Shell_NotifyIcon( NIM_SETFOCUS, &icodata);
-}
-void Quitting( HWND hWnd )
-{
- RemoveTrayIcon(hWnd);
- DestroyMenu(hMenu);
- DestroyWindow(hWnd);
- ivy->stop();
-}
-//
-// FONCTION : WndProc(HWND, unsigned, WORD, LONG)
-//
-// BUT : traite les messages pour la fenêtre principale.
-//
-// WM_COMMAND - traite le menu de l'application
-// WM_PAINT - dessine la fenêtre principale
-// WM_DESTROY - génère un message d'arrêt et retourne
-//
-//
-LRESULT CALLBACK WndProc(HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam)
-{
- int wmId, wmEvent;
- int xPos,yPos;
- POINT point;
-
- switch (message)
- {
- case WM_COMMAND:
- wmId = LOWORD(wParam);
- wmEvent = HIWORD(wParam);
- // Analyse les sélections de menu :
- switch (wmId)
- {
- case IDM_ABOUT:
- //DialogBox(hInst, (LPCTSTR)IDD_ABOUTBOX, hWnd, (DLGPROC)About);
- break;
- case IDM_EXIT:
- case ID_QUIT:
- Quitting(hWnd);
- break;
- default:
- return DefWindowProc(hWnd, message, wParam, lParam);
- }
- break;
- case WM_CONTEXTMENU:
- // Display the shortcut menu. Track the right mouse
- // button.
- xPos = LOWORD(lParam);
- yPos = HIWORD(lParam);
-
- TrackPopupMenu(hmenuTrackPopup, TPM_LEFTALIGN | TPM_RIGHTBUTTON,
- xPos, yPos, 0, hWnd, NULL);
- PostMessage(hWnd, WM_NULL, 0, 0);
-
- break;
- case WM_ICONTRAY_NOTIFY:
- switch ( lParam )
- {
- case WM_LBUTTONDOWN:
- break;
- case WM_RBUTTONDOWN:
- GetCursorPos(&point);
- TrackPopupMenu(hmenuTrackPopup, TPM_LEFTALIGN | TPM_RIGHTBUTTON,
- point.x, point.y, 0, hWnd, NULL);
- PostMessage(hWnd, WM_NULL, 0, 0);
- break;
- }
- break;
- case WM_DESTROY:
- PostQuitMessage(0);
- break;
- default:
- return DefWindowProc(hWnd, message, wParam, lParam);
- }
- return 0;
-}
-
-// Gestionnaire de messages pour la boîte de dialogue À propos de.
-LRESULT CALLBACK About(HWND hDlg, UINT message, WPARAM wParam, LPARAM lParam)
-{
- switch (message)
- {
- case WM_INITDIALOG:
- return TRUE;
-
- case WM_COMMAND:
- if (LOWORD(wParam) == IDOK || LOWORD(wParam) == IDCANCEL)
- {
- EndDialog(hDlg, LOWORD(wParam));
- return TRUE;
- }
- break;
- }
- return FALSE;
-}
diff --git a/Bus/IvyCursor/IvyCursor.h b/Bus/IvyCursor/IvyCursor.h
deleted file mode 100644
index e60f2eb..0000000
--- a/Bus/IvyCursor/IvyCursor.h
+++ /dev/null
@@ -1,3 +0,0 @@
-#pragma once
-
-#include "resource.h"
diff --git a/Bus/IvyCursor/IvyCursor.ico b/Bus/IvyCursor/IvyCursor.ico
deleted file mode 100644
index d0d1344..0000000
--- a/Bus/IvyCursor/IvyCursor.ico
+++ /dev/null
Binary files differ
diff --git a/Bus/IvyCursor/IvyCursor.rc b/Bus/IvyCursor/IvyCursor.rc
deleted file mode 100644
index 9d49167..0000000
--- a/Bus/IvyCursor/IvyCursor.rc
+++ /dev/null
@@ -1,115 +0,0 @@
-// Microsoft Visual C++ generated resource script.
-//
-#include "resource.h"
-
-#define APSTUDIO_READONLY_SYMBOLS
-/////////////////////////////////////////////////////////////////////////////
-//
-// Generated from the TEXTINCLUDE 2 resource.
-//
-#define APSTUDIO_HIDDEN_SYMBOLS
-#include "windows.h"
-#undef APSTUDIO_HIDDEN_SYMBOLS
-
-/////////////////////////////////////////////////////////////////////////////
-#undef APSTUDIO_READONLY_SYMBOLS
-
-/////////////////////////////////////////////////////////////////////////////
-// Français (France) resources
-
-#if !defined(AFX_RESOURCE_DLL) || defined(AFX_TARG_FRA)
-#ifdef _WIN32
-LANGUAGE LANG_FRENCH, SUBLANG_FRENCH
-#pragma code_page(1252)
-#endif //_WIN32
-
-/////////////////////////////////////////////////////////////////////////////
-//
-// Icon
-//
-
-// Icon with lowest ID value placed first to ensure application icon
-// remains consistent on all systems.
-IDI_IVYCURSOR ICON "IvyCursor.ico"
-IDI_SMALL ICON "small.ico"
-
-/////////////////////////////////////////////////////////////////////////////
-//
-// Accelerator
-//
-
-IDC_IVYCURSOR ACCELERATORS
-BEGIN
- "?", IDM_ABOUT, ASCII, ALT
- "/", IDM_ABOUT, ASCII, ALT
-END
-
-
-#ifdef APSTUDIO_INVOKED
-/////////////////////////////////////////////////////////////////////////////
-//
-// TEXTINCLUDE
-//
-
-1 TEXTINCLUDE
-BEGIN
- "resource.h\0"
-END
-
-2 TEXTINCLUDE
-BEGIN
- "#define APSTUDIO_HIDDEN_SYMBOLS\r\n"
- "#include ""windows.h""\r\n"
- "#undef APSTUDIO_HIDDEN_SYMBOLS\r\n"
- "\0"
-END
-
-3 TEXTINCLUDE
-BEGIN
- "\r\n"
- "\0"
-END
-
-#endif // APSTUDIO_INVOKED
-
-
-/////////////////////////////////////////////////////////////////////////////
-//
-// Menu
-//
-
-IDR_MENU1 MENU
-BEGIN
- POPUP "Menu"
- BEGIN
- MENUITEM "Quit", ID_QUIT
- END
-END
-
-
-/////////////////////////////////////////////////////////////////////////////
-//
-// String Table
-//
-
-STRINGTABLE
-BEGIN
- IDS_APP_TITLE "IvyCursor"
- IDC_IVYCURSOR "IVYCURSOR"
-END
-
-#endif // Français (France) resources
-/////////////////////////////////////////////////////////////////////////////
-
-
-
-#ifndef APSTUDIO_INVOKED
-/////////////////////////////////////////////////////////////////////////////
-//
-// Generated from the TEXTINCLUDE 3 resource.
-//
-
-
-/////////////////////////////////////////////////////////////////////////////
-#endif // not APSTUDIO_INVOKED
-
diff --git a/Bus/IvyCursor/IvyCursor.sln b/Bus/IvyCursor/IvyCursor.sln
deleted file mode 100644
index e8e53cb..0000000
--- a/Bus/IvyCursor/IvyCursor.sln
+++ /dev/null
@@ -1,55 +0,0 @@
-Microsoft Visual Studio Solution File, Format Version 8.00
-Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "IvyCursor", "IvyCursor.vcproj", "{5353F53D-8047-42AB-A3E1-73E6EAAFBBE6}"
- ProjectSection(ProjectDependencies) = postProject
- {84E0039A-6721-4B18-9792-E9AE4274AC0E} = {84E0039A-6721-4B18-9792-E9AE4274AC0E}
- EndProjectSection
-EndProject
-Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "Ivy", "..\Ivy\Ivy.vcproj", "{84E0039A-6721-4B18-9792-E9AE4274AC0E}"
- ProjectSection(ProjectDependencies) = postProject
- EndProjectSection
-EndProject
-Project("{54435603-DBB4-11D2-8724-00A0C9A8B90C}") = "Install", "InstIvyCursor\InstIvyCursor.vdproj", "{465D12EC-FE99-47FE-AF2A-17BB43672F22}"
- ProjectSection(ProjectDependencies) = postProject
- EndProjectSection
-EndProject
-Global
- GlobalSection(SourceCodeControl) = preSolution
- SccNumberOfProjects = 4
- SccProjectUniqueName0 = ..\\Ivy\\Ivy.vcproj
- SccProjectName0 = \u0022$/Bus/Ivy\u0022,\u0020QPEAAAAA
- SccLocalPath0 = ..\\Ivy
- CanCheckoutShared = false
- SccLocalPath1 = .
- CanCheckoutShared = false
- SolutionUniqueID = {414FACD5-03EC-415D-B4B1-E8EA51BC621B}
- SccProjectUniqueName2 = InstIvyCursor\\InstIvyCursor.vdproj
- SccLocalPath2 = .
- CanCheckoutShared = false
- SccProjectFilePathRelativizedFromConnection2 = InstIvyCursor\\
- SccProjectUniqueName3 = IvyCursor.vcproj
- SccLocalPath3 = .
- CanCheckoutShared = false
- EndGlobalSection
- GlobalSection(SolutionConfiguration) = preSolution
- Debug = Debug
- Release = Release
- EndGlobalSection
- GlobalSection(ProjectConfiguration) = postSolution
- {5353F53D-8047-42AB-A3E1-73E6EAAFBBE6}.Debug.ActiveCfg = Debug|Win32
- {5353F53D-8047-42AB-A3E1-73E6EAAFBBE6}.Debug.Build.0 = Debug|Win32
- {5353F53D-8047-42AB-A3E1-73E6EAAFBBE6}.Release.ActiveCfg = Release|Win32
- {5353F53D-8047-42AB-A3E1-73E6EAAFBBE6}.Release.Build.0 = Release|Win32
- {84E0039A-6721-4B18-9792-E9AE4274AC0E}.Debug.ActiveCfg = Debug|Win32
- {84E0039A-6721-4B18-9792-E9AE4274AC0E}.Debug.Build.0 = Debug|Win32
- {84E0039A-6721-4B18-9792-E9AE4274AC0E}.Release.ActiveCfg = Release|Win32
- {84E0039A-6721-4B18-9792-E9AE4274AC0E}.Release.Build.0 = Release|Win32
- {465D12EC-FE99-47FE-AF2A-17BB43672F22}.Debug.ActiveCfg = Debug
- {465D12EC-FE99-47FE-AF2A-17BB43672F22}.Debug.Build.0 = Debug
- {465D12EC-FE99-47FE-AF2A-17BB43672F22}.Release.ActiveCfg = Release
- {465D12EC-FE99-47FE-AF2A-17BB43672F22}.Release.Build.0 = Release
- EndGlobalSection
- GlobalSection(ExtensibilityGlobals) = postSolution
- EndGlobalSection
- GlobalSection(ExtensibilityAddIns) = postSolution
- EndGlobalSection
-EndGlobal
diff --git a/Bus/IvyCursor/IvyCursor.vcproj b/Bus/IvyCursor/IvyCursor.vcproj
deleted file mode 100644
index 673c7df..0000000
--- a/Bus/IvyCursor/IvyCursor.vcproj
+++ /dev/null
@@ -1,177 +0,0 @@
-<?xml version="1.0" encoding="Windows-1252"?>
-<VisualStudioProject
- ProjectType="Visual C++"
- Version="7.10"
- Name="IvyCursor"
- ProjectGUID="{5353F53D-8047-42AB-A3E1-73E6EAAFBBE6}"
- SccProjectName="SAK"
- SccAuxPath="SAK"
- SccLocalPath="SAK"
- SccProvider="SAK"
- Keyword="Win32Proj">
- <Platforms>
- <Platform
- Name="Win32"/>
- </Platforms>
- <Configurations>
- <Configuration
- Name="Debug|Win32"
- OutputDirectory="Debug"
- IntermediateDirectory="Debug"
- ConfigurationType="1"
- CharacterSet="2">
- <Tool
- Name="VCCLCompilerTool"
- Optimization="0"
- AdditionalIncludeDirectories="..\Ivy"
- PreprocessorDefinitions="WIN32;_DEBUG;_WINDOWS;_WIN32_IE=0x500;_WIN32_WINNT=0x0500"
- MinimalRebuild="TRUE"
- BasicRuntimeChecks="3"
- RuntimeLibrary="5"
- UsePrecompiledHeader="3"
- WarningLevel="3"
- Detect64BitPortabilityProblems="TRUE"
- DebugInformationFormat="4"/>
- <Tool
- Name="VCCustomBuildTool"/>
- <Tool
- Name="VCLinkerTool"
- OutputFile="$(OutDir)/IvyCursor.exe"
- LinkIncremental="2"
- GenerateDebugInformation="TRUE"
- ProgramDatabaseFile="$(OutDir)/IvyCursor.pdb"
- SubSystem="2"
- TargetMachine="1"/>
- <Tool
- Name="VCMIDLTool"/>
- <Tool
- Name="VCPostBuildEventTool"/>
- <Tool
- Name="VCPreBuildEventTool"/>
- <Tool
- Name="VCPreLinkEventTool"/>
- <Tool
- Name="VCResourceCompilerTool"/>
- <Tool
- Name="VCWebServiceProxyGeneratorTool"/>
- <Tool
- Name="VCXMLDataGeneratorTool"/>
- <Tool
- Name="VCWebDeploymentTool"/>
- <Tool
- Name="VCManagedWrapperGeneratorTool"/>
- <Tool
- Name="VCAuxiliaryManagedWrapperGeneratorTool"/>
- </Configuration>
- <Configuration
- Name="Release|Win32"
- OutputDirectory="Release"
- IntermediateDirectory="Release"
- ConfigurationType="1"
- CharacterSet="2">
- <Tool
- Name="VCCLCompilerTool"
- AdditionalIncludeDirectories="..\Ivy"
- PreprocessorDefinitions="WIN32;NDEBUG;_WINDOWS;_WIN32_IE=0x500;_WIN32_WINNT=0x0500"
- RuntimeLibrary="4"
- UsePrecompiledHeader="3"
- WarningLevel="3"
- Detect64BitPortabilityProblems="TRUE"
- DebugInformationFormat="3"/>
- <Tool
- Name="VCCustomBuildTool"/>
- <Tool
- Name="VCLinkerTool"
- OutputFile="$(OutDir)/IvyCursor.exe"
- LinkIncremental="1"
- GenerateDebugInformation="TRUE"
- SubSystem="2"
- OptimizeReferences="2"
- EnableCOMDATFolding="2"
- TargetMachine="1"/>
- <Tool
- Name="VCMIDLTool"/>
- <Tool
- Name="VCPostBuildEventTool"/>
- <Tool
- Name="VCPreBuildEventTool"/>
- <Tool
- Name="VCPreLinkEventTool"/>
- <Tool
- Name="VCResourceCompilerTool"/>
- <Tool
- Name="VCWebServiceProxyGeneratorTool"/>
- <Tool
- Name="VCXMLDataGeneratorTool"/>
- <Tool
- Name="VCWebDeploymentTool"/>
- <Tool
- Name="VCManagedWrapperGeneratorTool"/>
- <Tool
- Name="VCAuxiliaryManagedWrapperGeneratorTool"/>
- </Configuration>
- </Configurations>
- <References>
- <ProjectReference
- ReferencedProjectIdentifier="{84E0039A-6721-4B18-9792-E9AE4274AC0E}"
- Name="Ivy"/>
- </References>
- <Files>
- <Filter
- Name="Source Files"
- Filter="cpp;c;cxx;def;odl;idl;hpj;bat;asm;asmx"
- UniqueIdentifier="{4FC737F1-C7A5-4376-A066-2A32D752A2FF}">
- <File
- RelativePath=".\IvyCursor.cpp">
- </File>
- <File
- RelativePath=".\stdafx.cpp">
- <FileConfiguration
- Name="Debug|Win32">
- <Tool
- Name="VCCLCompilerTool"
- UsePrecompiledHeader="1"/>
- </FileConfiguration>
- <FileConfiguration
- Name="Release|Win32">
- <Tool
- Name="VCCLCompilerTool"
- UsePrecompiledHeader="1"/>
- </FileConfiguration>
- </File>
- </Filter>
- <Filter
- Name="Header Files"
- Filter="h;hpp;hxx;hm;inl;inc;xsd"
- UniqueIdentifier="{93995380-89BD-4b04-88EB-625FBE52EBFB}">
- <File
- RelativePath=".\IvyCursor.h">
- </File>
- <File
- RelativePath=".\Resource.h">
- </File>
- <File
- RelativePath=".\stdafx.h">
- </File>
- </Filter>
- <Filter
- Name="Resource Files"
- Filter="rc;ico;cur;bmp;dlg;rc2;rct;bin;rgs;gif;jpg;jpeg;jpe;resx"
- UniqueIdentifier="{67DA6AB6-F800-4c08-8B7A-83BB121AAD01}">
- <File
- RelativePath=".\IvyCursor.ico">
- </File>
- <File
- RelativePath=".\IvyCursor.rc">
- </File>
- <File
- RelativePath=".\small.ico">
- </File>
- </Filter>
- <File
- RelativePath=".\ReadMe.txt">
- </File>
- </Files>
- <Globals>
- </Globals>
-</VisualStudioProject>
diff --git a/Bus/IvyCursor/IvyCursor.vcproj.vspscc b/Bus/IvyCursor/IvyCursor.vcproj.vspscc
deleted file mode 100644
index feffdec..0000000
--- a/Bus/IvyCursor/IvyCursor.vcproj.vspscc
+++ /dev/null
@@ -1,10 +0,0 @@
-""
-{
-"FILE_VERSION" = "9237"
-"ENLISTMENT_CHOICE" = "NEVER"
-"PROJECT_FILE_RELATIVE_PATH" = ""
-"NUMBER_OF_EXCLUDED_FILES" = "0"
-"ORIGINAL_PROJECT_FILE_PATH" = ""
-"NUMBER_OF_NESTED_PROJECTS" = "0"
-"SOURCE_CONTROL_SETTINGS_PROVIDER" = "PROVIDER"
-}
diff --git a/Bus/IvyCursor/IvyCursor.vssscc b/Bus/IvyCursor/IvyCursor.vssscc
deleted file mode 100644
index 794f014..0000000
--- a/Bus/IvyCursor/IvyCursor.vssscc
+++ /dev/null
@@ -1,10 +0,0 @@
-""
-{
-"FILE_VERSION" = "9237"
-"ENLISTMENT_CHOICE" = "NEVER"
-"PROJECT_FILE_RELATIVE_PATH" = ""
-"NUMBER_OF_EXCLUDED_FILES" = "0"
-"ORIGINAL_PROJECT_FILE_PATH" = ""
-"NUMBER_OF_NESTED_PROJECTS" = "0"
-"SOURCE_CONTROL_SETTINGS_PROVIDER" = "PROJECT"
-}
diff --git a/Bus/IvyCursor/ReadMe.txt b/Bus/IvyCursor/ReadMe.txt
deleted file mode 100644
index 1d12090..0000000
--- a/Bus/IvyCursor/ReadMe.txt
+++ /dev/null
@@ -1,53 +0,0 @@
-========================================================================
- APPLICATION WIN32 : vue d'ensemble du projet IvyCursor
-========================================================================
-
-AppWizard a créé cette application IvyCursor pour vous.
-Ce fichier contient un résumé du contenu de chacun des fichiers qui
-constituent votre application IvyCursor.
-
-
-IvyCursor.vcproj
- Il s'agit du fichier projet principal pour les projets VC++ générés en utilisant un Assistant Application.
- Il contient les informations sur la version de Visual C++ qui a généré le fichier et
- les informations sur les plates-formes, les configurations et les fonctionnalités du projet sélectionnées avec
- l'Assistant Application.
-
-IvyCursor.cpp
- Il s'agit du fichier source principal de l'application .
-
-/////////////////////////////////////////////////////////////////////////////
-AppWizard a créé les ressources suivantes :
-
-IvyCursor.rc
- Il s'agit de la liste de toutes les ressources Microsoft Windows que le
- programme utilise. Elle comprend les icônes, les bitmaps et les curseurs qui sont stockés
- dans le sous-répertoire RES. Ce fichier peut être modifié directement dans Microsoft
- Visual C++.
-
-Resource.h
- Il s'agit du fichier d'en-tête standard, qui définit les nouveaux ID de ressources.
- Microsoft Visual C++ lit et met à jour ce fichier.
-IvyCursor.ico
- Il s'agit d'un fichier icône, qui est utilisé comme icône de l'application (32x32).
- Cette icône est incluse par le fichier de ressources principal IvyCursor.rc.
-
-small.ico
- Il s'agit d'un fichier icône, qui contient une version plus petite (16x16)
- de l'icône de l'application. Cette icône est incluse par le fichier de ressources
- principal IvyCursor.rc.
-
-/////////////////////////////////////////////////////////////////////////////
-Autres fichiers standard :
-
-StdAfx.h, StdAfx.cpp
- Ces fichiers sont utilisés pour générer un fichier d'en-tête précompilé (PCH)
- nommé IvyCursor.pch et un fichier de type précompilé nommé StdAfx.obj.
-
-/////////////////////////////////////////////////////////////////////////////
-Autres remarques :
-
-AppWizard utilise des commentaires "TODO :" pour indiquer les parties du code source où vous
-pouvez ajouter ou modifier du code.
-
-/////////////////////////////////////////////////////////////////////////////
diff --git a/Bus/IvyCursor/resource.h b/Bus/IvyCursor/resource.h
deleted file mode 100644
index e2f7a7d..0000000
--- a/Bus/IvyCursor/resource.h
+++ /dev/null
@@ -1,28 +0,0 @@
-//{{NO_DEPENDENCIES}}
-// Microsoft Visual C++ generated include file.
-// Used by IvyCursor.rc
-//
-#define IDC_MYICON 2
-#define IDD_IVYCURSOR_DIALOG 102
-#define IDS_APP_TITLE 103
-#define IDM_ABOUT 104
-#define IDM_EXIT 105
-#define IDI_IVYCURSOR 107
-#define IDI_SMALL 108
-#define IDC_IVYCURSOR 109
-#define IDR_MAINFRAME 128
-#define IDR_MENU1 129
-#define ID_QUIT 32771
-#define IDC_STATIC -1
-
-// Next default values for new objects
-//
-#ifdef APSTUDIO_INVOKED
-#ifndef APSTUDIO_READONLY_SYMBOLS
-#define _APS_NO_MFC 1
-#define _APS_NEXT_RESOURCE_VALUE 130
-#define _APS_NEXT_COMMAND_VALUE 32773
-#define _APS_NEXT_CONTROL_VALUE 1000
-#define _APS_NEXT_SYMED_VALUE 110
-#endif
-#endif
diff --git a/Bus/IvyCursor/small.ico b/Bus/IvyCursor/small.ico
deleted file mode 100644
index d551aa3..0000000
--- a/Bus/IvyCursor/small.ico
+++ /dev/null
Binary files differ
diff --git a/Bus/IvyCursor/stdafx.cpp b/Bus/IvyCursor/stdafx.cpp
deleted file mode 100644
index 2233343..0000000
--- a/Bus/IvyCursor/stdafx.cpp
+++ /dev/null
@@ -1,8 +0,0 @@
-// stdafx.cpp : fichier source incluant simplement les fichiers Include standard
-// IvyCursor.pch représente l'en-tête précompilé
-// stdafx.obj contient les informations de type précompilées
-
-#include "stdafx.h"
-
-// TODO : faites référence aux en-têtes supplémentaires nécessaires dans STDAFX.H
-// absents de ce fichier
diff --git a/Bus/IvyCursor/stdafx.h b/Bus/IvyCursor/stdafx.h
deleted file mode 100644
index 5a1bba0..0000000
--- a/Bus/IvyCursor/stdafx.h
+++ /dev/null
@@ -1,18 +0,0 @@
-// stdafx.h : Fichier Include pour les fichiers Include système standard,
-// ou les fichiers Include spécifiques aux projets qui sont utilisés fréquemment,
-// et sont rarement modifiés
-//
-
-#pragma once
-
-
-#define WIN32_LEAN_AND_MEAN // Exclure les en-têtes Windows rarement utilisés
-// Fichiers d'en-tête Windows :
-#include <windows.h>
-// Fichiers d'en-tête C RunTime
-#include <stdlib.h>
-#include <malloc.h>
-#include <memory.h>
-#include <tchar.h>
-
-// TODO : faites référence ici aux en-têtes supplémentaires nécessaires au programme
diff --git a/Bus/IvyFileMon/C++/Bus/IvyFileMon/IvyFileMon.vsscc b/Bus/IvyFileMon/C++/Bus/IvyFileMon/IvyFileMon.vsscc
deleted file mode 100644
index 8fdac15..0000000
--- a/Bus/IvyFileMon/C++/Bus/IvyFileMon/IvyFileMon.vsscc
+++ /dev/null
Binary files differ
diff --git a/Bus/IvyFileMon/DelayedDirectoryChangeHandler.cpp b/Bus/IvyFileMon/DelayedDirectoryChangeHandler.cpp
deleted file mode 100644
index 1c4daf0..0000000
--- a/Bus/IvyFileMon/DelayedDirectoryChangeHandler.cpp
+++ /dev/null
@@ -1,1414 +0,0 @@
-// DelayedDirectoryChangeHandler.cpp: implementation of the CDelayedDirectoryChangeHandler2 class.
-//
-//////////////////////////////////////////////////////////////////////
-
-#include "stdafx.h"
-#include "DirectoryChanges.h"
-#include "DelayedDirectoryChangeHandler.h"
-#include <process.h>//for _beginthreadex
-
-#include <shlwapi.h> // for PathMatchSpec
-#pragma comment( lib, "shlwapi.lib") // function
-
-
-#ifdef _DEBUG
-#undef THIS_FILE
-static char THIS_FILE[]=__FILE__;
-#define new DEBUG_NEW
-#endif
-
-#define UWM_DELAYED_DIRECTORY_NOTIFICATION (WM_APP+1024)
-
-
-HINSTANCE GetInstanceHandle()
-{
- return (HINSTANCE)GetModuleHandle(NULL);
- // ASSERT( AfxGetInstanceHandle() == (HINSTANCE)GetModuleHandle(NULL) ); <-- true for building .exe's
- //NOTE: In Dll's using shared MFC, AfxGetInstanceHandle() != (HINSTANCE)GetModuleHandle(NULL)...
- //don't know if this is the case for dll's using static MFC
-}
-static inline bool IsEmptyString(LPCTSTR sz)
-{
- return (bool)(sz==NULL || *sz == 0);
-}
-/*********************************************************
- PathMatchSpec() requires IE 4.0 or greater on NT...
- if running on NT 4.0 w/ out IE 4.0, then uses this function instead.
-
- Based on code by Jack Handy:
- http://www.codeproject.com/string/wildcmp.asp
-
- Changed slightly to match the PathMatchSpec signature, be unicode compliant & to ignore case by myself.
-
-*********************************************************/
-
-#define _TESTING_WILDCMP_ONLY_
-
-BOOL STDAPICALLTYPE wildcmp(LPCTSTR string, LPCTSTR wild )
-{
- const TCHAR *cp, *mp;
- cp = mp = NULL;
-
- while ((*string) && (*wild != _T('*')))
- {
- if ((_toupper(*wild) != _toupper(*string)) && (*wild != _T('?')))
- {
- return FALSE;
- }
- wild++;
- string++;
- }
-
- while (*string)
- {
- if (*wild == _T('*'))
- {
- if (!*++wild)
- {
- return TRUE;
- }
- mp = wild;
- cp = string+1;
- }
- else
- if ((_toupper(*wild) == _toupper(*string)) || (*wild == _T('?')))
- {
- wild++;
- string++;
- }
- else
- {
- wild = mp;
- string = cp++;
- }
- }
-
- while (*wild == _T('*'))
- {
- wild++;
- }
- return (!*wild)? TRUE : FALSE;
-}
-
-//////////////////////////////////////////////////////////////////////////
-//
-//CDirChangeNotification member functions:
-//
-CDirChangeNotification::CDirChangeNotification(CDelayedDirectoryChangeHandler * pDelayedHandler, DWORD dwPartialPathOffset)
-:m_pDelayedHandler( pDelayedHandler )
-,m_szFileName1(NULL)
-,m_szFileName2(NULL)
-,m_dwError(0UL)
-,m_dwPartialPathOffset(dwPartialPathOffset)
-{
- ASSERT( pDelayedHandler );
-}
-
-CDirChangeNotification::~CDirChangeNotification()
-{
- if( m_szFileName1 ) free(m_szFileName1), m_szFileName1 = NULL;
- if( m_szFileName2 ) free(m_szFileName2), m_szFileName2 = NULL;
-}
-
-void CDirChangeNotification::DispatchNotificationFunction()
-{
- ASSERT( m_pDelayedHandler );
- if( m_pDelayedHandler )
- m_pDelayedHandler->DispatchNotificationFunction( this );
-}
-
-void CDirChangeNotification::PostOn_FileAdded(LPCTSTR szFileName)
-{
- ASSERT( szFileName );
- m_eFunctionToDispatch = eOn_FileAdded;
- m_szFileName1 = _tcsdup( szFileName) ;
- //
- // post the message so it'll be dispatch by another thread.
- PostNotification();
-
-}
-void CDirChangeNotification::PostOn_FileRemoved(LPCTSTR szFileName)
-{
- ASSERT( szFileName );
- m_eFunctionToDispatch = eOn_FileRemoved;
- m_szFileName1 = _tcsdup( szFileName) ;
- //
- // post the message so it'll be dispatched by another thread.
- PostNotification();
-
-}
-void CDirChangeNotification::PostOn_FileNameChanged(LPCTSTR szOldName, LPCTSTR szNewName)
-{
- ASSERT( szOldName && szNewName );
-
- m_eFunctionToDispatch = eOn_FileNameChanged;
- m_szFileName1 = _tcsdup( szOldName) ;
- m_szFileName2 = _tcsdup( szNewName) ;
- //
- // post the message so it'll be dispatched by another thread.
- PostNotification();
-
-}
-
-void CDirChangeNotification::PostOn_FileModified(LPCTSTR szFileName)
-{
- ASSERT( szFileName );
-
- m_eFunctionToDispatch = eOn_FileModified;
- m_szFileName1 = _tcsdup( szFileName );
- //
- // post the message so it'll be dispatched by another thread.
- PostNotification();
-}
-
-void CDirChangeNotification::PostOn_ReadDirectoryChangesError(DWORD dwError, LPCTSTR szDirectoryName)
-{
- ASSERT( szDirectoryName );
-
- m_eFunctionToDispatch = eOn_ReadDirectoryChangesError;
- m_dwError = dwError;
- m_szFileName1 = _tcsdup(szDirectoryName);
- //
- // post the message so it'll be dispatched by the another thread.
- PostNotification();
-
-}
-
-void CDirChangeNotification::PostOn_WatchStarted(DWORD dwError, LPCTSTR szDirectoryName)
-{
- ASSERT( szDirectoryName );
-
- m_eFunctionToDispatch = eOn_WatchStarted;
- m_dwError = dwError;
- m_szFileName1 = _tcsdup(szDirectoryName);
-
- PostNotification();
-}
-
-void CDirChangeNotification::PostOn_WatchStopped(LPCTSTR szDirectoryName)
-{
- ASSERT( szDirectoryName );
-
- m_eFunctionToDispatch = eOn_WatchStopped;
- m_szFileName1 = _tcsdup(szDirectoryName);
-
- PostNotification();
-}
-
-void CDirChangeNotification::PostNotification()
-{
- ASSERT( m_pDelayedHandler );
- if( m_pDelayedHandler )
- m_pDelayedHandler->PostNotification( this );
-}
-
-static LRESULT CALLBACK DelayedNotificationWndProc(HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam)
-//
-// This is the wndproc for the notification window
-//
-// it's here to dispatch the notifications to the client
-//
-{
- if( message == UWM_DELAYED_DIRECTORY_NOTIFICATION )
- {
- CDirChangeNotification * pNotification = reinterpret_cast<CDirChangeNotification*>(lParam);
- ASSERT( pNotification );
- if( pNotification )
- {
- DWORD dwEx(0);
- __try{
- pNotification->DispatchNotificationFunction();
- }
- __except(dwEx = GetExceptionCode(), EXCEPTION_EXECUTE_HANDLER){
- //An exception was raised:
- //
- // Likely cause: there was a problem creating the CDelayedDirectoryChangeHandler::m_hWatchStoppedDispatchedEvent object
- // and the change handler object was deleted before the notification could be dispatched to this function.
- //
- // or perhaps, somebody's implementation of an overridden function caused an exception
- TRACE(_T("Following exception occurred: %d -- File: %s Line: %d\n"), dwEx, _T(__FILE__), __LINE__);
- }
- }
-
- return 0UL;
- }
- else
- return DefWindowProc(hWnd,message,wParam,lParam);
-}
-
-//////////////////////////////////////////////////////////////////////
-// Construction/Destruction
-//////////////////////////////////////////////////////////////////////
-//
-//CDelayedNotificationWindow static member vars:
-//
-long CDelayedNotificationWindow::s_nRefCnt = 0L;
-HWND CDelayedNotificationWindow::s_hWnd = NULL;
-BOOL CDelayedNotificationWindow::s_bRegisterWindow = FALSE;
-//
-//
-long CDelayedNotificationWindow::AddRef()//creates window for first time if necessary
-{
- if( InterlockedIncrement(&s_nRefCnt) == 1
- || !::IsWindow( s_hWnd ) )
- {
- TRACE(_T("CDelayedNotificationWindow -- Creating the notification window\n"));
- VERIFY( CreateNotificationWindow() );
- }
- return s_nRefCnt;
-}
-
-long CDelayedNotificationWindow::Release()//destroys window for last time if necessary
-{
- long nRefCnt = -1;
- if( (nRefCnt = InterlockedDecrement(&s_nRefCnt)) == 0 )
- {
- //no body else using the window so destroy it?
- TRACE(_T("CDelayedNotificationWindow -- Destroying the notification window\n"));
- DestroyWindow( s_hWnd );
- s_hWnd = NULL;
- }
- return nRefCnt;
-}
-BOOL CDelayedNotificationWindow::RegisterWindowClass(LPCTSTR szClassName)
-//
-// registers our own window class to use as the hidden notification window.
-//
-{
- WNDCLASS wc = {0};
-
- wc.style = 0;
- wc.hInstance = GetInstanceHandle();
- wc.lpszClassName = szClassName;
- wc.hbrBackground = (HBRUSH)GetStockObject( WHITE_BRUSH );
- wc.lpfnWndProc = DelayedNotificationWndProc;
-
- ATOM ant = RegisterClass( &wc );
- if( ant == NULL )
- {
- TRACE(_T("CDirChangeNotification::RegisterWindowClass - RegisterClass failed: %d\n"), GetLastError());
- }
- return (BOOL)(ant!= NULL);
-
-}
-
-BOOL CDelayedNotificationWindow::CreateNotificationWindow()
-//
-// Create the hidden notification windows.
-//
-{
- TCHAR szClassName[] = _T("Delayed_Message_Sender");
- if( !s_bRegisterWindow )
- s_bRegisterWindow = RegisterWindowClass(szClassName);
- s_hWnd = CreateWindowEx(0, szClassName, _T("DelayedWnd"),0,0,0,0,0, NULL, 0,
- GetInstanceHandle(), NULL);
- if( s_hWnd == NULL )
- {
- TRACE(_T("Unable to create notification window! GetLastError(): %d\n"), GetLastError());
- TRACE(_T("File: %s Line: %d\n"), _T(__FILE__), __LINE__);
- }
-
- return (BOOL)(s_hWnd != NULL);
-}
-void CDelayedNotificationWindow::PostNotification(CDirChangeNotification * pNotification)
-//
-// Posts a message to a window created in the main
-// thread.
-// The main thread catches this message, and dispatches it in
-// the context of the main thread.
-//
-{
- ASSERT( pNotification );
- ASSERT( s_hWnd );
- ASSERT( ::IsWindow( s_hWnd ) );
-
- PostMessage(s_hWnd,
- UWM_DELAYED_DIRECTORY_NOTIFICATION,
- 0,
- reinterpret_cast<LPARAM>( pNotification ));
-
-// if you don't want the notification delayed,
-//
-// if( false )
-// {
-// pNotification->DispatchNotificationFunction();
-// }
-}
-
-/////////////////////////////////////////////////////////
-// CDelayedNoticationThread
-//
-long CDelayedNotificationThread::s_nRefCnt = 0L;
-HANDLE CDelayedNotificationThread::s_hThread = NULL;
-DWORD CDelayedNotificationThread::s_dwThreadID = 0UL;
-
-void CDelayedNotificationThread::PostNotification(CDirChangeNotification * pNotification)
-{
- ASSERT( s_hThread != NULL );
- ASSERT( s_dwThreadID != 0 );
-
- if(
- !PostThreadMessage(s_dwThreadID,
- UWM_DELAYED_DIRECTORY_NOTIFICATION,
- 0,
- reinterpret_cast<LPARAM>(pNotification))
- )
- {
- //Note, this can sometimes fail.
- //Will fail if: s_dwThreadID references a invalid thread id(the thread has died for example)
- // OR will fail if the thread doesn't have a message queue.
- //
- // This was failing because the thread had not been fully started by the time PostThreadMessage had been called
- //
- //Note: if this fails, it creates a memory leak because
- //the CDirChangeNotification object that was allocated and posted
- //to the thread is actually never going to be dispatched and then deleted.... it's
- //hanging in limbo.....
-
- //
- // The fix for this situation was to force the thread that starts
- // this worker thread to wait until the worker thread was fully started before
- // continueing. accomplished w/ an event... also.. posting a message to itself before signalling the
- // 'spawning' thread that it was started ensured that there was a message pump
- // associated w/ the worker thread by the time PostThreadMessage was called.
- TRACE(_T("PostThreadMessage() failed while posting to thread id: %d! GetLastError(): %d%s\n"), s_dwThreadID, GetLastError(), GetLastError() == ERROR_INVALID_THREAD_ID? _T("(ERROR_INVALID_THREAD_ID)") : _T(""));
- }
-}
-
-bool CDelayedNotificationThread::StartThread()
-{
- TRACE(_T("CDelayedNotificationThread::StartThread()\n"));
- ASSERT( s_hThread == NULL
- && s_dwThreadID == 0 );
- s_hThread = (HANDLE)_beginthreadex(NULL,0,
- ThreadFunc, this, 0, (UINT*) &s_dwThreadID);
- if( s_hThread )
- WaitForThreadStartup();
-
- return s_hThread == NULL ? false : true;
-
-}
-
-bool CDelayedNotificationThread::StopThread()
-{
- TRACE(_T("CDelayedNotificationThread::StopThread()\n"));
- if( s_hThread != NULL
- && s_dwThreadID != 0 )
- {
- PostThreadMessage(s_dwThreadID, WM_QUIT, 0,0);
-
- WaitForSingleObject(s_hThread, INFINITE);
- CloseHandle(s_hThread);
- s_hThread = NULL;
- s_dwThreadID = 0UL;
- return true;
- }
- return true;//already shutdown
-}
-
-UINT __stdcall CDelayedNotificationThread::ThreadFunc(LPVOID lpvThis)
-{
- //UNREFERENCED_PARAMETER( lpvThis );
- //
- // Implements a simple message pump
- //
- CDelayedNotificationThread * pThis = reinterpret_cast<CDelayedNotificationThread*>(lpvThis);
- ASSERT( pThis );
-
- //
- // Insure that this thread has a message queue by the time another
- // thread gets control and tries to use PostThreadMessage
- // problems can happen if someone tries to use PostThreadMessage
- // in between the time pThis->SignalThreadStartup() is called,
- // and the first call to GetMessage();
-
- ::PostMessage(NULL, WM_NULL, 0,0);//if this thread didn't have a message queue before this, it does now.
-
-
- //
- //
- // Signal that this thread has started so that StartThread can continue.
- //
- if( pThis ) pThis->SignalThreadStartup();
-
- TRACE(_T("CDelayedNotificationThread::ThreadFunc() ThreadID: %d -- Starting\n"), GetCurrentThreadId());
- MSG msg;
- do{
- while( GetMessage(&msg, NULL, 0,0) )//note GetMessage() can return -1, but only if i give it a bad HWND.(HWND for another thread for example)..i'm not giving an HWND, so no problemo here.
- {
- if( msg.message == UWM_DELAYED_DIRECTORY_NOTIFICATION )
- {
- CDirChangeNotification * pNotification =
- reinterpret_cast<CDirChangeNotification *>( msg.lParam );
- DWORD dwEx(0UL);
-
- __try{
- if( pNotification )
- pNotification->DispatchNotificationFunction();
- }
- __except(dwEx = GetExceptionCode(), EXCEPTION_EXECUTE_HANDLER){
- //An exception was raised:
- //
- // Likely causes:
- // * There was a problem creating the CDelayedDirectoryChangeHandler::m_hWatchStoppedDispatchedEvent object
- // and the change handler object was deleted before the notification could be dispatched to this function.
- //
- // * Somebody's implementation of an overridden virtual function caused an exception
- TRACE(_T("The following exception occurred: %d -- File: %s Line: %d\n"), dwEx, _T(__FILE__), __LINE__);
- }
- }
- else
- if( msg.message == WM_QUIT )
- {
- break;
- }
- }
- }while( msg.message != WM_QUIT );
- TRACE(_T("CDelayedNotificationThread::ThreadFunc() exiting. ThreadID: %d\n"), GetCurrentThreadId());
- return 0;
-}
-
-long CDelayedNotificationThread::AddRef()
-{
- if( InterlockedIncrement(&s_nRefCnt) == 1 )
- {
- VERIFY( StartThread() );
- }
- return s_nRefCnt;
-}
-long CDelayedNotificationThread::Release()
-{
- if( InterlockedDecrement(&s_nRefCnt) <= 0 )
- {
- s_nRefCnt = 0;
- VERIFY( StopThread() );
- }
- return s_nRefCnt;
-}
-
-///////////////////////////////////////////////////////
-//static member data for CDelayedDirectoryChangeHandler
-HINSTANCE CDelayedDirectoryChangeHandler::s_hShlwapi_dll = NULL;//for the PathMatchSpec() function
-BOOL CDelayedDirectoryChangeHandler::s_bShlwapi_dllExists = TRUE;
-long CDelayedDirectoryChangeHandler::s_nRefCnt_hShlwapi = 0L;
-FUNC_PatternMatchSpec CDelayedDirectoryChangeHandler::s_fpPatternMatchSpec = wildcmp;//default
-///////////////////////////////////////////////////////
-//construction destruction
-CDelayedDirectoryChangeHandler::CDelayedDirectoryChangeHandler(CDirectoryChangeHandler * pRealHandler, bool bAppHasGUI, LPCTSTR szIncludeFilter, LPCTSTR szExcludeFilter, DWORD dwFilterFlags)
-: m_pDelayNotifier( NULL )
- ,m_pRealHandler( pRealHandler )
- ,m_szIncludeFilter(NULL)
- ,m_szExcludeFilter(NULL)
- ,m_dwFilterFlags( dwFilterFlags )
- ,m_dwPartialPathOffset( 0UL )
- ,m_hWatchStoppedDispatchedEvent(NULL)
- ,m_nNumIncludeFilterSpecs(0)
- ,m_nNumExcludeFilterSpecs(0)
-{
-
-
- ASSERT( m_pRealHandler );
-
- InitializePathMatchFunc( szIncludeFilter, szExcludeFilter );
-
- //
- // See that we're
- //
-
-
- m_hWatchStoppedDispatchedEvent = ::CreateEvent(NULL, FALSE, FALSE, NULL);//AUTO-RESET, not initially signalled
- ASSERT( m_hWatchStoppedDispatchedEvent );
-
- if( bAppHasGUI )
- {
- //
- // The value true was passed to the CDirectoryChangeWatcher constructor.
- // It's assumed that your app has a gui, that is, it implements
- // a message pump. To delay the notification to another thread,
- // we'll use a hidden notification window.
- //
- m_pDelayNotifier = new CDelayedNotificationWindow();
- }
- else
- {
- // The value 'false' was passed to the CDirectoryChangeWatcher constructor.
- //
- // Your app has no message pump... use a class that implements one for you
- // in a worker thread.
- //
- // Notifications will be executed in this worker thread.
- //
- m_pDelayNotifier = new CDelayedNotificationThread();
- }
-}
-
-CDelayedDirectoryChangeHandler::~CDelayedDirectoryChangeHandler()
-{
- if( m_pRealHandler )
- delete m_pRealHandler, m_pRealHandler = NULL;
- if( m_pDelayNotifier )
- delete m_pDelayNotifier, m_pDelayNotifier = NULL;
-
- if( m_hWatchStoppedDispatchedEvent )
- CloseHandle(m_hWatchStoppedDispatchedEvent), m_hWatchStoppedDispatchedEvent = NULL;
-
- if( m_szIncludeFilter ){
- if( m_nNumIncludeFilterSpecs == 1 )
- free(m_szIncludeFilter);
- else
- {
- TCHAR ** ppTmp = (TCHAR**)m_szIncludeFilter;
- for(int i(0); i < m_nNumIncludeFilterSpecs; ++i)
- {
- free( *ppTmp++ );
- }
- free( m_szIncludeFilter );
- }
- m_szIncludeFilter = NULL;
- m_nNumIncludeFilterSpecs;
- }
- if( m_szExcludeFilter ) {
- if( m_nNumExcludeFilterSpecs == 1 )
- free(m_szExcludeFilter);
- else{
- TCHAR ** ppTmp = (TCHAR**)m_szExcludeFilter;
- for(int i(0); i < m_nNumExcludeFilterSpecs; ++i)
- {
- free( *ppTmp++ );
- }
- free( m_szExcludeFilter );
- }
- m_szExcludeFilter = NULL;
- m_nNumExcludeFilterSpecs = 0;
- }
-
- UninitializePathMatchFunc();
-}
-
-BOOL CDelayedDirectoryChangeHandler::_PathMatchSpec(LPCTSTR szPath, LPCTSTR szPattern)
-{
- if( s_fpPatternMatchSpec )
- {
- return s_fpPatternMatchSpec(szPath, szPattern);
- }
- ASSERT( FALSE );
- return TRUE;//everything matches.
-}
-
-BOOL CDelayedDirectoryChangeHandler::InitializePathMatchFunc(LPCTSTR szIncludeFilter, LPCTSTR szExcludeFilter)
-//
-//
-// To support the Include and Exclude filters, the PathMatchSpec function is used.
-// PathMatchSpec is only supported on NT4.0 if IE 4.0 is installed.
-//
-// for the case where this code is running on NT 4.0 w/out IE 4.0, we use
-// a different function: wildcmp ()
-//
-//
-// This function attempts to load shlwapi.dll dynamically and find the PathMatchSpec function.
-//
-// if the function PathMatchSpec can't be found, the function pointer s_fpPathMatchSpec is set to wildcmp.
-//
-//
-// Note: wildcmp doesn't support multiple file specs separated by a semi-colon
-// as PathMatchSpec does.... we'll support it by parsing them
-// when we want to test the filters, we'll call the pattern matching functions multiple times...
-//
-{
-
- //
- // Copy the include/exclude filters if specified...
- //
- //
- if( IsEmptyString(szIncludeFilter)
- && IsEmptyString(szExcludeFilter) )
- {
- return TRUE;//both the include && exclude filters aren't specified
- //no need to initialize the pattern matching function....
- //if filters are never used, then
- //one less dll is loaded.
- }
-
-#ifdef _TESTING_WILDCMP_ONLY_
- s_hShlwapi_dll = NULL;
- s_bShlwapi_dllExists = FALSE;
- return InitializePatterns(szIncludeFilter, szExcludeFilter);
-#endif
-
-
- if( s_hShlwapi_dll != NULL )
- {
- ASSERT( s_fpPatternMatchSpec != NULL );
- InterlockedIncrement(&s_nRefCnt_hShlwapi);
-
- return InitializePatterns(szIncludeFilter, szExcludeFilter);
- }
- else{
- if( s_bShlwapi_dllExists == TRUE )//either the dll exists, or we haven't tried loading it yet...
- {
- //The pattern match function hasn't been initialized yet....
- //
-
- s_hShlwapi_dll = ::LoadLibrary(_T("Shlwapi.dll"));
- if( s_hShlwapi_dll == NULL )
- {
- s_bShlwapi_dllExists = FALSE;//don't try loading this dll again.
- s_fpPatternMatchSpec = wildcmp;//even though it's set buy default, and this code will only get here once, set it just for fun.
-
- return InitializePatterns(szIncludeFilter, szExcludeFilter);
-
- }
- else
- {
- //Shlwapi.dll was found....check it for PathMatchSpec()
-#ifdef UNICODE
- s_fpPatternMatchSpec = (FUNC_PatternMatchSpec)::GetProcAddress(s_hShlwapi_dll, "PathMatchSpecW");
-#else
- s_fpPatternMatchSpec = (FUNC_PatternMatchSpec)::GetProcAddress(s_hShlwapi_dll, "PathMatchSpecA");
-#endif
-
- if( s_fpPatternMatchSpec != NULL )
- {
- //UsesRealPathMatchSpec() will now return true.
- //we're on NT w/ IE 4.0 or greater...(or Win2k/XP)
- InterlockedIncrement(&s_nRefCnt_hShlwapi);
- return InitializePatterns(szIncludeFilter, szExcludeFilter);
- }
- else
- {
- //we found shlwapi.dll, but it didn't have PathMatchSpec()
- ::FreeLibrary( s_hShlwapi_dll );
- s_hShlwapi_dll = NULL;
- s_bShlwapi_dllExists = FALSE;
-
- //instead of using PathMatchSpec()
- //we'll use wildcmp()
- s_fpPatternMatchSpec = wildcmp;
- //UsesRealPathMatchSpec() will now return false w/out asserting.
-
- return InitializePatterns(szIncludeFilter, szExcludeFilter);
- }
- }
-
- }
- }
- return (s_fpPatternMatchSpec != NULL);
-}
-
-BOOL CDelayedDirectoryChangeHandler::InitializePatterns(LPCTSTR szIncludeFilter, LPCTSTR szExcludeFilter)
-{
- ASSERT( !IsEmptyString(szIncludeFilter) //one of these must have something in it,
- || !IsEmptyString(szExcludeFilter) );//or else this function shouldn't be called.
-
- if( s_hShlwapi_dll != NULL )
- {
- //we're using Shlwapi.dll's PathMatchSpec function....
- //we're running on NT4.0 w/ IE 4.0 installed, or win2k/winXP(or greater)
- //
- // Copy the include/exclude filters if specified...
- //
- //
- // we're using the real PathMatchSpec() function which
- // supports multiple pattern specs...(separated by a semi-colon)
- // so there's only one filter spec as far as my code is concerned.
- //
- if( !IsEmptyString(szIncludeFilter) )
- {
- m_szIncludeFilter = _tcsdup(szIncludeFilter);
- ASSERT( m_szIncludeFilter );
- m_nNumIncludeFilterSpecs = 1;
- }
- if( !IsEmptyString(szExcludeFilter) )
- {
- m_szExcludeFilter = _tcsdup(szExcludeFilter);
- ASSERT( m_szExcludeFilter );
- m_nNumExcludeFilterSpecs = 1;
- }
- }
- else
- {
- //shlwapi.dll isn't on this machine.... can happen on NT4.0 w/ out IE 4.0 installed.
- ASSERT( s_bShlwapi_dllExists == FALSE );
-
- //
- // we're using the function wildcmp() instead of PathMatchSpec..
- //
- // this means that multiple pattern specs aren't supported...
- // in order to support them, we'll tokenize the string into multiple
- // pattern specs and test the string multiple times(once per pattern spec)
- // in order to support multiple patterns.
- //
- //
- // m_szIncludeFilter & m_szExclude filter will be used like TCHAR**'s instead of TCHAR*'s
- //
-
- m_nNumIncludeFilterSpecs = 0;
- if( !IsEmptyString(szIncludeFilter) )
- {
- TCHAR * szTmpFilter = _tcsdup(szIncludeFilter);
- TCHAR * pTok = _tcstok( szTmpFilter, _T(";"));
- while( pTok )
- {
- m_nNumIncludeFilterSpecs++;
- pTok = _tcstok(NULL, _T(";"));
- }
- if( m_nNumIncludeFilterSpecs == 1 )
- m_szIncludeFilter = _tcsdup(szIncludeFilter);
- else
- { //allocate room for pointers .. one for each token...
- m_szIncludeFilter = (TCHAR*)malloc( m_nNumIncludeFilterSpecs * sizeof(TCHAR*));
-
- free(szTmpFilter);
- szTmpFilter = _tcsdup(szIncludeFilter);
- pTok = _tcstok(szTmpFilter, _T(";"));
- TCHAR ** ppTmp = (TCHAR**)m_szIncludeFilter;
- while(pTok)
- {
- *ppTmp = _tcsdup(pTok);
- ppTmp++;
- pTok = _tcstok(NULL, _T(";"));
- }
- }
-
- free(szTmpFilter);
- }
-
- //
- // Do the same for the Exclude filter...
- //
- m_nNumExcludeFilterSpecs = 0;
- if( !IsEmptyString(szExcludeFilter) )
- {
- TCHAR * szTmpFilter = _tcsdup(szExcludeFilter);
- TCHAR * pTok = _tcstok( szTmpFilter, _T(";"));
- while( pTok )
- {
- m_nNumExcludeFilterSpecs++;
- pTok = _tcstok(NULL, _T(";"));
- }
- if( m_nNumExcludeFilterSpecs == 1 )
- m_szExcludeFilter = _tcsdup(szExcludeFilter);
- else
- { //allocate room for pointers .. one for each token...
- m_szExcludeFilter = (TCHAR*)malloc( m_nNumExcludeFilterSpecs * sizeof(TCHAR*));
-
- free(szTmpFilter);
- szTmpFilter = _tcsdup(szExcludeFilter);
-
- pTok = _tcstok(szTmpFilter, _T(";"));
- TCHAR ** ppTmp = (TCHAR**)m_szExcludeFilter;
- while(pTok)
- {
- *ppTmp = _tcsdup(pTok);
- ppTmp++;
- pTok = _tcstok(NULL, _T(";"));
- }
- }
- free(szTmpFilter);
- }
-
- }
-
- return (m_szExcludeFilter!= NULL || (m_szIncludeFilter != NULL));
-}
-void CDelayedDirectoryChangeHandler::UninitializePathMatchFunc()
-{
- if( s_bShlwapi_dllExists == TRUE
- && s_hShlwapi_dll != NULL )
- {
- if( InterlockedDecrement(&s_nRefCnt_hShlwapi) <= 0)
- {
- s_nRefCnt_hShlwapi = 0;
- FreeLibrary( s_hShlwapi_dll );
- s_hShlwapi_dll = NULL;
- s_fpPatternMatchSpec = wildcmp;
- }
- }
-}
-
-bool CDelayedDirectoryChangeHandler::UsesRealPathMatchSpec() const
-//are we using PathMatchSpec() or wildcmp()?
-{
- if( s_hShlwapi_dll != NULL && s_fpPatternMatchSpec != NULL )
- return true;
- if( s_hShlwapi_dll == NULL && s_fpPatternMatchSpec != NULL )
- return false;
-
- ASSERT( FALSE );//this function was called before InitializePathMatchFunc()
- //oops!
- return false;
-}
-static inline bool HasTrailingBackslash(const CString & str )
-{
- if( str.GetLength() > 0
- && str[ str.GetLength() - 1 ] == _T('\\') )
- return true;
- return false;
-}
-void CDelayedDirectoryChangeHandler::SetPartialPathOffset(const CString & strWatchedDirName)
-{
- if( m_dwFilterFlags & CDirectoryChangeWatcher::FILTERS_CHECK_PARTIAL_PATH )
- {
- //set the offset to
- if( HasTrailingBackslash( strWatchedDirName ) )
- m_dwPartialPathOffset = strWatchedDirName.GetLength();
- else
- m_dwPartialPathOffset = strWatchedDirName.GetLength() + 1;
- }
- else
- m_dwPartialPathOffset = 0;
-}
-
-CDirChangeNotification * CDelayedDirectoryChangeHandler::GetNotificationObject()
-//
-// Maybe in future I'll keep a pool of these
-// objects around to increase performance...
-// using objects from a cache will be faster
-// than allocated and destroying a new one each time.
-//
-//
-{
- ASSERT( m_pRealHandler );
- return new CDirChangeNotification(this, m_dwPartialPathOffset);//helps support FILTERS_CHECK_PARTIAL_PATH
-}
-
-void CDelayedDirectoryChangeHandler::DisposeOfNotification(CDirChangeNotification * pNotification)
-{
- delete pNotification;
-}
-
-//These functions are called when the directory to watch has had a change made to it
-void CDelayedDirectoryChangeHandler::On_FileAdded(const CString & strFileName)
-{
- CDirChangeNotification * p = GetNotificationObject();
- ASSERT( p );
- if( p ) p->PostOn_FileAdded( strFileName );
-}
-
-void CDelayedDirectoryChangeHandler::On_FileRemoved(const CString & strFileName)
-{
- CDirChangeNotification * p = GetNotificationObject();
- ASSERT( p );
- if( p ) p->PostOn_FileRemoved( strFileName );
-}
-
-void CDelayedDirectoryChangeHandler::On_FileModified(const CString & strFileName)
-{
- CDirChangeNotification * p = GetNotificationObject();
- ASSERT( p );
- if( p ) p->PostOn_FileModified( strFileName );
-}
-
-void CDelayedDirectoryChangeHandler::On_FileNameChanged(const CString & strOldFileName, const CString & strNewFileName)
-{
- CDirChangeNotification * p = GetNotificationObject();
- ASSERT( p );
- if( p ) p->PostOn_FileNameChanged( strOldFileName, strNewFileName );
-}
-
-void CDelayedDirectoryChangeHandler::On_ReadDirectoryChangesError(DWORD dwError, const CString & strDirectoryName)
-{
- CDirChangeNotification * p = GetNotificationObject();
- ASSERT( p );
- if( p ) p->PostOn_ReadDirectoryChangesError( dwError, strDirectoryName );
-}
-
-void CDelayedDirectoryChangeHandler::On_WatchStarted(DWORD dwError, const CString & strDirectoryName)
-{
- if( !(m_dwFilterFlags & CDirectoryChangeWatcher::FILTERS_NO_WATCHSTART_NOTIFICATION))
- {
- CDirChangeNotification * p = GetNotificationObject();
-
- if( p ) p->PostOn_WatchStarted(dwError, strDirectoryName);
- }
-}
-
-void CDelayedDirectoryChangeHandler::On_WatchStopped(const CString & strDirectoryName)
-{
- if( !(m_dwFilterFlags & CDirectoryChangeWatcher::FILTERS_NO_WATCHSTOP_NOTIFICATION))
- {
- CDirChangeNotification * p = GetNotificationObject();
-
- if( p ){
- if( m_hWatchStoppedDispatchedEvent )
- ::ResetEvent(m_hWatchStoppedDispatchedEvent);
-
- p->PostOn_WatchStopped( strDirectoryName );
-
- // Wait that this function has been dispatched to the other thread
- // before continueing. This object may be getting deleted
- // soon after this function returns, and before the function can be
- // dispatched to the other thread....
- WaitForOnWatchStoppedDispatched();
- }
- }
-}
-
-
-void CDelayedDirectoryChangeHandler::PostNotification(CDirChangeNotification * pNotification)
-{
- if( m_pDelayNotifier )
- m_pDelayNotifier->PostNotification( pNotification );
-}
-
-inline bool IsNonFilterableEvent( CDirChangeNotification::eFunctionToDispatch eEvent)
-// Helper function
-// For filtering events..... these functions can not be filtered out.
-//
-{
- if( eEvent == CDirChangeNotification::eOn_WatchStarted
- || eEvent == CDirChangeNotification::eOn_WatchStopped
- || eEvent == CDirChangeNotification::eOn_ReadDirectoryChangesError )
- {
- return true;
- }
- else
- return false;
-}
-DWORD GetPathOffsetBasedOnFilterFlags(CDirChangeNotification * pNot, DWORD dwFilterFlags)
-{
-
- ASSERT( pNot && dwFilterFlags != 0 );
- //helps support the filter options FILTERS_CHECK_FULL_PATH, FILTERS_CHECK_PARTIAL_PATH, and FILTERS_CHECK_FILE_NAME_ONLY
-
- DWORD dwFileNameOffset = 0;//offset needed to support FILTERS_CHECK_FULL_PATH
- if( dwFilterFlags & CDirectoryChangeWatcher::FILTERS_CHECK_FILE_NAME_ONLY )
- {
- //set the offset to support FILTERS_CHECK_FILE_NAME_ONLY
- TCHAR * pSlash = _tcsrchr(pNot->m_szFileName1, _T('\\'));
- if( pSlash )
- dwFileNameOffset = (++pSlash - pNot->m_szFileName1);
-
- //
- // Because file name change notifications take place in the same directory,
- // the same dwFileNameOffset can be used for the szNewFileName(pNot->m_szFileName2)
- // when checking the filter against the new file name.
- //
- }
- else
- if( dwFilterFlags & CDirectoryChangeWatcher::FILTERS_CHECK_PARTIAL_PATH)
- {
- //
- // partial path offset is the offset
- // from the beginning of the file name,
- // to the end of the watched directory path...
- // ie: If you're watching "C:\Temp"
- // and the file C:\Temp\SubFolder\FileName.txt" is changed,
- // the partial path offset will give you "SubFolder\FileName.txt"
- // when this is checked against the include/exclude filter.
- //
- dwFileNameOffset = pNot->m_dwPartialPathOffset;
- }
- //else
- //if( m_dwFilterFlags & CDirectoryChangeWatcher::FILTERS_CHECK_FULL_PATH )
- // dwFileNameOffset = 0;
-
- return dwFileNameOffset;
-}
-
-bool CDelayedDirectoryChangeHandler::NotifyClientOfFileChange(CDirChangeNotification * pNot)
-//
-//
-// Perform the tests to see if the client wants to be notified of this
-// file change notification.
-//
-// Tests performed:
-//
-// Event test: Not all events can be filtered out.
-// On_ReadDirectoryChangesError
-// cannot be filtered out.
-// Filter flags test: User can specify flags so that no tests are performed....all notifications are sent to the user.
-//
-// Filter test: Test the notification file name against include and exclude filters.
-//
-// Only files changes matching the INCLUDE filter will be passed to the client.
-// By not specifying an include filter, all file changes are passed to the client.
-//
-// Any files matching the EXCLUDE filter will not be passed to the client.
-//
-//
-// Note: For the file name change event:
-// If the old file name does not pass the tests for the include and exclude filter
-// but the NEW file name does pass the test for the filters, then the client IS notified.
-//
-// Client test: The CDirectoryChangeHandler derived class is given a chance to filter the event by calling
-// CDirectoryChangeHandler::On_FilterNotification()
-//
-// RETURN VALUE:
-// If this function returns true, the notification function is called.
-// If it returns false, the notification is ignored.
-// The client is notified by calling CDirectoryChangeHandler's virtual functions On_FileAdded(),On_FileRemoved(), etc.
-{
- ASSERT( pNot );
- ASSERT( m_pRealHandler );
-
- //
- // Some events can't be ignored, or filtered out.
- //
-
- if( ((m_dwFilterFlags & CDirectoryChangeWatcher::FILTERS_DONT_USE_ANY_FILTER_TESTS) == CDirectoryChangeWatcher::FILTERS_DONT_USE_ANY_FILTER_TESTS)
- || IsNonFilterableEvent( pNot->m_eFunctionToDispatch ) )
- {
- // Either this is a non-filterable event, or we're not using any filters...
- // client is notified of all events..
- return true;
- }
-
- //
- // See if user wants to test CDirectoryChangeHandler::On_FilterNotification()
- // before tests are performed against the file name, and filter specifications
- //
- if( (m_dwFilterFlags & CDirectoryChangeWatcher::FILTERS_TEST_HANDLER_FIRST )//specified that CDirectoryChangeHandler::On_FilterNotification is to be called before any other filter tests
- && !(m_dwFilterFlags & CDirectoryChangeWatcher::FILTERS_DONT_USE_HANDLER_FILTER)//and did not specify that this CDirectoryChangeHandler::On_FilterNotification is not to be called..
- && !m_pRealHandler->On_FilterNotification(pNot->m_eFunctionToDispatch, pNot->m_szFileName1, pNot->m_szFileName2) )
- {
- //
- // Client specified to test handler first, and it didn't pass the test... don't notify the client.
- //
- return false;
- }
- //else
- //
- // this file change passed the user test, continue testing
- // to see if it passes the filter tests.
-
- DWORD dwFileNameOffset = GetPathOffsetBasedOnFilterFlags(pNot, m_dwFilterFlags);
-
- //
- // See if the changed file matches the include or exclude filter
- // Only allow notifications for included files
- // that have not been exluded.
- //
- if(!(m_dwFilterFlags & CDirectoryChangeWatcher::FILTERS_DONT_USE_FILTERS) )
- {
- if( false == IncludeThisNotification(pNot->m_szFileName1 + dwFileNameOffset)
- || true == ExcludeThisNotification(pNot->m_szFileName1 + dwFileNameOffset) )
- {
- if( pNot->m_eFunctionToDispatch != CDirChangeNotification::eOn_FileNameChanged )
- return false;
- else{
- //Special case for file name change:
- //
- // the old file name didn't pass the include/exclude filter
- // but if the new name passes the include/exclude filter,
- // we will pass it on to the client...
-
- if( false == IncludeThisNotification(pNot->m_szFileName2 + dwFileNameOffset)
- || true == ExcludeThisNotification(pNot->m_szFileName2 + dwFileNameOffset) )
- {
- // the new file name didn't pass the include/exclude filter test either
- // so don't pass the notification on...
- return false;
- }
-
- }
- }
-
- }
-
- //
- // Finally, let the client determine whether or not it wants this file notification
- // if this test has not already been performed...
- //
-
- if( (m_dwFilterFlags & CDirectoryChangeWatcher::FILTERS_TEST_HANDLER_FIRST)
- || (m_dwFilterFlags & CDirectoryChangeWatcher::FILTERS_DONT_USE_HANDLER_FILTER) )
- {
- // if we got this far, and this flag was specified,
- // it's already passed this test,
- // or we're not checking it based on the filter flag FILTERS_DONT_USE_HANDLER_FILTER....
- return true;
- }
- else
- {
- if( m_pRealHandler->On_FilterNotification(pNot->m_eFunctionToDispatch,
- pNot->m_szFileName1,
- pNot->m_szFileName2) )
- {
- return true;
- }
- else
- {
- //else client's derived CDirectoryChangeHandler class chose
- // not to be notified of this file change
- return false;
- }
- }
-
-
-}
-
-bool CDelayedDirectoryChangeHandler::IncludeThisNotification(LPCTSTR szFileName)
-//
-// The Include filter specifies which file names we should allow to notifications
-// for... otherwise these notifications are not dispatched to the client's code.
-//
-// Tests the file name to see if it matches a filter specification
-//
-// RETURN VALUES:
-//
-// true : notifications for this file are to be included...
-// notifiy the client by calling the appropriate CDirectoryChangeHandler::On_Filexxx() function.
-// false: this file is not included.... do not notifiy the client...
-//
-{
- ASSERT( szFileName );
-
- if( m_szIncludeFilter == NULL ) // no filter specified, all files pass....
- return true;
- if( m_nNumIncludeFilterSpecs == 1 )
- {
- return _PathMatchSpec(szFileName, m_szIncludeFilter)? true : false;
- }
- else
- {
- TCHAR ** ppTmp = (TCHAR**)m_szIncludeFilter;
- for(int i(0); i < m_nNumIncludeFilterSpecs; ++i )
- {
- if( _PathMatchSpec(szFileName, *ppTmp++) )
- return true;
- }
- return false;
- }
-
- return false;
-}
-
-bool CDelayedDirectoryChangeHandler::ExcludeThisNotification(LPCTSTR szFileName)
-//
-// Tests the file name to see if it matches a filter specification
-// if this function returns true, it means that this notification
-// is NOT to be passed to the client.... changes to this kind of file
-// are not
-//
-// RETURN VALUES:
-//
-// true : notifications for this file are to be filtered out(EXCLUDED)...
-// do not notifify the client code.
-// false: notifications for this file are NOT to be filtered out
-//
-//
-{
-
- ASSERT( szFileName );
-
- if( m_szExcludeFilter == NULL ) // no exclude filter... nothing is excluded...
- return false;
- if( m_nNumExcludeFilterSpecs == 1 )
- {
- if( _PathMatchSpec(szFileName, m_szExcludeFilter) )
- return true;//exclude this notification...
- return false;
- }
- else
- {
- TCHAR ** ppTmp = (TCHAR**)m_szExcludeFilter;
- for(int i(0); i < m_nNumExcludeFilterSpecs; ++i )
- {
- if( _PathMatchSpec(szFileName, *ppTmp++) )
- return true;//exclude this one...
- }
- return false;//didn't match any exclude filters...don't exclude it
- }
-/**
- if( m_szExcludeFilter == NULL //no exclude filter specified, not excluding anything....
- || !PathMatchSpec(szFileName, m_szExcludeFilter) )//or didn't match filter pattern.. this is not excluded...
- {
- return false;
- }
- return true;
-***/
-
-}
-
-void CDelayedDirectoryChangeHandler::DispatchNotificationFunction(CDirChangeNotification * pNotification)
-/*****************************************************
- This function is called when we want the notification to execute.
-
-
-******************************************************/
-{
- ASSERT( m_pRealHandler );
- ASSERT( pNotification );
- if( pNotification && m_pRealHandler )
- {
- //
- // Allow the client to ignore the notification
- //
- //
- if( NotifyClientOfFileChange(pNotification))
- {
- switch( pNotification->m_eFunctionToDispatch )
- {
- case CDirChangeNotification::eOn_FileAdded:
-
- m_pRealHandler->On_FileAdded( pNotification->m_szFileName1 );
- break;
-
- case CDirChangeNotification::eOn_FileRemoved:
-
- m_pRealHandler->On_FileRemoved( pNotification->m_szFileName1 );
- break;
-
- case CDirChangeNotification::eOn_FileNameChanged:
-
- m_pRealHandler->On_FileNameChanged( pNotification->m_szFileName1, pNotification->m_szFileName2 );
- break;
-
- case CDirChangeNotification::eOn_FileModified:
-
- m_pRealHandler->On_FileModified( pNotification->m_szFileName1 );
- break;
-
- case CDirChangeNotification::eOn_ReadDirectoryChangesError:
-
- m_pRealHandler->On_ReadDirectoryChangesError( pNotification->m_dwError, pNotification->m_szFileName1 );
- break;
-
- case CDirChangeNotification::eOn_WatchStarted:
-
- m_pRealHandler->On_WatchStarted(pNotification->m_dwError, pNotification->m_szFileName1);
- break;
-
- case CDirChangeNotification::eOn_WatchStopped:
-
- try{
- //
- // The exception handler is just in case of the condition described in DirectoryChanges.h
- // in the comments for On_WatchStopped()
- //
- m_pRealHandler->On_WatchStopped(pNotification->m_szFileName1);
-
- }catch(...){
- MessageBeep( 0xffff );
- MessageBeep( 0xffff );
- #ifdef DEBUG
- MessageBox(NULL,_T("An RTFM Exception was raised in On_WatchStopped() -- see Comments for CDirectoryChangeHandler::On_WatchStopped() in DirectoryChanges.h."), _T("Programmer Note(DEBUG INFO):"), MB_ICONEXCLAMATION | MB_OK);
- #endif
- }
- //
- // Signal that the On_WatchStopped() function has been dispatched.
- //
- if( m_hWatchStoppedDispatchedEvent )
- SetEvent(m_hWatchStoppedDispatchedEvent);
- break;
- case CDirChangeNotification::eFunctionNotDefined:
- default:
- break;
- }//end switch()
- }
- }
- if( pNotification ) //
- DisposeOfNotification(pNotification);// deletes or releases the notification object from memory/use
- //
-}
-
-BOOL CDelayedDirectoryChangeHandler::WaitForOnWatchStoppedDispatched( )
-//
-// When shutting down, m_pRealHandler->On_WatchStopped() will be called.
-// Because it's possible that this object will be deleted before the notification
-// can be dispatched to the other thread, we have to wait until we know that it's been executed
-// before returning control.
-//
-// This function signals that the function has been dispatched to the other
-// thread and it will be safe to delete this object once this has returned.
-//
-{
- ASSERT( m_hWatchStoppedDispatchedEvent );
- DWORD dwWait = WAIT_FAILED;
- if( m_hWatchStoppedDispatchedEvent )
- {
-
- if( m_bAppHasGUI == false )
- {
- //
- // The function will be dispatched to another thread...
- // just wait for the event to be signalled....
- do{
- dwWait = WaitForSingleObject(m_hWatchStoppedDispatchedEvent, 5000);//wait five seconds
- if( dwWait != WAIT_OBJECT_0 )
- {
- TRACE(_T("WARNING: Possible Deadlock detected! ThreadID: %d File: %s Line: %d\n"), GetCurrentThreadId(), _T(__FILE__), __LINE__);
- }
- }while( dwWait != WAIT_OBJECT_0 );
- }
- else
- {
- //
- // Note to self: This thread doesn't have a message Q, and therefore can't attach to
- // receive messages and process them... MsgWaitForMultipleObjects won't wake up for messages
- // unless i attach myself the the other threads input Q....
- // just use MsgWaitForMultipleObjects() in place of WaitForSingleObject in the places where it's used...
- //
- do{
- dwWait = MsgWaitForMultipleObjects(1, &m_hWatchStoppedDispatchedEvent,
- FALSE, 5000,
- QS_ALLEVENTS);//wake up for all events, sent messages, posted messages etc.
- switch(dwWait)
- {
- case WAIT_OBJECT_0:
- {
- //
- // The event has become signalled
- //
-
- }break;
- case WAIT_OBJECT_0 + 1:
- {
- //
- // There is a message in this thread's queue, so
- // MsgWaitForMultipleObjects returned.
- // Process those messages, and wait again.
-
- MSG msg;
- while( PeekMessage(&msg, NULL, 0,0, PM_REMOVE ) )
- {
- if( msg.message != WM_QUIT)
- {
- TranslateMessage(&msg);
- DispatchMessage(&msg);
- }
- else
- {
- /****
- NOTE: putting WM_QUIT back in the Q caused problems. forget about it.
- ****/
- break;
- }
- }
- }break;
- case WAIT_TIMEOUT:
- {
- TRACE(_T("WARNING: Possible Deadlock detected! ThreadID: %d File: %s Line: %d\n"), GetCurrentThreadId(), _T(__FILE__), __LINE__);
- }break;
- }
- }while( dwWait != WAIT_OBJECT_0 );
- ASSERT( dwWait == WAIT_OBJECT_0 );
- }
-
- }
- else
- {
- TRACE(_T("WARNING: Unable to wait for notification that the On_WatchStopped function has been dispatched to another thread.\n"));
- TRACE(_T("An Exception may occur shortly.\n"));
- TRACE(_T("File: %s Line: %d"), _T( __FILE__ ), __LINE__);
-
- }
-
-
- return (dwWait == WAIT_OBJECT_0 );
-}
-
-void CDelayedDirectoryChangeHandler::SetChangedDirectoryName(const CString & strChangedDirName)
-{
- ASSERT( m_pRealHandler );
- CDirectoryChangeHandler::SetChangedDirectoryName(strChangedDirName);
- if( m_pRealHandler )
- m_pRealHandler->SetChangedDirectoryName( strChangedDirName );
-}
-const CString & CDelayedDirectoryChangeHandler::GetChangedDirectoryName() const
-{
- if( m_pRealHandler )
- return m_pRealHandler->GetChangedDirectoryName();
- return CDirectoryChangeHandler::GetChangedDirectoryName();
-} \ No newline at end of file
diff --git a/Bus/IvyFileMon/DelayedDirectoryChangeHandler.h b/Bus/IvyFileMon/DelayedDirectoryChangeHandler.h
deleted file mode 100644
index 5409c5b..0000000
--- a/Bus/IvyFileMon/DelayedDirectoryChangeHandler.h
+++ /dev/null
@@ -1,336 +0,0 @@
-// DelayedDirectoryChangeHandler.h: interface for the CDelayedDirectoryChangeHandler2 class.
-//
-//////////////////////////////////////////////////////////////////////
-//
-// You needn't worry about the classes in this file.
-// they are implementation classes used to help CDirectoryChangeWatcher work.
-//
-//
-
-#if !defined(AFX_DELAYEDDIRECTORYCHANGEHANDLER_H__F20EC22B_1C79_403E_B43C_938F95723D45__INCLUDED_)
-#define AFX_DELAYEDDIRECTORYCHANGEHANDLER_H__F20EC22B_1C79_403E_B43C_938F95723D45__INCLUDED_
-
-#if _MSC_VER > 1000
-#pragma once
-#endif // _MSC_VER > 1000
-
-//classes declrared in other files:
-class CDirectoryChangeWatcher;
-class CDirectoryChangeHandler;
-//classes declared in this file:
-class CDirChangeNotification;
-class CDelayedDirectoryChangeHandler;
-
-class CDelayedNotificationWindow;
-class CDelayedNotificationThread;
-
-/*******************************************************************
- The classes in this file implement methods to ensure that file change
- notifications are fired in a thread other than the worker thread used
- by CDirectoryChangeWatcher.
-
- Dispatching the notifications in to a different thread improves the performance
- of CDirectoryChangeWatcher so that it can process more notifications faster
- and notifications aren't 'lost'.
-
-
- There are two methods of dispatching functions to another thread.
-
- 1) One is to use the message pump associated w/ the main thread by posting notifications
- to a hidden window. This is implemented w/ the class CDelayedNotificationWindow.
-
- 2) The other is to create a worker thread that implements a message pump. This is
- implemented w/ the class CDelayedNotificationThread.
-
-
- If your app uses a GUI then it has a already has message pump.
- You can make sure that CDelayedNotificationWindow is used in this case.
- The advantage here being that there is one less worker thread used in your program.
-
- If your app is a command line app or otherwise doesn't have a GUI,
- then you will want to make sure that you are using the CDelayedNotificationThread
- to dispatch notifications to another thread.
-
- This is determined by a flag passed is passed to the constructor of CDirecotryChangeWatcher
-
-********************************************************************/
-
-class CDelayedNotifier
-//
-// Abstract base class for ensuring notifications are fired in a thread
-//
-//
-{
-public:
- virtual ~CDelayedNotifier(){}
- virtual void PostNotification(CDirChangeNotification * pNotification) = 0;
-
-};
-
-class CDelayedNotificationWindow : public CDelayedNotifier
-//
-// A class that implements a
-// there will always be only one of the actual windows
-// in existance.
-//
-{
-public:
- CDelayedNotificationWindow(){ AddRef(); }
- virtual ~CDelayedNotificationWindow(){ Release(); }
-
-
- void PostNotification(CDirChangeNotification * pNotification);
-private:
- long AddRef(); // the window handle is reference counted
- long Release(); //
-
- static long s_nRefCnt;
- static HWND s_hWnd; //there's only one window no matter how many instances of this class there are.... this means that all notifications are handled by the same thread.
- static BOOL s_bRegisterWindow;
- BOOL RegisterWindowClass(LPCTSTR szClassName);
- BOOL CreateNotificationWindow();
-};
-
-class CDelayedNotificationThread : public CDelayedNotifier
-//
-// Class that implements a worker thread w/ a message pump.
-// CDirectoryChangeWatcher posts notifications to this thread, where they are dispatched.
-// This thread executes CDirectoryChangeHandler notifications.
-//
-{
-public:
- CDelayedNotificationThread()
- :m_hThreadStartEvent(NULL)
- {
- m_hThreadStartEvent = CreateEvent(NULL,FALSE,FALSE,NULL);
- ASSERT( m_hThreadStartEvent );
- AddRef();
- }
- virtual ~CDelayedNotificationThread()
- {
- Release();
- if( m_hThreadStartEvent )
- CloseHandle(m_hThreadStartEvent), m_hThreadStartEvent = NULL;
- }
-
- void PostNotification(CDirChangeNotification * pNotification);
-
-private:
- long AddRef(); // The thread handle is reference
- long Release(); // counted so that only one thread is used
- // so that there's only one worker thread(performing this functino)
- static long s_nRefCnt; // no matter how many directories are being watched
- static HANDLE s_hThread; //
- static DWORD s_dwThreadID; //
-
- static UINT __stdcall ThreadFunc(LPVOID lpvThis);
-
- bool StartThread();
- bool StopThread();
-
- BOOL WaitForThreadStartup(){ return WaitForSingleObject(m_hThreadStartEvent, INFINITE) == WAIT_OBJECT_0; };
- BOOL SignalThreadStartup(){ return SetEvent( m_hThreadStartEvent ) ; }
-
- HANDLE m_hThreadStartEvent;//signals that the worker thread has started. this fixes a bug condition.
-
-};
-
-
-class CDirChangeNotification
-//
-// A class to help dispatch the change notifications to the main thread.
-//
-// This class holds the data in memory until the notification can be dispatched.(ie: this is the time between when the notification is posted, and the clients notification code is called).
-//
-//
-{
-private:
- CDirChangeNotification();//not implemented
-public:
- explicit CDirChangeNotification(CDelayedDirectoryChangeHandler * pDelayedHandler, DWORD dwPartialPathOffset);
- ~CDirChangeNotification();
-
- //
- //
- void PostOn_FileAdded(LPCTSTR szFileName);
- void PostOn_FileRemoved(LPCTSTR szFileName);
- void PostOn_FileNameChanged(LPCTSTR szOldName, LPCTSTR szNewName);
- void PostOn_FileModified(LPCTSTR szFileName);
- void PostOn_ReadDirectoryChangesError(DWORD dwError, LPCTSTR szDirectoryName);
- void PostOn_WatchStarted(DWORD dwError, LPCTSTR szDirectoryName);
- void PostOn_WatchStopped(LPCTSTR szDirectoryName);
-
- void DispatchNotificationFunction();
-
-
- enum eFunctionToDispatch{ eFunctionNotDefined = -1,
- eOn_FileAdded = FILE_ACTION_ADDED,
- eOn_FileRemoved = FILE_ACTION_REMOVED,
- eOn_FileModified = FILE_ACTION_MODIFIED,
- eOn_FileNameChanged = FILE_ACTION_RENAMED_OLD_NAME,
- eOn_ReadDirectoryChangesError,
- eOn_WatchStarted,
- eOn_WatchStopped
- };
-protected:
- void PostNotification();
-
-private:
- friend class CDelayedDirectoryChangeHandler;
- CDelayedDirectoryChangeHandler * m_pDelayedHandler;
-
- //
- // Members to help implement DispatchNotificationFunction
- //
- //
-
- eFunctionToDispatch m_eFunctionToDispatch;
- //Notification Data:
- TCHAR * m_szFileName1;//<-- is the szFileName parameter to On_FileAdded(),On_FileRemoved,On_FileModified(), and is szOldFileName to On_FileNameChanged(). Is also strDirectoryName to On_ReadDirectoryChangesError(), On_WatchStarted(), and On_WatchStopped()
- TCHAR * m_szFileName2;//<-- is the szNewFileName parameter to On_FileNameChanged()
- DWORD m_dwError; //<-- is the dwError parameter to On_WatchStarted(), and On_ReadDirectoryChangesError()
- //
-
- DWORD m_dwPartialPathOffset;//helps support FILTERS_CHECK_PARTIAL_PATH...not passed to any functions other than may be used during tests in CDelayedDirectoryChangeHandler::NotifyClientOfFileChange()
-
-
- friend class CDirChangeNotification;
- friend class CDirectoryChangeWatcher;
- friend DWORD GetPathOffsetBasedOnFilterFlags(CDirChangeNotification*,DWORD);//a friend function
-};
-
-
-//////////////////////////////////////////////////////////////////////////
-//
-// This class makes it so that a file change notification is executed in the
-// context of the main thread, and not the worker thread.
-//
-//
-// It works by creating a hidden window. When it receieves a notification
-// via one of the On_Filexxx() functions, a message is posted to this window.
-// when the message is handled, the notification is fired again in the context
-// of the main thread, or whichever thread that called CDirectoryChangeWatcher::WatchDirectory()
-//
-//
-/////////////////////////////////////////////////////////////////////////////
-// Note this code wants to use PathMatchSpec()
-// which is only supported on WINNT 4.0 w/ Internet Explorer 4.0 and above.
-// PathMatchSpec is fully supported on Win2000/XP.
-//
-// For the case of WINNT 4.0 w/out IE 4.0, we'll use a simpler function.
-// some functionality is lost, but such is the price.
-//
-
-typedef BOOL (STDAPICALLTYPE * FUNC_PatternMatchSpec)(LPCTSTR pszFile, LPCTSTR pszSpec);
-
-class CDelayedDirectoryChangeHandler : public CDirectoryChangeHandler
-//
-// Decorates an instance of a CDirectoryChangeHandler object.
-// Intercepts notification function calls and posts them to
-// another thread through a method implemented by a class derived from
-// CDelayedNotifier
-//
-//
-// This class implements dispatching the notifications to a thread
-// other than CDirectoryChangeWatcher::MonitorDirectoryChanges()
-//
-// Also supports the include and exclude filters for each directory
-//
-{
-private:
- CDelayedDirectoryChangeHandler();//not implemented.
-public:
- CDelayedDirectoryChangeHandler( CDirectoryChangeHandler * pRealHandler, bool bAppHasGUI, LPCTSTR szIncludeFilter, LPCTSTR szExcludeFilter, DWORD dwFilterFlags);
- virtual ~CDelayedDirectoryChangeHandler();
-
-
- CDirectoryChangeHandler * GetRealChangeHandler()const { return m_pRealHandler; }
- CDirectoryChangeHandler * & GetRealChangeHandler(){ return m_pRealHandler; }//FYI: PCLint will give a warning that this exposes a private/protected member& defeats encapsulation.
-
- void PostNotification(CDirChangeNotification * pNotification);
- void DispatchNotificationFunction(CDirChangeNotification * pNotification);
-
-
-protected:
- //These functions are called when the directory to watch has had a change made to it
- void On_FileAdded(const CString & strFileName);
- void On_FileRemoved(const CString & strFileName);
- void On_FileModified(const CString & strFileName);
- void On_FileNameChanged(const CString & strOldFileName, const CString & strNewFileName);
- void On_ReadDirectoryChangesError(DWORD dwError, const CString & strDirectoryName);
-
- void On_WatchStarted(DWORD dwError, const CString & strDirectoryName);
- void On_WatchStopped(const CString & strDirectoryName);
-
-
- void SetChangedDirectoryName(const CString & strChangedDirName);
- const CString & GetChangedDirectoryName()const;
-
- BOOL WaitForOnWatchStoppedDispatched();//see comments in .cpp
-
-
- bool NotifyClientOfFileChange(CDirChangeNotification * pNot);
-
- bool IncludeThisNotification(LPCTSTR szFileName); // based on file name.
- bool ExcludeThisNotification(LPCTSTR szFileName); // Allows us to filter notifications
- //
-
-
-
- CDirChangeNotification * GetNotificationObject();
- void DisposeOfNotification(CDirChangeNotification * pNotification);
-
- CDelayedNotifier * m_pDelayNotifier;
- CDirectoryChangeHandler * m_pRealHandler;
-
- // m_bAppHasGUI:
- // This flag, if set to true, indicates that the app has a message
- bool m_bAppHasGUI; // pump, and that functions are dispatched to the main thread.
- // Otherwise, functions are dispatched to a separate worker thread.
- //
- DWORD m_dwFilterFlags;
-
- DWORD m_dwPartialPathOffset; //helps support FILTERS_CHECK_PARTIAL_PATH
- void SetPartialPathOffset(const CString & strWatchedDirName);
-
- friend class CDirectoryChangeWatcher;
- friend class CDirectoryChangeWatcher::CDirWatchInfo;
-
-private:
- HANDLE m_hWatchStoppedDispatchedEvent;//supports WaitForOnWatchStoppedDispatched()
-
- TCHAR * m_szIncludeFilter; // Supports the include
- TCHAR * m_szExcludeFilter; // & exclude filters
-
- //
- // Load PathMatchSpec dynamically because it's only supported if IE 4.0 or greater is
- // installed.
- static HMODULE s_hShlwapi_dll;//for the PathMatchSpec() function
- static BOOL s_bShlwapi_dllExists;//if on NT4.0 w/out IE 4.0 or greater, this'll be false
- static long s_nRefCnt_hShlwapi;
- static FUNC_PatternMatchSpec s_fpPatternMatchSpec;
-
- BOOL _PathMatchSpec(LPCTSTR szPath, LPCTSTR szPattern);
- BOOL InitializePathMatchFunc(LPCTSTR szIncludeFilter, LPCTSTR szExcludeFilter);
- BOOL InitializePatterns(LPCTSTR szIncludeFilter, LPCTSTR szExcludeFilter);
- void UninitializePathMatchFunc();
-
- bool UsesRealPathMatchSpec() const;//are we using PathMatchSpec() or wildcmp()?
-
- //note: if the PathMatchSpec function isn't found, wildcmp() is used instead.
- //
- // to support multiple file specs separated by a semi-colon,
- // the include and exclude filters that are passed into the
- // the constructor are parsed into separate strings
- // which are all checked in a loop.
- //
- int m_nNumIncludeFilterSpecs;
- int m_nNumExcludeFilterSpecs;
-
-
-};
-
-
-
-
-#endif // !defined(AFX_DELAYEDDIRECTORYCHANGEHANDLER_H__F20EC22B_1C79_403E_B43C_938F95723D45__INCLUDED_)
diff --git a/Bus/IvyFileMon/DirectoryChanges.cpp b/Bus/IvyFileMon/DirectoryChanges.cpp
deleted file mode 100644
index 10b88b3..0000000
--- a/Bus/IvyFileMon/DirectoryChanges.cpp
+++ /dev/null
@@ -1,2026 +0,0 @@
-// DirectoryChanges.cpp: implementation of the CDirectoryChangeWatcher and CDirectoryChangeHandler classes.
-//
-///////////////////////////////////////////////////////////////////
-///
-
-/***********************************************************
-
- Author: Wes Jones wesj@hotmail.com
-
- File: DirectoryChanges.cpp
-
- Latest Changes:
-
- 11/22/2001 -- Fixed bug causing file name's to be truncated if
- longer than 130 characters. Fixed CFileNotifyInformation::GetFileName()
- Thanks to Edric(uo_edric@hotmail.com) for pointing this out.
-
- Added code to enable process privileges when CDirectoryChangeWatcher::WatchDirectory()
- is first called. See docuementation API for ReadDirectoryChangesW() for more information of required privileges.
-
- Currently enables these privileges: (11/22/2001)
- SE_BACKUP_NAME
- SE_CHANGE_NOTIFY_NAME
- SE_RESTORE_NAME(02/09/2002)
- Implemented w/ helper class CPrivilegeEnabler.
-
- 11/23/2001 Added classes so that all notifications are handled by the
- same thread that called CDirectoryChangeWatcher::WatchDirectory(),
- ie: the main thread.
- CDirectoryChangeHandler::On_Filexxxx() functions are now called in the
- context of the main thread instead of the worker thread.
-
- This is good for two reasons:
- 1: The worker thread spends less time handling each notification.
- The worker thread simply passes the notification to the main thread,
- which does the processing.
- This means that each file change notification is handled as fast as possible
- and ReadDirectoryChangesW() can be called again to receive more notifications
- faster.
-
- 2: This makes it easier to make an ActiveX or ATL object with this class
- because the events that are fired, fire in the context of the main thread.
- The fact that I'm using a worker thread w/ this class is totally
- transparent to a client user.
- If I decide to turn this app into an ActiveX or ATL object
- I don't have to worry about wierd COM rules and multithreading issues,
- and neither does the client, be the client a VB app, C++ app, Delphi app, or whatever.
-
- Implemented with CDelayedDirectoryChangeHandler in DirectoryChangeHandler.h/.cpp
-
- 02/06/2002 Fixed a bug that would cause an application to hang.
- If ReadDirectoryChangesW was to fail during normal operation,
- the short story is that the application would hang
- when it called CDirectoryChangeWatcher::UnwatchDirectory(const CString & )
-
- One way to reproduce this behavior on the old code
- is to watch a directory using a UNC path, and then change the IP
- address of that machine while the watch was running. Exitting
- the app after this would cause it to hang.
-
- Steps to reproduce it:
-
- 1) Assume that the computer running the code is
- named 'ThisComputer' and there is a shared folder named 'FolderName'
-
-
- 2) Start a watch on a folder using a UNC path: ie: \\ThisComputer\FolderName
-
- eg: CDirectoryChangeWatcher watcher;
-
- watcher.WatchDirectory(_T("\\\\ThisComputer\\FolderName",/ * other parameters * /)
-
- 3) Change the IP address of 'ThisComputer'
-
- ** ReadDirectoryChangesW() will fail some point after this.
-
-
- 4) Exit the application... it may hang.
-
-
- Anyways, that's what the bug fix is for.
-
-
- 02/06/2002 New side effects for CDirectoryChangeHandler::On_ReadDirectoryChangeError()
-
- If CDirectoryChangeHandler::On_ReadDirectoryChangeError() is ever executed
- the directory that you are watching will have been unwatched automatically due
- to the error condition.
-
- A call to CDirectoryChangeWatcher::IsWatchingDirectory() will fail because the directory
- is no longer being watched. You'll need to re-watch that directory.
-
- 02/09/2002 Added a parameter to CDirectoryChangeHandler::On_ReadDirectoryChangeError()
-
- Added the parameter: const CString & strDirectoryName
- The new signature is now:
- virtual void CDirectoryChangeHandler::On_ReadDirectoryChangeError(DWORD dwError, const CString & strDirectoryName);
-
- This new parameter gives you the name of the directory that the error occurred on.
-
- 04/25/2002 Provided a way to get around the requirement of a message pump.
- A console app can now use this w/out problems by passing false
- to the constructor of CDirectoryChangeWatcher.
- An app w/ a message pump can also pass false if it so desires w/out problems.
-
- 04/25/2002 Added two new virtual functions to CDirectoryChangeHandler
-
- Added:
- On_WatchStarted(DWORD dwError, const CString & strDirectoryName)
- On_WatchStopped(const CString & strDirectoryName);
- See header file for details.
-
- 04/27/2002 Added new function to CDirectoryChangeHandler:
-
- Added virtual bool On_FilterNotification(DWORD dwNotifyAction, LPCTSTR szFileName, LPCTSTR szNewFileName)
-
- This function is called before any notification function, and allows the
- CDirectoryChangeHandler derived class to ignore file notifications
- by performing a programmer defined test.
- By ignore, i mean that
- On_FileAdded(), On_FileRemoved(), On_FileModified(), or On_FileNameChanged()
- will NOT be called if this function returns false.
-
- The default implementation always returns true, signifying that ALL notifications
- are to be called.
-
-
- 04/27/2002 Added new Parameters to CDirectoryChangeWatcher::WatchDirectory()
-
- The new parameters are:
- LPCTSTR szIncludeFilter
- LPCTSTR szExcludeFilter
- Both parameters are defaulted to NULL.
- Signature is now:
- CDirectoryChangeWatcher::WatchDirectory(const CString & strDirToWatch,
- DWORD dwChangesToWatchFor,
- CDirectoryChangeHandler * pChangeHandler,
- BOOL bWatchSubDirs = FALSE,
- LPCTSTR szIncludeFilter = NULL,
- LPCTSTR szExcludeFilter = NULL)
-
- 04/27/2002 Added support for include and exclude filters.
- These filters allow you to receive notifications for just the files you
- want... ie: you can specify that you only want to receive notifications
- for changes to "*.txt" files or some other such file filter.
-
- NOTE: This feature is implemented w/ the PathMatchSpec() api function
- which is only available on NT4.0 if Internet Explorer 4.0 or above is installed.
- See MSDN for PathMatchSpec(). Win2000, and XP do not have to worry about it.
-
- Filter specifications:
- Accepts wild card characters * and ?, just as you're used to for the DOS dir command.
- It is possible to specify multiple extenstions in the filter by separating each filter spec
- with a semi-colon.
- eg: "*.txt;*.tmp;*.log" <-- this filter specifies all .txt, .tmp, & .log files
-
-
-
- Filters are passed as parameters to CDirectoryChangeWatcher::WatchDirectory()
-
- NOTE: The filters you specify take precedence over CDirectoryChangeHandler::On_FilterNotification().
- This means that if the file name does not pass the filters that you specify
- when the watch is started, On_FilterNotification() will not be called.
- Filter specifications are case insensitive, ie: ".tmp" and ".TMP" are the same
-
-
- FILTER TYPES:
- Include Filter:
- If you specify an include filter, you are specifying that you
- only want to receive notifications for specific file types.
- eg: "*.log" means that you only want notifications for changes
- to files w/ an exention of ".log".
- Changes to ALL OTHER other file types are ignored.
- An empty, or not specified include filter means that you want
- notifications for changes of ALL file types.
- Exclude filter:
-
- If you specify an exclude filter, you are specifying that
- you do not wish to receive notifications for a specific type of file or files.
- eg: "*.tmp" would mean that you do not want any notifications
- regarding files that end w/ ".tmp"
- An empty, or not specified exclude filter means that
- you do not wish to exclude any file notifications.
-
-
-
-
-
-
-
-************************************************************/
-
-#include "stdafx.h"
-#include "DirectoryChanges.h"
-#include "DelayedDirectoryChangeHandler.h"
-
-#ifdef _DEBUG
-#undef THIS_FILE
-static char THIS_FILE[]=__FILE__;
-#define new DEBUG_NEW
-#endif
-//
-//
-// Fwd Declares & #define's
-//
-//
-//
-// Helper classes
-class CPrivilegeEnabler; //for use w/ enabling process priveledges when this code is first used. It's a singleton.
-
-class CFileNotifyInformation;//helps CDirectoryChangeWatcher class notify CDirectoryChangeHandler class of changes to files.
-
-class CDelayedDirectoryChangeHandler; // Helps all notifications become handled by the main
- // thread, or a worker thread depending upon a value passed to the
- // constructor of CDirectoryChangeWatcher.
- //
- // For notifications to fire in the main thread, your app must have a message pump.
- //
- // The 'main' thread is the one that called CDirectoryChangeWatcher::WatchDirectory()
-
-// Helper functions
-static BOOL EnablePrivilege(LPCTSTR pszPrivName, BOOL fEnable = TRUE);
-static bool IsDirectory(const CString & strPath);
-/////////////////////////////////////////////////////////////////////
-// Helper functions.
-BOOL EnablePrivilege(LPCTSTR pszPrivName, BOOL fEnable /*= TRUE*/)
-//
-// I think this code is from a Jeffrey Richter book...
-//
-// Enables user priviledges to be set for this process.
-//
-// Process needs to have access to certain priviledges in order
-// to use the ReadDirectoryChangesW() API. See documentation.
-{
- BOOL fOk = FALSE;
- // Assume function fails
- HANDLE hToken;
- // Try to open this process's access token
- if (OpenProcessToken(GetCurrentProcess(),
- TOKEN_ADJUST_PRIVILEGES, &hToken))
- {
- // privilege
- TOKEN_PRIVILEGES tp = { 1 };
-
- if( LookupPrivilegeValue(NULL, pszPrivName, &tp.Privileges[0].Luid) )
- {
- tp.Privileges[0].Attributes = fEnable ? SE_PRIVILEGE_ENABLED : 0;
-
- AdjustTokenPrivileges(hToken, FALSE, &tp,
- sizeof(tp), NULL, NULL);
-
- fOk = (GetLastError() == ERROR_SUCCESS);
- }
- CloseHandle(hToken);
- }
- return(fOk);
-}
-
-static bool IsDirectory(const CString & strPath)
-//
-// Returns: bool
-// true if strPath is a path to a directory
-// false otherwise.
-//
-{
- DWORD dwAttrib = GetFileAttributes( strPath );
- return static_cast<bool>( ( dwAttrib != 0xffffffff
- && (dwAttrib & FILE_ATTRIBUTE_DIRECTORY)) );
-
-
-}
-///////////////////////////////////////////////
-//Helper class:
-
-class CFileNotifyInformation
-/*******************************
-
-A Class to more easily traverse the FILE_NOTIFY_INFORMATION records returned
-by ReadDirectoryChangesW().
-
-FILE_NOTIFY_INFORMATION is defined in Winnt.h as:
-
- typedef struct _FILE_NOTIFY_INFORMATION {
- DWORD NextEntryOffset;
- DWORD Action;
- DWORD FileNameLength;
- WCHAR FileName[1];
-} FILE_NOTIFY_INFORMATION, *PFILE_NOTIFY_INFORMATION;
-
- ReadDirectoryChangesW basically puts x amount of these records in a
- buffer that you specify.
- The FILE_NOTIFY_INFORMATION structure is a 'dynamically sized' structure (size depends on length
- of the file name (+ sizeof the DWORDs in the struct))
-
- Because each structure contains an offset to the 'next' file notification
- it is basically a singly linked list. This class treats the structure in that way.
-
-
- Sample Usage:
- BYTE Read_Buffer[ 4096 ];
-
- ...
- ReadDirectoryChangesW(...Read_Buffer, 4096,...);
- ...
-
- CFileNotifyInformation notify_info( Read_Buffer, 4096);
- do{
- switch( notify_info.GetAction() )
- {
- case xx:
- notify_info.GetFileName();
- }
-
- while( notify_info.GetNextNotifyInformation() );
-
-********************************/
-{
-public:
- CFileNotifyInformation( BYTE * lpFileNotifyInfoBuffer, DWORD dwBuffSize)
- : m_pBuffer( lpFileNotifyInfoBuffer ),
- m_dwBufferSize( dwBuffSize )
- {
- ASSERT( lpFileNotifyInfoBuffer && dwBuffSize );
-
- m_pCurrentRecord = (PFILE_NOTIFY_INFORMATION) m_pBuffer;
- }
-
-
- BOOL GetNextNotifyInformation();
-
- BOOL CopyCurrentRecordToBeginningOfBuffer(OUT DWORD & ref_dwSizeOfCurrentRecord);
-
- DWORD GetAction() const;//gets the type of file change notifiation
- CString GetFileName()const;//gets the file name from the FILE_NOTIFY_INFORMATION record
- CString GetFileNameWithPath(const CString & strRootPath) const;//same as GetFileName() only it prefixes the strRootPath into the file name
-
-
-protected:
- BYTE * m_pBuffer;//<--all of the FILE_NOTIFY_INFORMATION records 'live' in the buffer this points to...
- DWORD m_dwBufferSize;
- PFILE_NOTIFY_INFORMATION m_pCurrentRecord;//this points to the current FILE_NOTIFY_INFORMATION record in m_pBuffer
-
-};
-
-BOOL CFileNotifyInformation::GetNextNotifyInformation()
-/***************
- Sets the m_pCurrentRecord to the next FILE_NOTIFY_INFORMATION record.
-
- Even if this return FALSE, (unless m_pCurrentRecord is NULL)
- m_pCurrentRecord will still point to the last record in the buffer.
-****************/
-{
- if( m_pCurrentRecord
- && m_pCurrentRecord->NextEntryOffset != 0UL)//is there another record after this one?
- {
- //set the current record to point to the 'next' record
- PFILE_NOTIFY_INFORMATION pOld = m_pCurrentRecord;
- m_pCurrentRecord = (PFILE_NOTIFY_INFORMATION) ((LPBYTE)m_pCurrentRecord + m_pCurrentRecord->NextEntryOffset);
-
- ASSERT( (DWORD)((BYTE*)m_pCurrentRecord - m_pBuffer) < m_dwBufferSize);//make sure we haven't gone too far
-
- if( (DWORD)((BYTE*)m_pCurrentRecord - m_pBuffer) > m_dwBufferSize )
- {
- //we've gone too far.... this data is hosed.
- //
- // This sometimes happens if the watched directory becomes deleted... remove the FILE_SHARE_DELETE flag when using CreateFile() to get the handle to the directory...
- m_pCurrentRecord = pOld;
- }
-
- return (BOOL)(m_pCurrentRecord != pOld);
- }
- return FALSE;
-}
-
-BOOL CFileNotifyInformation::CopyCurrentRecordToBeginningOfBuffer(OUT DWORD & ref_dwSizeOfCurrentRecord)
-/*****************************************
- Copies the FILE_NOTIFY_INFORMATION record to the beginning of the buffer
- specified in the constructor.
-
- The size of the current record is returned in DWORD & dwSizeOfCurrentRecord.
-
-*****************************************/
-{
- ASSERT( m_pBuffer && m_pCurrentRecord );
- if( !m_pCurrentRecord ) return FALSE;
-
- BOOL bRetVal = TRUE;
-
- //determine the size of the current record.
- ref_dwSizeOfCurrentRecord = sizeof( FILE_NOTIFY_INFORMATION );
- //subtract out sizeof FILE_NOTIFY_INFORMATION::FileName[1]
- WCHAR FileName[1];//same as is defined for FILE_NOTIFY_INFORMATION::FileName
- UNREFERENCED_PARAMETER(FileName);
- ref_dwSizeOfCurrentRecord -= sizeof(FileName);
- //and replace it w/ value of FILE_NOTIFY_INFORMATION::FileNameLength
- ref_dwSizeOfCurrentRecord += m_pCurrentRecord->FileNameLength;
-
- ASSERT( (DWORD)((LPBYTE)m_pCurrentRecord + ref_dwSizeOfCurrentRecord) <= m_dwBufferSize );
-
- ASSERT( (void*)m_pBuffer != (void*)m_pCurrentRecord );//if this is the case, your buffer is way too small
- if( (void*)m_pBuffer != (void*) m_pCurrentRecord )
- {//copy the m_pCurrentRecord to the beginning of m_pBuffer
-
- ASSERT( (DWORD)m_pCurrentRecord > (DWORD)m_pBuffer + ref_dwSizeOfCurrentRecord);//will it overlap?
- __try{
- memcpy(m_pBuffer, m_pCurrentRecord, ref_dwSizeOfCurrentRecord);
- bRetVal = TRUE;
- }
- __except(EXCEPTION_EXECUTE_HANDLER)
- {
- TRACE(_T("EXCEPTION! CFileNotifyInformation::CopyCurrentRecordToBeginningOfBuffer() -- probably because bytes overlapped in a call to memcpy()"));
- bRetVal = FALSE;
- }
- }
- //else
- //there was only one record in this buffer, and m_pCurrentRecord is already at the beginning of the buffer
- return bRetVal;
-}
-
-DWORD CFileNotifyInformation::GetAction() const
-{
- ASSERT( m_pCurrentRecord );
- if( m_pCurrentRecord )
- return m_pCurrentRecord->Action;
- return 0UL;
-}
-
-CString CFileNotifyInformation::GetFileName() const
-{
- //
- //BUG FIX:
- // File Name's longer than 130 characters are truncated
- //
- // Thanks Edric @ uo_edric@hotmail.com for pointing this out.
- if( m_pCurrentRecord )
- {
- WCHAR wcFileName[ MAX_PATH + 1] = {0};//L"";
- memcpy( wcFileName,
- m_pCurrentRecord->FileName,
- //min( MAX_PATH, m_pCurrentRecord->FileNameLength) <-- buggy line
- min( (MAX_PATH * sizeof(WCHAR)), m_pCurrentRecord->FileNameLength));
-
-
- return CString( wcFileName );
- }
- return CString();
-}
-
-static inline bool HasTrailingBackslash(const CString & str )
-{
- if( str.GetLength() > 0
- && str[ str.GetLength() - 1 ] == _T('\\') )
- return true;
- return false;
-}
-CString CFileNotifyInformation::GetFileNameWithPath(const CString & strRootPath) const
-{
- CString strFileName( strRootPath );
- //if( strFileName.Right(1) != _T("\\") )
- if( !HasTrailingBackslash( strRootPath ) )
- strFileName += _T("\\");
-
- strFileName += GetFileName();
- return strFileName;
-}
-/////////////////////////////////////////////////////////////////////////////////
-class CPrivilegeEnabler
-//
-// Enables privileges for this process
-// first time CDirectoryChangeWatcher::WatchDirectory() is called.
-//
-// It's a singleton.
-//
-{
-private:
- CPrivilegeEnabler();//ctor
-public:
- ~CPrivilegeEnabler(){};
-
- static CPrivilegeEnabler & Instance();
- //friend static CPrivilegeEnabler & Instance();
-};
-
-CPrivilegeEnabler::CPrivilegeEnabler()
-{
- LPCTSTR arPrivelegeNames[] = {
- SE_BACKUP_NAME, // these two are required for the FILE_FLAG_BACKUP_SEMANTICS flag used in the call to
- SE_RESTORE_NAME,// CreateFile() to open the directory handle for ReadDirectoryChangesW
-
- SE_CHANGE_NOTIFY_NAME //just to make sure...it's on by default for all users.
- //<others here as needed>
- };
- for(int i = 0; i < sizeof(arPrivelegeNames) / sizeof(arPrivelegeNames[0]); ++i)
- {
- if( !EnablePrivilege(arPrivelegeNames[i], TRUE) )
- {
- TRACE(_T("Unable to enable privilege: %s -- GetLastError(): %d\n"), arPrivelegeNames[i], GetLastError());
- TRACE(_T("CDirectoryChangeWatcher notifications may not work as intended due to insufficient access rights/process privileges.\n"));
- TRACE(_T("File: %s Line: %d\n"), _T(__FILE__), __LINE__);
- }
- }
-}
-
-CPrivilegeEnabler & CPrivilegeEnabler::Instance()
-{
- static CPrivilegeEnabler theInstance;//constructs this first time it's called.
- return theInstance;
-}
-//
-//
-//
-///////////////////////////////////////////////////////////
-
-
-//
-//
-//////////////////////////////////////////////////////////////////////
-// Construction/Destruction
-//////////////////////////////////////////////////////////////////////
-CDirectoryChangeHandler::CDirectoryChangeHandler()
-: m_nRefCnt( 1 ),
- m_pDirChangeWatcher( NULL ),
- m_nWatcherRefCnt( 0L )
-{
-}
-
-CDirectoryChangeHandler::~CDirectoryChangeHandler()
-{
- UnwatchDirectory();
-}
-
-long CDirectoryChangeHandler::AddRef()
-{
- return InterlockedIncrement(&m_nRefCnt);
-}
-
-long CDirectoryChangeHandler::Release()
-{
- long nRefCnt = -1;
- if( (nRefCnt = InterlockedDecrement(&m_nRefCnt)) == 0 )
- delete this;
- return nRefCnt;
-}
-long CDirectoryChangeHandler::CurRefCnt()const
-{
- return m_nRefCnt;
-}
-
-BOOL CDirectoryChangeHandler::UnwatchDirectory()
-{
- CSingleLock lock(&m_csWatcher, TRUE);
- ASSERT( lock.IsLocked() );
-
- if( m_pDirChangeWatcher )
- return m_pDirChangeWatcher->UnwatchDirectory( this );
- return TRUE;
-}
-
-long CDirectoryChangeHandler::ReferencesWatcher(CDirectoryChangeWatcher * pDirChangeWatcher)
-{
- ASSERT( pDirChangeWatcher );
- CSingleLock lock(&m_csWatcher, TRUE);
- if( m_pDirChangeWatcher
- && m_pDirChangeWatcher != pDirChangeWatcher )
- {
- TRACE(_T("CDirectoryChangeHandler...is becoming used by a different CDirectoryChangeWatcher!\n"));
- TRACE(_T("Directories being handled by this object will now be unwatched.\nThis object is now being used to ")
- _T("handle changes to a directory watched by different CDirectoryChangeWatcher object, probably on a different directory"));
-
- if( UnwatchDirectory() )
- {
- m_pDirChangeWatcher = pDirChangeWatcher;
- m_nWatcherRefCnt = 1; //when this reaches 0, set m_pDirChangeWatcher to NULL
- return m_nWatcherRefCnt;
- }
- else
- {
- ASSERT( FALSE );//shouldn't get here!
- }
- }
- else
- {
- ASSERT( !m_pDirChangeWatcher || m_pDirChangeWatcher == pDirChangeWatcher );
-
- m_pDirChangeWatcher = pDirChangeWatcher;
-
- if( m_pDirChangeWatcher )
- return InterlockedIncrement(&m_nWatcherRefCnt);
-
- }
- return m_nWatcherRefCnt;
-}
-
-long CDirectoryChangeHandler::ReleaseReferenceToWatcher(CDirectoryChangeWatcher * pDirChangeWatcher)
-{
- ASSERT( m_pDirChangeWatcher == pDirChangeWatcher );
- CSingleLock lock(&m_csWatcher, TRUE);
- long nRef;
- if( (nRef = InterlockedDecrement(&m_nWatcherRefCnt)) <= 0L )
- {
- m_pDirChangeWatcher = NULL; //Setting this to NULL so that this->UnwatchDirectory() which is called in the dtor
- //won't call m_pDirChangeWatcher->UnwatchDirecotry(this).
- //m_pDirChangeWatcher may point to a destructed object depending on how
- //these classes are being used.
- m_nWatcherRefCnt = 0L;
- }
- return nRef;
-}
-
-//
-//
-// Default implmentations for CDirectoryChangeHandler's virtual functions.
-//
-//
-void CDirectoryChangeHandler::On_FileAdded(const CString & strFileName)
-{
- TRACE(_T("The following file was added: %s\n"), strFileName);
-}
-
-void CDirectoryChangeHandler::On_FileRemoved(const CString & strFileName)
-{
- TRACE(_T("The following file was removed: %s\n"), strFileName);
-}
-
-void CDirectoryChangeHandler::On_FileModified(const CString & strFileName)
-{
- TRACE(_T("The following file was modified: %s\n"), strFileName);
-}
-
-void CDirectoryChangeHandler::On_FileNameChanged(const CString & strOldFileName, const CString & strNewFileName)
-{
- TRACE(_T("The file %s was RENAMED to %s\n"), strOldFileName, strNewFileName);
-}
-void CDirectoryChangeHandler::On_ReadDirectoryChangesError(DWORD dwError, const CString & strDirectoryName)
-{
- TRACE(_T("WARNING!!!!!\n") );
- TRACE(_T("An error has occurred on a watched directory!\n"));
- TRACE(_T("This directory has become unwatched! -- %s \n"), strDirectoryName);
- TRACE(_T("ReadDirectoryChangesW has failed! %d"), dwError);
- ASSERT( FALSE );//you should override this function no matter what. an error will occur someday.
-}
-
-void CDirectoryChangeHandler::On_WatchStarted(DWORD dwError, const CString & strDirectoryName)
-{
- if( dwError == 0 )
- TRACE(_T("A watch has begun on the following directory: %s\n"), strDirectoryName);
- else
- TRACE(_T("A watch failed to start on the following directory: (Error: %d) %s\n"),dwError, strDirectoryName);
-}
-
-void CDirectoryChangeHandler::On_WatchStopped(const CString & strDirectoryName)
-{
- TRACE(_T("The watch on the following directory has stopped: %s\n"), strDirectoryName);
-}
-
-bool CDirectoryChangeHandler::On_FilterNotification(DWORD /*dwNotifyAction*/, LPCTSTR /*szFileName*/, LPCTSTR /*szNewFileName*/)
-//
-// bool On_FilterNotification(DWORD dwNotifyAction, LPCTSTR szFileName, LPCTSTR szNewFileName);
-//
-// This function gives your class a chance to filter unwanted notifications.
-//
-// PARAMETERS:
-// DWORD dwNotifyAction -- specifies the event to filter
-// LPCTSTR szFileName -- specifies the name of the file for the event.
-// LPCTSTR szNewFileName -- specifies the new file name of a file that has been renamed.
-//
-// RETURN VALUE:
-// return true from this function, and you will receive the notification.
-// return false from this function, and your class will NOT receive the notification.
-//
-// Valid values of dwNotifyAction:
-// FILE_ACTION_ADDED -- On_FileAdded() is about to be called.
-// FILE_ACTION_REMOVED -- On_FileRemoved() is about to be called.
-// FILE_ACTION_MODIFIED -- On_FileModified() is about to be called.
-// FILE_ACTION_RENAMED_OLD_NAME-- On_FileNameChanged() is about to be call.
-//
-//
-// NOTE: When the value of dwNotifyAction is FILE_ACTION_RENAMED_OLD_NAME,
-// szFileName will be the old name of the file, and szNewFileName will
-// be the new name of the renamed file.
-//
-// The default implementation always returns true, indicating that all notifications will
-// be sent.
-//
-{
- return true;
-}
-
-void CDirectoryChangeHandler::SetChangedDirectoryName(const CString & strChangedDirName)
-{
- m_strChangedDirectoryName = strChangedDirName;
-}
-////////////////////////////////////////////////////////////////////
-////////////////////////////////////////////////////////////////////
-
-CDirectoryChangeWatcher::CDirectoryChangeWatcher(bool bAppHasGUI /*= true*/, DWORD dwFilterFlags/*=FILTERS_CHECK_FILE_NAME_ONLY*/)
-: m_hCompPort( NULL )
- ,m_hThread( NULL )
- ,m_dwThreadID( 0UL )
- ,m_bAppHasGUI( bAppHasGUI )
- ,m_dwFilterFlags( dwFilterFlags == 0? FILTERS_DEFAULT_BEHAVIOR : dwFilterFlags)
-{
- //NOTE:
- // The bAppHasGUI variable indicates that you have a message pump associated
- // with the main thread(or the thread that first calls CDirectoryChangeWatcher::WatchDirectory() ).
- // Directory change notifications are dispatched to your main thread.
- //
- // If your app doesn't have a gui, then pass false. Doing so causes a worker thread
- // to be created that implements a message pump where it dispatches/executes the notifications.
- // It's ok to pass false even if your app does have a GUI.
- // Passing false is required for Console applications, or applications without a message pump.
- // Note that notifications are fired in a worker thread.
- //
-
- //NOTE:
- //
- //
-}
-
-CDirectoryChangeWatcher::~CDirectoryChangeWatcher()
-{
-
- UnwatchAllDirectories();
-
- if( m_hCompPort )
- {
- CloseHandle( m_hCompPort );
- m_hCompPort = NULL;
- }
-}
-
-DWORD CDirectoryChangeWatcher::SetFilterFlags(DWORD dwFilterFlags)
-//
-// SetFilterFlags()
-//
-// sets filter behavior for directories watched AFTER this function has been called.
-//
-//
-//
-{
- DWORD dwOld = m_dwFilterFlags;
- m_dwFilterFlags = dwFilterFlags;
- if( m_dwFilterFlags == 0 )
- m_dwFilterFlags = FILTERS_DEFAULT_BEHAVIOR;//the default.
- return dwOld;
-}
-
-BOOL CDirectoryChangeWatcher::IsWatchingDirectory(const CString & strDirName)const
-/*********************************************
- Determines whether or not a directory is being watched
-
- be carefull that you have the same name path name, including the backslash
- as was used in the call to WatchDirectory().
-
- ie:
- "C:\\Temp"
- is different than
- "C:\\Temp\\"
-**********************************************/
-{
- CSingleLock lock( const_cast<CCriticalSection*>(&m_csDirWatchInfo), TRUE);
- ASSERT( lock.IsLocked() );
- int i;
- if( GetDirWatchInfo(strDirName, i) )
- return TRUE;
- return FALSE;
-}
-
-int CDirectoryChangeWatcher::NumWatchedDirectories()const
-{
- CSingleLock lock(const_cast<CCriticalSection*>(&m_csDirWatchInfo), TRUE);
- ASSERT( lock.IsLocked() );
- int nCnt(0),max = m_DirectoriesToWatch.GetSize();
- for(int i(0); i < max; ++i)
- {
- if( m_DirectoriesToWatch[i] != NULL )//array may contain NULL elements.
- nCnt++;
- }
-
- return nCnt;
-}
-
-DWORD CDirectoryChangeWatcher::WatchDirectory(const CString & strDirToWatch,
- DWORD dwChangesToWatchFor,
- CDirectoryChangeHandler * pChangeHandler,
- BOOL bWatchSubDirs /*=FALSE*/,
- LPCTSTR szIncludeFilter /*=NULL*/,
- LPCTSTR szExcludeFilter /*=NULL*/
- )
-/*************************************************************
-FUNCTION: WatchDirectory(const CString & strDirToWatch, --the name of the directory to watch
- DWORD dwChangesToWatchFor, --the changes to watch for see dsk docs..for ReadDirectoryChangesW
- CDirectoryChangeHandler * pChangeHandler -- handles changes in specified directory
- BOOL bWatchSubDirs --specified to watch sub directories of the directory that you want to watch
- )
-
-PARAMETERS:
- const CString & strDirToWatch -- specifies the path of the directory to watch.
- DWORD dwChangesToWatchFor -- specifies flags to be passed to ReadDirectoryChangesW()
- CDirectoryChangeHandler * -- ptr to an object which will handle notifications of file changes.
- BOOL bWatchSubDirs -- specifies to watch subdirectories.
- LPCTSTR szIncludeFilter -- A file pattern string for files that you wish to receive notifications
- for. See Remarks.
- LPCTSTR szExcludeFilter -- A file pattern string for files that you do not wish to receive notifications for. See Remarks
-
- Starts watching the specified directory(and optionally subdirectories) for the specified changes
-
- When specified changes take place the appropriate CDirectoryChangeHandler::On_Filexxx() function is called.
-
- dwChangesToWatchFor can be a combination of the following flags, and changes map out to the
- following functions:
- FILE_NOTIFY_CHANGE_FILE_NAME -- CDirectoryChangeHandler::On_FileAdded()
- CDirectoryChangeHandler::On_FileNameChanged,
- CDirectoryChangeHandler::On_FileRemoved
- FILE_NOTIFY_CHANGE_DIR_NAME -- CDirectoryChangeHandler::On_FileNameAdded(),
- CDirectoryChangeHandler::On_FileRemoved
- FILE_NOTIFY_CHANGE_ATTRIBUTES -- CDirectoryChangeHandler::On_FileModified
- FILE_NOTIFY_CHANGE_SIZE -- CDirectoryChangeHandler::On_FileModified
- FILE_NOTIFY_CHANGE_LAST_WRITE -- CDirectoryChangeHandler::On_FileModified
- FILE_NOTIFY_CHANGE_LAST_ACCESS -- CDirectoryChangeHandler::On_FileModified
- FILE_NOTIFY_CHANGE_CREATION -- CDirectoryChangeHandler::On_FileModified
- FILE_NOTIFY_CHANGE_SECURITY -- CDirectoryChangeHandler::On_FileModified?
-
-
- Returns ERROR_SUCCESS if the directory will be watched,
- or a windows error code if the directory couldn't be watched.
- The error code will most likely be related to a call to CreateFile(), or
- from the initial call to ReadDirectoryChangesW(). It's also possible to get an
- error code related to being unable to create an io completion port or being unable
- to start the worker thread.
-
- This function will fail if the directory to be watched resides on a
- computer that is not a Windows NT/2000/XP machine.
-
-
- You can only have one watch specified at a time for any particular directory.
- Calling this function with the same directory name will cause the directory to be
- unwatched, and then watched again(w/ the new parameters that have been passed in).
-
-**************************************************************/
-{
- ASSERT( dwChangesToWatchFor != 0);
-
- if( strDirToWatch.IsEmpty()
- || dwChangesToWatchFor == 0
- || pChangeHandler == NULL )
- {
- TRACE(_T("ERROR: You've passed invalid parameters to CDirectoryChangeWatcher::WatchDirectory()\n"));
- ::SetLastError(ERROR_INVALID_PARAMETER);
- return ERROR_INVALID_PARAMETER;
- }
-
-
- //double check that it's really a directory
- if( !IsDirectory( strDirToWatch ) )
- {
- TRACE(_T("ERROR: CDirectoryChangeWatcher::WatchDirectory() -- %s is not a directory!\n"), strDirToWatch);
- ::SetLastError(ERROR_BAD_PATHNAME);
- return ERROR_BAD_PATHNAME;
- }
-
- //double check that this directory is not already being watched....
- //if it is, then unwatch it before restarting it...
- if( IsWatchingDirectory( strDirToWatch) )
- {
- VERIFY(
- UnwatchDirectory( strDirToWatch )
- );
- }
- //
- //
- // Reference this singleton so that privileges for this process are enabled
- // so that it has required permissions to use the ReadDirectoryChangesW API, etc.
- //
- CPrivilegeEnabler::Instance();
- //
- //open the directory to watch....
- HANDLE hDir = CreateFile(strDirToWatch,
- FILE_LIST_DIRECTORY,
- FILE_SHARE_READ | FILE_SHARE_WRITE ,//| FILE_SHARE_DELETE, <-- removing FILE_SHARE_DELETE prevents the user or someone else from renaming or deleting the watched directory. This is a good thing to prevent.
- NULL, //security attributes
- OPEN_EXISTING,
- FILE_FLAG_BACKUP_SEMANTICS | //<- the required priviliges for this flag are: SE_BACKUP_NAME and SE_RESTORE_NAME. CPrivilegeEnabler takes care of that.
- FILE_FLAG_OVERLAPPED, //OVERLAPPED!
- NULL);
- if( hDir == INVALID_HANDLE_VALUE )
- {
- DWORD dwError = GetLastError();
- TRACE(_T("CDirectoryChangeWatcher::WatchDirectory() -- Couldn't open directory for monitoring. %d\n"), dwError);
- ::SetLastError(dwError);//who knows if TRACE will cause GetLastError() to return success...probably won't, but set it manually just for fun.
- return dwError;
- }
- //opened the dir!
-
- CDirWatchInfo * pDirInfo = new CDirWatchInfo( hDir, strDirToWatch, pChangeHandler, dwChangesToWatchFor, bWatchSubDirs, m_bAppHasGUI, szIncludeFilter, szExcludeFilter, m_dwFilterFlags);
- if( !pDirInfo )
- {
- TRACE(_T("WARNING: Couldn't allocate a new CDirWatchInfo() object --- File: %s Line: %d\n"), _T( __FILE__ ), __LINE__);
- CloseHandle( hDir );
- ::SetLastError(ERROR_OUTOFMEMORY);
- return ERROR_OUTOFMEMORY;
- }
-
- //create a IO completion port/or associate this key with
- //the existing IO completion port
- m_hCompPort = CreateIoCompletionPort(hDir,
- m_hCompPort, //if m_hCompPort is NULL, hDir is associated with a NEW completion port,
- //if m_hCompPort is NON-NULL, hDir is associated with the existing completion port that the handle m_hCompPort references
- (DWORD)pDirInfo, //the completion 'key'... this ptr is returned from GetQueuedCompletionStatus() when one of the events in the dwChangesToWatchFor filter takes place
- 0);
- if( m_hCompPort == NULL )
- {
- TRACE(_T("ERROR -- Unable to create I/O Completion port! GetLastError(): %d File: %s Line: %d"), GetLastError(), _T( __FILE__ ), __LINE__ );
- DWORD dwError = GetLastError();
- pDirInfo->DeleteSelf( NULL );
- ::SetLastError(dwError);//who knows what the last error will be after i call pDirInfo->DeleteSelf(), so set it just to make sure
- return dwError;
- }
- else
- {//completion port created/directory associated w/ it successfully
-
- //if the thread isn't running start it....
- //when the thread starts, it will call ReadDirectoryChangesW and wait
- //for changes to take place
- if( m_hThread == NULL )
- {
- //start the thread
- CWinThread * pThread = AfxBeginThread(MonitorDirectoryChanges, this);
- if( !pThread )
- {//couldn't create the thread!
- TRACE(_T("CDirectoryChangeWatcher::WatchDirectory()-- AfxBeginThread failed!\n"));
- pDirInfo->DeleteSelf( NULL );
- return (GetLastError() == ERROR_SUCCESS)? ERROR_MAX_THRDS_REACHED : GetLastError();
- }
- else
- {
- m_hThread = pThread->m_hThread;
- m_dwThreadID = pThread->m_nThreadID;
- pThread->m_bAutoDelete = TRUE;//pThread is deleted when thread ends....it's TRUE by default(for CWinThread ptrs returned by AfxBeginThread(threadproc, void*)), but just makin sure.
-
- }
- }
- if( m_hThread != NULL )
- {//thread is running,
- //signal the thread to issue the initial call to
- //ReadDirectoryChangesW()
- DWORD dwStarted = pDirInfo->StartMonitor( m_hCompPort );
-
- if( dwStarted != ERROR_SUCCESS )
- {//there was a problem!
- TRACE(_T("Unable to watch directory: %s -- GetLastError(): %d\n"), dwStarted);
- pDirInfo->DeleteSelf( NULL );
- ::SetLastError(dwStarted);//I think this'll set the Err object in a VB app.....
- return dwStarted;
- }
- else
- {//ReadDirectoryChangesW was successfull!
- //add the directory info to the first empty slot in the array
-
- //associate the pChangeHandler with this object
- pChangeHandler->ReferencesWatcher( this );//reference is removed when directory is unwatched.
- //CDirWatchInfo::DeleteSelf() must now be called w/ this CDirectoryChangeWatcher pointer becuse
- //of a reference count
-
- //save the CDirWatchInfo* so I'll be able to use it later.
- VERIFY( AddToWatchInfo( pDirInfo ) );
- SetLastError(dwStarted);
- return dwStarted;
- }
-
- }
- else
- {
- ASSERT(FALSE);//control path shouldn't get here
- ::SetLastError(ERROR_MAX_THRDS_REACHED);
- return ERROR_MAX_THRDS_REACHED;
- }
-
- }
- ASSERT( FALSE );//shouldn't get here.
-}
-
-BOOL CDirectoryChangeWatcher::UnwatchAllDirectories()
-{
-
- //unwatch all of the watched directories
- //delete all of the CDirWatchInfo objects,
- //kill off the worker thread
- if( m_hThread != NULL )
- {
- ASSERT( m_hCompPort != NULL );
-
- CSingleLock lock( &m_csDirWatchInfo, TRUE);
- ASSERT( lock.IsLocked() );
-
- CDirWatchInfo * pDirInfo;
- //Unwatch each of the watched directories
- //and delete the CDirWatchInfo associated w/ that directory...
- int max = m_DirectoriesToWatch.GetSize();
- for(int i = 0; i < max; ++i)
- {
- if( (pDirInfo = m_DirectoriesToWatch[i]) != NULL )
- {
- VERIFY( pDirInfo->UnwatchDirectory( m_hCompPort ) );
-
- m_DirectoriesToWatch.SetAt(i, NULL) ;
- pDirInfo->DeleteSelf(this);
- }
-
- }
- m_DirectoriesToWatch.RemoveAll();
- //kill off the thread
- PostQueuedCompletionStatus(m_hCompPort, 0, 0, NULL);//The thread will catch this and exit the thread
- //wait for it to exit
- WaitForSingleObject(m_hThread, INFINITE);
- //CloseHandle( m_hThread );//Since thread was started w/ AfxBeginThread() this handle is closed automatically, closing it again will raise an exception
- m_hThread = NULL;
- m_dwThreadID = 0UL;
-
- //close the completion port...
- CloseHandle( m_hCompPort );
- m_hCompPort = NULL;
-
-
- return TRUE;
- }
- else
- {
-#ifdef _DEBUG
- //make sure that there aren't any
- //CDirWatchInfo objects laying around... they should have all been destroyed
- //and removed from the array m_DirectoriesToWatch
- if( m_DirectoriesToWatch.GetSize() > 0 )
- {
- for(int i = 0; i < m_DirectoriesToWatch.GetSize(); ++i)
- {
- ASSERT( m_DirectoriesToWatch[i] == NULL );
- }
- }
-#endif
- }
- return FALSE;
-}
-
-BOOL CDirectoryChangeWatcher::UnwatchDirectory(const CString & strDirToStopWatching)
-/***************************************************************
-FUNCTION: UnwatchDirectory(const CString & strDirToStopWatching -- if this directory is being watched, the watch is stopped
-
-****************************************************************/
-{
- BOOL bRetVal = FALSE;
-
-
-
- if( m_hCompPort != NULL )//The io completion port must be open
- {
- ASSERT( !strDirToStopWatching.IsEmpty() );
-
- CSingleLock lock(&m_csDirWatchInfo, TRUE);
- ASSERT( lock.IsLocked() );
- int nIdx = -1;
- CDirWatchInfo * pDirInfo = GetDirWatchInfo(strDirToStopWatching, nIdx);
- if( pDirInfo != NULL
- && nIdx != -1 )
- {
-
- //stop watching this directory
- VERIFY( pDirInfo->UnwatchDirectory( m_hCompPort ) );
-
- //cleanup the object used to watch the directory
- m_DirectoriesToWatch.SetAt(nIdx, NULL);
- pDirInfo->DeleteSelf(this);
- bRetVal = TRUE;
- }
- }
-
- return bRetVal;
-}
-
-BOOL CDirectoryChangeWatcher::UnwatchDirectory(CDirectoryChangeHandler * pChangeHandler)
-/************************************
-
- This function is called from the dtor of CDirectoryChangeHandler automatically,
- but may also be called by a programmer because it's public...
-
- A single CDirectoryChangeHandler may be used for any number of watched directories.
-
- Unwatch any directories that may be using this
- CDirectoryChangeHandler * pChangeHandler to handle changes to a watched directory...
-
- The CDirWatchInfo::m_pChangeHandler member of objects in the m_DirectoriesToWatch
- array will == pChangeHandler if that handler is being used to handle changes to a directory....
-************************************/
-{
- ASSERT( pChangeHandler );
-
- CSingleLock lock(&m_csDirWatchInfo, TRUE);
-
- ASSERT( lock.IsLocked() );
-
- int nUnwatched = 0;
- int nIdx = -1;
- CDirWatchInfo * pDirInfo;
- //
- // go through and unwatch any directory that is
- // that is using this pChangeHandler as it's file change notification handler.
- //
- while( (pDirInfo = GetDirWatchInfo( pChangeHandler, nIdx )) != NULL )
- {
- VERIFY( pDirInfo->UnwatchDirectory( m_hCompPort ) );
-
- nUnwatched++;
- m_DirectoriesToWatch.SetAt(nIdx, NULL);
- pDirInfo->DeleteSelf(this);
- }
- return (BOOL)(nUnwatched != 0);
-}
-
-BOOL CDirectoryChangeWatcher::UnwatchDirectoryBecauseOfError(CDirWatchInfo * pWatchInfo)
-//
-// Called in the worker thread in the case that ReadDirectoryChangesW() fails
-// during normal operation. One way to force this to happen is to watch a folder
-// using a UNC path and changing that computer's IP address.
-//
-{
- ASSERT( pWatchInfo );
- ASSERT( m_dwThreadID == GetCurrentThreadId() );//this should be called from the worker thread only.
- BOOL bRetVal = FALSE;
- if( pWatchInfo )
- {
- CSingleLock lock(&m_csDirWatchInfo, TRUE);
-
- ASSERT( lock.IsLocked() );
- int nIdx = -1;
- if( GetDirWatchInfo(pWatchInfo, nIdx) == pWatchInfo )
- {
- // we are actually watching this....
-
- //
- // Remove this CDirWatchInfo object from the list of watched directories.
- //
- m_DirectoriesToWatch.SetAt(nIdx, NULL);//mark the space as free for the next watch...
-
- //
- // and delete it...
- //
-
- pWatchInfo->DeleteSelf(this);
-
- }
-
- }
- return bRetVal;
-}
-
-int CDirectoryChangeWatcher::AddToWatchInfo(CDirectoryChangeWatcher::CDirWatchInfo * pWatchInfo)
-//
-//
-// To add the CDirWatchInfo * to an array.
-// The array is used to keep track of which directories
-// are being watched.
-//
-// Add the ptr to the first non-null slot in the array.
-{
- CSingleLock lock( &m_csDirWatchInfo, TRUE);
- ASSERT( lock.IsLocked() );
-
- //first try to add it to the first empty slot in m_DirectoriesToWatch
- int max = m_DirectoriesToWatch.GetSize();
- for(int i = 0; i < max; ++i)
- {
- if( m_DirectoriesToWatch[i] == NULL )
- {
- m_DirectoriesToWatch[i] = pWatchInfo;
- break;
- }
- }
- if( i == max )
- {
- // there where no empty slots, add it to the end of the array
- try{
- i = m_DirectoriesToWatch.Add( pWatchInfo );
- }
- catch(CMemoryException * e){
- e->ReportError();
- e->Delete();//??? delete this? I thought CMemoryException objects where pre allocated in mfc? -- sample code in msdn does, so will i
- i = -1;
- }
- }
-
- return (BOOL)(i != -1);
-}
-
-//
-// functions for retrieving the directory watch info based on different parameters
-//
-CDirectoryChangeWatcher::CDirWatchInfo * CDirectoryChangeWatcher::GetDirWatchInfo(const CString & strDirName, int & ref_nIdx)const
-{
- if( strDirName.IsEmpty() )// can't be watching a directory if it's you don't pass in the name of it...
- return FALSE; //
-
- CSingleLock lock(const_cast<CCriticalSection*>(&m_csDirWatchInfo), TRUE);
-
- int max = m_DirectoriesToWatch.GetSize();
- CDirWatchInfo * p = NULL;
- for(int i = 0; i < max; ++i )
- {
- if( (p = m_DirectoriesToWatch[i]) != NULL
- && p->m_strDirName.CompareNoCase( strDirName ) == 0 )
- {
- ref_nIdx = i;
- return p;
- }
- }
-
- return NULL;//NOT FOUND
-}
-
-CDirectoryChangeWatcher::CDirWatchInfo * CDirectoryChangeWatcher::GetDirWatchInfo(CDirectoryChangeWatcher::CDirWatchInfo * pWatchInfo, int & ref_nIdx)const
-{
- ASSERT( pWatchInfo != NULL );
-
- CSingleLock lock( const_cast<CCriticalSection*>(&m_csDirWatchInfo), TRUE);
- int i(0), max = m_DirectoriesToWatch.GetSize();
- CDirWatchInfo * p;
- for(; i < max; ++i)
- {
- if( (p = m_DirectoriesToWatch[i]) != NULL
- && p == pWatchInfo )
- {
- ref_nIdx = i;
- return p;
- }
- }
- return NULL;//NOT FOUND
-}
-
-CDirectoryChangeWatcher::CDirWatchInfo * CDirectoryChangeWatcher::GetDirWatchInfo(CDirectoryChangeHandler * pChangeHandler, int & ref_nIdx)const
-{
- ASSERT( pChangeHandler != NULL );
- CSingleLock lock( const_cast<CCriticalSection*>(&m_csDirWatchInfo), TRUE);
- int i(0),max = m_DirectoriesToWatch.GetSize();
- CDirWatchInfo * p;
- for( ; i < max; ++i)
- {
- if( (p = m_DirectoriesToWatch[i]) != NULL
- && p->GetRealChangeHandler() == pChangeHandler )
- {
- ref_nIdx = i;
- return p;
- }
- }
- return NULL;//NOT FOUND
-}
-
-long CDirectoryChangeWatcher::ReleaseReferenceToWatcher(CDirectoryChangeHandler * pChangeHandler)
-{
- ASSERT( pChangeHandler );
- return pChangeHandler->ReleaseReferenceToWatcher(this);
-}
-
-CDirectoryChangeWatcher::CDirWatchInfo::CDirWatchInfo(HANDLE hDir,
- const CString & strDirectoryName,
- CDirectoryChangeHandler * pChangeHandler,
- DWORD dwChangeFilter,
- BOOL bWatchSubDir,
- bool bAppHasGUI,
- LPCTSTR szIncludeFilter,
- LPCTSTR szExcludeFilter,
- DWORD dwFilterFlags)
- : m_pChangeHandler( NULL ),
- m_hDir(hDir),
- m_dwChangeFilter( dwChangeFilter ),
- m_bWatchSubDir( bWatchSubDir ),
- m_strDirName( strDirectoryName ),
- m_dwBufLength(0),
- m_dwReadDirError(ERROR_SUCCESS),
- m_StartStopEvent(FALSE, TRUE), //NOT SIGNALLED, MANUAL RESET
- m_RunningState( RUNNING_STATE_NOT_SET )
-{
-
- ASSERT( hDir != INVALID_HANDLE_VALUE
- && !strDirectoryName.IsEmpty() );
-
- //
- // This object 'decorates' the pChangeHandler passed in
- // so that notifications fire in the context a thread other than
- // CDirectoryChangeWatcher::MonitorDirectoryChanges()
- //
- // Supports the include and exclude filters
- //
- //
- m_pChangeHandler = new CDelayedDirectoryChangeHandler( pChangeHandler, bAppHasGUI, szIncludeFilter, szExcludeFilter, dwFilterFlags );
- if( m_pChangeHandler )
- m_pChangeHandler->SetPartialPathOffset( m_strDirName );//to support FILTERS_CHECK_PARTIAL_PATH..this won't change for the duration of the watch, so set it once... HERE!
- ASSERT( m_pChangeHandler );
-
- ASSERT( GetChangeHandler() );
- ASSERT( GetRealChangeHandler() );
- if( GetRealChangeHandler() )
- GetRealChangeHandler()->AddRef();
-
- memset(&m_Overlapped, 0, sizeof(m_Overlapped));
- //memset(m_Buffer, 0, sizeof(m_Buffer));
-}
-
-CDirectoryChangeWatcher::CDirWatchInfo::~CDirWatchInfo()
-{
- if( GetChangeHandler() )
- {//If this call to CDirectoryChangeHandler::Release() causes m_pChangeHandler to delete itself,
- //the dtor for CDirectoryChangeHandler will call CDirectoryChangeWatcher::UnwatchDirectory( CDirectoryChangeHandler * ),
- //which will make try to delete this object again.
- //if m_pChangeHandler is NULL, it won't try to delete this object again...
- CDirectoryChangeHandler * pTmp = SetRealDirectoryChangeHandler( NULL );
- if( pTmp )
- pTmp->Release();
- else{
- ASSERT( FALSE );
- }
- }
-
- CloseDirectoryHandle();
-
- delete m_pChangeHandler;
- m_pChangeHandler = NULL;
-
-}
-void CDirectoryChangeWatcher::CDirWatchInfo::DeleteSelf(CDirectoryChangeWatcher * pWatcher)
-//
-// There's a reason for this function!
-//
-// the dtor is private to enforce that it is used.
-//
-//
-// pWatcher can be NULL only if CDirecotryChangeHandler::ReferencesWatcher() has NOT been called.
-// ie: in certain sections of WatchDirectory() it's ok to pass this w/ NULL, but no where else.
-//
-{
- //ASSERT( pWatcher != NULL );
-
-
- ASSERT( GetRealChangeHandler() );
- if( pWatcher )
- {
- //
- //
- // Before this object is deleted, the CDirectoryChangeHandler object
- // needs to release it's reference count to the CDirectoryChangeWatcher object.
- // I might forget to do this since I getting rid of CDirWatchInfo objects
- // in more than one place...hence the reason for this function.
- //
- pWatcher->ReleaseReferenceToWatcher( GetRealChangeHandler() );
- }
-
- delete this;
-}
-
-CDelayedDirectoryChangeHandler* CDirectoryChangeWatcher::CDirWatchInfo::GetChangeHandler() const
-{
- return m_pChangeHandler;
-}
-
-CDirectoryChangeHandler * CDirectoryChangeWatcher::CDirWatchInfo::GetRealChangeHandler() const
-//
-// The 'real' change handler is the CDirectoryChangeHandler object
-// passed to CDirectoryChangeWatcher::WatchDirectory() -- this is the object
-// that really handles the changes.
-//
-{
- ASSERT( m_pChangeHandler );
- return m_pChangeHandler->GetRealChangeHandler();
-}
-
-CDirectoryChangeHandler * CDirectoryChangeWatcher::CDirWatchInfo::SetRealDirectoryChangeHandler(CDirectoryChangeHandler * pChangeHandler)
-//
-// Allows you to switch out, at run time, which object really handles the change notifications.
-//
-{
- CDirectoryChangeHandler * pOld = GetRealChangeHandler();
- m_pChangeHandler->GetRealChangeHandler() = pChangeHandler;
- return pOld;
-}
-
-BOOL CDirectoryChangeWatcher::CDirWatchInfo::CloseDirectoryHandle()
-//
-// Closes the directory handle that was opened in CDirectoryChangeWatcher::WatchDirecotry()
-//
-//
-{
- BOOL b = TRUE;
- if( m_hDir != INVALID_HANDLE_VALUE )
- {
- b = CloseHandle(m_hDir);
- m_hDir = INVALID_HANDLE_VALUE;
- }
- return b;
-}
-
-DWORD CDirectoryChangeWatcher::CDirWatchInfo::StartMonitor(HANDLE hCompPort)
-/*********************************************
- Sets the running state of the object to perform the initial call to ReadDirectoryChangesW()
- , wakes up the thread waiting on GetQueuedCompletionStatus()
- and waits for an event to be set before returning....
-
- The return value is either ERROR_SUCCESS if ReadDirectoryChangesW is successfull,
- or is the value of GetLastError() for when ReadDirectoryChangesW() failed.
-**********************************************/
-{
- ASSERT( hCompPort );
-
- //Guard the properties of this object
- VERIFY( LockProperties() );
-
-
-
- m_RunningState = RUNNING_STATE_START_MONITORING;//set the state member to indicate that the object is to START monitoring the specified directory
- PostQueuedCompletionStatus(hCompPort, sizeof(this), (DWORD)this, &m_Overlapped);//make the thread waiting on GetQueuedCompletionStatus() wake up
-
- VERIFY( UnlockProperties() );//unlock this object so that the thread can get at them...
-
- //wait for signal that the initial call
- //to ReadDirectoryChanges has been made
- DWORD dwWait = 0;
- do{
- dwWait = WaitForSingleObject(m_StartStopEvent, 10 * 1000);
- if( dwWait != WAIT_OBJECT_0 )
- {
- //
- // shouldn't ever see this one....but just in case you do, notify me of the problem wesj@hotmail.com.
- //
- TRACE(_T("WARNING! Possible lockup detected. FILE: %s Line: %d\n"), _T( __FILE__ ), __LINE__);
- }
- } while( dwWait != WAIT_OBJECT_0 );
-
- ASSERT( dwWait == WAIT_OBJECT_0 );
- m_StartStopEvent.ResetEvent();
-
- return m_dwReadDirError;//This value is set in the worker thread when it first calls ReadDirectoryChangesW().
-}
-
-BOOL CDirectoryChangeWatcher::CDirWatchInfo::UnwatchDirectory(HANDLE hCompPort)
-/*******************************************
-
- Sets the running state of the object to stop monitoring a directory,
- Causes the worker thread to wake up and to stop monitoring the dierctory
-
-********************************************/
-{
- ASSERT( hCompPort );
- //
- // Signal that the worker thread is to stop watching the directory
- //
- if( SignalShutdown(hCompPort) )
- {
- //and wait for the thread to signal that it has shutdown
- return WaitForShutdown();
-
- }
- return FALSE;
-}
-
-BOOL CDirectoryChangeWatcher::CDirWatchInfo::SignalShutdown( HANDLE hCompPort )
-//added to fix a bug -- this will be called normally by UnwatchDirectory(HANDLE)
-// and abnormally by the worker thread in the case that ReadDirectoryChangesW fails -- see code.
-//
-// Signals the worker thread(via the I/O completion port) that it is to stop watching the
-// directory for this object, and then returns.
-//
-{
- BOOL bRetVal = FALSE;
- ASSERT( hCompPort );
- ASSERT( m_hDir != INVALID_HANDLE_VALUE );
- //Lock the properties so that they aren't modified by another thread
- VERIFY( LockProperties() ); //unlikey to fail...
-
- //set the state member to indicate that the object is to stop monitoring the
- //directory that this CDirWatchInfo is responsible for...
- m_RunningState = CDirectoryChangeWatcher::CDirWatchInfo::RUNNING_STATE_STOP;
- //put this object in the I/O completion port... GetQueuedCompletionStatus() will return it inside the worker thread.
- bRetVal = PostQueuedCompletionStatus(hCompPort, sizeof(CDirWatchInfo*), (DWORD)this, &m_Overlapped);
-
- if( !bRetVal )
- {
- TRACE(_T("PostQueuedCompletionStatus() failed! GetLastError(): %d\n"), GetLastError());
- }
- VERIFY( UnlockProperties() );
-
- return bRetVal;
-}
-
-BOOL CDirectoryChangeWatcher::CDirWatchInfo::WaitForShutdown()
-//
-// This is to be called some time after SignalShutdown().
-//
-//
-{
- ASSERT_VALID(&m_StartStopEvent);
-
- //Wait for the Worker thread to indicate that the watch has been stopped
- DWORD dwWait;
- bool bWMQuitReceived = false;
- do{
- dwWait = MsgWaitForMultipleObjects(1, &m_StartStopEvent.m_hObject, FALSE, 5000, QS_ALLINPUT);//wait five seconds
- switch( dwWait )
- {
- case WAIT_OBJECT_0:
- //handle became signalled!
- break;
- case WAIT_OBJECT_0 + 1:
- {
- //This thread awoke due to sent/posted message
- //process the message Q
- //
- // There is a message in this thread's queue, so
- // MsgWaitForMultipleObjects returned.
- // Process those messages, and wait again.
-
- MSG msg;
- while( PeekMessage(&msg, NULL, 0,0, PM_REMOVE ) )
- {
- if( msg.message != WM_QUIT)
- {
- TranslateMessage(&msg);
- DispatchMessage(&msg);
- }
- else
- {
- /****
- This appears to be causing quite a lot of pain, to quote Mustafa.
-
- //it's the WM_QUIT message, put it back in the Q and
- // exit this function
- PostMessage(msg.hwnd, msg.message, msg.wParam, msg.lParam );
- bWMQuitReceived = true;
-
- ****/
- break;
- }
- }
- }break;
- case WAIT_TIMEOUT:
- {
- TRACE(_T("WARNING: Possible Deadlock detected! ThreadID: %d File: %s Line: %d\n"), GetCurrentThreadId(), _T(__FILE__), __LINE__);
- }break;
- }//end switch(dwWait)
- }while( dwWait != WAIT_OBJECT_0 && !bWMQuitReceived );
-
-
-
- ASSERT( dwWait == WAIT_OBJECT_0 || bWMQuitReceived);
-
- m_StartStopEvent.ResetEvent();
-
- return (BOOL) (dwWait == WAIT_OBJECT_0 || bWMQuitReceived);
-}
-
-
-UINT CDirectoryChangeWatcher::MonitorDirectoryChanges(LPVOID lpvThis)
-/********************************************
- The worker thread function which monitors directory changes....
-********************************************/
-{
- DWORD numBytes;
-
- CDirWatchInfo * pdi;
- LPOVERLAPPED lpOverlapped;
-
- CDirectoryChangeWatcher * pThis = reinterpret_cast<CDirectoryChangeWatcher*>(lpvThis);
- ASSERT( pThis );
-
- pThis->On_ThreadInitialize();
-
-
- do
- {
- // Retrieve the directory info for this directory
- // through the io port's completion key
- if( !GetQueuedCompletionStatus( pThis->m_hCompPort,
- &numBytes,
- (LPDWORD) &pdi,//<-- completion Key
- &lpOverlapped,
- INFINITE) )
- {//The io completion request failed...
- //probably because the handle to the directory that
- //was used in a call to ReadDirectoryChangesW has been closed.
-
- //
- // calling pdi->CloseDirectoryHandle() will cause GetQueuedCompletionStatus() to return false.
- //
- //
- if( !pdi
- || ( pdi && AfxIsValidAddress(pdi, sizeof(CDirectoryChangeWatcher::CDirWatchInfo)))
- && pdi->m_hDir != INVALID_HANDLE_VALUE //the directory handle is still open! (we expect this when after we close the directory handle )
- )
- {
-#ifdef _DEBUG
- TRACE(_T("GetQueuedCompletionStatus() returned FALSE\nGetLastError(): %d Completion Key: %p lpOverlapped: %p\n"), GetLastError(), pdi, lpOverlapped);
- MessageBeep( static_cast<UINT>(-1) );
-#endif
- }
- }
-
- if ( pdi )//pdi will be null if I call PostQueuedCompletionStatus(m_hCompPort, 0,0,NULL);
- {
- //
- // The following check to AfxIsValidAddress() should go off in the case
- // that I have deleted this CDirWatchInfo object, but it was still in
- // "in the Queue" of the i/o completion port from a previous overlapped operation.
- //
- ASSERT( AfxIsValidAddress(pdi,
- sizeof(CDirectoryChangeWatcher::CDirWatchInfo)) );
- /***********************************
- The CDirWatchInfo::m_RunningState is pretty much the only member
- of CDirWatchInfo that can be modified from the other thread.
- The functions StartMonitor() and UnwatchDirecotry() are the functions that
- can modify that variable.
-
- So that I'm sure that I'm getting the right value,
- I'm using a critical section to guard against another thread modyfying it when I want
- to read it...
-
- ************************************/
- bool bObjectShouldBeOk = true;
- try{
- VERIFY( pdi->LockProperties() );//don't give the main thread a chance to change this object
- }
- catch(...){
- //any sort of exception here indicates I've
- //got a hosed object.
- TRACE(_T("CDirectoryChangeWatcher::MonitorDirectoryChanges() -- pdi->LockProperties() raised an exception!\n"));
- bObjectShouldBeOk = false;
- }
- if( bObjectShouldBeOk )
- {
- //while we're working with this object...
-
- CDirWatchInfo::eRunningState Run_State = pdi->m_RunningState ;
-
- VERIFY( pdi->UnlockProperties() );//let another thread back at the properties...
- /***********************************
- Unlock it so that there isn't a DEADLOCK if
- somebody tries to call a function which will
- cause CDirWatchInfo::UnwatchDirectory() to be called
- from within the context of this thread (eg: a function called because of
- the handler for one of the CDirectoryChangeHandler::On_Filexxx() functions)
-
- ************************************/
-
- ASSERT( pdi->GetChangeHandler() );
- switch( Run_State )
- {
- case CDirWatchInfo::RUNNING_STATE_START_MONITORING:
- {
- //Issue the initial call to ReadDirectoryChangesW()
-
- if( !ReadDirectoryChangesW( pdi->m_hDir,
- pdi->m_Buffer,//<--FILE_NOTIFY_INFORMATION records are put into this buffer
- READ_DIR_CHANGE_BUFFER_SIZE,
- pdi->m_bWatchSubDir,
- pdi->m_dwChangeFilter,
- &pdi->m_dwBufLength,//this var not set when using asynchronous mechanisms...
- &pdi->m_Overlapped,
- NULL) )//no completion routine!
- {
- pdi->m_dwReadDirError = GetLastError();
- if( pdi->GetChangeHandler() )
- pdi->GetChangeHandler()->On_WatchStarted(pdi->m_dwReadDirError, pdi->m_strDirName);
- }
- else
- {//read directory changes was successful!
- //allow it to run normally
- pdi->m_RunningState = CDirWatchInfo::RUNNING_STATE_NORMAL;
- pdi->m_dwReadDirError = ERROR_SUCCESS;
- if( pdi->GetChangeHandler() )
- pdi->GetChangeHandler()->On_WatchStarted(ERROR_SUCCESS, pdi->m_strDirName );
- }
- pdi->m_StartStopEvent.SetEvent();//signall that the ReadDirectoryChangesW has been called
- //check CDirWatchInfo::m_dwReadDirError to see whether or not ReadDirectoryChangesW succeeded...
-
- //
- // note that pdi->m_dwReadDirError is the value returned by WatchDirectory()
- //
-
-
- }break;
- case CDirWatchInfo::RUNNING_STATE_STOP:
- {
- //We want to shut down the monitoring of the directory
- //that pdi is managing...
-
- if( pdi->m_hDir != INVALID_HANDLE_VALUE )
- {
- //Since I've previously called ReadDirectoryChangesW() asynchronously, I am waiting
- //for it to return via GetQueuedCompletionStatus(). When I close the
- //handle that ReadDirectoryChangesW() is waiting on, it will
- //cause GetQueuedCompletionStatus() to return again with this pdi object....
- // Close the handle, and then wait for the call to GetQueuedCompletionStatus()
- //to return again by breaking out of the switch, and letting GetQueuedCompletionStatus()
- //get called again
- pdi->CloseDirectoryHandle();
- pdi->m_RunningState = CDirWatchInfo::RUNNING_STATE_STOP_STEP2;//back up step...GetQueuedCompletionStatus() will still need to return from the last time that ReadDirectoryChangesW() was called.....
-
- //
- // The watch has been stopped, tell the client about it
- // if( pdi->GetChangeHandler() )
- pdi->GetChangeHandler()->On_WatchStopped( pdi->m_strDirName );
- }
- else
- {
- //either we weren't watching this direcotry in the first place,
- //or we've already stopped monitoring it....
- pdi->m_StartStopEvent.SetEvent();//set the event that ReadDirectoryChangesW has returned and no further calls to it will be made...
- }
-
-
- }break;
- case CDirWatchInfo::RUNNING_STATE_STOP_STEP2:
- {
-
- //GetQueuedCompletionStatus() has returned from the last
- //time that ReadDirectoryChangesW was called...
- //Using CloseHandle() on the directory handle used by
- //ReadDirectoryChangesW will cause it to return via GetQueuedCompletionStatus()....
- if( pdi->m_hDir == INVALID_HANDLE_VALUE )
- pdi->m_StartStopEvent.SetEvent();//signal that no further calls to ReadDirectoryChangesW will be made
- //and this pdi can be deleted
- else
- {//for some reason, the handle is still open..
-
- pdi->CloseDirectoryHandle();
-
- //wait for GetQueuedCompletionStatus() to return this pdi object again
-
-
- }
-
- }break;
-
- case CDirWatchInfo::RUNNING_STATE_NORMAL:
- {
-
- if( pdi->GetChangeHandler() )
- pdi->GetChangeHandler()->SetChangedDirectoryName( pdi->m_strDirName );
-
- DWORD dwReadBuffer_Offset = 0UL;
-
- //process the FILE_NOTIFY_INFORMATION records:
- CFileNotifyInformation notify_info( (LPBYTE)pdi->m_Buffer, READ_DIR_CHANGE_BUFFER_SIZE);
-
- pThis->ProcessChangeNotifications(notify_info, pdi, dwReadBuffer_Offset);
-
-
- // Changes have been processed,
- // Reissue the watch command
- //
- if( !ReadDirectoryChangesW( pdi->m_hDir,
- pdi->m_Buffer + dwReadBuffer_Offset,//<--FILE_NOTIFY_INFORMATION records are put into this buffer
- READ_DIR_CHANGE_BUFFER_SIZE - dwReadBuffer_Offset,
- pdi->m_bWatchSubDir,
- pdi->m_dwChangeFilter,
- &pdi->m_dwBufLength,//this var not set when using asynchronous mechanisms...
- &pdi->m_Overlapped,
- NULL) )//no completion routine!
- {
- //
- // NOTE:
- // In this case the thread will not wake up for
- // this pdi object because it is no longer associated w/
- // the I/O completion port...there will be no more outstanding calls to ReadDirectoryChangesW
- // so I have to skip the normal shutdown routines(normal being what happens when CDirectoryChangeWatcher::UnwatchDirectory() is called.
- // and close this up, & cause it to be freed.
- //
- TRACE(_T("WARNING: ReadDirectoryChangesW has failed during normal operations...failed on directory: %s\n"), pdi->m_strDirName);
-
- ASSERT( pThis );
- //
- // To help insure that this has been unwatched by the time
- // the main thread processes the On_ReadDirectoryChangesError() notification
- // bump the thread priority up temporarily. The reason this works is because the notification
- // is really posted to another thread's message queue,...by setting this thread's priority
- // to highest, this thread will get to shutdown the watch by the time the other thread has a chance
- // to handle it. *note* not technically guaranteed 100% to be the case, but in practice it'll work.
- int nOldThreadPriority = GetThreadPriority( GetCurrentThread() );
- SetThreadPriority(GetCurrentThread(), THREAD_PRIORITY_HIGHEST);
-
- //
- // Notify the client object....(a CDirectoryChangeHandler derived class)
- //
- try{
- pdi->m_dwReadDirError = GetLastError();
- pdi->GetChangeHandler()->On_ReadDirectoryChangesError( pdi->m_dwReadDirError, pdi->m_strDirName );
-
-
- //Do the shutdown
- pThis->UnwatchDirectoryBecauseOfError( pdi );
- //pdi = NULL; <-- DO NOT set this to NULL, it will cause this worker thread to exit.
- //pdi is INVALID at this point!!
- }
- catch(...)
- {
- //just in case of exception, this thread will be set back to
- //normal priority.
- }
- //
- // Set the thread priority back to normal.
- //
- SetThreadPriority(GetCurrentThread(), nOldThreadPriority);
-
- }
- else
- {//success, continue as normal
- pdi->m_dwReadDirError = ERROR_SUCCESS;
- }
- }break;
- default:
- TRACE(_T("MonitorDirectoryChanges() -- how did I get here?\n"));
- break;//how did I get here?
- }//end switch( pdi->m_RunningState )
-
-
-
- }//end if( bObjectShouldBeOk )
- }//end if( pdi )
- } while( pdi );
-
- pThis->On_ThreadExit();
- return 0; //thread is ending
-}
-
-void CDirectoryChangeWatcher::ProcessChangeNotifications(IN CFileNotifyInformation & notify_info,
- IN CDirectoryChangeWatcher::CDirWatchInfo * pdi,
- OUT DWORD & ref_dwReadBuffer_Offset//used in case ...see case for FILE_ACTION_RENAMED_OLD_NAME
- )
-/////////////////////////////////////////////////////////////
-//
-// Processes the change notifications and dispatches the handling of the
-// notifications to the CDirectoryChangeHandler object passed to WatchDirectory()
-//
-/////////////////////////////////////////////////////////////
-{
- //
- // Sanity check...
- // this function should only be called by the worker thread.
- //
- ASSERT( m_dwThreadID == GetCurrentThreadId() );
-
- // Validate parameters...
- //
- ASSERT( pdi );
- ASSERT( AfxIsValidAddress(pdi, sizeof(CDirectoryChangeWatcher::CDirWatchInfo) ) );
-
- if( !pdi || !AfxIsValidAddress(pdi, sizeof(CDirectoryChangeWatcher::CDirWatchInfo)) )
- {
- TRACE(_T("Invalid arguments to CDirectoryChangeWatcher::ProcessChangeNotifications() -- pdi is invalid!\n"));
- TRACE(_T("File: %s Line: %d"), _T( __FILE__ ), __LINE__ );
- return;
- }
-
-
-
- DWORD dwLastAction = 0;
- ref_dwReadBuffer_Offset = 0UL;
-
-
- CDirectoryChangeHandler * pChangeHandler = pdi->GetChangeHandler();
- //CDelayedDirectoryChangeHandler * pChangeHandler = pdi->GetChangeHandler();
- ASSERT( pChangeHandler );
- ASSERT( AfxIsValidAddress(pChangeHandler, sizeof(CDirectoryChangeHandler)) );
- //ASSERT( AfxIsValidAddress(pChangeHandler, sizeof(CDelayedDirectoryChangeHandler)) );
- if( !pChangeHandler )
- {
- TRACE(_T("CDirectoryChangeWatcher::ProcessChangeNotifications() Unable to continue, pdi->GetChangeHandler() returned NULL!\n"));
- TRACE(_T("File: %s Line: %d\n"), _T( __FILE__ ), __LINE__ );
- return;
- }
-
-
- //
- // go through and process the notifications contained in the
- // CFileChangeNotification object( CFileChangeNotification is a wrapper for the FILE_NOTIFY_INFORMATION structure
- // returned by ReadDirectoryChangesW)
- //
- do
- {
- //The FileName member of the FILE_NOTIFY_INFORMATION
- //structure contains the NAME of the file RELATIVE to the
- //directory that is being watched...
- //ie, if watching C:\Temp and the file C:\Temp\MyFile.txt is changed,
- //the file name will be "MyFile.txt"
- //If watching C:\Temp, AND you're also watching subdirectories
- //and the file C:\Temp\OtherFolder\MyOtherFile.txt is modified,
- //the file name will be "OtherFolder\MyOtherFile.txt
-
- //The CDirectoryChangeHandler::On_Filexxx() functions will receive the name of the file
- //which includes the full path to the directory being watched
-
-
- //
- // See what the change was
- //
-
- switch( notify_info.GetAction() )
- {
- case FILE_ACTION_ADDED: // a file was added!
-
- pChangeHandler->On_FileAdded( notify_info.GetFileNameWithPath( pdi->m_strDirName ) ); break;
-
- case FILE_ACTION_REMOVED: //a file was removed
-
- pChangeHandler->On_FileRemoved( notify_info.GetFileNameWithPath( pdi->m_strDirName ) ); break;
-
- case FILE_ACTION_MODIFIED:
- //a file was changed
- //pdi->m_pChangeHandler->On_FileModified( strLastFileName ); break;
- pChangeHandler->On_FileModified( notify_info.GetFileNameWithPath( pdi->m_strDirName ) ); break;
-
- case FILE_ACTION_RENAMED_OLD_NAME:
- {//a file name has changed, and this is the OLD name
- //This record is followed by another one w/
- //the action set to FILE_ACTION_RENAMED_NEW_NAME (contains the new name of the file
-
- CString strOldFileName = notify_info.GetFileNameWithPath( pdi->m_strDirName );
-
-
- if( notify_info.GetNextNotifyInformation() )
- {//there is another PFILE_NOTIFY_INFORMATION record following the one we're working on now...
- //it will be the record for the FILE_ACTION_RENAMED_NEW_NAME record
-
-
- ASSERT( notify_info.GetAction() == FILE_ACTION_RENAMED_NEW_NAME );//making sure that the next record after the OLD_NAME record is the NEW_NAME record
-
- //get the new file name
- CString strNewFileName = notify_info.GetFileNameWithPath( pdi->m_strDirName );
-
- pChangeHandler->On_FileNameChanged( strOldFileName, strNewFileName);
- }
- else
- {
- //this OLD_NAME was the last record returned by ReadDirectoryChangesW
- //I will have to call ReadDirectoryChangesW again so that I will get
- //the record for FILE_ACTION_RENAMED_NEW_NAME
-
- //Adjust an offset so that when I call ReadDirectoryChangesW again,
- //the FILE_NOTIFY_INFORMATION will be placed after
- //the record that we are currently working on.
-
- /***************
- Let's say that 200 files all had their names changed at about the same time
- There will be 400 FILE_NOTIFY_INFORMATION records (one for OLD_NAME and one for NEW_NAME for EACH file which had it's name changed)
- that ReadDirectoryChangesW will have to report to
- me. There might not be enough room in the buffer
- and the last record that we DID get was an OLD_NAME record,
- I will need to call ReadDirectoryChangesW again so that I will get the NEW_NAME
- record. This way I'll always have to strOldFileName and strNewFileName to pass
- to CDirectoryChangeHandler::On_FileRenamed().
-
- After ReadDirecotryChangesW has filled out our buffer with
- FILE_NOTIFY_INFORMATION records,
- our read buffer would look something like this:
- End Of Buffer
- |
- \-/
- |_________________________________________________________________________
- | |
- |file1 OLD name record|file1 NEW name record|...|fileX+1 OLD_name record| |(the record we want would be here, but we've ran out of room, so we adjust an offset and call ReadDirecotryChangesW again to get it)
- |_________________________________________________________________________|
-
- Since the record I need is still waiting to be returned to me,
- and I need the current 'OLD_NAME' record,
- I'm copying the current FILE_NOTIFY_INFORMATION record
- to the beginning of the buffer used by ReadDirectoryChangesW()
- and I adjust the offset into the read buffer so the the NEW_NAME record
- will be placed into the buffer after the OLD_NAME record now at the beginning of the buffer.
-
- Before we call ReadDirecotryChangesW again,
- modify the buffer to contain the current OLD_NAME record...
-
- |_______________________________________________________
- | |
- |fileX old name record(saved)|<this is now garbage>.....|
- |_______________________________________________________|
- /-\
- |
- Offset for Read
- Re-issue the watch command to get the rest of the records...
-
- ReadDirectoryChangesW(..., pBuffer + (an Offset),
-
- After GetQueuedCompletionStatus() returns,
- our buffer will look like this:
-
- |__________________________________________________________________________________________________________
- | |
- |fileX old name record(saved)|fileX new name record(the record we've been waiting for)| <other records>... |
- |__________________________________________________________________________________________________________|
-
- Then I'll be able to know that a file name was changed
- and I will have the OLD and the NEW name of the file to pass to CDirectoryChangeHandler::On_FileNameChanged
-
- ****************/
- //NOTE that this case has never happened to me in my testing
- //so I can only hope that the code works correctly.
- //It would be a good idea to set a breakpoint on this line of code:
- VERIFY( notify_info.CopyCurrentRecordToBeginningOfBuffer( ref_dwReadBuffer_Offset ) );
-
-
- }
- break;
- }
- case FILE_ACTION_RENAMED_NEW_NAME:
- {
- //This should have been handled in FILE_ACTION_RENAMED_OLD_NAME
- ASSERT( dwLastAction == FILE_ACTION_RENAMED_OLD_NAME );
- ASSERT( FALSE );//this shouldn't get here
- }
-
- default:
- TRACE(_T("CDirectoryChangeWatcher::ProcessChangeNotifications() -- unknown FILE_ACTION_ value! : %d\n"), notify_info.GetAction() );
- break;//unknown action
- }
-
- dwLastAction = notify_info.GetAction();
-
-
- } while( notify_info.GetNextNotifyInformation() );
-} \ No newline at end of file
diff --git a/Bus/IvyFileMon/DirectoryChanges.h b/Bus/IvyFileMon/DirectoryChanges.h
deleted file mode 100644
index b2e41c3..0000000
--- a/Bus/IvyFileMon/DirectoryChanges.h
+++ /dev/null
@@ -1,493 +0,0 @@
-// DirectoryChanges.h: interface for the
-// CDirectoryChangeWatcher and CDirectoryChangeHandler classes.
-//
-// Uses an io completion port and ReadDirectoryChangesW -- this code will only work on
-// Windows NT/2000/XP.
-//
-// The directory being watched must be a directory on a Windows NT/2000/XP machine
-//
-//
-// These classes are based on the FWatch sample program in the SDK.
-//
-//
-// If you get a compile time error that ReadDirectoryChangesW is an undeclared identifier,
-// you'll need to #define _WIN32_WINNT 0x400 in stdafx.h.
-//
-//
-/*******************************************************************
-// *** COPYRIGHT NOTICE ****
-//
-// Copyright 2001. Wes Jones (wesj@hotmail.com)
-//
-// This code is free for use under the following conditions:
-//
-// You may not claim authorship of this code.
-// You may not sell or distrubute this code without author's permission.
-// You are not permitted to sell this code in it's compiled, non-compiled, executable, or any other form.
-// Executable code excepted in the case that it is not sold separately from an application which
-// uses this it. This means you can use this code for your applications as you see fit, but this code may not be sold in any form
-// to others for use in their applications.
-// This copyright notice may not be removed.
-//
-//
-// If this code was NOT obtained by downloading it from www.codeproject.com,
-// or given to you by a friend or coworker, please tell me, & let me know how you got it. There a plenty of lazy bastards that
-// collect source code from the internet, and then sell it as part of
-// a 'Programmer's Library'. Using this code for such a purpose is stricly prohibited.
-//
-// If you'd like to pay me to turn this into an ActiveX/COM object so you
-// can use it in a Visual Basic application, feel free to contact me with an offer,
-// and I will create it for you. Otherwise, here is the source code, and you may make your own
-// ActiveX/COM object, providing that it is not sold separately.
-//
-// No guarantees or warranties are expressed or implied.
-// This code may contain bugs.
-// Warning: May contain matter. If this should come into contact with anti-matter, a violent explosion may occur.
-*******************************************************************/
-
-// Please let me know of any bugs, bug fixes, or enhancements made to this code.
-// If you have ideas for this, and/or tips or admonitions, I would be glad to hear them.
-//
-// See notes at top of DirectoryChanges.cpp modification history and more info.
-//
-//
-//////////////////////////////////////////////////////////////////////
-
-#if !defined(AFX_DIRECTORYCHANGES_H__02E53FDE_CB22_4176_B6D7_DA3675D9F1A6__INCLUDED_)
-#define AFX_DIRECTORYCHANGES_H__02E53FDE_CB22_4176_B6D7_DA3675D9F1A6__INCLUDED_
-
-#if _MSC_VER > 1000
-#pragma once
-#endif // _MSC_VER > 1000
-
-#include <afxmt.h>
-#include <afxtempl.h>
-
-#define READ_DIR_CHANGE_BUFFER_SIZE 4096
-
-class CFileNotifyInformation;//helper class
-class CDirectoryChangeWatcher;
-class CDelayedDirectoryChangeHandler;//helper class...used in implementation
-
-class CDirectoryChangeHandler
-/***********************************
- A class to handle changes to files in a directory.
- The virtual On_Filexxx() functions are called whenever changes are made to a watched directory that is being handled by this object...
- The On_Filexxx() functions execute in the context of the main thread if true is passed to the constructor of CDirectoryChangeWatcher,
- OR they fire in the context of a worker thread if false is passed to the constructor of CDirectoryChangeWatcher
-
- NOTES:
- A CDirectoryChangeHandler can only be used by ONE CDirectoryChangeWatcher object,
- but a CDirectoryChangeWatcher object may use multiple CDirectoryChangeHandler objects.
-
- When this object is destroyed, whatever directories that it was being used to handle directory changes for
- will automatically be 'unwatched'.
-
- The class is reference counted. The reference count is increased every time it is used
- in a (successfull) call to CDirectoryChangeWatcher::WatchDirectory() and is decremented whenever
- the directory becomes 'unwatched'.
-
- The only notifications are File Added, Removed, Modified, and Renamed.
- Even though the CDirectoryChangeWatcher::WatchDirectory (which'll call ReadDirectoryChangesW()) function allows you to specify flags
- to watch for changes to last access time, last write time, attributes changed, etc,
- these changes all map out to On_FileModified() which doesn't specify the type of modification.
-
-
- NOTE: The CDirectoryChangeHandler::On_Filexxx() functions
- are called in the context of the main thread, the thread that called CDirectoryChangeWatcher::WatchDirectory(),
- if you pass true to the constructor of CDirectoryChangeWatcher. This is accomplished via a hidden window,
- and REQUIRES that your app has a message pump.
- For console applications, or applications w/out a message pump, you can pass false to the constructor
- of CDirectoryChangeWatcher, and these notifications will fire in the context of a worker thread. By passing false
- to the constructor of CDirectoryChangeWatcher, you do NOT NEED a message pump in your application.
-
-
-
-************************************/
-{
-public:
-
- CDirectoryChangeHandler();
- virtual ~CDirectoryChangeHandler();
-
- //this class is reference counted
- long AddRef();
- long Release();
- long CurRefCnt()const;
-
-
- BOOL UnwatchDirectory();//causes CDirectoryChangeWatcher::UnwatchDirectory() to be called.
-
- const CString & GetChangedDirectoryName() const { return m_strChangedDirectoryName;}//WARNING: don't use this, this function will be removed in a future release.
- //returns the directory name where the change occured. This contains
- //the last directory to have changed if the same CDirectoryChangeHandler is
- //being used to watch multiple directories. It will return an empty string
- //if no changes have been made to a directory yet. It will always be the
- //name of the currently changed directory(as specified in CDirectoryChangeWatcher::WatchDirectory())
- //if called in the context of one of the
- //On_Filexxx() functions.
-protected:
- //
- // Override these functions:
- // These functions are called when the directory to watch has had a change made to it
- virtual void On_FileAdded(const CString & strFileName); //=0;
- //
- // On_FileAdded()
- //
- // This function is called when a file in one of the watched folders(or subfolders)
- // has been created.
- //
- // For this function to execute you'll need to specify FILE_NOTIFY_CHANGE_FILE_NAME or FILE_NOTIFY_CHANGE_DIR_NAME(for directories)
- // when you call CDirectoryChangeWatcher::WatchDirectory()
- //
- virtual void On_FileRemoved(const CString & strFileName);// = 0;
- //
- // On_FileRemoved()
- //
- // This function is called when a file in one of the watched folders(or subfolders)
- // has been deleted(or moved to another directory)
- //
- // For this function to execute you'll need to specify FILE_NOTIFY_CHANGE_FILE_NAME or FILE_NOTIFY_CHANGE_DIR_NAME(for directories)
- // when you call CDirectoryChangeWatcher::WatchDirecotry()
- //
-
- virtual void On_FileNameChanged(const CString & strOldFileName, const CString & strNewFileName);// = 0;
- //
- // On_FileNameChanged()
- //
- // This function is called when a file in one of the watched folders(or subfolders)
- // has been renamed.
- //
- //
- // You'll need to specify FILE_NOTIFY_CHANGE_FILE_NAME (or FILE_NOTIFY_CHANGE_DIR_NAME(for directories))
- // when you call CDirectoryChangeWatcher::WatchDirectory()
- //
- //
-
- virtual void On_FileModified(const CString & strFileName);// = 0;
- //
- // On_FileModified()
- //
- // This function is called whenever an attribute specified by the watch
- // filter has changed on a file in the watched directory or
- //
- // Specify any of the following flags when you call CDirectoryChangeWatcher::WatchDirectory()
- //
- //
- // FILE_NOTIFY_CHANGE_ATTRIBUTES
- // FILE_NOTIFY_CHANGE_SIZE
- // FILE_NOTIFY_CHANGE_LAST_WRITE
- // FILE_NOTIFY_CHANGE_LAST_ACCESS
- // FILE_NOTIFY_CHANGE_CREATION (* See Note # 1* )
- // FILE_NOTIFY_CHANGE_SECURITY
- //
- //
- // General Note) Windows tries to optimize some of these notifications. You may not get
- // a notification every single time a file is accessed for example.
- // There's a MS KB article or something on this(sorry forgot which one).
- //
- // Note #1 ) This notification isn't what you might think(FILE_NOTIFY_CHANGE_CREATION).
- // See the help files for ReadDirectoryChangesW...
- // This notifies you of a change to the file's
- // creation time, not when the file is created.
- // Use FILE_NOTIFY_CHANGE_FILE_NAME to know about newly created files.
- //
-
- virtual void On_ReadDirectoryChangesError(DWORD dwError, const CString & strDirectoryName);
- //
- // On_ReadDirectoryChangesError()
- //
- // This function is called when ReadDirectoryChangesW() fails during normal
- // operation (ie: some time after you've called CDirectoryChangeWatcher::WatchDirectory())
- //
- //
- // NOTE: *** READ THIS *** READ THIS *** READ THIS *** READ THIS ***
- //
- // NOTE: If this function has been called, the watched directory has been automatically unwatched.
- // You will not receive any further notifications for that directory until
- // you call CDirectoryChangeWatcher::WatchDirectory() again.
- //
- // On_WatchStopped() will not be called.
-
-
- virtual void On_WatchStarted(DWORD dwError, const CString & strDirectoryName);
- //
- // void On_WatchStarted()
- //
- // This function is called when a directory watch has begun.
- // It will be called whether CDirectoryChangeWatcher::WatchDirectory() is successful or not. Check the dwError parameter.
- //
- // PARAMETERS:
- // DWORD dwError -- 0 if successful, else it's the return value of GetLastError()
- // indicating why the watch failed.
- // const CString & strDirectoryName -- The full path and name of the directory being watched.
-
- virtual void On_WatchStopped(const CString & strDirectoryName);
- //
- // void On_WatchStopped()
- //
- // This function is called when a directory is unwatched (except on the case of the direcotry being unwatched due to an error)
- //
- // WARNING: *** READ THIS *** READ THIS *** READ THIS *** READ THIS ***
- //
- // This function MAY be called before the destructor of CDirectoryChangeWatcher
- // finishes.
- //
- // Be careful if your implementation of this fuction
- // interacts with some sort of a window handle or other object(a class, a file, etc.).
- // It's possible that that object/window handle will NOT be valid anymore the very last time
- // that On_WatchStopped() is called.
- // This scenario is likely if the CDirectoryChangeWatcher instance is currently watching a
- // directory, and it's destructor is called some time AFTER these objects/windows
- // your change handler interacts with have been destroyed.
- //
- // If your CDirectoryChangeHandler derived class interacts w/ a window or other
- // object, it's a good idea to unwatch any directories before the object/window is destroyed.
- // Otherwise, place tests for valid objects/windows in the implementation of this function.
- //
- // Failure to follow either tip can result in a mysterious RTFM error, or a 'Run time errors'
- //
-
- virtual bool On_FilterNotification(DWORD dwNotifyAction, LPCTSTR szFileName, LPCTSTR szNewFileName);
- //
- // bool On_FilterNotification(DWORD dwNotifyAction, LPCTSTR szFileName, LPCTSTR szNewFileName);
- //
- // This function gives your class a chance to filter unwanted notifications.
- //
- // PARAMETERS:
- // DWORD dwNotifyAction -- specifies the event to filter
- // LPCTSTR szFileName -- specifies the name of the file for the event.
- // LPCTSTR szNewFileName -- specifies the new file name of a file that has been renamed.
- //
- // ** szFileName and szNewFileName will always be the full path and file name with extention.
- //
- // RETURN VALUE:
- // return true , and you will receive the notification.
- // return false, and your class will NOT receive the notification.
- //
- // Valid values of dwNotifyAction:
- // FILE_ACTION_ADDED -- On_FileAdded() is about to be called.
- // FILE_ACTION_REMOVED -- On_FileRemoved() is about to be called.
- // FILE_ACTION_MODIFIED -- On_FileModified() is about to be called.
- // FILE_ACTION_RENAMED_OLD_NAME-- On_FileNameChanged() is about to be call.
- //
- //
- // NOTE: When the value of dwNotifyAction is FILE_ACTION_RENAMED_OLD_NAME,
- // szFileName will be the old name of the file, and szNewFileName will
- // be the new name of the renamed file.
- //
- // The default implementation always returns true, indicating that all notifications will
- // be sent.
- //
- // NOTE: This function may or may not be called depending upon the flags you specify to control
- // filter behavior.
- // If you are specifying filters when watching the directory, you will not get this notification
- // if the file name does not pass the filter test, even if this function returns true.
- //
-
- //
- //
- // End Override these functions (ie: don't worry about the rest of this class)
- //
-
- void SetChangedDirectoryName(const CString & strChangedDirName);//please don't use this function, it will be removed in future releases.
-
-private:
- long m_nRefCnt;
-
- CString m_strChangedDirectoryName;//will be removed in a future release.
-
- friend class CDirectoryChangeWatcher;
- friend class CDelayedDirectoryChangeHandler;
- //
- // This class keeps a reference to the CDirectoryChangeHandler
- // that was used when an object of this type is passed
- // to CDirectoryChangeWatcher::WatchDirectory().
- //
- // This way, when the CDirectoryChangeWatcher object is destroyed(or if CDirectoryChangeHandler::UnwatchDirectory() is called)
- // AFTER CDirectoryChangeWatcher::UnwatchDirecotry() or CDirectoryChangeWatcher::UnwatchAllDirectories() is called
- // the directory(or direcotries) that this
- // CDirectoryChangeWatcher object is handling will be automatically unwatched
- // If the CDirectoryChangeWatcher object is destroyed before the CDirectoryChangeHandler objects
- // that are being used with that watcher are destroyed, the reference counting prevents
- // this class from referencing a destructed object.
- // Basically, neither class needs to worry about the lifetime of the other(CDirectoryChangeWatcher && CDirectoryChangeHandler)
- //
-
- long ReferencesWatcher(CDirectoryChangeWatcher * pDirChangeWatcher);
- long ReleaseReferenceToWatcher(CDirectoryChangeWatcher * pDirChangeWatcher);
- CDirectoryChangeWatcher * m_pDirChangeWatcher;
- long m_nWatcherRefCnt; //<-- when this reaches 0, m_pDirChangeWatcher is set to NULL
- CCriticalSection m_csWatcher;
-};
-
-///////////////////////////////////////////////////////////
-
-class CDirectoryChangeWatcher
-/***************************************
- A class to monitor a directory for changes made to files in it, or it's subfolders.
- The class CDirectoryChangeHandler handles the changes. You derive a class from CDirectoryChangeHandler to handle them.
-
-
- This class uses the Win32 API ReadDirectoryChangesW() to watch a directory for file changes.
-
- Multiple directories can be watched simultaneously using a single instance of CDirectoryChangeWatcher.
- Single or multiple instances of CDirectoryChangeHandler object(s) can be used to handle changes to watched directories.
- Directories can be added and removed from the watch dynamically at run time without destroying
- the CDirectoryChangeWatcher object (or CDirectoryChangeHandler object(s).
-
- This class uses a worker thread, an io completion port, and ReadDirectoryChangesW() to monitor changes to a direcory (or subdirectories).
- There will always only be a single thread no matter how many directories are being watched(per instance of CDirectoryChangeHandler)
-
- THREAD ISSUES:
- This class uses worker threads.
- Notifications (calling CDirectoryChangeHandler's virtual functions) are executed
- in the context of either the main thread, OR in a worker thread.
-
- The 'main' thread is the thread that first calls CDirectoryChangeWatcher::WatchDirectory().
- For notifications to execute in the main thread, it's required that the calling thread(usually the main thread)
- has a message pump in order to process the notifications.
-
- For applications w/out a message pump, notifications are executed in the context of a worker thread.
-
- See the constructor for CDirectoryChangeWatcher.
-
-
-****************************************/
-{
-public:
-
- enum { //options for determining the behavior of the filter tests.
- //
- FILTERS_DONT_USE_FILTERS = 1, //never test the include/exclude filters. CDirectoryChangeHandler::On_FilterNotification() is still called.
- FILTERS_CHECK_FULL_PATH = 2, //For the file path: "C:\FolderName\SubFolder\FileName.xyz", the entire path is checked for the filter pattern.
- FILTERS_CHECK_PARTIAL_PATH = 4, //For the file path: "C:\FolderName\SubFolder\FileName.xyz", only "SubFolder\FileName.xyz" is checked against the filter pattern, provided that you are watching the folder "C:\FolderName", and you are also watching subfolders.
- FILTERS_CHECK_FILE_NAME_ONLY = 8, //For the file path: "C:\FolderName\SubFolder\FileName.xyz", only "FileName.xyz" is checked against the filter pattern.
- FILTERS_TEST_HANDLER_FIRST = 16, //test CDirectoryChangeHandler::On_FilterNotification() before checking the include/exclude filters. the default is to check the include/exclude filters first.
- FILTERS_DONT_USE_HANDLER_FILTER = 32, //CDirectoryChangeHander::On_FilterNotification() won't be called.
- FILTERS_NO_WATCHSTART_NOTIFICATION = 64,//CDirectoryChangeHander::On_WatchStarted() won't be called.
- FILTERS_NO_WATCHSTOP_NOTIFICATION = 128,//CDirectoryChangeHander::On_WatchStopped() won't be called.
- FILTERS_DEFAULT_BEHAVIOR = (FILTERS_CHECK_FILE_NAME_ONLY ),
- FILTERS_DONT_USE_ANY_FILTER_TESTS = (FILTERS_DONT_USE_FILTERS | FILTERS_DONT_USE_HANDLER_FILTER),
- FILTERS_NO_WATCH_STARTSTOP_NOTIFICATION = (FILTERS_NO_WATCHSTART_NOTIFICATION | FILTERS_NO_WATCHSTOP_NOTIFICATION)
- };
-
- //ctor/dtor
- CDirectoryChangeWatcher(bool bAppHasGUI = true, DWORD dwFilterFlags = FILTERS_DEFAULT_BEHAVIOR);//see comments in ctor .cpp file.
- virtual ~CDirectoryChangeWatcher();
-
- //
- // Starts a watch on a directory:
- //
- DWORD WatchDirectory(const CString & strDirToWatch,
- DWORD dwChangesToWatchFor,
- CDirectoryChangeHandler * pChangeHandler,
- BOOL bWatchSubDirs = FALSE,
- LPCTSTR szIncludeFilter = NULL,
- LPCTSTR szExcludeFilter = NULL);
-
- BOOL IsWatchingDirectory (const CString & strDirName)const;
- int NumWatchedDirectories()const; //counts # of directories being watched.
-
-
- BOOL UnwatchDirectory(const CString & strDirToStopWatching);//stops watching specified directory.
- BOOL UnwatchAllDirectories();//stops watching ALL watched directories.
-
- DWORD SetFilterFlags(DWORD dwFilterFlags);//sets filter behavior for directories watched AFTER this function has been called.
- DWORD GetFilterFlags()const{return m_dwFilterFlags;}
-
-protected:
-
- virtual void On_ThreadInitialize(){}//All file change notifications has taken place in the context of a worker thread...do any thread initialization here..
- virtual void On_ThreadExit(){}//do thread cleanup here
-
-private:
- friend class CDirectoryChangeHandler;
- BOOL UnwatchDirectory(CDirectoryChangeHandler * pChangeHandler);//called in CDirectoryChangeHandler::~CDirectoryChangeHandler()
-
-
- UINT static MonitorDirectoryChanges(LPVOID lpvThis );//the worker thread that monitors directories.
-
- class CDirWatchInfo
- //this class is used internally by CDirectoryChangeWatcher
- //to help manage the watched directories
- {
- private:
- CDirWatchInfo(); //private & not implemented
- CDirWatchInfo & operator=(const CDirWatchInfo & rhs);//so that they're aren't accidentally used. -- you'll get a linker error
- public:
- CDirWatchInfo(HANDLE hDir, const CString & strDirectoryName,
- CDirectoryChangeHandler * pChangeHandler,
- DWORD dwChangeFilter, BOOL bWatchSubDir,
- bool bAppHasGUI,
- LPCTSTR szIncludeFilter,
- LPCTSTR szExcludeFilter,
- DWORD dwFilterFlags);
- private:
- ~CDirWatchInfo( );//only I can delete myself....use DeleteSelf()
- public:
- void DeleteSelf(CDirectoryChangeWatcher * pWatcher);
-
- DWORD StartMonitor(HANDLE hCompPort);
- BOOL UnwatchDirectory( HANDLE hCompPort );
- protected:
- BOOL SignalShutdown( HANDLE hCompPort );
- BOOL WaitForShutdown();
- public:
- BOOL LockProperties() { return m_cs.Lock(); }
- BOOL UnlockProperties(){ return m_cs.Unlock(); }
-
- CDelayedDirectoryChangeHandler* GetChangeHandler() const;
- CDirectoryChangeHandler * GetRealChangeHandler() const;//the 'real' change handler is your CDirectoryChangeHandler derived class.
- CDirectoryChangeHandler * SetRealDirectoryChangeHandler(CDirectoryChangeHandler * pChangeHandler);
-
- BOOL CloseDirectoryHandle();
-
- //CDirectoryChangeHandler * m_pChangeHandler;
- CDelayedDirectoryChangeHandler * m_pChangeHandler;
- HANDLE m_hDir;//handle to directory that we're watching
- DWORD m_dwChangeFilter;
- BOOL m_bWatchSubDir;
- CString m_strDirName;//name of the directory that we're watching
- CHAR m_Buffer[ READ_DIR_CHANGE_BUFFER_SIZE ];//buffer for ReadDirectoryChangesW
- DWORD m_dwBufLength;//length or returned data from ReadDirectoryChangesW -- ignored?...
- OVERLAPPED m_Overlapped;
- DWORD m_dwReadDirError;//indicates the success of the call to ReadDirectoryChanges()
- CCriticalSection m_cs;
- CEvent m_StartStopEvent;
- enum eRunningState{
- RUNNING_STATE_NOT_SET, RUNNING_STATE_START_MONITORING, RUNNING_STATE_STOP, RUNNING_STATE_STOP_STEP2,
- RUNNING_STATE_STOPPED, RUNNING_STATE_NORMAL
- };
- eRunningState m_RunningState;
- };//end nested class CDirWatchInfo
-
- void ProcessChangeNotifications(IN CFileNotifyInformation & notify_info,
- IN CDirWatchInfo * pdi,
- OUT DWORD & ref_dwReadBuffer_Offset);
- friend class CDirWatchInfo;//so that CDirWatchInfo can call the following function.
- long ReleaseReferenceToWatcher(CDirectoryChangeHandler * pChangeHandler);
-
- BOOL UnwatchDirectoryBecauseOfError(CDirWatchInfo * pWatchInfo);//called in case of error.
- int AddToWatchInfo(CDirWatchInfo * pWatchInfo);
- //
- // functions for retrieving the directory watch info based on different parameters
- //
- CDirWatchInfo * GetDirWatchInfo(IN const CString & strDirName, OUT int & ref_nIdx)const;
- CDirWatchInfo * GetDirWatchInfo(IN CDirWatchInfo * pWatchInfo, OUT int & ref_nIdx)const;
- CDirWatchInfo * GetDirWatchInfo(IN CDirectoryChangeHandler * pChangeHandler, OUT int & ref_nIdx)const;
-
-
- HANDLE m_hCompPort; //i/o completion port
- HANDLE m_hThread; //MonitorDirectoryChanges() thread handle
- DWORD m_dwThreadID;
- CTypedPtrArray<CPtrArray, CDirWatchInfo*> m_DirectoriesToWatch; //holds info about the directories that we're watching.
- CCriticalSection m_csDirWatchInfo;
-
- bool m_bAppHasGUI; //dispatch to main thread, or a worker thread?
- DWORD m_dwFilterFlags;//options for determining the behavior of the filter tests.
-
-};
-
-
-#endif // !defined(AFX_DIRECTORYCHANGES_H__02E53FDE_CB22_4176_B6D7_DA3675D9F1A6__INCLUDED_)
diff --git a/Bus/IvyFileMon/HistoryEdit.cpp b/Bus/IvyFileMon/HistoryEdit.cpp
deleted file mode 100644
index cdb1f0f..0000000
--- a/Bus/IvyFileMon/HistoryEdit.cpp
+++ /dev/null
@@ -1,82 +0,0 @@
-/*
- * HistoryEdit.cpp
- *
- * Description:
- * CHistoryEdit implementation
- *
- * A CEdit subclass that allows you to display a text history
- * of events.
- *
- * Author:
- * Ravi Bhavnani (ravib@datablast.net)
- *
- * Revision History:
- * 15 Mar 1998 rab Original version
- */
-
-#include "stdafx.h"
-#include "HistoryEdit.h"
-
-#ifdef _DEBUG
-#define new DEBUG_NEW
-#undef THIS_FILE
-static char THIS_FILE[] = __FILE__;
-#endif
-
-/////////////////////////////////////////////////////////////////////////////
-// CHistoryEdit
-
-CHistoryEdit::CHistoryEdit()
-{
- m_bSelectable = FALSE;
-}
-
-CHistoryEdit::~CHistoryEdit()
-{
-}
-
-BEGIN_MESSAGE_MAP(CHistoryEdit, CEdit)
- //{{AFX_MSG_MAP(CHistoryEdit)
- ON_WM_SETFOCUS()
- //}}AFX_MSG_MAP
-END_MESSAGE_MAP()
-
-/////////////////////////////////////////////////////////////////////////////
-// CHistoryEdit operations
-
-void CHistoryEdit::AppendString
- (CString str)
-//
-// Purpose:
-// Appends a text string to the history buffer.
-//
-// Returns:
-// None.
-//
-{
-CString strBuffer; // current contents of edit control
-
- // Append string
- GetWindowText (strBuffer);
- if (!strBuffer.IsEmpty())
- strBuffer += "\r\n";
- strBuffer += str;
- SetWindowText (strBuffer);
-
- // Scroll the edit control
- LineScroll (GetLineCount(), 0);
-}
-
-/////////////////////////////////////////////////////////////////////////////
-// CHistoryEdit message handlers
-
-void CHistoryEdit::OnSetFocus(CWnd* pOldWnd)
-{
- // Don't allow user to select text
- if (m_bSelectable)
- CEdit::OnSetFocus (pOldWnd);
- else
- pOldWnd->SetFocus();
-}
-
-// End EditHistroy.cpp \ No newline at end of file
diff --git a/Bus/IvyFileMon/HistoryEdit.h b/Bus/IvyFileMon/HistoryEdit.h
deleted file mode 100644
index 7e2a112..0000000
--- a/Bus/IvyFileMon/HistoryEdit.h
+++ /dev/null
@@ -1,65 +0,0 @@
-/*
- * HistoryEdit.h
- *
- * Description:
- * CHistoryEdit interface
- *
- * A CEdit subclass that allows you to display a scrolling history
- * of text entries.
- *
- * Author:
- * Ravi Bhavnani (ravib@datablast.net)
- *
- * Revision History:
- * 15 Mar 1998 rab Original version
- */
-
-#ifndef _HistoryEdit_h_
-#define _HistoryEdit_h_
-
-/////////////////////////////////////////////////////////////////////////////
-// CHistoryEdit window
-
-class CHistoryEdit : public CEdit
-{
-// Construction
-public:
- CHistoryEdit();
-
-// Attributes
-public:
-
-// Operations
-public:
- void AppendString (CString str);
- BOOL IsSelectable() { return m_bSelectable; }
- void AllowSelection (BOOL bAllowSelect) { m_bSelectable = bAllowSelect; }
-
-// Overrides
- // ClassWizard generated virtual function overrides
- //{{AFX_VIRTUAL(CHistoryEdit)
- //}}AFX_VIRTUAL
-
-// Implementation
-public:
- virtual ~CHistoryEdit();
-
- // Generated message map functions
-protected:
- //{{AFX_MSG(CHistoryEdit)
- afx_msg void OnSetFocus(CWnd* pOldWnd);
- //}}AFX_MSG
- DECLARE_MESSAGE_MAP()
-
-protected:
- BOOL m_bSelectable; // flag: user can select text in control
-};
-
-/////////////////////////////////////////////////////////////////////////////
-
-//{{AFX_INSERT_LOCATION}}
-// Microsoft Developer Studio will insert additional declarations immediately before the previous line.
-
-#endif
-
-// End HistoryEdit.h \ No newline at end of file
diff --git a/Bus/IvyFileMon/InstIvyFileMon/InstIvyFileMon.vdproj b/Bus/IvyFileMon/InstIvyFileMon/InstIvyFileMon.vdproj
deleted file mode 100644
index 5d95e1f..0000000
--- a/Bus/IvyFileMon/InstIvyFileMon/InstIvyFileMon.vdproj
+++ /dev/null
@@ -1,795 +0,0 @@
-"DeployProject"
-{
-"VSVersion" = "3:701"
-"ProjectType" = "8:{2C2AF0D9-9B47-4FE5-BEF2-169778172667}"
-"IsWebType" = "8:FALSE"
-"ProjectName" = "8:Install"
-"LanguageId" = "3:1036"
-"CodePage" = "3:1252"
-"UILanguageId" = "3:1036"
-"SccProjectName" = "8:\"$/Bus/IvyFileMon\", VTEAAAAA"
-"SccLocalPath" = "8:..\\.."
-"SccAuxPath" = "8:"
-"SccProvider" = "8:MSSCCI:Microsoft Visual SourceSafe"
- "Hierarchy"
- {
- "Entry"
- {
- "MsmKey" = "8:_0DD44A8F6530438CB2E0A50F1F80A210"
- "OwnerKey" = "8:_DB155C88AA6C4534BEF14067EEC6FB65"
- "MsmSig" = "8:_UNDEFINED"
- }
- "Entry"
- {
- "MsmKey" = "8:_0E19E1F4B469891E119B302278BD7676"
- "OwnerKey" = "8:_DB155C88AA6C4534BEF14067EEC6FB65"
- "MsmSig" = "8:_UNDEFINED"
- }
- "Entry"
- {
- "MsmKey" = "8:_1787477A582B41BDA52AEC8762B60240"
- "OwnerKey" = "8:_378194BEC0C642BBBEB8EBC7B0B33A4F"
- "MsmSig" = "8:_UNDEFINED"
- }
- "Entry"
- {
- "MsmKey" = "8:_378194BEC0C642BBBEB8EBC7B0B33A4F"
- "OwnerKey" = "8:_UNDEFINED"
- "MsmSig" = "8:_UNDEFINED"
- }
- "Entry"
- {
- "MsmKey" = "8:_7E184C689278442B851207163DF58EC0"
- "OwnerKey" = "8:_378194BEC0C642BBBEB8EBC7B0B33A4F"
- "MsmSig" = "8:_UNDEFINED"
- }
- "Entry"
- {
- "MsmKey" = "8:_7E184C689278442B851207163DF58EC0"
- "OwnerKey" = "8:_DB155C88AA6C4534BEF14067EEC6FB65"
- "MsmSig" = "8:_UNDEFINED"
- }
- "Entry"
- {
- "MsmKey" = "8:_DB155C88AA6C4534BEF14067EEC6FB65"
- "OwnerKey" = "8:_UNDEFINED"
- "MsmSig" = "8:_UNDEFINED"
- }
- }
- "Configurations"
- {
- "Debug"
- {
- "DisplayName" = "8:Debug"
- "IsDebugOnly" = "11:TRUE"
- "IsReleaseOnly" = "11:FALSE"
- "OutputFilename" = "8:Debug\\InstIvyFileMon.msi"
- "PackageFilesAs" = "3:2"
- "PackageFileSize" = "3:-2147483648"
- "CabType" = "3:1"
- "Compression" = "3:2"
- "SignOutput" = "11:FALSE"
- "CertificateFile" = "8:"
- "PrivateKeyFile" = "8:"
- "TimeStampServer" = "8:"
- "InstallerBootstrapper" = "3:1"
- }
- "Release"
- {
- "DisplayName" = "8:Release"
- "IsDebugOnly" = "11:FALSE"
- "IsReleaseOnly" = "11:TRUE"
- "OutputFilename" = "8:Release\\InstIvyFileMon.msi"
- "PackageFilesAs" = "3:2"
- "PackageFileSize" = "3:-2147483648"
- "CabType" = "3:1"
- "Compression" = "3:2"
- "SignOutput" = "11:FALSE"
- "CertificateFile" = "8:"
- "PrivateKeyFile" = "8:"
- "TimeStampServer" = "8:"
- "InstallerBootstrapper" = "3:1"
- }
- }
- "Deployable"
- {
- "CustomAction"
- {
- }
- "DefaultFeature"
- {
- "Name" = "8:DefaultFeature"
- "Title" = "8:"
- "Description" = "8:"
- }
- "ExternalPersistence"
- {
- "LaunchCondition"
- {
- }
- }
- "Feature"
- {
- }
- "File"
- {
- "{A582A373-4685-4296-BEFE-614B80A702C3}:_0E19E1F4B469891E119B302278BD7676"
- {
- "SourcePath" = "8:WSOCK32.dll"
- "TargetName" = "8:WSOCK32.dll"
- "Tag" = "8:"
- "Folder" = "8:_DDAA30AF8058479E808821672EB9DC2B"
- "Condition" = "8:"
- "Transitive" = "11:FALSE"
- "Vital" = "11:TRUE"
- "ReadOnly" = "11:FALSE"
- "Hidden" = "11:FALSE"
- "System" = "11:FALSE"
- "Permanent" = "11:FALSE"
- "SharedLegacy" = "11:FALSE"
- "PackageAs" = "3:1"
- "Register" = "3:1"
- "Exclude" = "11:TRUE"
- "IsDependency" = "11:TRUE"
- "IsolateTo" = "8:"
- }
- }
- "FileType"
- {
- }
- "Folder"
- {
- "{78BAF5CE-F2E5-45BE-83BC-DB6AF387E941}:_31436C2B3945454BA152271137CCAA39"
- {
- "Name" = "8:#1916"
- "AlwaysCreate" = "11:FALSE"
- "Condition" = "8:"
- "Transitive" = "11:FALSE"
- "Property" = "8:DesktopFolder"
- "Folders"
- {
- }
- }
- "{78BAF5CE-F2E5-45BE-83BC-DB6AF387E941}:_DC93F1DBB219414A9D02F4F54143F682"
- {
- "Name" = "8:#1919"
- "AlwaysCreate" = "11:FALSE"
- "Condition" = "8:"
- "Transitive" = "11:FALSE"
- "Property" = "8:ProgramMenuFolder"
- "Folders"
- {
- }
- }
- "{58C0ADA3-3CEA-43BD-A3B3-2EA121BC8217}:_DDAA30AF8058479E808821672EB9DC2B"
- {
- "DefaultLocation" = "8:[ProgramFilesFolder][Manufacturer]\\[ProductName]"
- "Name" = "8:#1925"
- "AlwaysCreate" = "11:FALSE"
- "Condition" = "8:"
- "Transitive" = "11:FALSE"
- "Property" = "8:TARGETDIR"
- "Folders"
- {
- }
- }
- }
- "LaunchCondition"
- {
- }
- "Locator"
- {
- }
- "MsiBootstrapper"
- {
- "LangId" = "3:1036"
- }
- "Product"
- {
- "Name" = "8:Microsoft Visual Studio"
- "ProductName" = "8:IvyFileMon"
- "ProductCode" = "8:{AF7B8270-4FA5-4FF6-A907-D256980F7F0B}"
- "PackageCode" = "8:{90EA5730-52C0-4E00-A799-573745C6C394}"
- "UpgradeCode" = "8:{AA7342E8-DA6F-4BC3-BCB3-0ED1B53336E5}"
- "RestartWWWService" = "11:FALSE"
- "RemovePreviousVersions" = "11:TRUE"
- "DetectNewerInstalledVersion" = "11:TRUE"
- "ProductVersion" = "8:1.0.0"
- "Manufacturer" = "8:CENA PII"
- "ARPHELPTELEPHONE" = "8:"
- "ARPHELPLINK" = "8:"
- "Title" = "8:IvyFileMon"
- "Subject" = "8:"
- "ARPCONTACT" = "8:CENA"
- "Keywords" = "8:"
- "ARPCOMMENTS" = "8:"
- "ARPURLINFOABOUT" = "8:"
- "ARPPRODUCTICON" = "8:"
- "ARPIconIndex" = "3:0"
- "SearchPath" = "8:"
- "UseSystemSearchPath" = "11:TRUE"
- }
- "Registry"
- {
- "HKLM"
- {
- "Keys"
- {
- "{6A471EEF-D31B-40F8-BCF6-C9E8EC783F36}:_90B278BF81154475985C1A4181CF94D4"
- {
- "Name" = "8:Software"
- "Condition" = "8:"
- "AlwaysCreate" = "11:FALSE"
- "DeleteAtUninstall" = "11:FALSE"
- "Transitive" = "11:FALSE"
- "Keys"
- {
- "{6A471EEF-D31B-40F8-BCF6-C9E8EC783F36}:_F9F082172E184264885DD15D618580FC"
- {
- "Name" = "8:[Manufacturer]"
- "Condition" = "8:"
- "AlwaysCreate" = "11:FALSE"
- "DeleteAtUninstall" = "11:FALSE"
- "Transitive" = "11:FALSE"
- "Keys"
- {
- }
- "Values"
- {
- }
- }
- }
- "Values"
- {
- }
- }
- }
- }
- "HKCU"
- {
- "Keys"
- {
- "{6A471EEF-D31B-40F8-BCF6-C9E8EC783F36}:_55DCD8AB55384E17A422F91638D7BAD6"
- {
- "Name" = "8:Software"
- "Condition" = "8:"
- "AlwaysCreate" = "11:FALSE"
- "DeleteAtUninstall" = "11:FALSE"
- "Transitive" = "11:FALSE"
- "Keys"
- {
- "{6A471EEF-D31B-40F8-BCF6-C9E8EC783F36}:_298A7C0021DA49E58AEA25CA12D1EB8E"
- {
- "Name" = "8:[Manufacturer]"
- "Condition" = "8:"
- "AlwaysCreate" = "11:FALSE"
- "DeleteAtUninstall" = "11:FALSE"
- "Transitive" = "11:FALSE"
- "Keys"
- {
- }
- "Values"
- {
- }
- }
- }
- "Values"
- {
- }
- }
- }
- }
- "HKCR"
- {
- "Keys"
- {
- }
- }
- "HKU"
- {
- "Keys"
- {
- }
- }
- "HKPU"
- {
- "Keys"
- {
- }
- }
- }
- "Sequences"
- {
- }
- "Shortcut"
- {
- }
- "UserInterface"
- {
- "{B654A020-6903-4E6A-A86C-75DC463DB54B}:_746273026A43484A92DF764E5FE0F8D5"
- {
- "UseDynamicProperties" = "11:FALSE"
- "IsDependency" = "11:FALSE"
- "SourcePath" = "8:<VsdDialogDir>\\VsdUserInterface.wim"
- }
- "{8D9DEE8B-DD8B-4F48-9072-C4364E4F4011}:_7E930155F5254413952D4A13E6984096"
- {
- "Name" = "8:#1901"
- "Sequence" = "3:2"
- "Attributes" = "3:2"
- "Dialogs"
- {
- "{18ADD6EC-89FE-4ED7-AD3E-211C40278470}:_9201B3D3FED9428884C552E8907BD940"
- {
- "Sequence" = "3:100"
- "DisplayName" = "8:Progression"
- "UseDynamicProperties" = "11:TRUE"
- "IsDependency" = "11:FALSE"
- "SourcePath" = "8:<VsdDialogDir>\\VsdAdminProgressDlg.wid"
- "Properties"
- {
- "BannerBitmap"
- {
- "Name" = "8:BannerBitmap"
- "DisplayName" = "8:#1001"
- "Description" = "8:#1101"
- "Type" = "3:8"
- "ContextData" = "8:Bitmap"
- "Attributes" = "3:4"
- "Setting" = "3:1"
- "UsePlugInResources" = "11:TRUE"
- }
- "ShowProgress"
- {
- "Name" = "8:ShowProgress"
- "DisplayName" = "8:#1009"
- "Description" = "8:#1109"
- "Type" = "3:5"
- "ContextData" = "8:1;True=1;False=0"
- "Attributes" = "3:0"
- "Setting" = "3:0"
- "Value" = "3:1"
- "DefaultValue" = "3:1"
- "UsePlugInResources" = "11:TRUE"
- }
- }
- }
- }
- }
- "{8D9DEE8B-DD8B-4F48-9072-C4364E4F4011}:_89117C1BBE544863B1B3C820791387B3"
- {
- "Name" = "8:#1902"
- "Sequence" = "3:1"
- "Attributes" = "3:3"
- "Dialogs"
- {
- "{18ADD6EC-89FE-4ED7-AD3E-211C40278470}:_89B7CC371BC44ECAA1ADC833B75A98BE"
- {
- "Sequence" = "3:100"
- "DisplayName" = "8:Terminé"
- "UseDynamicProperties" = "11:TRUE"
- "IsDependency" = "11:FALSE"
- "SourcePath" = "8:<VsdDialogDir>\\VsdFinishedDlg.wid"
- "Properties"
- {
- "BannerBitmap"
- {
- "Name" = "8:BannerBitmap"
- "DisplayName" = "8:#1001"
- "Description" = "8:#1101"
- "Type" = "3:8"
- "ContextData" = "8:Bitmap"
- "Attributes" = "3:4"
- "Setting" = "3:1"
- "UsePlugInResources" = "11:TRUE"
- }
- "UpdateText"
- {
- "Name" = "8:UpdateText"
- "DisplayName" = "8:#1058"
- "Description" = "8:#1158"
- "Type" = "3:15"
- "ContextData" = "8:"
- "Attributes" = "3:0"
- "Setting" = "3:1"
- "Value" = "8:#1258"
- "DefaultValue" = "8:#1258"
- "UsePlugInResources" = "11:TRUE"
- }
- }
- }
- }
- }
- "{8D9DEE8B-DD8B-4F48-9072-C4364E4F4011}:_A340822367004EA3B2E848CB3A4A7AC0"
- {
- "Name" = "8:#1900"
- "Sequence" = "3:1"
- "Attributes" = "3:1"
- "Dialogs"
- {
- "{18ADD6EC-89FE-4ED7-AD3E-211C40278470}:_5467627873D44B388595ABEDF07BE051"
- {
- "Sequence" = "3:300"
- "DisplayName" = "8:Confirmer l'installation"
- "UseDynamicProperties" = "11:TRUE"
- "IsDependency" = "11:FALSE"
- "SourcePath" = "8:<VsdDialogDir>\\VsdConfirmDlg.wid"
- "Properties"
- {
- "BannerBitmap"
- {
- "Name" = "8:BannerBitmap"
- "DisplayName" = "8:#1001"
- "Description" = "8:#1101"
- "Type" = "3:8"
- "ContextData" = "8:Bitmap"
- "Attributes" = "3:4"
- "Setting" = "3:1"
- "UsePlugInResources" = "11:TRUE"
- }
- }
- }
- "{18ADD6EC-89FE-4ED7-AD3E-211C40278470}:_A19F72F966EC4837BD7FA41F66501195"
- {
- "Sequence" = "3:100"
- "DisplayName" = "8:Bienvenue"
- "UseDynamicProperties" = "11:TRUE"
- "IsDependency" = "11:FALSE"
- "SourcePath" = "8:<VsdDialogDir>\\VsdWelcomeDlg.wid"
- "Properties"
- {
- "BannerBitmap"
- {
- "Name" = "8:BannerBitmap"
- "DisplayName" = "8:#1001"
- "Description" = "8:#1101"
- "Type" = "3:8"
- "ContextData" = "8:Bitmap"
- "Attributes" = "3:4"
- "Setting" = "3:1"
- "UsePlugInResources" = "11:TRUE"
- }
- "CopyrightWarning"
- {
- "Name" = "8:CopyrightWarning"
- "DisplayName" = "8:#1002"
- "Description" = "8:#1102"
- "Type" = "3:3"
- "ContextData" = "8:"
- "Attributes" = "3:0"
- "Setting" = "3:1"
- "Value" = "8:#1202"
- "DefaultValue" = "8:#1202"
- "UsePlugInResources" = "11:TRUE"
- }
- "Welcome"
- {
- "Name" = "8:Welcome"
- "DisplayName" = "8:#1003"
- "Description" = "8:#1103"
- "Type" = "3:3"
- "ContextData" = "8:"
- "Attributes" = "3:0"
- "Setting" = "3:1"
- "Value" = "8:#1203"
- "DefaultValue" = "8:#1203"
- "UsePlugInResources" = "11:TRUE"
- }
- }
- }
- "{18ADD6EC-89FE-4ED7-AD3E-211C40278470}:_A5FFBF0129BC461FBFEE8A03128FF939"
- {
- "Sequence" = "3:200"
- "DisplayName" = "8:Dossier d'installation"
- "UseDynamicProperties" = "11:TRUE"
- "IsDependency" = "11:FALSE"
- "SourcePath" = "8:<VsdDialogDir>\\VsdFolderDlg.wid"
- "Properties"
- {
- "BannerBitmap"
- {
- "Name" = "8:BannerBitmap"
- "DisplayName" = "8:#1001"
- "Description" = "8:#1101"
- "Type" = "3:8"
- "ContextData" = "8:Bitmap"
- "Attributes" = "3:4"
- "Setting" = "3:1"
- "UsePlugInResources" = "11:TRUE"
- }
- }
- }
- }
- }
- "{8D9DEE8B-DD8B-4F48-9072-C4364E4F4011}:_AE2014636E5E4F25B59645C85CE9CD4B"
- {
- "Name" = "8:#1902"
- "Sequence" = "3:2"
- "Attributes" = "3:3"
- "Dialogs"
- {
- "{18ADD6EC-89FE-4ED7-AD3E-211C40278470}:_EF4845026C4E48A18C9D2D3C97217128"
- {
- "Sequence" = "3:100"
- "DisplayName" = "8:Terminé"
- "UseDynamicProperties" = "11:TRUE"
- "IsDependency" = "11:FALSE"
- "SourcePath" = "8:<VsdDialogDir>\\VsdAdminFinishedDlg.wid"
- "Properties"
- {
- "BannerBitmap"
- {
- "Name" = "8:BannerBitmap"
- "DisplayName" = "8:#1001"
- "Description" = "8:#1101"
- "Type" = "3:8"
- "ContextData" = "8:Bitmap"
- "Attributes" = "3:4"
- "Setting" = "3:1"
- "UsePlugInResources" = "11:TRUE"
- }
- }
- }
- }
- }
- "{8D9DEE8B-DD8B-4F48-9072-C4364E4F4011}:_CF64177EA7D844FD8AA819106C1D5F47"
- {
- "Name" = "8:#1901"
- "Sequence" = "3:1"
- "Attributes" = "3:2"
- "Dialogs"
- {
- "{18ADD6EC-89FE-4ED7-AD3E-211C40278470}:_A404463CA0524BA1B155B28BB93CE3D1"
- {
- "Sequence" = "3:100"
- "DisplayName" = "8:Progression"
- "UseDynamicProperties" = "11:TRUE"
- "IsDependency" = "11:FALSE"
- "SourcePath" = "8:<VsdDialogDir>\\VsdProgressDlg.wid"
- "Properties"
- {
- "BannerBitmap"
- {
- "Name" = "8:BannerBitmap"
- "DisplayName" = "8:#1001"
- "Description" = "8:#1101"
- "Type" = "3:8"
- "ContextData" = "8:Bitmap"
- "Attributes" = "3:4"
- "Setting" = "3:1"
- "UsePlugInResources" = "11:TRUE"
- }
- "ShowProgress"
- {
- "Name" = "8:ShowProgress"
- "DisplayName" = "8:#1009"
- "Description" = "8:#1109"
- "Type" = "3:5"
- "ContextData" = "8:1;True=1;False=0"
- "Attributes" = "3:0"
- "Setting" = "3:0"
- "Value" = "3:1"
- "DefaultValue" = "3:1"
- "UsePlugInResources" = "11:TRUE"
- }
- }
- }
- }
- }
- "{B654A020-6903-4E6A-A86C-75DC463DB54B}:_DD40DA431C6A4691AD9C0CD2B694F4D3"
- {
- "UseDynamicProperties" = "11:FALSE"
- "IsDependency" = "11:FALSE"
- "SourcePath" = "8:<VsdDialogDir>\\VsdBasicDialogs.wim"
- }
- "{8D9DEE8B-DD8B-4F48-9072-C4364E4F4011}:_F0487C7ECB9243B89FFDC800DD19A924"
- {
- "Name" = "8:#1900"
- "Sequence" = "3:2"
- "Attributes" = "3:1"
- "Dialogs"
- {
- "{18ADD6EC-89FE-4ED7-AD3E-211C40278470}:_746AC3F4F55049E082938A764D4F913E"
- {
- "Sequence" = "3:200"
- "DisplayName" = "8:Dossier d'installation"
- "UseDynamicProperties" = "11:TRUE"
- "IsDependency" = "11:FALSE"
- "SourcePath" = "8:<VsdDialogDir>\\VsdAdminFolderDlg.wid"
- "Properties"
- {
- "BannerBitmap"
- {
- "Name" = "8:BannerBitmap"
- "DisplayName" = "8:#1001"
- "Description" = "8:#1101"
- "Type" = "3:8"
- "ContextData" = "8:Bitmap"
- "Attributes" = "3:4"
- "Setting" = "3:1"
- "UsePlugInResources" = "11:TRUE"
- }
- }
- }
- "{18ADD6EC-89FE-4ED7-AD3E-211C40278470}:_D2355D14BD594C9EA6DCAB182C8C94CF"
- {
- "Sequence" = "3:100"
- "DisplayName" = "8:Bienvenue"
- "UseDynamicProperties" = "11:TRUE"
- "IsDependency" = "11:FALSE"
- "SourcePath" = "8:<VsdDialogDir>\\VsdAdminWelcomeDlg.wid"
- "Properties"
- {
- "BannerBitmap"
- {
- "Name" = "8:BannerBitmap"
- "DisplayName" = "8:#1001"
- "Description" = "8:#1101"
- "Type" = "3:8"
- "ContextData" = "8:Bitmap"
- "Attributes" = "3:4"
- "Setting" = "3:1"
- "UsePlugInResources" = "11:TRUE"
- }
- "CopyrightWarning"
- {
- "Name" = "8:CopyrightWarning"
- "DisplayName" = "8:#1002"
- "Description" = "8:#1102"
- "Type" = "3:3"
- "ContextData" = "8:"
- "Attributes" = "3:0"
- "Setting" = "3:1"
- "Value" = "8:#1202"
- "DefaultValue" = "8:#1202"
- "UsePlugInResources" = "11:TRUE"
- }
- "Welcome"
- {
- "Name" = "8:Welcome"
- "DisplayName" = "8:#1003"
- "Description" = "8:#1103"
- "Type" = "3:3"
- "ContextData" = "8:"
- "Attributes" = "3:0"
- "Setting" = "3:1"
- "Value" = "8:#1203"
- "DefaultValue" = "8:#1203"
- "UsePlugInResources" = "11:TRUE"
- }
- }
- }
- "{18ADD6EC-89FE-4ED7-AD3E-211C40278470}:_F29124EDF2D24CAF9003CA4D78974AA8"
- {
- "Sequence" = "3:300"
- "DisplayName" = "8:Confirmer l'installation"
- "UseDynamicProperties" = "11:TRUE"
- "IsDependency" = "11:FALSE"
- "SourcePath" = "8:<VsdDialogDir>\\VsdAdminConfirmDlg.wid"
- "Properties"
- {
- "BannerBitmap"
- {
- "Name" = "8:BannerBitmap"
- "DisplayName" = "8:#1001"
- "Description" = "8:#1101"
- "Type" = "3:8"
- "ContextData" = "8:Bitmap"
- "Attributes" = "3:4"
- "Setting" = "3:1"
- "UsePlugInResources" = "11:TRUE"
- }
- }
- }
- }
- }
- }
- "MergeModule"
- {
- "{35A69C6E-5BA4-440D-803D-762B59A45393}:_0DD44A8F6530438CB2E0A50F1F80A210"
- {
- "UseDynamicProperties" = "11:TRUE"
- "IsDependency" = "11:TRUE"
- "SourcePath" = "8:vc_user_stl71_rtl_x86_---.msm"
- "Properties"
- {
- }
- "LanguageId" = "3:0"
- "Exclude" = "11:FALSE"
- "Folder" = "8:"
- "Feature" = "8:"
- "IsolateTo" = "8:"
- }
- "{35A69C6E-5BA4-440D-803D-762B59A45393}:_1787477A582B41BDA52AEC8762B60240"
- {
- "UseDynamicProperties" = "11:TRUE"
- "IsDependency" = "11:TRUE"
- "SourcePath" = "8:vc_user_mfc71_rtl_x86_---.msm"
- "Properties"
- {
- }
- "LanguageId" = "3:0"
- "Exclude" = "11:FALSE"
- "Folder" = "8:"
- "Feature" = "8:"
- "IsolateTo" = "8:"
- }
- "{35A69C6E-5BA4-440D-803D-762B59A45393}:_7E184C689278442B851207163DF58EC0"
- {
- "UseDynamicProperties" = "11:TRUE"
- "IsDependency" = "11:TRUE"
- "SourcePath" = "8:vc_user_crt71_rtl_x86_---.msm"
- "Properties"
- {
- }
- "LanguageId" = "3:0"
- "Exclude" = "11:FALSE"
- "Folder" = "8:"
- "Feature" = "8:"
- "IsolateTo" = "8:"
- }
- }
- "ProjectOutput"
- {
- "{8062640A-2EEE-46E9-AB67-688E9A886E9F}:_378194BEC0C642BBBEB8EBC7B0B33A4F"
- {
- "SourcePath" = "8:..\\Release\\IvyFileMon.exe"
- "TargetName" = "8:"
- "Tag" = "8:"
- "Folder" = "8:_DDAA30AF8058479E808821672EB9DC2B"
- "Condition" = "8:"
- "Transitive" = "11:FALSE"
- "Vital" = "11:TRUE"
- "ReadOnly" = "11:FALSE"
- "Hidden" = "11:FALSE"
- "System" = "11:FALSE"
- "Permanent" = "11:FALSE"
- "SharedLegacy" = "11:FALSE"
- "PackageAs" = "3:1"
- "Register" = "3:1"
- "Exclude" = "11:FALSE"
- "IsDependency" = "11:FALSE"
- "IsolateTo" = "8:"
- "ProjectOutputGroupRegister" = "3:1"
- "OutputConfiguration" = "8:"
- "OutputGroupCanonicalName" = "8:Built"
- "OutputProjectGuid" = "8:{B50B2407-50BF-4DF3-832E-41EDA9914A4D}"
- "ShowKeyOutput" = "11:TRUE"
- "ExcludeFilters"
- {
- }
- }
- "{8062640A-2EEE-46E9-AB67-688E9A886E9F}:_DB155C88AA6C4534BEF14067EEC6FB65"
- {
- "SourcePath" = "8:..\\..\\Ivy\\Release\\Ivy.dll"
- "TargetName" = "8:"
- "Tag" = "8:"
- "Folder" = "8:_DDAA30AF8058479E808821672EB9DC2B"
- "Condition" = "8:"
- "Transitive" = "11:FALSE"
- "Vital" = "11:TRUE"
- "ReadOnly" = "11:FALSE"
- "Hidden" = "11:FALSE"
- "System" = "11:FALSE"
- "Permanent" = "11:FALSE"
- "SharedLegacy" = "11:FALSE"
- "PackageAs" = "3:1"
- "Register" = "3:1"
- "Exclude" = "11:FALSE"
- "IsDependency" = "11:FALSE"
- "IsolateTo" = "8:"
- "ProjectOutputGroupRegister" = "3:1"
- "OutputConfiguration" = "8:"
- "OutputGroupCanonicalName" = "8:Built"
- "OutputProjectGuid" = "8:{84E0039A-6721-4B18-9792-E9AE4274AC0E}"
- "ShowKeyOutput" = "11:TRUE"
- "ExcludeFilters"
- {
- }
- }
- }
- "VJSharpPlugin"
- {
- }
- }
-}
diff --git a/Bus/IvyFileMon/InstIvyFileMon/InstIvyFileMon.vdproj.vspscc b/Bus/IvyFileMon/InstIvyFileMon/InstIvyFileMon.vdproj.vspscc
deleted file mode 100644
index 49d6f78..0000000
--- a/Bus/IvyFileMon/InstIvyFileMon/InstIvyFileMon.vdproj.vspscc
+++ /dev/null
@@ -1,10 +0,0 @@
-""
-{
-"FILE_VERSION" = "9237"
-"ENLISTMENT_CHOICE" = "NEVER"
-"PROJECT_FILE_RELATIVE_PATH" = "relative:Install\\InstIvyFileMon"
-"NUMBER_OF_EXCLUDED_FILES" = "0"
-"ORIGINAL_PROJECT_FILE_PATH" = ""
-"NUMBER_OF_NESTED_PROJECTS" = "0"
-"SOURCE_CONTROL_SETTINGS_PROVIDER" = "PROJECT"
-}
diff --git a/Bus/IvyFileMon/IvyFileMon.cpp b/Bus/IvyFileMon/IvyFileMon.cpp
deleted file mode 100644
index ca09d47..0000000
--- a/Bus/IvyFileMon/IvyFileMon.cpp
+++ /dev/null
@@ -1,65 +0,0 @@
-// IvyFileMon.cpp : Définit les comportements de classe pour l'application.
-//
-
-#include "stdafx.h"
-#include "IvyFileMon.h"
-#include "IvyFileMonDlg.h"
-
-#ifdef _DEBUG
-#define new DEBUG_NEW
-#endif
-
-
-// CIvyFileMonApp
-
-BEGIN_MESSAGE_MAP(CIvyFileMonApp, CWinApp)
- ON_COMMAND(ID_HELP, CWinApp::OnHelp)
-END_MESSAGE_MAP()
-
-
-// construction de CIvyFileMonApp
-
-CIvyFileMonApp::CIvyFileMonApp()
-{
- // TODO : ajoutez ici le code de la construction.
- // Placez toutes les initialisations dans InitInstance
-}
-
-
-// Le seul et unique objet CIvyFileMonApp
-
-CIvyFileMonApp theApp;
-
-
-// initialisation de CIvyFileMonApp
-
-BOOL CIvyFileMonApp::InitInstance()
-{
- // InitCommonControls() est requis sur Windows XP si le manifeste de l'application
- // spécifie l'utilisation de ComCtl32.dll version 6 ou ultérieure pour activer les
- // styles visuels. Dans le cas contraire, la création de fenêtres échouera.
- InitCommonControls();
-
- CWinApp::InitInstance();
-
- AfxEnableControlContainer();
-
-
- CIvyFileMonDlg dlg;
- m_pMainWnd = &dlg;
- INT_PTR nResponse = dlg.DoModal();
- if (nResponse == IDOK)
- {
- // TODO : Placez ici le code définissant le comportement lorsque la boîte de dialogue est
- // fermée avec OK
- }
- else if (nResponse == IDCANCEL)
- {
- // TODO : Placez ici le code définissant le comportement lorsque la boîte de dialogue est
- // fermée avec Annuler
- }
-
- // Lorsque la boîte de dialogue est fermée, retourner FALSE afin de quitter
- // l'application, plutôt que de démarrer la pompe de messages de l'application.
- return FALSE;
-}
diff --git a/Bus/IvyFileMon/IvyFileMon.h b/Bus/IvyFileMon/IvyFileMon.h
deleted file mode 100644
index 3c06f30..0000000
--- a/Bus/IvyFileMon/IvyFileMon.h
+++ /dev/null
@@ -1,31 +0,0 @@
-// IvyFileMon.h : fichier d'en-tête principal pour l'application PROJECT_NAME
-//
-
-#pragma once
-
-#ifndef __AFXWIN_H__
- #error include 'stdafx.h' before including this file for PCH
-#endif
-
-#include "resource.h" // symboles principaux
-
-
-// CIvyFileMonApp :
-// Consultez IvyFileMon.cpp pour l'implémentation de cette classe
-//
-
-class CIvyFileMonApp : public CWinApp
-{
-public:
- CIvyFileMonApp();
-
-// Substitutions
- public:
- virtual BOOL InitInstance();
-
-// Implémentation
-
- DECLARE_MESSAGE_MAP()
-};
-
-extern CIvyFileMonApp theApp;
diff --git a/Bus/IvyFileMon/IvyFileMon.rc b/Bus/IvyFileMon/IvyFileMon.rc
deleted file mode 100644
index 117f3ca..0000000
--- a/Bus/IvyFileMon/IvyFileMon.rc
+++ /dev/null
@@ -1,215 +0,0 @@
-// Microsoft Visual C++ generated resource script.
-//
-#include "resource.h"
-
-#define APSTUDIO_READONLY_SYMBOLS
-/////////////////////////////////////////////////////////////////////////////
-//
-// Generated from the TEXTINCLUDE 2 resource.
-//
-#include "afxres.h"
-
-/////////////////////////////////////////////////////////////////////////////
-#undef APSTUDIO_READONLY_SYMBOLS
-
-/////////////////////////////////////////////////////////////////////////////
-// Français (France) resources
-
-#if !defined(AFX_RESOURCE_DLL) || defined(AFX_TARG_FRA)
-#ifdef _WIN32
-LANGUAGE LANG_FRENCH, SUBLANG_FRENCH
-#pragma code_page(1252)
-#endif //_WIN32
-
-#ifdef APSTUDIO_INVOKED
-/////////////////////////////////////////////////////////////////////////////
-//
-// TEXTINCLUDE
-//
-
-1 TEXTINCLUDE
-BEGIN
- "resource.h\0"
-END
-
-2 TEXTINCLUDE
-BEGIN
- "#include ""afxres.h""\r\n"
- "\0"
-END
-
-3 TEXTINCLUDE
-BEGIN
- "#define _AFX_NO_SPLITTER_RESOURCES\r\n"
- "#define _AFX_NO_OLE_RESOURCES\r\n"
- "#define _AFX_NO_TRACKER_RESOURCES\r\n"
- "#define _AFX_NO_PROPERTY_RESOURCES\r\n"
- "\r\n"
- "#if !defined(AFX_RESOURCE_DLL) || defined(AFX_TARG_FRA)\r\n"
- "LANGUAGE 12, 1\r\n"
- "#pragma code_page(1252)\r\n"
- "#include ""res\\IvyFileMon.rc2"" // ressources non modifiées par Microsoft Visual C++ \r\n"
- "#include ""afxres.rc"" // Composants standard\r\n"
- "#endif\r\n"
- "\0"
-END
-
-#endif // APSTUDIO_INVOKED
-
-
-/////////////////////////////////////////////////////////////////////////////
-//
-// Icon
-//
-
-// Icon with lowest ID value placed first to ensure application icon
-// remains consistent on all systems.
-IDR_MAINFRAME ICON "res\\IvyFileMon.ico"
-
-/////////////////////////////////////////////////////////////////////////////
-//
-// Dialog
-//
-
-IDD_ABOUTBOX DIALOGEX 0, 0, 235, 55
-STYLE DS_SETFONT | DS_MODALFRAME | DS_FIXEDSYS | WS_POPUP | WS_CAPTION |
- WS_SYSMENU
-CAPTION "À propos de IvyFileMon"
-FONT 8, "MS Shell Dlg", 0, 0, 0x1
-BEGIN
- ICON IDR_MAINFRAME,IDC_STATIC,11,17,20,20
- LTEXT "IvyFileMon version 1.0",IDC_STATIC,40,10,119,8,
- SS_NOPREFIX
- LTEXT "Copyright (C) 2002",IDC_STATIC,40,25,119,8
- DEFPUSHBUTTON "OK",IDOK,178,7,50,16,WS_GROUP
-END
-
-IDD_IVYFILEMON_DIALOG DIALOGEX 0, 0, 217, 200
-STYLE DS_SETFONT | DS_MODALFRAME | DS_FIXEDSYS | WS_POPUP | WS_VISIBLE |
- WS_CAPTION | WS_SYSMENU
-EXSTYLE WS_EX_APPWINDOW
-CAPTION "IvyFileMon"
-FONT 8, "MS Shell Dlg", 0, 0, 0x1
-BEGIN
- EDITTEXT IDC_BUS,45,15,126,12,ES_AUTOHSCROLL
- EDITTEXT IDC_DIRECTORY,45,32,127,12,ES_AUTOHSCROLL
- EDITTEXT IDC_PREFIX,45,67,127,12,ES_AUTOHSCROLL
- LTEXT "Bus:",IDC_STATIC,25,18,15,8
- LTEXT "Directory:",IDC_STATIC,7,34,33,8
- LTEXT "Prefix:",IDC_STATIC,18,69,22,8
- PUSHBUTTON "Start",IDC_START,176,14,34,14
- EDITTEXT IDC_TEXT,7,88,203,105,ES_MULTILINE | ES_AUTOHSCROLL |
- ES_READONLY
- EDITTEXT IDC_EXTENT,45,50,127,12,ES_AUTOHSCROLL
- LTEXT "extent:",IDC_STATIC,18,52,25,8
-END
-
-
-/////////////////////////////////////////////////////////////////////////////
-//
-// Version
-//
-
-VS_VERSION_INFO VERSIONINFO
- FILEVERSION 1,0,0,1
- PRODUCTVERSION 1,0,0,1
- FILEFLAGSMASK 0x3fL
-#ifdef _DEBUG
- FILEFLAGS 0x1L
-#else
- FILEFLAGS 0x0L
-#endif
- FILEOS 0x4L
- FILETYPE 0x1L
- FILESUBTYPE 0x0L
-BEGIN
- BLOCK "StringFileInfo"
- BEGIN
- BLOCK "040c04e4"
- BEGIN
- VALUE "CompanyName", "TODO: <Nom de la société>"
- VALUE "FileDescription", "TODO: <Description du fichier>"
- VALUE "FileVersion", "1.0.0.1"
- VALUE "InternalName", "IvyFileMon.exe"
- VALUE "LegalCopyright", "TODO: (c) <Nom de la société>. Tous droits réservés."
- VALUE "OriginalFilename", "IvyFileMon.exe"
- VALUE "ProductName", "TODO: <Nom du produit>"
- VALUE "ProductVersion", "1.0.0.1"
- END
- END
- BLOCK "VarFileInfo"
- BEGIN
- VALUE "Translation", 0x40c, 1252
- END
-END
-
-
-/////////////////////////////////////////////////////////////////////////////
-//
-// DESIGNINFO
-//
-
-#ifdef APSTUDIO_INVOKED
-GUIDELINES DESIGNINFO
-BEGIN
- IDD_ABOUTBOX, DIALOG
- BEGIN
- LEFTMARGIN, 7
- RIGHTMARGIN, 228
- TOPMARGIN, 7
- BOTTOMMARGIN, 48
- END
-
- IDD_IVYFILEMON_DIALOG, DIALOG
- BEGIN
- LEFTMARGIN, 7
- RIGHTMARGIN, 210
- TOPMARGIN, 7
- BOTTOMMARGIN, 193
- END
-END
-#endif // APSTUDIO_INVOKED
-
-
-/////////////////////////////////////////////////////////////////////////////
-//
-// RT_MANIFEST
-//
-
-IDR_MANIFEST RT_MANIFEST "res\\IvyFileMon.manifest"
-
-/////////////////////////////////////////////////////////////////////////////
-//
-// String Table
-//
-
-STRINGTABLE
-BEGIN
- IDS_ABOUTBOX "&À propos de IvyFileMon..."
-END
-
-#endif // Français (France) resources
-/////////////////////////////////////////////////////////////////////////////
-
-
-
-#ifndef APSTUDIO_INVOKED
-/////////////////////////////////////////////////////////////////////////////
-//
-// Generated from the TEXTINCLUDE 3 resource.
-//
-#define _AFX_NO_SPLITTER_RESOURCES
-#define _AFX_NO_OLE_RESOURCES
-#define _AFX_NO_TRACKER_RESOURCES
-#define _AFX_NO_PROPERTY_RESOURCES
-
-#if !defined(AFX_RESOURCE_DLL) || defined(AFX_TARG_FRA)
-LANGUAGE 12, 1
-#pragma code_page(1252)
-#include "res\IvyFileMon.rc2" // ressources non modifiées par Microsoft Visual C++
-#include "afxres.rc" // Composants standard
-#endif
-
-/////////////////////////////////////////////////////////////////////////////
-#endif // not APSTUDIO_INVOKED
-
diff --git a/Bus/IvyFileMon/IvyFileMon.sln b/Bus/IvyFileMon/IvyFileMon.sln
deleted file mode 100644
index d23441b..0000000
--- a/Bus/IvyFileMon/IvyFileMon.sln
+++ /dev/null
@@ -1,53 +0,0 @@
-Microsoft Visual Studio Solution File, Format Version 7.00
-Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "IvyFileMon", "IvyFileMon.vcproj", "{B50B2407-50BF-4DF3-832E-41EDA9914A4D}"
-EndProject
-Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "Ivy", "..\Ivy\Ivy.vcproj", "{84E0039A-6721-4B18-9792-E9AE4274AC0E}"
-EndProject
-Project("{54435603-DBB4-11D2-8724-00A0C9A8B90C}") = "InstIvyFileMon", "..\..\..\Install\InstIvyFileMon\InstIvyFileMon.vdproj", "{EFBC2510-93C6-4911-973D-02F63CAAF396}"
-EndProject
-Global
- GlobalSection(SourceCodeControl) = preSolution
- SccNumberOfProjects = 4
- SccProjectUniqueName0 = ..\\Ivy\\Ivy.vcproj
- SccProjectName0 = \u0022$/Bus/Ivy\u0022,\u0020QPEAAAAA
- SccLocalPath0 = ..\\Ivy
- CanCheckoutShared = false
- SccProjectName1 = \u0022$/Bus/IvyFileMon\u0022,\u0020VTEAAAAA
- SccLocalPath1 = ..\\..\\..
- SccProvider1 = MSSCCI:Microsoft\u0020Visual\u0020SourceSafe
- CanCheckoutShared = false
- SccProjectFilePathRelativizedFromConnection1 = C++\\Bus\\IvyFileMon\\
- SolutionUniqueID = {5F419E2D-5A13-4FB3-9817-74A8EB0DE519}
- SccProjectUniqueName2 = IvyFileMon.vcproj
- SccLocalPath2 = ..\\..\\..
- CanCheckoutShared = false
- SccProjectFilePathRelativizedFromConnection2 = C++\\Bus\\IvyFileMon\\
- SccProjectUniqueName3 = ..\\..\\..\\Install\\InstIvyFileMon\\InstIvyFileMon.vdproj
- SccLocalPath3 = ..\\..\\..
- CanCheckoutShared = false
- SccProjectFilePathRelativizedFromConnection3 = Install\\InstIvyFileMon\\
- EndGlobalSection
- GlobalSection(SolutionConfiguration) = preSolution
- ConfigName.0 = Debug
- ConfigName.1 = Release
- EndGlobalSection
- GlobalSection(ProjectDependencies) = postSolution
- {B50B2407-50BF-4DF3-832E-41EDA9914A4D}.0 = {84E0039A-6721-4B18-9792-E9AE4274AC0E}
- EndGlobalSection
- GlobalSection(ProjectConfiguration) = postSolution
- {B50B2407-50BF-4DF3-832E-41EDA9914A4D}.Debug.ActiveCfg = Debug|Win32
- {B50B2407-50BF-4DF3-832E-41EDA9914A4D}.Debug.Build.0 = Debug|Win32
- {B50B2407-50BF-4DF3-832E-41EDA9914A4D}.Release.ActiveCfg = Release|Win32
- {B50B2407-50BF-4DF3-832E-41EDA9914A4D}.Release.Build.0 = Release|Win32
- {84E0039A-6721-4B18-9792-E9AE4274AC0E}.Debug.ActiveCfg = Debug|Win32
- {84E0039A-6721-4B18-9792-E9AE4274AC0E}.Debug.Build.0 = Debug|Win32
- {84E0039A-6721-4B18-9792-E9AE4274AC0E}.Release.ActiveCfg = Release|Win32
- {84E0039A-6721-4B18-9792-E9AE4274AC0E}.Release.Build.0 = Release|Win32
- {EFBC2510-93C6-4911-973D-02F63CAAF396}.Debug.ActiveCfg = Debug
- {EFBC2510-93C6-4911-973D-02F63CAAF396}.Release.ActiveCfg = Release
- EndGlobalSection
- GlobalSection(ExtensibilityGlobals) = postSolution
- EndGlobalSection
- GlobalSection(ExtensibilityAddIns) = postSolution
- EndGlobalSection
-EndGlobal
diff --git a/Bus/IvyFileMon/IvyFileMon.vcproj b/Bus/IvyFileMon/IvyFileMon.vcproj
deleted file mode 100644
index 9ccc796..0000000
--- a/Bus/IvyFileMon/IvyFileMon.vcproj
+++ /dev/null
@@ -1,207 +0,0 @@
-<?xml version="1.0" encoding = "Windows-1252"?>
-<VisualStudioProject
- ProjectType="Visual C++"
- Version="7.00"
- Name="IvyFileMon"
- ProjectGUID="{B50B2407-50BF-4DF3-832E-41EDA9914A4D}"
- SccProjectName="&quot;$/Bus/IvyFileMon&quot;, VTEAAAAA"
- SccAuxPath=""
- SccLocalPath="..\..\.."
- SccProvider="MSSCCI:Microsoft Visual SourceSafe"
- Keyword="MFCProj">
- <Platforms>
- <Platform
- Name="Win32"/>
- </Platforms>
- <Configurations>
- <Configuration
- Name="Debug|Win32"
- OutputDirectory="Debug"
- IntermediateDirectory="Debug"
- ConfigurationType="1"
- UseOfMFC="2"
- CharacterSet="2">
- <Tool
- Name="VCCLCompilerTool"
- Optimization="0"
- AdditionalIncludeDirectories="..\Ivy"
- PreprocessorDefinitions="WIN32;_WINDOWS;_DEBUG"
- MinimalRebuild="TRUE"
- BasicRuntimeChecks="3"
- RuntimeLibrary="3"
- TreatWChar_tAsBuiltInType="TRUE"
- UsePrecompiledHeader="3"
- WarningLevel="3"
- Detect64BitPortabilityProblems="TRUE"
- DebugInformationFormat="4"/>
- <Tool
- Name="VCCustomBuildTool"/>
- <Tool
- Name="VCLinkerTool"
- LinkIncremental="2"
- GenerateDebugInformation="TRUE"
- SubSystem="2"
- TargetMachine="1"/>
- <Tool
- Name="VCMIDLTool"
- PreprocessorDefinitions="_DEBUG"
- MkTypLibCompatible="FALSE"/>
- <Tool
- Name="VCPostBuildEventTool"/>
- <Tool
- Name="VCPreBuildEventTool"/>
- <Tool
- Name="VCPreLinkEventTool"/>
- <Tool
- Name="VCResourceCompilerTool"
- PreprocessorDefinitions="_DEBUG"
- Culture="1033"
- AdditionalIncludeDirectories="$(IntDir)"/>
- <Tool
- Name="VCWebServiceProxyGeneratorTool"/>
- <Tool
- Name="VCWebDeploymentTool"/>
- </Configuration>
- <Configuration
- Name="Release|Win32"
- OutputDirectory="Release"
- IntermediateDirectory="Release"
- ConfigurationType="1"
- UseOfMFC="2"
- CharacterSet="2">
- <Tool
- Name="VCCLCompilerTool"
- Optimization="2"
- InlineFunctionExpansion="1"
- OmitFramePointers="TRUE"
- AdditionalIncludeDirectories="..\Ivy"
- PreprocessorDefinitions="WIN32;_WINDOWS;NDEBUG"
- StringPooling="TRUE"
- MinimalRebuild="FALSE"
- RuntimeLibrary="2"
- EnableFunctionLevelLinking="TRUE"
- TreatWChar_tAsBuiltInType="TRUE"
- UsePrecompiledHeader="3"
- WarningLevel="3"
- Detect64BitPortabilityProblems="TRUE"
- DebugInformationFormat="3"/>
- <Tool
- Name="VCCustomBuildTool"/>
- <Tool
- Name="VCLinkerTool"
- LinkIncremental="1"
- GenerateDebugInformation="TRUE"
- SubSystem="2"
- OptimizeReferences="2"
- EnableCOMDATFolding="2"
- TargetMachine="1"/>
- <Tool
- Name="VCMIDLTool"
- PreprocessorDefinitions="NDEBUG"
- MkTypLibCompatible="FALSE"/>
- <Tool
- Name="VCPostBuildEventTool"/>
- <Tool
- Name="VCPreBuildEventTool"/>
- <Tool
- Name="VCPreLinkEventTool"/>
- <Tool
- Name="VCResourceCompilerTool"
- PreprocessorDefinitions="NDEBUG"
- Culture="1033"
- AdditionalIncludeDirectories="$(IntDir)"/>
- <Tool
- Name="VCWebServiceProxyGeneratorTool"/>
- <Tool
- Name="VCWebDeploymentTool"/>
- </Configuration>
- </Configurations>
- <Files>
- <Filter
- Name="Source Files"
- Filter="cpp;c;cxx;def;odl;idl;hpj;bat;asm">
- <File
- RelativePath="DelayedDirectoryChangeHandler.cpp">
- </File>
- <File
- RelativePath="DirectoryChanges.cpp">
- </File>
- <File
- RelativePath="HistoryEdit.cpp">
- </File>
- <File
- RelativePath="IvyFileMon.cpp">
- </File>
- <File
- RelativePath="IvyFileMonDlg.cpp">
- </File>
- <File
- RelativePath="ParseCmdLine.cpp">
- </File>
- <File
- RelativePath="stdafx.cpp">
- <FileConfiguration
- Name="Debug|Win32">
- <Tool
- Name="VCCLCompilerTool"
- UsePrecompiledHeader="1"/>
- </FileConfiguration>
- <FileConfiguration
- Name="Release|Win32">
- <Tool
- Name="VCCLCompilerTool"
- UsePrecompiledHeader="1"/>
- </FileConfiguration>
- </File>
- </Filter>
- <Filter
- Name="Header Files"
- Filter="h;hpp;hxx;hm;inl;inc">
- <File
- RelativePath="DelayedDirectoryChangeHandler.h">
- </File>
- <File
- RelativePath="DirectoryChanges.h">
- </File>
- <File
- RelativePath="HistoryEdit.h">
- </File>
- <File
- RelativePath="IvyFileMon.h">
- </File>
- <File
- RelativePath="IvyFileMonDlg.h">
- </File>
- <File
- RelativePath="ParseCmdLine.h">
- </File>
- <File
- RelativePath="Resource.h">
- </File>
- <File
- RelativePath="stdafx.h">
- </File>
- </Filter>
- <Filter
- Name="Resource Files"
- Filter="rc;ico;cur;bmp;dlg;rc2;rct;bin;rgs;jpg;jpeg;jpe;manifest">
- <File
- RelativePath="res\IvyFileMon.ico">
- </File>
- <File
- RelativePath="res\IvyFileMon.manifest">
- </File>
- <File
- RelativePath="IvyFileMon.rc">
- </File>
- <File
- RelativePath="res\IvyFileMon.rc2">
- </File>
- </Filter>
- <File
- RelativePath="ReadMe.txt">
- </File>
- </Files>
- <Globals>
- </Globals>
-</VisualStudioProject>
diff --git a/Bus/IvyFileMon/IvyFileMon.vcproj.vspscc b/Bus/IvyFileMon/IvyFileMon.vcproj.vspscc
deleted file mode 100644
index 4c02f52..0000000
--- a/Bus/IvyFileMon/IvyFileMon.vcproj.vspscc
+++ /dev/null
@@ -1,10 +0,0 @@
-""
-{
-"FILE_VERSION" = "9237"
-"ENLISTMENT_CHOICE" = "NEVER"
-"PROJECT_FILE_RELATIVE_PATH" = "relative:C++\\Bus\\IvyFileMon"
-"NUMBER_OF_EXCLUDED_FILES" = "0"
-"ORIGINAL_PROJECT_FILE_PATH" = ""
-"NUMBER_OF_NESTED_PROJECTS" = "0"
-"SOURCE_CONTROL_SETTINGS_PROVIDER" = "PROJECT"
-}
diff --git a/Bus/IvyFileMon/IvyFileMon.vsscc b/Bus/IvyFileMon/IvyFileMon.vsscc
deleted file mode 100644
index e69de29..0000000
--- a/Bus/IvyFileMon/IvyFileMon.vsscc
+++ /dev/null
diff --git a/Bus/IvyFileMon/IvyFileMon.vssscc b/Bus/IvyFileMon/IvyFileMon.vssscc
deleted file mode 100644
index 4c02f52..0000000
--- a/Bus/IvyFileMon/IvyFileMon.vssscc
+++ /dev/null
@@ -1,10 +0,0 @@
-""
-{
-"FILE_VERSION" = "9237"
-"ENLISTMENT_CHOICE" = "NEVER"
-"PROJECT_FILE_RELATIVE_PATH" = "relative:C++\\Bus\\IvyFileMon"
-"NUMBER_OF_EXCLUDED_FILES" = "0"
-"ORIGINAL_PROJECT_FILE_PATH" = ""
-"NUMBER_OF_NESTED_PROJECTS" = "0"
-"SOURCE_CONTROL_SETTINGS_PROVIDER" = "PROJECT"
-}
diff --git a/Bus/IvyFileMon/IvyFileMonDlg.cpp b/Bus/IvyFileMon/IvyFileMonDlg.cpp
deleted file mode 100644
index 719ea66..0000000
--- a/Bus/IvyFileMon/IvyFileMonDlg.cpp
+++ /dev/null
@@ -1,281 +0,0 @@
-// IvyFileMonDlg.cpp : fichier d'implémentation
-//
-
-#include "stdafx.h"
-#include "IvyFileMon.h"
-#include "IvyFileMonDlg.h"
-#include "ParseCmdLine.h"
-#include "IvyApplication.h"
-
-#ifdef _DEBUG
-#define new DEBUG_NEW
-#endif
-
-const char * CONVSTR( const CString& str )
-{
-#ifdef UNDER_CE
-
- static char buffer[4096];
- int len = str.GetLength();
- buffer[len] = '\0';
- if ( len )
- {
- int err = WideCharToMultiByte( CP_ACP, 0, str, len, buffer, 4096, NULL, NULL );
- if ( err == 0 )
- TRACE(TEXT("Error converting chars %d\n"),GetLastError());
- }
- return buffer;
-#else
- return (LPCSTR) str;
-#endif
-
-}
-
-
-
-// boîte de dialogue CAboutDlg utilisée pour la boîte de dialogue 'À propos de' pour votre application
-
-class CAboutDlg : public CDialog
-{
-public:
- CAboutDlg();
-
-// Données de la boîte de dialogue
- enum { IDD = IDD_ABOUTBOX };
-
- protected:
- virtual void DoDataExchange(CDataExchange* pDX); // prise en charge de DDX/DDV
-
-// Implémentation
-protected:
- DECLARE_MESSAGE_MAP()
-};
-
-CAboutDlg::CAboutDlg() : CDialog(CAboutDlg::IDD)
-{
-}
-
-void CAboutDlg::DoDataExchange(CDataExchange* pDX)
-{
- CDialog::DoDataExchange(pDX);
-}
-
-BEGIN_MESSAGE_MAP(CAboutDlg, CDialog)
-END_MESSAGE_MAP()
-
-
-// boîte de dialogue CIvyFileMonDlg
-
-
-
-CIvyFileMonDlg::CIvyFileMonDlg(CWnd* pParent /*=NULL*/)
- : CDialog(CIvyFileMonDlg::IDD, pParent)
- , m_busnumber(_T(""))
- , m_directory(_T(""))
- , m_prefix(_T(""))
- , m_extent(_T(""))
-{
- m_hIcon = AfxGetApp()->LoadIcon(IDR_MAINFRAME);
-}
-
-void CIvyFileMonDlg::DoDataExchange(CDataExchange* pDX)
-{
- CDialog::DoDataExchange(pDX);
- DDX_Text(pDX, IDC_BUS, m_busnumber);
- DDX_Text(pDX, IDC_DIRECTORY, m_directory);
- DDX_Text(pDX, IDC_PREFIX, m_prefix);
- DDX_Control(pDX, IDC_TEXT, m_text);
- DDX_Text(pDX, IDC_EXTENT, m_extent);
-}
-
-BEGIN_MESSAGE_MAP(CIvyFileMonDlg, CDialog)
- ON_WM_SYSCOMMAND()
- ON_WM_PAINT()
- ON_WM_QUERYDRAGICON()
- //}}AFX_MSG_MAP
- ON_BN_CLICKED(IDC_START, OnBnClickedStart)
-END_MESSAGE_MAP()
-
-
-// gestionnaires de messages pour CIvyFileMonDlg
-
-void CIvyFileMonDlg::WriteMessage(const char *format, ...)
-{
- char str[4096];
- // format and write the data we were given
- va_list args;
- va_start(args, format);
- vsprintf(str, format, args);
-
- m_text.AppendString( str );
-}
-
-void CIvyFileMonDlg::OnDirectMessage(IvyApplication *app, int id, const char *arg)
-{
-TRACE(TEXT("Direct Msg Receive %d, %s\n"),id,arg );
-}
-
-void CIvyFileMonDlg::OnApplicationConnected(IvyApplication *app)
-{
- WriteMessage( "Application: %s ready",(LPCSTR)(app->GetName()) );
-}
-void CIvyFileMonDlg::OnApplicationDisconnected(IvyApplication *app)
-{
- WriteMessage( "Application: %s bye",(LPCSTR)(app->GetName()) );
-}
-
-
-BOOL CIvyFileMonDlg::OnInitDialog()
-{
- CDialog::OnInitDialog();
-
- // Ajouter l'élément de menu "À propos de..." au menu Système.
-
- // IDM_ABOUTBOX doit se trouver dans la plage des commandes système.
- ASSERT((IDM_ABOUTBOX & 0xFFF0) == IDM_ABOUTBOX);
- ASSERT(IDM_ABOUTBOX < 0xF000);
-
- CMenu* pSysMenu = GetSystemMenu(FALSE);
- if (pSysMenu != NULL)
- {
- CString strAboutMenu;
- strAboutMenu.LoadString(IDS_ABOUTBOX);
- if (!strAboutMenu.IsEmpty())
- {
- pSysMenu->AppendMenu(MF_SEPARATOR);
- pSysMenu->AppendMenu(MF_STRING, IDM_ABOUTBOX, strAboutMenu);
- }
- }
-
- // Définir l'icône de cette boîte de dialogue. L'infrastructure effectue cela automatiquement
- // lorsque la fenêtre principale de l'application n'est pas une boîte de dialogue
- SetIcon(m_hIcon, TRUE); // Définir une grande icône
- SetIcon(m_hIcon, FALSE); // Définir une petite icône
-
- // parse command Line Info
- ParseCmdLine cmd;
- AfxGetApp()->ParseCommandLine( cmd );
-
- // Set Argument from Command Line
- m_busnumber = cmd.m_busNumber;
- m_directory = cmd.m_directory;
- m_extent = cmd.m_extent;
- m_prefix = cmd.m_prefix;
-
- bus = new Ivy( "IvyFileMon","IvyFileMon Ready",this,FALSE);
-
-// bus->BindMsg("(.*)", BUS_CALLBACK_OF(CTestDlg, IvyCallback ));
-
- //bus->BindMsg("^S( A=([0-9]+))?( B=([0-9]+))?",cb);
- m_busnumber = bus->GetDomain( CONVSTR(m_busnumber) );
- UpdateData(FALSE);
-
- // force bus start in case of start
- if ( cmd.m_start )
- OnBnClickedStart();
- return TRUE; // retourner TRUE, sauf si vous avez défini le focus sur un contrôle
-}
-void CIvyFileMonDlg::OnCancel()
-{
- // TODO: Add extra cleanup here
-
- if ( bus )
- {
- bus->stop();
- delete bus;
- }
-
- CDialog::OnCancel();
-}
-void CIvyFileMonDlg::OnSysCommand(UINT nID, LPARAM lParam)
-{
- if ((nID & 0xFFF0) == IDM_ABOUTBOX)
- {
- CAboutDlg dlgAbout;
- dlgAbout.DoModal();
- }
- else
- {
- CDialog::OnSysCommand(nID, lParam);
- }
-}
-
-// Si vous ajoutez un bouton Réduire à votre boîte de dialogue, vous devez utiliser le code ci-dessous
-// pour dessiner l'icône. Pour les applications MFC utilisant le modèle Document/Vue,
-// cela est fait automatiquement par l'infrastructure.
-
-void CIvyFileMonDlg::OnPaint()
-{
- if (IsIconic())
- {
- CPaintDC dc(this); // contexte de périphérique pour la peinture
-
- SendMessage(WM_ICONERASEBKGND, reinterpret_cast<WPARAM>(dc.GetSafeHdc()), 0);
-
- // Centrer l'icône dans le rectangle client
- int cxIcon = GetSystemMetrics(SM_CXICON);
- int cyIcon = GetSystemMetrics(SM_CYICON);
- CRect rect;
- GetClientRect(&rect);
- int x = (rect.Width() - cxIcon + 1) / 2;
- int y = (rect.Height() - cyIcon + 1) / 2;
-
- // Dessiner l'icône
- dc.DrawIcon(x, y, m_hIcon);
- }
- else
- {
- CDialog::OnPaint();
- }
-}
-
-// Le système appelle cette fonction pour obtenir le curseur à afficher lorsque l'utilisateur fait glisser
-// la fenêtre réduite.
-HCURSOR CIvyFileMonDlg::OnQueryDragIcon()
-{
- return static_cast<HCURSOR>(m_hIcon);
-}
-
-void CIvyFileMonDlg::OnBnClickedStart()
-{
- UpdateData(TRUE);
- bus->stop();
- m_busnumber = bus->GetDomain( CONVSTR(m_busnumber) );
- bus->start(CONVSTR(m_busnumber));
- watcher.WatchDirectory(m_directory,
- FILE_NOTIFY_CHANGE_FILE_NAME |FILE_NOTIFY_CHANGE_LAST_WRITE,
- this,
- FALSE, //<-- watch sub directories?
- m_extent, //<-- Include Filter
- NULL);//<-- Exclude Filter
- UpdateData(FALSE);
-}
-
-void CIvyFileMonDlg::SendIvyFile(const CString & strFileName)
-{
- CStdioFile file;
- CString line;
-
- TRACE("File Change %s\n", (LPCSTR)strFileName );
- if ( file.Open( strFileName, CFile::modeRead ) )
- {
- WriteMessage( "File %s Change sending file...",(LPCSTR)strFileName );
- bus->SendMsg("%s FileBegin %s",(LPCSTR)m_prefix, (LPCSTR)strFileName);
- while( file.ReadString(line) )
- {
- bus->SendMsg("%s FileLine %s",(LPCSTR) m_prefix, (LPCSTR)line);
- }
- file.Close();
- bus->SendMsg("%s FileEnd",(LPCSTR) m_prefix);
- WriteMessage( "File %s Change done",(LPCSTR)strFileName );
- }
-
-}
-void CIvyFileMonDlg::On_FileAdded(const CString & strFileName)
-{
- SendIvyFile( strFileName );
-}
-void CIvyFileMonDlg::On_FileModified(const CString & strFileName)
-{
- SendIvyFile( strFileName );
-} \ No newline at end of file
diff --git a/Bus/IvyFileMon/IvyFileMonDlg.h b/Bus/IvyFileMon/IvyFileMonDlg.h
deleted file mode 100644
index ffec31a..0000000
--- a/Bus/IvyFileMon/IvyFileMonDlg.h
+++ /dev/null
@@ -1,55 +0,0 @@
-// IvyFileMonDlg.h : fichier d'en-tête
-//
-
-#pragma once
-
-#include "Ivy.h"
-#include "afxwin.h"
-
-#include "DirectoryChanges.h"
-#include "HistoryEdit.h"
-
-// boîte de dialogue CIvyFileMonDlg
-class CIvyFileMonDlg : public CDialog, public IvyApplicationCallback, public CDirectoryChangeHandler
-{
-// Construction
-public:
- CIvyFileMonDlg(CWnd* pParent = NULL); // constructeur standard
-
-// Données de la boîte de dialogue
- enum { IDD = IDD_IVYFILEMON_DIALOG };
-
- protected:
- virtual void DoDataExchange(CDataExchange* pDX); // prise en charge de DDX/DDV
- virtual void OnCancel();
-
-// Implémentation
-protected:
- HICON m_hIcon;
-
- Ivy *bus;
- void WriteMessage(const char * format, ...);
- void OnApplicationConnected( IvyApplication *app );
- void OnApplicationDisconnected( IvyApplication *app );
- void OnDirectMessage( IvyApplication *app, int id, const char *arg );
- void SendIvyFile( const CString & strFileName );
-
- // Directory Handler
- CDirectoryChangeWatcher watcher;
- virtual void On_FileAdded(const CString & strFileName);
- virtual void On_FileModified(const CString & strFileName);
-
- // Fonctions générées de la table des messages
- virtual BOOL OnInitDialog();
- afx_msg void OnSysCommand(UINT nID, LPARAM lParam);
- afx_msg void OnPaint();
- afx_msg HCURSOR OnQueryDragIcon();
- DECLARE_MESSAGE_MAP()
-public:
- CString m_busnumber;
- CString m_directory;
- CString m_prefix;
- afx_msg void OnBnClickedStart();
- CHistoryEdit m_text;
- CString m_extent;
-};
diff --git a/Bus/IvyFileMon/ParseCmdLine.cpp b/Bus/IvyFileMon/ParseCmdLine.cpp
deleted file mode 100644
index fc6a1d8..0000000
--- a/Bus/IvyFileMon/ParseCmdLine.cpp
+++ /dev/null
@@ -1,76 +0,0 @@
-// ParseCmdLine.cpp: implementation of the ParseCmdLine class.
-//
-//////////////////////////////////////////////////////////////////////
-
-#include "stdafx.h"
-
-#include "ParseCmdLine.h"
-
-#ifdef _DEBUG
-#undef THIS_FILE
-static char THIS_FILE[]=__FILE__;
-#define new DEBUG_NEW
-#endif
-
-//////////////////////////////////////////////////////////////////////
-// Construction/Destruction
-//////////////////////////////////////////////////////////////////////
-
-ParseCmdLine::ParseCmdLine()
-{
- m_start = TRUE;
- m_busNumber = "";
- m_prefix = "IvyFileMon ";
- m_directory = "c:\\anoto_log\\strokes";
- m_extent = "*.txt";
-}
-
-ParseCmdLine::~ParseCmdLine()
-{
-
-}
-
-void ParseCmdLine::ParseParam(LPCTSTR lpszParam, BOOL bFlag, BOOL bLast)
-{
- if (bFlag)
- {
- ParseParamFlag(lpszParam);
- }
- else
- ParseParamNotFlag(lpszParam);
-
-}
-
-void ParseCmdLine::ParseParamFlag(LPCTSTR pszParam)
-{
-
- if (lstrcmpi(pszParam, TEXT("start")) == 0)
- m_start = TRUE;
- else if (lstrcmpi(pszParam, TEXT("bus")) == 0)
- m_shellCommand = BusNumber;
- else if (lstrcmpi(pszParam, TEXT("directory")) == 0)
- m_shellCommand = Directory;
- else if (lstrcmpi(pszParam, TEXT("prefix")) == 0)
- m_shellCommand = Prefix;
- else if (lstrcmpi(pszParam, TEXT("extent")) == 0)
- m_shellCommand = Extent;
-}
-
-void ParseCmdLine::ParseParamNotFlag(LPCTSTR pszParam)
-{
- switch ( m_shellCommand )
- {
- case BusNumber:
- m_busNumber = pszParam;
- break;
- case Directory:
- m_directory = pszParam;
- break;
- case Prefix:
- m_prefix = pszParam;
- break;
- case Extent:
- m_extent = pszParam;
- break;
- }
-}
diff --git a/Bus/IvyFileMon/ParseCmdLine.h b/Bus/IvyFileMon/ParseCmdLine.h
deleted file mode 100644
index 3b9a272..0000000
--- a/Bus/IvyFileMon/ParseCmdLine.h
+++ /dev/null
@@ -1,37 +0,0 @@
-// TestParseCmdLine.h: interface for the TestParseCmdLine class.
-//
-//////////////////////////////////////////////////////////////////////
-
-#if !defined(AFX_FXParseCMDLINE_H__20232B92_AB99_11D2_898F_00A0245B298A__INCLUDED_)
-#define AFX_FXParseCMDLINE_H__20232B92_AB99_11D2_898F_00A0245B298A__INCLUDED_
-
-#if _MSC_VER > 1000
-#pragma once
-#endif // _MSC_VER > 1000
-
-class ParseCmdLine : public CCommandLineInfo
-{
-public:
-
- BOOL m_start;
- CString m_busNumber;
- CString m_directory;
- CString m_extent;
- CString m_prefix;
- virtual void ParseParam( LPCTSTR lpszParam, BOOL bFlag, BOOL bLast );
- ParseCmdLine();
- virtual ~ParseCmdLine();
- enum {
- BusNumber,
- Start,
- Directory,
- Extent,
- Prefix
- }m_shellCommand;
-
-protected:
- void ParseParamNotFlag(LPCTSTR pszParam);
- void ParseParamFlag(LPCTSTR pszParam);
-};
-
-#endif // !defined(AFX_FXParseCMDLINE_H__20232B92_AB99_11D2_898F_00A0245B298A__INCLUDED_)
diff --git a/Bus/IvyFileMon/ReadMe.txt b/Bus/IvyFileMon/ReadMe.txt
deleted file mode 100644
index 8ef8ee3..0000000
--- a/Bus/IvyFileMon/ReadMe.txt
+++ /dev/null
@@ -1,87 +0,0 @@
-=================================================================================================
- BIBLIOTHÈQUE MICROSOFT FOUNDATION CLASS : Vue d'ensemble du projet IvyFileMon
-=================================================================================================
-
-AppWizard a créé cette application IvyFileMon à votre attention. Cette application
-explique les principes fondamentaux de l'utilisation des classes MFC (Microsoft Foundation Class)
-et constitue également un point de départ pour écrire votre propre application.
-
-Ce fichier fait la synthèse des différents éléments contenus dans chacun des fichiers qui constituent
-votre application IvyFileMon.
-
-IvyFileMon.vcproj
- Il s'agit du fichier projet principal pour les projets VC++ générés à l'aide d'un Assistant Application.
- Ce fichier contient des informations sur la version de Visual C++ qui a été utilisée pour générer
- le fichier ainsi que des informations relatives aux plates-formes, configurations et fonctionnalités
- sélectionnées dans l'Assistant Application.
-
-IvyFileMon.h
- Il s'agit du fichier d'en-tête principal pour l'application. Il comporte
- d'autres en-têtes de projet spécifiques (notamment Resource.h) et déclare la
- classe d'application CIvyFileMonApp.
-
-IvyFileMon.cpp
- Il s'agit du fichier source principal pour l'application. Il contient la classe
- d'application CIvyFileMonApp.
-
-IvyFileMon.rc
- Ce fichier dresse la liste de toutes les ressources Microsoft Windows utilisées
- par le programme, telles que les icônes, bitmaps et curseurs qui sont stockés
- dans le sous-répertoire RES. Vous pouvez modifier ce fichier directement dans Microsoft
- Visual C++. Vos ressources projet se trouvent dans 1036.
-
-res\IvyFileMon.ico
- Il s'agit du fichier icône utilisé en tant qu'icône de l'application. Cette icône
- est incluse dans le fichier de ressources principal IvyFileMon.rc.
-
-res\IvyFileMon.rc2
- Ce fichier contient les ressources qui ne sont pas modifiées par Microsoft
- Visual C++. Vous devez y placer toutes les ressources non modifiables par
- l'Éditeur de ressources.
-
-/////////////////////////////////////////////////////////////////////////////
-
-AppWizard crée une classe de dialogue :
-IvyFileMonDlg.h, IvyFileMonDlg.cpp - la boîte de dialogue
- Ces fichiers contiennent votre classe CIvyFileMonDlg, qui définit le
- comportement de la boîte de dialogue principale de votre application. Le modèle de boîte de
- dialogue se trouve dans le fichier IvyFileMon.rc, modifiable dans Microsoft Visual C++.
-/////////////////////////////////////////////////////////////////////////////
-
-Autres fonctionnalités :
-
-Contrôles ActiveX
- L'application offre la prise en charge des contrôles ActiveX.
-
-Prise en charge de l'aperçu avant impression et de l'impression
- AppWizard a généré le code requis pour gérer les commandes Impression, Configuration de l'impression et
- Aperçu avant impression en appelant des fonctions membres de la classe CView à partir de la bibliothèque MFC.
-/////////////////////////////////////////////////////////////////////////////
-
-Autres fichiers standard :
-
-StdAfx.h, StdAfx.cpp
- Ces fichiers servent à générer un fichier d'en-tête précompilé (PCH),
- appelé IvyFileMon.pch, et un fichier de types précompilés StdAfx.obj.
-
-Resource.h
- Il s'agit du fichier d'en-tête standard, qui définit les ID des nouvelles ressources.
- Ce fichier est lu et mis à jour par Microsoft Visual C++.
-
-/////////////////////////////////////////////////////////////////////////////
-
-Autres remarques :
-
-AppWizard utilise "TODO:" pour vous signaler les parties du code source
-que vous devez ajouter ou personnaliser.
-
-Si votre application utilise MFC dans une DLL partagée et que la langue de cette
-application n'est pas la même que celle utilisée par le système d'exploitation, vous
-devez copier les ressources localisées MFC70XXX.DLL correspondantes (situées sur le
-CD-ROM Microsoft Visual C++ dans le répertoire Win\System) dans le répertoire system
-ou system32 de votre ordinateur, puis renommer MFC70XXX.DLL en MFCLOC.DLL. ("XXX" est
-l'abréviation de la langue. Par exemple, MFC70DEU.DLL contient les ressources en allemand.)
-Si vous ne copiez pas la version localisée des ressources, certains éléments d'interface de
-votre application seront affichés dans la langue du système d'exploitation.
-
-/////////////////////////////////////////////////////////////////////////////
diff --git a/Bus/IvyFileMon/res/IvyFileMon.ico b/Bus/IvyFileMon/res/IvyFileMon.ico
deleted file mode 100644
index 8a84ca3..0000000
--- a/Bus/IvyFileMon/res/IvyFileMon.ico
+++ /dev/null
Binary files differ
diff --git a/Bus/IvyFileMon/res/IvyFileMon.manifest b/Bus/IvyFileMon/res/IvyFileMon.manifest
deleted file mode 100644
index b68a5ce..0000000
--- a/Bus/IvyFileMon/res/IvyFileMon.manifest
+++ /dev/null
@@ -1,22 +0,0 @@
-<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
-<assembly xmlns="urn:schemas-microsoft-com:asm.v1" manifestVersion="1.0">
-<assemblyIdentity
- version="1.0.0.0"
- processorArchitecture="X86"
- name="Microsoft.Windows.IvyFileMon"
- type="win32"
-/>
-<description>Tapez ici une description de votre application</description>
-<dependency>
- <dependentAssembly>
- <assemblyIdentity
- type="win32"
- name="Microsoft.Windows.Common-Controls"
- version="6.0.0.0"
- processorArchitecture="X86"
- publicKeyToken="6595b64144ccf1df"
- language="*"
- />
- </dependentAssembly>
-</dependency>
-</assembly>
diff --git a/Bus/IvyFileMon/res/IvyFileMon.rc2 b/Bus/IvyFileMon/res/IvyFileMon.rc2
deleted file mode 100644
index 1aea3fd..0000000
--- a/Bus/IvyFileMon/res/IvyFileMon.rc2
+++ /dev/null
@@ -1,13 +0,0 @@
-//
-// Ressources IvyFileMon.RC2 non modifiées directement par Microsoft Visual C++
-//
-
-#ifdef APSTUDIO_INVOKED
-#error this file is not editable by Microsoft Visual C++
-#endif //APSTUDIO_INVOKED
-
-
-/////////////////////////////////////////////////////////////////////////////
-// Ajoutez ici les ressources modifiées manuellement...
-
-/////////////////////////////////////////////////////////////////////////////
diff --git a/Bus/IvyFileMon/resource.h b/Bus/IvyFileMon/resource.h
deleted file mode 100644
index 5d1642d..0000000
--- a/Bus/IvyFileMon/resource.h
+++ /dev/null
@@ -1,28 +0,0 @@
-//{{NO_DEPENDENCIES}}
-// Microsoft Visual C++ generated include file.
-// Used by IvyFileMon.rc
-//
-#define IDR_MANIFEST 1
-#define IDM_ABOUTBOX 0x0010
-#define IDD_ABOUTBOX 100
-#define IDS_ABOUTBOX 101
-#define IDD_IVYFILEMON_DIALOG 102
-#define IDR_MAINFRAME 128
-#define IDC_BUS 1000
-#define IDC_DIRECTORY 1001
-#define IDC_PREFIX 1002
-#define IDC_START 1003
-#define IDC_TEXT 1004
-#define IDC_PREFIX2 1005
-#define IDC_EXTENT 1005
-
-// Next default values for new objects
-//
-#ifdef APSTUDIO_INVOKED
-#ifndef APSTUDIO_READONLY_SYMBOLS
-#define _APS_NEXT_RESOURCE_VALUE 129
-#define _APS_NEXT_COMMAND_VALUE 32771
-#define _APS_NEXT_CONTROL_VALUE 1005
-#define _APS_NEXT_SYMED_VALUE 101
-#endif
-#endif
diff --git a/Bus/IvyFileMon/stdafx.cpp b/Bus/IvyFileMon/stdafx.cpp
deleted file mode 100644
index 9c25d46..0000000
--- a/Bus/IvyFileMon/stdafx.cpp
+++ /dev/null
@@ -1,7 +0,0 @@
-// stdafx.cpp : le fichier source qui inclut uniquement le fichier Include
-// IvyFileMon.pch sera l'en-tête précompilé
-// stdafx.obj contiendra les informations de type précompilé
-
-#include "stdafx.h"
-
-
diff --git a/Bus/IvyFileMon/stdafx.h b/Bus/IvyFileMon/stdafx.h
deleted file mode 100644
index 768f5e5..0000000
--- a/Bus/IvyFileMon/stdafx.h
+++ /dev/null
@@ -1,42 +0,0 @@
-// stdafx.h : fichier Include pour les fichiers Include système standard,
-// ou pour les fichiers Include spécifiques au projet qui sont fréquemment utilisés,
-// mais rarement modifiés
-
-#pragma once
-
-#ifndef VC_EXTRALEAN
-#define VC_EXTRALEAN // Exclut les informations rarement utilisées des en-têtes Windows
-#endif
-
-// Modifiez les valeurs suivantes si votre plate-forme cible est antérieure aux plates-formes spécifiées ci-après.
-// Consultez la documentation MSDN pour obtenir des informations récentes sur les valeurs respectives des différentes plates-formes.
-#ifndef WINVER // Permet l'utilisation de fonctionnalités spécifiques à Windows 95 et à Windows NT 4 ou version ultérieure.
-#define WINVER 0x0400 // La valeur appropriée doit être utilisée pour des applications cibles Windows 98 et Windows 2000 ou version ultérieure.
-#endif
-
-#ifndef _WIN32_WINNT // Permet l'utilisation de fonctionnalités spécifiques à Windows NT 4 ou version ultérieure.
-#define _WIN32_WINNT 0x0400 // La valeur appropriée doit être utilisée pour des applications cibles Windows 98 et Windows 2000 ou version ultérieure.
-#endif
-
-#ifndef _WIN32_WINDOWS // Permet l'utilisation de fonctionnalités spécifiques à Windows 98 ou version ultérieure.
-#define _WIN32_WINDOWS 0x0410 // La valeur appropriée doit être utilisée pour des applications cibles Windows Me ou version ultérieure.
-#endif
-
-#ifndef _WIN32_IE // Permet l'utilisation de fonctionnalités spécifiques à Internet Explorer 4.0 ou version ultérieure.
-#define _WIN32_IE 0x0400 // La valeur appropriée doit être utilisée pour des applications cibles Internet Explorer 5.0 ou version ultérieure.
-#endif
-
-#define _ATL_CSTRING_EXPLICIT_CONSTRUCTORS // certains constructeurs CString seront explicites
-
-// désactive le masquage MFC de certains messages d'avertissement courants et par ailleurs souvent ignorés
-#define _AFX_ALL_WARNINGS
-
-#include <afxwin.h> // composants MFC principaux et standard
-#include <afxext.h> // extensions MFC
-#include <afxdisp.h> // classes Automation MFC
-
-#include <afxdtctl.h> // Prise en charge MFC des contrôles communs Internet Explorer 4
-#ifndef _AFX_NO_AFXCMN_SUPPORT
-#include <afxcmn.h> // Prise en charge MFC des contrôles communs Windows
-#endif // _AFX_NO_AFXCMN_SUPPORT
-#include <winsock.h>
diff --git a/Bus/IvyProbe/ETSLayout.cpp b/Bus/IvyProbe/ETSLayout.cpp
deleted file mode 100644
index 994c5ce..0000000
--- a/Bus/IvyProbe/ETSLayout.cpp
+++ /dev/null
@@ -1,3057 +0,0 @@
-////////////////////////////////////////////
-// ___ ____ _________________ //
-// / _/_ _// _______________/ //
-// / _/ / / / / ___ ___ ____ //
-// /__/ /_/ / / / // _/_ _/ //
-// _________/ / / / // _/ / / //
-// (c) 1998-2000_/ /___//_/ /_/ //
-// //
-////////////////////////////////////////////
-// all rights reserved //
-////////////////////////////////////////////
-
-/////////////////////////////////////////////////////////////////////////////
-// ETSLayoutDialog
-//
-// A class for smart layouting of Dialogs and such
-//
-// USAGE: See LayoutMgr.html
-//
-// AUTHOR: Erwin Tratar <tr@et-soft.de>
-//
-// DISCLAIMER:
-//
-// This Sourcecode and all accompaning material is ©1998-1999 Erwin Tratar.
-// All rights reserved.
-//
-// The source code may be used in compiled form in any way you desire
-// (including usage in commercial applications), providing that your
-// application adds essential code (i.e. it is not only a wrapper) to the
-// functionality found here
-//
-// Redistribution of the sourcecode itself, publication in any media or
-// inclusion in a library requires the authors expressed written consent.
-// You may not sale this code for profit.
-//
-// THIS SOFTWARE IS PROVIDED "AS IS" WITHOUT EXPRESS OR IMPLIED WARRANTY. USE IT
-// AT YOUR OWN RISK! THE AUTHOR ACCEPTS NO LIABILITY FOR ANY DAMAGE/LOSS OF
-// BUSINESS THAT THIS PRODUCT MAY CAUSE.
-//
-//
-// HISTORY:
-// 1998/05/1 Initial Release
-// 1998/05/13 Added ability to have a Pane with a control
-// 1998/05/13 Added better support for TabControls
-// 1998/05/14 automatically set Icon to IDR_MAINFRAME
-// 1998/05/19 no flicker on restoring position in OnInitialUpdate
-// Changed procedure for load/save, see constructor
-// 1998/10/02 Added support for Maximum (tracking) size
-// 1998/10/02 Much improved handling regarding RELATIVE/GREEDY
-// /w critical minimum size
-// 1998/10/02 turn on/off gripper at lower right corner
-// 1998/10/05 Support for user defined minimum size for items
-// (was hardcoded 5 before)
-// 1998/10/07 Fix for FormViews
-// 1998/10/31 Support for SECDialogBar/CDialogBar
-// 1998/10/31 simplified interface
-// 1998/10/31 Advanced positioning options
-// 1998/10/31 Added paneNull for empty Pane (former: NULL)
-// 1998/11/20 Swapped ETSLayoutDialog constructor parameters
-// 1998/11/20 Added Pane::addItemSpaceBetween
-// [Leo Zelevinsky]
-// 1998/11/24 Added fixup for greedy panes
-// 1998/11/24 addItemSpaceBetween now subtracts 2*nDefaultBorder
-// 1998/11/24 addGrowing() added as a shortcut for a paneNull
-// 1998/11/24 simplified interface: no more PaneBase:: / Pane::
-// needed
-// 1998/11/24 added FILL_* Modes
-// 1998/11/24 improved maximum size handling for greedy panes
-// 1998/11/25 Fixup of greedy panes caused infinite loop in some
-// cases
-// 1999/01/07 addItemSpaceLike() added
-// 1999/04/03 Fixed ETSLayoutFormView memory leak
-// 1999/04/07 Fixed ALIGN_xCENTER
-// 1999/04/08 New simple stream-interface added
-// 1999/04/09 Added support for an empty Status-Bar for resizing
-// instead of a gripper in the lower right corner
-// [Andreas Kapust]
-// 1999/04/11 New code for much less flickering, OnEraseBkgnd()
-// overidden for this task
-// 1999/05/12 Split Layout code into understandable pieces and adding
-// a lot of comments
-// 1999/06/20 ABSOLUTE_X + ALIGN_FILL_X expands item if there is any
-// left space (after all Abs/Rel/Greedy processing is done)
-// 1999/10/06 Changed Load() and Save() to use WINDOWPLACEMENT
-// [Keith Bussell]
-// 1999/11/18 Added possibility to add panes of the same orientation
-// to another pane. This merges both panes in one big
-// pane with the same orientation
-// 1999/11/18 Added support for BCGDialogBar (only with BCG > 4.52!)
-// 1999/11/25 Addes support for PropertyPages/Sheets. Uses some code
-// of a code submission from Anreas Kapust
-// 1999/11/25 Renamed classes to ETSLayoutXXX
-// 1999/11/25 Use CreateRoot() and Root() instead of m_pRootPane in
-// derived class.
-// 1999/11/26 Added autopointer support. No need to use normal pointers
-// when defining layout anymore. Changed m_pRootPane to
-// m_RootPane
-// 1999/11/26 Bug in Fixup Greedy II with multiple GREEDY panes and one
-// of them min/max limited
-// 1999/11/28 Fixed PaneTab::getConstrainVert() for ABSOLUTE_VERT
-// 1999/11/28 Fixed itemFixed()
-// 1999/11/28 Changed DWORD modeResize Arguments to layModeResize for
-// better type safety. Added typesafe operator|
-// 1999/12/04 Don't reposition window in UpdateLayout if it's a child
-// (as a child Dialog or PropertyPage)
-// 1999/12/04 Erase Backgroung with GCL_HBRBACKGROUND (if available)
-// 1999/12/04 itemSpaceXXX() adds a NORESIZE item instead of ABSOLUTE_XXX
-// this will fix unwanted growing in secondary direction
-//
-// Version: 1.0 [1999/12/04] Initial Article on CodeProject
-//
-// 1999/12/10 Erase Backgroung within TabCtrl was 'fixed' badly. Reverted to
-// old working code
-// 2000/02/02 When the Dialog is child of a View the class works correctly
-// now [Didier BULTIAUW]
-// 2000/02/15 Combo-Boxes were not working correctly (in all modes!)
-// 2000/02/17 aligned SpinButton Controls (with buddy) now handled
-// automatically
-// !! do not add such a control to the layout !! it is always
-// reattached to its buddy.
-// 2000/02/17 changed some cotrol class names to the defined constants
-//
-// Version: 1.1 [2000/02/17]
-//
-// 2000/02/25 Fixed auto alignment of SpinButton Controls to only affect
-// visible ones
-// 2000/02/27 Put all the classes into the namespace 'ETSLayout'
-// 2000/03/07 Fixed growing Dialog after minimizing and restoring
-// 2000/05/22 Whole Statusbar (Gripper) is not excluded anymore in EraseBkgnd()
-// instead only the triangular Gripper is excluded
-// 2000/05/31 Fix for PropertySheets with PSH_WIZARDHASFINISH [Thömmi]
-// 2000/05/31 Fix for UpDown-Controls with EditCtrl Buddy in PropertyPages.
-// These were not repositioned every time the page is being show
-// until the first resize
-// 2000/07/28 Problems with resizing ActiveX Controls fixed [Micheal Chapman]
-// 2000/07/28 Some strings were not properly wrapped with _T()
-// 2000/08/03 Check for BS_GROUPBOX was not correct as BS_GROUPBOX is more than one Bit
-// 2000/08/03 New override AddMainArea added to ETSLayoutPropertySheet in order to
-// have a hook for additional controls in a PropertySheet (besides the Tab)
-// 2000/08/03 New override AddButtons added to ETSLayoutPropertySheet in order to
-// have a hook for additional controls in the bottem pane of a PropertySheet
-// 2000/08/03 Removed the need for DECLARE_LAYOUT
-//
-// Version: 1.2 [2000/08/05]
-
-#define OEMRESOURCE
-#include <windows.h>
-
-#include "stdafx.h"
-#include "ETSLayout.h"
-
-using namespace ETSLayout;
-#pragma warning(disable: 4097 4610 4510 4100)
-
-
-#ifndef OBM_SIZE
-#define OBM_SIZE 32766
-// taken from WinresRc.h
-// if not used for any reason
-#endif
-
-#ifdef _DEBUG
-#define new DEBUG_NEW
-#undef THIS_FILE
-static char THIS_FILE[] = __FILE__;
-#endif
-
-static UINT auIDStatusBar[] =
-{
- ID_SEPARATOR
-};
-
-const int ERASE_GROUP_BORDER = 10;
-const int FIXUP_CUTOFF = 5;
-const int TAB_SPACE = 5;
-
-// the _NULL-Pane
-CWnd* ETSLayoutMgr::paneNull = 0;
-
-void ETSLayoutMgr::Layout(CRect& rcClient)
-{
- if(rcClient.Height() && rcClient.Width() && m_RootPane.IsValid()) \
- m_RootPane->resizeTo(rcClient); \
-}
-
-
-ETSLayoutMgr::CPane ETSLayoutMgr::pane( layOrientation orientation, ETSLayoutMgr::layResizeMode modeResize /*=GREEDY*/,
- int sizeBorder /*=nDefaultBorder*/, int sizeExtraBorder /*=0*/,
- int sizeSecondary /*=0*/)
-{
- Pane* pPane = new Pane ( this, orientation, sizeBorder, sizeExtraBorder );
- pPane->m_sizeSecondary = sizeSecondary;
- pPane->m_modeResize = modeResize;
-
- return CPane(pPane);
-}
-
-ETSLayoutMgr::CPane ETSLayoutMgr::paneTab( CTabCtrl* pTab, layOrientation orientation,
- ETSLayoutMgr::layResizeMode modeResize /*=GREEDY*/, int sizeBorder /*=nDefaultBorder*/,
- int sizeExtraBorder /*=0*/, int sizeSecondary /*=0*/)
-{
- Pane* pPane = new PaneTab ( pTab, this, orientation, sizeBorder, sizeExtraBorder );
- pPane->m_sizeSecondary = sizeSecondary;
- pPane->m_modeResize = modeResize;
-
- return CPane(pPane);
-}
-
-
-ETSLayoutMgr::CPane ETSLayoutMgr::paneCtrl( CWnd* pCtrl, layOrientation orientation,
- ETSLayoutMgr::layResizeMode modeResize /*=GREEDY*/, int sizeBorder /*=nDefaultBorder*/,
- int sizeExtraBorder /*=0*/, int sizeTopExtra /*=0*/,
- int sizeSecondary /*=0*/)
-{
- Pane* pPane = new PaneCtrl ( pCtrl, this, orientation, sizeBorder, sizeExtraBorder, sizeTopExtra );
- pPane->m_sizeSecondary = sizeSecondary;
- pPane->m_modeResize = modeResize;
-
- return CPane(pPane);
-}
-
-ETSLayoutMgr::CPane ETSLayoutMgr::paneCtrl( UINT nID, layOrientation orientation, ETSLayoutMgr::layResizeMode modeResize /*=GREEDY*/,
- int sizeBorder /*=nDefaultBorder*/, int sizeExtraBorder /*=0*/,
- int sizeTopExtra /*=0*/, int sizeSecondary /*=0*/)
-{
- Pane* pPane = new PaneCtrl ( nID, this, orientation, sizeBorder, sizeExtraBorder, sizeTopExtra );
- pPane->m_sizeSecondary = sizeSecondary;
- pPane->m_modeResize = modeResize;
-
- return CPane(pPane);
-}
-
-
-ETSLayoutMgr::CPaneBase ETSLayoutMgr::item(UINT nID, ETSLayoutMgr::layResizeMode modeResize /*=GREEDY*/, int sizeX /*=0*/, int sizeY /*=0*/,
- int sizeXMin /*=-1*/, int sizeYMin /*=-1*/)
-{
- return new PaneItem( nID, this, modeResize, sizeX, sizeY, sizeXMin, sizeYMin);
-}
-
-ETSLayoutMgr::CPaneBase ETSLayoutMgr::item(CWnd* pWnd, ETSLayoutMgr::layResizeMode modeResize /*=GREEDY*/,
- int sizeX /*=0*/, int sizeY /*=0*/, int sizeXMin /*=-1*/,
- int sizeYMin /*=-1*/)
-{
- return new PaneItem( pWnd, this, modeResize, sizeX, sizeY, sizeXMin, sizeYMin);
-}
-
-ETSLayoutMgr::CPaneBase ETSLayoutMgr::itemFixed(layOrientation orientation, int sizePrimary)
-{
- CPaneBase p = new PaneItem(paneNull, this, NORESIZE, (orientation==HORIZONTAL)?sizePrimary:0, (orientation==VERTICAL)?sizePrimary:0);
- return p;
-}
-
-ETSLayoutMgr::CPaneBase ETSLayoutMgr::itemGrowing(layOrientation orientation)
-{
- return new PaneItem(paneNull, this, (orientation==HORIZONTAL)?ABSOLUTE_VERT:ABSOLUTE_HORZ, 0, 0, -nDefaultBorder, -nDefaultBorder);
-}
-
-ETSLayoutMgr::CPaneBase ETSLayoutMgr::itemSpaceBetween( layOrientation orientation, CWnd* pWndFirst, CWnd* pWndSecond )
-{
- if( orientation == HORIZONTAL ) {
- // I'm interested in horizontal spacing
-
- CRect rLeft, rRight;
- pWndFirst->GetWindowRect(&rLeft);
- pWndSecond->GetWindowRect(&rRight);
-
- int sizeX = rRight.left - rLeft.right;
-
- if( sizeX < 0 ) {
- // compare top to top
- sizeX = rRight.left - rLeft.left;
- }
- else {
- sizeX -= 2*nDefaultBorder;
- }
-
- return new PaneItem(paneNull, this, NORESIZE, sizeX, 0);
- }
- else {
- // I'm interested in vertical spacing
- CRect rTop, rBot;
- pWndFirst->GetWindowRect(&rTop);
- pWndSecond->GetWindowRect(&rBot);
-
- int sizeY = rBot.top - rTop.bottom;
-
- if( sizeY < 0 ) {
- // compare top to top
- sizeY = sizeY = rBot.top - rTop.top;
- }
- else {
- sizeY -= 2*nDefaultBorder;
- }
-
- return new PaneItem(paneNull, this, NORESIZE, 0, sizeY);
- }
-}
-
-
-ETSLayoutMgr::CPaneBase ETSLayoutMgr::itemSpaceBetween( layOrientation orientation, UINT nIDFirst, UINT nIDSecond )
-{
- CWnd *pFirst = GetWnd()->GetDlgItem(nIDFirst);
- CWnd *pSecond = GetWnd()->GetDlgItem(nIDSecond);
-
- ASSERT( pFirst && pSecond );
-
- return itemSpaceBetween( orientation, pFirst, pSecond );
-}
-
-
-ETSLayoutMgr::CPaneBase ETSLayoutMgr::itemSpaceLike( layOrientation orientation, CWnd* pWnd )
-{
- CRect rRect;
- pWnd->GetWindowRect(&rRect);
-
- if( orientation == HORIZONTAL ) {
- // I'm interested in horizontal spacing
- return new PaneItem(paneNull, this, NORESIZE, rRect.Width(), 0);
- }
- else {
- // I'm interested in vertical spacing
- return new PaneItem(paneNull, this, NORESIZE, 0, rRect.Height() );
- }
-
-}
-
-
-ETSLayoutMgr::CPaneBase ETSLayoutMgr::itemSpaceLike( layOrientation orientation, UINT nID )
-{
- CWnd *pWnd = GetWnd()->GetDlgItem(nID);
- ASSERT( pWnd );
-
- return itemSpaceLike( orientation, pWnd );
-}
-
-
-
-ETSLayoutMgr::~ETSLayoutMgr()
-{
-}
-
-void ETSLayoutMgr::UpdateLayout()
-{
- if(!m_RootPane)
- return;
-
- // Check constraints
- CRect rcClient = GetRect();
-
- if( m_pWnd->IsKindOf( RUNTIME_CLASS( CDialog ) ) && !(m_pWnd->GetStyle()&WS_CHILD) ) {
- CRect rcWindow;
- m_pWnd->GetWindowRect(rcWindow);
-
- // Added by Didier BULTIAUW
- CWnd* parentWnd = m_pWnd->GetParent();
- if( (parentWnd != 0) && parentWnd->IsKindOf(RUNTIME_CLASS(CView)) )
- {
- CRect rcParent;
- parentWnd->GetWindowRect(rcParent);
- rcWindow.OffsetRect(-rcParent.left,-rcParent.top);
- }
- // end add
-
- CRect rcBorder = rcWindow;
- rcBorder -= rcClient;
-
- // Min and Max info
- int minWidth = m_RootPane->getMinConstrainHorz() + rcBorder.Width() + 2*m_sizeRootBorders.cx;
- int minHeight = m_RootPane->getMinConstrainVert() + rcBorder.Height() + 2*m_sizeRootBorders.cy;
- int maxWidth = m_RootPane->getMaxConstrainHorz();
- if(maxWidth != -1) {
- maxWidth += rcBorder.Width() + 2*m_sizeRootBorders.cx;
- maxWidth = max(maxWidth, minWidth);
- }
- int maxHeight = m_RootPane->getMaxConstrainVert();
- if(maxHeight != -1) {
- maxHeight += rcBorder.Height() + 2*m_sizeRootBorders.cy;
- maxHeight = max(maxHeight, minHeight);
- }
-
- if(rcWindow.Width() < minWidth)
- rcWindow.right = rcWindow.left + minWidth;
- if(rcWindow.Height() < minHeight)
- rcWindow.bottom = rcWindow.top + minHeight;
-
- if(maxWidth != -1 && rcWindow.Width() > maxWidth)
- rcWindow.right = rcWindow.left + maxWidth;
- if(maxHeight != -1 && rcWindow.Height() > maxHeight)
- rcWindow.bottom = rcWindow.top + maxHeight;
-
- m_pWnd->MoveWindow(rcWindow);
- }
- // Do the Layout
- rcClient = GetRect();
-
- // Add a Border around the rootPane
- rcClient.top += m_sizeRootBorders.cy;
- rcClient.bottom -= m_sizeRootBorders.cy;
- rcClient.left += m_sizeRootBorders.cx;
- rcClient.right -= m_sizeRootBorders.cx;
-
- if(GetWnd()->IsWindowVisible()) {
- // Avoid ugly artifacts
- //GetWnd()->SetRedraw(FALSE);
- Layout(rcClient);
- //GetWnd()->SetRedraw(TRUE);
- }
- else
- Layout(rcClient);
-
- // Take special care of SpinButtons (Up-Down Controls) with Buddy set, enumerate
- // all childs:
- CWnd* pWndChild = GetWnd()->GetWindow(GW_CHILD);
- TCHAR szClassName[ MAX_PATH ];
- while(pWndChild)
- {
- ::GetClassName( pWndChild->GetSafeHwnd(), szClassName, MAX_PATH );
- DWORD dwStyle = pWndChild->GetStyle();
-
- // is it a SpinButton?
- if( _tcscmp(szClassName, UPDOWN_CLASS)==0 && ::IsWindowVisible(pWndChild->GetSafeHwnd()) ) {
- HWND hwndBuddy = (HWND)::SendMessage( pWndChild->GetSafeHwnd(), UDM_GETBUDDY, 0, 0);
- if( hwndBuddy != 0 && (dwStyle&(UDS_ALIGNRIGHT|UDS_ALIGNLEFT)) != 0 )
- {
- // reset Buddy
- ::SendMessage( pWndChild->GetSafeHwnd(), UDM_SETBUDDY, (WPARAM)hwndBuddy, 0);
- }
- }
-
-
- pWndChild = pWndChild->GetWindow(GW_HWNDNEXT);
- }
-
-
- GetWnd()->Invalidate();
-}
-
-
-bool ETSLayoutMgr::Save(LPCTSTR lpstrRegKey)
-{
- CRect rcWnd;
-
- if(IsWindow(GetWnd()->m_hWnd))
- {
- WINDOWPLACEMENT wp;
- if(GetWnd()->GetWindowPlacement(&wp))
- {
- // Make sure we don't pop up
- // minimized the next time
- if(wp.showCmd != SW_SHOWMAXIMIZED)
- wp.showCmd = SW_SHOWNORMAL;
-
- AfxGetApp()->WriteProfileBinary(lpstrRegKey,
- _T("WindowPlacement"),
- reinterpret_cast<LPBYTE>(&wp), sizeof(wp));
- }
- }
- return true;
-}
-
-bool ETSLayoutMgr::Load(LPCTSTR lpstrRegKey)
-{
- LPBYTE pbtData = 0;
- UINT nSize = 0;
- if(AfxGetApp()->GetProfileBinary(lpstrRegKey,
- _T("WindowPlacement"), &pbtData, &nSize))
- {
- WINDOWPLACEMENT* pwp =
- reinterpret_cast<WINDOWPLACEMENT*>(pbtData);
-
- ASSERT(nSize == sizeof(WINDOWPLACEMENT));
- if(nSize == sizeof(WINDOWPLACEMENT))
- GetWnd()->SetWindowPlacement(reinterpret_cast<WINDOWPLACEMENT*>(pbtData));
-
- delete [] pbtData;
- }
- return true;
-}
-
-
-void ETSLayoutMgr::EraseBkgnd(CDC* pDC)
-{
- CRect rcClient;
- GetWnd()->GetClientRect( rcClient );
-
- CRgn rgn;
- rgn.CreateRectRgnIndirect(rcClient);
- //TRACE("CreateRgn (%d,%d,%d,%d)\n", rcClient.left, rcClient.top, rcClient.right, rcClient.bottom );
-
- CRgn rgnRect;
- rgnRect.CreateRectRgn(0,0,0,0);
-
- CRect rcChild;
- CWnd* pWndChild = GetWnd()->GetWindow( GW_CHILD );
-
- TCHAR szClassName[ MAX_PATH ];
-
- pDC->SelectClipRgn(NULL);
-
- while( pWndChild ) {
-
- pWndChild->GetWindowRect(rcChild);
- GetWnd()->ScreenToClient( rcChild );
-
- rgnRect.SetRectRgn( rcChild );
-
- ::GetClassName( pWndChild->GetSafeHwnd(), szClassName, MAX_PATH );
- DWORD dwStyle = pWndChild->GetStyle();
-
- // doesn't make sense for hidden children
- if( dwStyle & WS_VISIBLE ) {
-
- // Fix: BS_GROUPBOX is more than one Bit, extend check to (dwStyle & BS_GROUPBOX)==BS_GROUPBOX [ET]
- if( _tcscmp(szClassName,_T("Button"))==0 && (dwStyle & BS_GROUPBOX)==BS_GROUPBOX ) {
- // it is a group-box, ignore completely
- }
- else if( _tcscmp(szClassName,WC_TABCONTROL )==0 ) {
- // ignore Tab-Control's inside rect
- static_cast<CTabCtrl*>(pWndChild)->AdjustRect(FALSE,rcChild);
-
- CRgn rgnContent;
- rgnContent.CreateRectRgnIndirect(rcChild);
-
- rgnRect.CombineRgn( &rgnRect, &rgnContent, RGN_DIFF );
- rgn.CombineRgn( &rgn, &rgnRect, RGN_DIFF );
- }
- else if( _tcscmp(szClassName,STATUSCLASSNAME)==0 ) {
-
- CPoint ptTriangleGrip[3];
- ptTriangleGrip[0] = CPoint(rcChild.right,rcChild.top);
- ptTriangleGrip[1] = CPoint(rcChild.right,rcChild.bottom);
- ptTriangleGrip[2] = CPoint(rcChild.right-rcChild.Height(),rcChild.bottom);
-
- CRgn rgnGripper;
- rgnGripper.CreatePolygonRgn(ptTriangleGrip,3, WINDING);
-
- rgn.CombineRgn( &rgn, &rgnGripper, RGN_DIFF );
-
- }
- else {
- rgn.CombineRgn( &rgn, &rgnRect, RGN_DIFF );
- }
- }
-
- pWndChild = pWndChild->GetNextWindow();
- }
-
- HBRUSH hBrBack = 0;
-#ifdef GCL_HBRBACKGROUND
- hBrBack = (HBRUSH) ::GetClassLong(GetWnd()->GetSafeHwnd(), GCL_HBRBACKGROUND) ;
-#endif
- if( hBrBack == 0 )
- hBrBack = ::GetSysColorBrush(COLOR_BTNFACE);
-
- pDC->FillRgn( &rgn,
- CBrush::FromHandle( hBrBack )
- );
-
-}
-
-/////////////////////////////////////////////////////////////////////////////
-// ETSLayoutMgr::PaneItem implementation
-
-
-ETSLayoutMgr::PaneItem::PaneItem(CWnd* pWnd, ETSLayoutMgr* pMgr, ETSLayoutMgr::layResizeMode modeResize/*=GREEDY*/
- , int sizeX/*=0*/, int sizeY/*=0*/
- , int sizeXMin/*=-1*/, int sizeYMin/*=-1*/ ) : PaneBase( pMgr )
-{
- m_modeResize = modeResize;
- m_hwndCtrl = pWnd->GetSafeHwnd();
-
- m_sizeX = 0;
- m_sizeY = 0;
-
- m_bComboSpecial = false;
-
- m_sizeXMin = sizeXMin;
- m_sizeYMin = sizeYMin;
-
- if(!m_hwndCtrl) { // only Dummy!
- m_sizeX = sizeX;
- m_sizeY = sizeY;
- }
- else {
- CRect rcControl;
- ::GetWindowRect(m_hwndCtrl, &rcControl);
-
- if(sizeX == 0) {
- m_sizeX = rcControl.Width();
- }
- else {
- m_sizeX = sizeX;
- }
- if( m_sizeXMin == -1 ) {
- // do not make smaller than current size
- m_sizeXMin = rcControl.Width();
- }
-
- if(sizeY == 0) {
- m_sizeY = rcControl.Height();
- }
- else {
- m_sizeY = sizeY;
- }
- if( m_sizeYMin == -1 ) {
- // do not make smaller than current size
- m_sizeYMin = rcControl.Height();
- }
-
- TCHAR szClassName[ MAX_PATH ];
- ::GetClassName( m_hwndCtrl, szClassName, MAX_PATH );
-
- // special treatment for combo-boxes
- if( _tcscmp(szClassName,_T("ComboBox"))==0 || _tcscmp(szClassName,WC_COMBOBOXEX)==0) {
- m_bComboSpecial = true;
- }
- }
-}
-
-ETSLayoutMgr::PaneItem::PaneItem( UINT nID, ETSLayoutMgr* pMgr, ETSLayoutMgr::layResizeMode modeResize/*=GREEDY*/
- , int sizeX/*=0*/, int sizeY/*=0*/
- , int sizeXMin/*=-1*/, int sizeYMin/*=-1*/ ) : PaneBase( pMgr )
-{
- CWnd* pWnd = pMgr->GetWnd()->GetDlgItem(nID);
- m_hwndCtrl = pWnd->GetSafeHwnd();
-
- m_sizeX = 0;
- m_sizeY = 0;
-
- m_bComboSpecial = false;
-
- m_modeResize = modeResize;
-
- m_sizeXMin = sizeXMin;
- m_sizeYMin = sizeYMin;
-
- if(!m_hwndCtrl) { // only Dummy!
- m_sizeX = sizeX;
- m_sizeY = sizeY;
- }
- else {
- CRect rcControl;
- ::GetWindowRect(m_hwndCtrl, &rcControl);
-
- if(sizeX == 0) {
- m_sizeX = rcControl.Width();
- }
- else {
- m_sizeX = sizeX;
- }
- if( m_sizeXMin == -1 ) {
- // do not make smaller than current size
- m_sizeXMin = rcControl.Width();
- }
-
- if(sizeY == 0) {
- m_sizeY = rcControl.Height();
- }
- else {
- m_sizeY = sizeY;
- }
- if( m_sizeYMin == -1 ) {
- // do not make smaller than current size
- m_sizeYMin = rcControl.Height();
- }
-
- TCHAR szClassName[ MAX_PATH ];
- ::GetClassName( m_hwndCtrl, szClassName, MAX_PATH );
-
- // special treatment for combo-boxes
- if( _tcscmp(szClassName,_T("ComboBox"))==0 || _tcscmp(szClassName,WC_COMBOBOXEX)==0) {
- m_bComboSpecial = true;
- }
- }
-}
-
-int ETSLayoutMgr::PaneItem::getConstrainHorz(int sizeParent)
-{
- if( m_modeResize & ABSOLUTE_HORZ) {
- return m_sizeX;
- }
- if(m_modeResize & RELATIVE_HORZ) {
- return (sizeParent * m_sizeX) / 100;
- }
- return -1;
-}
-
-int ETSLayoutMgr::PaneItem::getConstrainVert(int sizeParent)
-{
- if(m_modeResize & ABSOLUTE_VERT) {
- return m_sizeY;
- }
- if(m_modeResize & RELATIVE_VERT) {
- return (sizeParent * m_sizeY) / 100;
- }
- return -1;
-}
-
-int ETSLayoutMgr::PaneItem::getMinConstrainHorz()
-{
- if(m_modeResize & ABSOLUTE_HORZ) {
- return m_sizeX;
- }
- return max(nMinConstrain,m_sizeXMin);
-}
-
-int ETSLayoutMgr::PaneItem::getMinConstrainVert()
-{
- if(m_modeResize & ABSOLUTE_VERT) {
- return m_sizeY;
- }
- return max(nMinConstrain,m_sizeYMin);
-}
-
-int ETSLayoutMgr::PaneItem::getMaxConstrainHorz()
-{
- if(m_modeResize & ABSOLUTE_HORZ) {
- return m_sizeX;
- }
- return -1;
-}
-
-int ETSLayoutMgr::PaneItem::getMaxConstrainVert()
-{
- if(m_modeResize & ABSOLUTE_VERT) {
- return m_sizeY;
- }
- return -1;
-}
-
-bool ETSLayoutMgr::PaneItem::resizeTo(CRect& rcNewArea)
-{
- if(m_hwndCtrl) {
-
- CRect rcWnd;
- ::GetWindowRect( m_hwndCtrl, rcWnd );
-
- if( !(m_modeResize & ALIGN_FILL_HORZ) && m_modeResize & ABSOLUTE_HORZ ) {
-
-
- if( (m_modeResize & ALIGN_HCENTER) == ALIGN_HCENTER ) {
- rcNewArea.OffsetRect( (rcNewArea.Width() - rcWnd.Width())/2, 0 );
- }
- else if( m_modeResize & ALIGN_RIGHT ) {
- rcNewArea.OffsetRect( rcNewArea.Width() - rcWnd.Width(), 0 );
- }
-
- rcNewArea.right = rcNewArea.left + rcWnd.Width();
- }
- if( !(m_modeResize & ALIGN_FILL_VERT) && m_modeResize & ABSOLUTE_VERT ) {
-
-
- if( (m_modeResize & ALIGN_VCENTER) == ALIGN_VCENTER ) {
- rcNewArea.OffsetRect( 0, (rcNewArea.Height()-rcWnd.Height())/2 );
- }
- else if( m_modeResize & ALIGN_BOTTOM ) {
- rcNewArea.OffsetRect( 0, rcNewArea.Height() - rcWnd.Height());
- }
-
- rcNewArea.bottom = rcNewArea.top + rcWnd.Height();
-
- }
-
- DWORD dwStyle = ::GetWindowLong( m_hwndCtrl, GWL_STYLE );
-
- // special treatment for combo-boxes
- if( m_bComboSpecial && (dwStyle & CBS_DROPDOWN) ) {
- // keep height (though only fully visible when dropped down)
- rcNewArea.bottom = rcNewArea.top + rcWnd.Height();
- }
-
- // FIX: ::MoveWindow would case problems with some ActiveX Controls [Micheal Chapman]
- CWnd* pTempWnd = CWnd::FromHandle( m_hwndCtrl );
- pTempWnd->MoveWindow( rcNewArea.left, rcNewArea.top, rcNewArea.Width(), rcNewArea.Height() );
-
- if( m_bComboSpecial && !(dwStyle & CBS_DROPDOWN) && !(dwStyle & CBS_NOINTEGRALHEIGHT) ) {
-
- // Keep CB Size = Edit + LB ( if not CBS_NOINTEGRALHEIGHT)
-
- ::GetWindowRect( m_hwndCtrl, rcWnd );
-
- CRect rcListBox;
- HWND hwndListBox = ::GetDlgItem(m_hwndCtrl, 1000); // ListBox of CB
- if( hwndListBox != 0 )
- {
- ::GetWindowRect( hwndListBox, rcListBox );
- rcWnd.bottom = rcListBox.bottom;
-
- rcNewArea.bottom = rcNewArea.top + rcWnd.Height();
-
- // FIX: ::MoveWindow would case problems with some ActiveX Controls [Micheal Chapman]
- CWnd* pTempWnd = CWnd::FromHandle( m_hwndCtrl );
- pTempWnd->MoveWindow( rcNewArea.left, rcNewArea.top, rcNewArea.Width(), rcNewArea.Height(), true );
- }
- }
-
- ::RedrawWindow(m_hwndCtrl,0,0, RDW_INVALIDATE | RDW_UPDATENOW );
-
- }
- return true;
-}
-
-
-/////////////////////////////////////////////////////////////////////////////
-// ETSLayoutMgr::PaneTab implementation
-
-
-ETSLayoutMgr::PaneTab::PaneTab( CTabCtrl* pTab, ETSLayoutMgr* pMgr, layOrientation orientation, int sizeBorder /*= nDefaultBorder*/, int sizeExtraBorder /*= 0*/ )
-: ETSLayoutMgr::Pane(pMgr, orientation, sizeBorder, sizeExtraBorder)
-{
- ASSERT(pTab);
- m_pTab = pTab;
-}
-
-int ETSLayoutMgr::PaneTab::getConstrainHorz(int sizeParent)
-{
- CRect rcTab;
- m_pTab->AdjustRect(TRUE, &rcTab);
-
- if(rcTab.Width() > sizeParent)
- return rcTab.Width();
-
- return Pane::getConstrainHorz(sizeParent /*- rcTab.Width()*/);
-}
-
-int ETSLayoutMgr::PaneTab::getConstrainVert(int sizeParent)
-{
- CRect rcTab;
- m_pTab->AdjustRect(TRUE, &rcTab);
-
- if( m_modeResize & ABSOLUTE_VERT ) {
- return m_sizeSecondary + rcTab.Height();
- }
-
- if(rcTab.Height() > sizeParent)
- return rcTab.Height();
-
- return Pane::getConstrainVert(sizeParent /*- rcTab.Height()*/);
-}
-
-int ETSLayoutMgr::PaneTab::getMinConstrainHorz()
-{
- CRect rcTab(0,0,0,0);
- m_pTab->AdjustRect(TRUE, &rcTab);
-
- return Pane::getMinConstrainHorz() + rcTab.Width() ;
-}
-
-int ETSLayoutMgr::PaneTab::getMinConstrainVert()
-{
- CRect rcTab(0,0,0,0);
- m_pTab->AdjustRect(TRUE, &rcTab);
-
- return Pane::getMinConstrainVert() + rcTab.Height();
-}
-
-int ETSLayoutMgr::PaneTab::getMaxConstrainHorz()
-{
- CRect rcTab(0,0,0,0);
- m_pTab->AdjustRect(TRUE, &rcTab);
-
- int paneMax = Pane::getMaxConstrainHorz();
- return (paneMax != -1) ? paneMax + rcTab.Width() : -1;
-}
-
-int ETSLayoutMgr::PaneTab::getMaxConstrainVert()
-{
- CRect rcTab(0,0,0,0);
- m_pTab->AdjustRect(TRUE, &rcTab);
-
- int paneMax = Pane::getMaxConstrainVert();
- return (paneMax != -1) ? paneMax + rcTab.Height() : -1;
-}
-
-bool ETSLayoutMgr::PaneTab::resizeTo(CRect& rcNewArea)
-{
- m_pTab->MoveWindow(rcNewArea);
- m_pTab->AdjustRect(FALSE,rcNewArea);
-
- return Pane::resizeTo(rcNewArea);
-}
-
-/////////////////////////////////////////////////////////////////////////////
-// ETSLayoutMgr::PaneCtrl implementation
-
-
-ETSLayoutMgr::PaneCtrl::PaneCtrl( CWnd* pCtrl, ETSLayoutMgr* pMgr, layOrientation orientation, int sizeBorder /*= nDefaultBorder*/, int sizeExtraBorder /*= 0*/, int sizeTopExtra /*= 0*/ )
-: ETSLayoutMgr::Pane(pMgr, orientation, sizeBorder, sizeExtraBorder)
-{
- m_sizeTopExtra = sizeTopExtra;
-
- ASSERT(pCtrl);
- m_hwndCtrl = pCtrl->GetSafeHwnd();
-}
-
-ETSLayoutMgr::PaneCtrl::PaneCtrl( UINT nID, ETSLayoutMgr* pMgr, layOrientation orientation, int sizeBorder /*= nDefaultBorder*/, int sizeExtraBorder /*= 0*/, int sizeTopExtra /*= 0*/ )
-: ETSLayoutMgr::Pane(pMgr, orientation, sizeBorder, sizeExtraBorder)
-{
- m_sizeTopExtra = sizeTopExtra;
-
- m_hwndCtrl = ::GetDlgItem(pMgr->GetWnd()->GetSafeHwnd(), nID);
- ASSERT(m_hwndCtrl);
-}
-
-int ETSLayoutMgr::PaneCtrl::getConstrainHorz(int sizeParent)
-{
- return Pane::getConstrainHorz(sizeParent) ;
-}
-
-int ETSLayoutMgr::PaneCtrl::getConstrainVert(int sizeParent)
-{
- return Pane::getConstrainVert(sizeParent);
-}
-
-int ETSLayoutMgr::PaneCtrl::getMinConstrainHorz()
-{
- return Pane::getMinConstrainHorz();
-}
-
-int ETSLayoutMgr::PaneCtrl::getMinConstrainVert()
-{
- return Pane::getMinConstrainVert() + m_sizeTopExtra;
-}
-
-int ETSLayoutMgr::PaneCtrl::getMaxConstrainHorz()
-{
- int paneMax = Pane::getMaxConstrainHorz();
- return ( paneMax == -1) ? -1 : paneMax ;
-}
-
-int ETSLayoutMgr::PaneCtrl::getMaxConstrainVert()
-{
- int paneMax = Pane::getMaxConstrainVert();
- return ( paneMax == -1) ? -1 : paneMax + m_sizeTopExtra;
-}
-
-bool ETSLayoutMgr::PaneCtrl::resizeTo(CRect& rcNewArea)
-{
- // FIX: ::MoveWindow would case problems with some ActiveX Controls [Micheal Chapman]
- CWnd* pTempWnd = CWnd::FromHandle( m_hwndCtrl );
- pTempWnd->MoveWindow( rcNewArea.left, rcNewArea.top, rcNewArea.Width(), rcNewArea.Height(), true );
-
- ::RedrawWindow(m_hwndCtrl,0,0, RDW_INVALIDATE | RDW_UPDATENOW |RDW_ERASE);
- rcNewArea.top += m_sizeTopExtra;
- return Pane::resizeTo(rcNewArea);
-}
-
-/////////////////////////////////////////////////////////////////////////////
-// ETSLayoutMgr::Pane implementation
-
-ETSLayoutMgr::Pane::Pane( ETSLayoutMgr* pMgr, layOrientation orientation, int sizeBorder /* = nDefaultBorder */, int sizeExtraBorder /*= 0*/)
-: PaneBase(pMgr)
-{
- m_Orientation = orientation;
- m_sizeBorder = sizeBorder;
- m_sizeSecondary = 0;
- m_modeResize = 0;
- m_sizeExtraBorder= sizeExtraBorder;
-}
-
-
-ETSLayoutMgr::Pane::~Pane()
-{
-}
-
-
-bool ETSLayoutMgr::Pane::addItem( CWnd* pWnd, ETSLayoutMgr::layResizeMode modeResize /*=GREEDY*/, int sizeX /*=0*/, int sizeY /*=0*/, int sizeXMin /*=0*/, int sizeYMin /*=0*/)
-{
- CPaneBase pItem = new PaneItem( pWnd, m_pMgr, modeResize, sizeX, sizeY, sizeXMin, sizeYMin);
- return addPane( pItem );
-}
-
-bool ETSLayoutMgr::Pane::addItem( UINT nID, ETSLayoutMgr::layResizeMode modeResize /*=GREEDY*/, int sizeX /*=0*/, int sizeY /*=0*/, int sizeXMin /*=0*/, int sizeYMin /*=0*/)
-{
- CPaneBase pItem = new PaneItem( nID, m_pMgr, modeResize, sizeX, sizeY, sizeXMin, sizeYMin);
- return addPane( pItem );
-}
-
-bool ETSLayoutMgr::Pane::addItemFixed(int size)
-{
- CPaneBase pNewItem = m_pMgr->itemFixed(m_Orientation, size);
- return addPane( pNewItem );
-}
-
-bool ETSLayoutMgr::Pane::addItemGrowing()
-{
- CPaneBase pNewItem = m_pMgr->itemGrowing(m_Orientation);
- return addPane( pNewItem );
-}
-
-bool ETSLayoutMgr::Pane::addItemSpaceBetween( CWnd* pWndFirst, CWnd* pWndSecond )
-{
- CPaneBase pNewItem = m_pMgr->itemSpaceBetween(m_Orientation, pWndFirst, pWndSecond);
- return addPane( pNewItem );
-}
-
-bool ETSLayoutMgr::Pane::addItemSpaceBetween( UINT nIDFirst, UINT nIDSecond )
-{
- CPaneBase pNewItem = m_pMgr->itemSpaceBetween(m_Orientation, nIDFirst, nIDSecond);
- return addPane( pNewItem );
-}
-
-bool ETSLayoutMgr::Pane::addItemSpaceLike( CWnd* pWnd )
-{
- CPaneBase pNewItem = m_pMgr->itemSpaceLike(m_Orientation, pWnd);
- return addPane( pNewItem );
-}
-
-bool ETSLayoutMgr::Pane::addItemSpaceLike( UINT nID )
-{
- CPaneBase pNewItem = m_pMgr->itemSpaceLike(m_Orientation, nID);
- return addPane( pNewItem );
-}
-
-bool ETSLayoutMgr::Pane::addPane( CPane pSubpane, ETSLayoutMgr::layResizeMode modeResize, int sizeSecondary /* = 0 */)
-{
- if( pSubpane->getOrientation() == m_Orientation)
- {
- // wrap in subpane of opposite orientation
- CPane pPaneWrap = new Pane(m_pMgr, m_Orientation==HORIZONTAL?VERTICAL:HORIZONTAL,0,0);
- pPaneWrap->addPane( pSubpane );
-
- addPane( pPaneWrap, modeResize, sizeSecondary );
- }
- else
- {
- pSubpane->m_modeResize = modeResize;
-
- if(m_Orientation==HORIZONTAL && (modeResize & ABSOLUTE_HORZ) ) {
- if(sizeSecondary == 0) {
- pSubpane->m_sizeSecondary = pSubpane->getMinConstrainHorz();
- }
- }
- else if(m_Orientation==HORIZONTAL && (modeResize & RELATIVE_HORZ) ) {
- pSubpane->m_sizeSecondary = sizeSecondary;
- }
- else if(m_Orientation==VERTICAL && (modeResize & ABSOLUTE_VERT) ) {
- if(sizeSecondary == 0) {
- pSubpane->m_sizeSecondary = pSubpane->getMinConstrainVert();
- }
- }
- else if(m_Orientation==VERTICAL && (modeResize & RELATIVE_VERT) ) {
- pSubpane->m_sizeSecondary = sizeSecondary;
- }
-
- m_paneItems.Add(pSubpane);
- }
-
- return true;
-}
-
-bool ETSLayoutMgr::Pane::addPane( CPaneBase pItem )
-{
- m_paneItems.Add(pItem);
- return true;
-}
-
-int ETSLayoutMgr::Pane::getConstrainHorz(int sizeParent)
-{
- ASSERT( m_Orientation == VERTICAL);
-
- if( m_modeResize & RELATIVE_HORZ ) {
- return (sizeParent * m_sizeSecondary) / 100;
- }
- else if( m_modeResize & ABSOLUTE_HORZ ){
- return m_sizeSecondary;
- }
- else
- return 0;
-}
-
-
-int ETSLayoutMgr::Pane::getConstrainVert(int sizeParent)
-{
- ASSERT( m_Orientation == HORIZONTAL);
-
- if( m_modeResize & RELATIVE_VERT ) {
- return (sizeParent * m_sizeSecondary) / 100;
- }
- else if( m_modeResize & ABSOLUTE_VERT ) {
- return m_sizeSecondary;
- }
- else {
- return 0;
- }
-}
-
-int ETSLayoutMgr::Pane::getMaxConstrainHorz()
-{
- if(m_Orientation == HORIZONTAL) {
- int nMaxConstr = -1;
- for(int i=0; i<m_paneItems.GetSize(); ++i) {
- CPaneBase pItem = m_paneItems[i];
-
- int nConstrain = pItem->getMaxConstrainHorz();
- if(nConstrain == -1)
- return -1;
-
- nMaxConstr += nConstrain;
- }
- return (nMaxConstr == -1) ? -1 : nMaxConstr + (m_paneItems.GetUpperBound()*m_sizeBorder) + 2*m_sizeExtraBorder;
- }
- else if( m_modeResize & ABSOLUTE_HORZ && m_sizeSecondary!=0) {
- return m_sizeSecondary; // + 2*m_sizeExtraBorder;
- }
- else {
- int nMaxConstr = -1;
- for(int i=0; i<m_paneItems.GetSize(); ++i) {
- CPaneBase pItem = m_paneItems[i];
-
- int nConstrain = pItem->getMaxConstrainHorz();
-
- if( nConstrain == -1)
- return -1;
- else
- nMaxConstr = max(nMaxConstr, nConstrain);
-
- }
- return (nMaxConstr == -1) ? -1 : nMaxConstr + 2*m_sizeExtraBorder;
- }
-}
-
-int ETSLayoutMgr::Pane::getMaxConstrainVert()
-{
- if(m_Orientation == VERTICAL) {
- int nMaxConstr = -1;
- for(int i=0; i<m_paneItems.GetSize(); ++i) {
- CPaneBase pItem = m_paneItems[i];
-
- int nConstrain = pItem->getMaxConstrainVert();
- if(nConstrain == -1)
- return -1;
-
- nMaxConstr += nConstrain;
- }
- return (nMaxConstr == -1) ? -1 : nMaxConstr + (m_paneItems.GetUpperBound()*m_sizeBorder) + 2*m_sizeExtraBorder;
- }
- else if( m_modeResize & ABSOLUTE_VERT && m_sizeSecondary!=0) {
- return m_sizeSecondary; // + 2*m_sizeExtraBorder;
- }
- else {
- int nMaxConstr = -1;
- for(int i=0; i<m_paneItems.GetSize(); ++i) {
- CPaneBase pItem = m_paneItems[i];
-
- int nConstrain = pItem->getMaxConstrainVert();
-
- if( nConstrain == -1)
- return -1;
- else
- nMaxConstr = max(nMaxConstr, nConstrain);
-
- }
- return (nMaxConstr == -1) ? -1 : nMaxConstr + 2*m_sizeExtraBorder;
- }
-}
-
-int ETSLayoutMgr::Pane::getMinConstrainHorz()
-{
- if(m_Orientation == HORIZONTAL) {
- int nMaxConstr = 0;
- for(int i=0; i<m_paneItems.GetSize(); ++i) {
- CPaneBase pItem = m_paneItems[i];
- nMaxConstr += max(nMinConstrain, pItem->getMinConstrainHorz());
- }
- return nMaxConstr + (m_paneItems.GetUpperBound()*m_sizeBorder) + 2*m_sizeExtraBorder;
- }
- else if( m_modeResize & ABSOLUTE_HORZ && m_sizeSecondary!=0) {
- return m_sizeSecondary; // + 2*m_sizeExtraBorder;
- }
- else {
- int nMaxConstr = 0;
- for(int i=0; i<m_paneItems.GetSize(); ++i) {
- CPaneBase pItem = m_paneItems[i];
- int nConstrain = pItem->getMinConstrainHorz();
- nMaxConstr = max(nMaxConstr, nConstrain);
- }
- return nMaxConstr + 2*m_sizeExtraBorder;
- }
-}
-
-int ETSLayoutMgr::Pane::getMinConstrainVert()
-{
- if(m_Orientation == VERTICAL) {
- int nMaxConstr = 0;
- for(int i=0; i<m_paneItems.GetSize(); ++i) {
- CPaneBase pItem = m_paneItems[i];
- nMaxConstr += max(nMinConstrain, pItem->getMinConstrainVert());
- }
- return nMaxConstr + (m_paneItems.GetUpperBound()*m_sizeBorder) + 2*m_sizeExtraBorder;
- }
- else if( m_modeResize & ABSOLUTE_VERT && m_sizeSecondary!=0) {
- return m_sizeSecondary; // + 2*m_sizeExtraBorder;
- }
- else {
- int nMaxConstr = 0;
- for(int i=0; i<m_paneItems.GetSize(); ++i) {
- CPaneBase pItem = m_paneItems[i];
- int nConstrain = pItem->getMinConstrainVert();
- nMaxConstr = max(nMaxConstr, nConstrain);
- }
- return nMaxConstr + 2*m_sizeExtraBorder;
- }
-}
-
-
-int ETSLayoutMgr::Pane::resizeToAbsolute(int& availSpace, CArray<int,int>& sizePrimary,
- CArray<int,int>& sizeMin, CArray<int,int>& sizeMax)
-{
- // count all greedy items as returnvalue
- int nGreedy = 0;
-
- // first, subtract all absoulute items from available space
- for(int i=0; i<m_paneItems.GetSize(); ++i) {
- CPaneBase pItem = m_paneItems[i];
-
- if( m_Orientation == HORIZONTAL ) {
-
- // for absolute items subtract their size from available space
- if(pItem->modeResize() & ABSOLUTE_HORZ) {
- availSpace -= (sizePrimary[i] = pItem->getConstrainHorz(0));
- }
-
- // count Greedy items for later
- if(!(pItem->modeResize() & ABSOLUTE_HORZ) && !(pItem->modeResize() & RELATIVE_HORZ)) {
- nGreedy++;
- }
-
- sizeMin[i] = pItem->getMinConstrainHorz();
- sizeMax[i] = pItem->getMaxConstrainHorz();
- }
- else {
-
- // for absolute items subtract their size from available space
- if(pItem->modeResize() & ABSOLUTE_VERT) {
- availSpace -= (sizePrimary[i] = pItem->getConstrainVert(0));
- }
-
- // count Greedy items for later
- if(!(pItem->modeResize() & ABSOLUTE_VERT) && !(pItem->modeResize() & RELATIVE_VERT)) {
- nGreedy++;
- }
-
- sizeMin[i] = pItem->getMinConstrainVert();
- sizeMax[i] = pItem->getMaxConstrainVert();
- }
-
- }
-
- // Must not be negative !!
- availSpace = max(availSpace, 0);
-
- return nGreedy;
-}
-
-bool ETSLayoutMgr::Pane::resizeToRelative(int& availSpace, CArray<int,int>& sizePrimary,
- CArray<int,int>& sizeMin, CArray<int,int>& sizeMax)
-{
- // Then all relative items as percentage of left space (as of now after
- // all absolute items are subtracted
-
- int availRel = availSpace; // At the beginning all of remaining space is available. We want all
- // operation to be relative to the left space at this moment, so we
- // save this amount here. Then we safly can lower availSpace
-
- int relDiff = 0; // The cumulated difference between first proposed size and
- // eventual maximum/minimum size. This amount has to be
- // saved in some other place (i.e. where relativ items/subpane
- // are not limited by min/max
-
- int relLeft = 0; // The cumulated amout of space that can be saved by
- // shrinking the items/panes up to the minimum
-
- int relCount = 0; // Actually allocated item/subpane's cumulated primary sizes
- // of non-limited items/subpanes (these can be modified in fixup)
- // needed for equally distribution of differences amoung non-limited
- // relative items/subpanes
-
- for(int i=0; i<m_paneItems.GetSize(); ++i) {
- CPaneBase pItem = m_paneItems[i];
-
- // For all relative items in primary direction
- if( (m_Orientation==HORIZONTAL && pItem->modeResize() & RELATIVE_HORZ)
- ||
- (m_Orientation==VERTICAL && pItem->modeResize() & RELATIVE_VERT) )
- {
- // minimum item/subpane size in primary direction (pixels)
- int nSizeRelMin = sizeMin[i];
-
- // maximum item/subpane size in primary direction (pixels)
- int nSizeRelMax = sizeMax[i];
-
- // Relative size in primary direction (pixels)
- int nSizeRel = (m_Orientation==HORIZONTAL)
- ?
- (pItem->getConstrainHorz(availRel))
- :
- (pItem->getConstrainVert(availRel));
-
- if( nSizeRel < nSizeRelMin) {
- // The item/pane is shrinked too small!
- // We will grow it to it's minimum-size. In order not to modify
- // this item later when fixing up set the size to the negative
- // minimum size
- sizePrimary[i] = -nSizeRelMin;
-
- // As we grew one item/subpane we have to shrink another one.
- // We keep count on how much space we needed to grow the item
- // to it's minimum size
- relDiff += ( nSizeRelMin - nSizeRel );
- }
- else if( nSizeRelMax != -1 && nSizeRel > nSizeRelMax) {
- // if there's a maximum size (nSizeRelMax != -1) and our item/subpane
- // is to be resized over that amount correct it. In order not to modify
- // this item later when fixing up set the size to the negative
- // maximum size
- sizePrimary[i] = -nSizeRelMax;
-
- // As we shrinked one item/subpane we have to grow another one.
- // We keep count on how much space we needed to grow the item
- // to it's maximum size.
- relDiff += ( nSizeRelMax - nSizeRel );
- }
- else {
- // this is the normal case: neither are we minimum limited nor maximum
- // limited
-
- // As this item/subpane is larger that it's minimum we could later (if
- // necessary for fixup) shrink it for the difference amount of pixels
- relLeft += ( nSizeRel - nSizeRelMin );
-
- // Set the primary size of this item/pane. Can later be modified by fixup
- sizePrimary[i] = nSizeRel;
-
- // Add this item/subpane's primary size to the count of already allocated
- // cumulated size of non-limited items/subpanes (these can be modified in fixup)
- relCount += nSizeRel;
- }
-
- // decrease available space by used space in this step
- availSpace -= nSizeRel;
- }
- }
-
- // We now have the situation that some items/subpanes had to be adjusted for cumulated
- // relDiff pixels (positive value means more space taken than indicated by percentage of
- // left space). On the other hand we have some items/subpanes which were not limited (in
- // their current dimensions) but could be if necessary up to relLeft pixels.
- if(relLeft < relDiff && availSpace >= (relDiff-relLeft) ){
-
- // If it's not possible to shrink other (relative) panes in order to distribute the
- // difference because the left for shrinking (relLeft) is too small we need to aquire
- // more space from the globally left space (if available at all)
- availSpace -= (relDiff-relLeft);
- relDiff = relLeft;
- }
-
- // At this point we should have some space left (at least not be negative with the leftover
- // space) and on the other hand there's enough space for the limit-difference to be distributed
-// ASSERT( availSpace >= 0 && relLeft >= relDiff);
-
- // Fixup Relative:
- // Distribute (if anecessary) relDiff on other (not limited) relative items/subpanes
- // (if available - if not later just grow the limited panes)
- while( relDiff != 0 && relCount >= 0 ) {
-
- // in every iteration there must be some space distributed (of the difference) or it could
- // come to endless looping. Save the amount of space actually distributed in this iteration
- int relDist = 0;
-
- for(int i=0; i<m_paneItems.GetSize(); ++i) {
-
- CPaneBase pItem = m_paneItems[i];
-
-
- // For all relative items in primary direction which were NOT limited
- if( (m_Orientation==HORIZONTAL && (pItem->modeResize() & RELATIVE_HORZ) && sizePrimary[i] > 0)
- ||
- (m_Orientation==VERTICAL && (pItem->modeResize() & RELATIVE_VERT) && sizePrimary[i] > 0) )
- {
- // keep a flag for termination of this iteration
- bool bLast = false;
-
- // the difference should be distributed amoung all non-limited items/subpanes equally.
- // nDiff is the amount for the current item/subpane
- int nDiff = (relDiff * sizePrimary[i]) / relCount;
-
- // if it's a too small value just add it to the current pane and break iteration
- if( abs(relDiff) <= FIXUP_CUTOFF ) {
- // take it all in this step
- nDiff = relDiff;
-
- // set break flag
- bLast = true;
- }
-
- // calculate the new size for the current item/subpane
- int nNewSize = sizePrimary[i] - nDiff;
-
- if( nNewSize < sizeMin[i] ) {
- // oh, we are limited here. Revise our plan:
-
- // Not all of the space could be saved, add the actually possible space
- // to the sum
- relDist += ( sizePrimary[i] - sizeMin[i] );
-
- // set it to the minimum possible size
- sizePrimary[i] = -sizeMin[i];
-
- // as this item/subpane is now limited it's occupied space doesn't count
- // for relCount anymore
- relCount-= ( sizePrimary[i] );
- }
- else {
- // account the difference of the sizes in relDist and set new size
- relDist += ( sizePrimary[i] - nNewSize );
- sizePrimary[i] = nNewSize;
-
- // if it's the last one break now
- if(bLast)
- break;
- }
- }
- }
- // Distributed some relDiff-space in every iteration
-// ASSERT(relDist != 0);
- relDiff -= relDist;
-
- if( relDist == 0 )
- break;
- }
-
- // Fixup Relative: invert all negative (limited) sized to correct value
- for(int i=0; i<m_paneItems.GetSize(); ++i) {
- CPaneBase pItem = m_paneItems[i];
- if( (m_Orientation==HORIZONTAL && (pItem->modeResize() & RELATIVE_HORZ) && sizePrimary[i] < 0)
- ||
- (m_Orientation==VERTICAL && (pItem->modeResize() & RELATIVE_VERT) && sizePrimary[i] < 0) )
- {
- sizePrimary[i] *= -1;
- }
- }
-
- return true;
-}
-
-bool ETSLayoutMgr::Pane::resizeToGreedy(int& availSpace, int nGreedy, CArray<int,int>& sizePrimary,
- CArray<int,int>& sizeMin, CArray<int,int>& sizeMax)
-{
- // Now resize all Greedy items/subpanes equally among the remaining space
- int greedyDiff = 0; // The cumulated difference between first proposed size and
- // eventual maximum/minimum size. This amount has to be
- // saved in some other place (i.e. where items/subpane
- // are not limited by min/max
-
- int greedyLeft = 0; // The cumulated amount of space that can be saved by
- // shrinking the items/panes up to the minimum
-
- int greedyCount = 0; // Actually allocated item/subpane's cumulated primary sizes
- // of non-limited items/subpanes (these can be modified in fixup)
- // needed for equally distribution of differences amoung non-limited
- // items/subpanes
-
- for(int i=0; i<m_paneItems.GetSize(); ++i) {
- CPaneBase pItem = m_paneItems[i];
-
-
- if( (m_Orientation==HORIZONTAL
- && !(pItem->modeResize()&ABSOLUTE_HORZ)
- && !(pItem->modeResize()&RELATIVE_HORZ)
- )
- ||
- (m_Orientation==VERTICAL
- && !(pItem->modeResize()&ABSOLUTE_VERT)
- && !(pItem->modeResize()&RELATIVE_VERT)
- )
- )
- {
-
- // All greedy items get an equal portion of the left space
- int nSize = availSpace / nGreedy;
-
- // minimum item/subpane size in primary direction (pixels)
- int nSizeMin = sizeMin[i];
-
- // maximum item/subpane size in primary direction (pixels)
- int nSizeMax = sizeMax[i];
-
-
- // the last gets the all of the remaining space
- if( nGreedy == 1 )
- nSize = availSpace;
-
- if( nSize < nSizeMin) {
- // The item/pane is shrinked too small!
- // We will grow it to it's minimum-size. In order not to modify
- // this item later when fixing up set the size to the negative
- // minimum size
- sizePrimary[i] = -nSizeMin;
-
- // As we grew one item/subpane we have to shrink another one.
- // We keep count on how much space we needed to grow the item
- // to it's minimum size
- greedyDiff += ( nSizeMin - nSize );
- }
- else if( nSizeMax != -1 && nSize > nSizeMax) {
- // if there's a maximum size (nSizeRelMax != -1) and our item/subpane
- // is to be resized over that amount correct it. In order not to modify
- // this item later when fixing up set the size to the negative
- // maximum size
- sizePrimary[i] = -nSizeMax;
-
- // As we shrinked one item/subpane we have to grow another one.
- // We keep count on how much space we needed to grow the item
- // to it's maximum size.
- greedyDiff += ( nSizeMax - nSize );
- }
- else {
-
- // this is the normal case: neither are we minimum limited nor maximum
- // limited
-
- // As this item/subpane is larger that it's minimum we could later (if
- // necessary for fixup) shrink it for the difference amount of pixels
- greedyLeft += ( nSize - nSizeMin );
-
- // Set the primary size of this item/pane. Can later be modified by fixup
- sizePrimary[i] = nSize;
-
- // Add this item/subpane's primary size to the count of already allocated
- // cumulated size of non-limited items/subpanes (these can be modified in fixup)
- greedyCount += nSize;
- }
-
- // decrease available space by used space in this step
- availSpace -= nSize;
-
- // one greedy item/subpane complete
- --nGreedy;
- }
- }
-
-
- // Fixup Greedy I
- // Distribute (if anecessary) greedyDiff on other (not limited) greedy items/subpanes
- // (if available - if not later just grow the limited panes)
-
- // at least on not limited item present
- bool bAtLeastOne = true;
-
- while( bAtLeastOne && greedyDiff != 0 && greedyCount > 0) {
-
- // in every iteration there must be some space distributed (of the difference) or it could
- // come to endless looping. Save the amount of space actually distributed in this iteration
- int greedyDist = 0;
-
- // at least on not limited item present
- bAtLeastOne = false;
-
- for(int i=0; i<m_paneItems.GetSize(); ++i) {
- CPaneBase pItem = m_paneItems[i];
-
-
- if( (m_Orientation==HORIZONTAL
- && !(pItem->modeResize()&ABSOLUTE_HORZ)
- && !(pItem->modeResize()&RELATIVE_HORZ)
- && sizePrimary[i] > 0
- )
- ||
- (m_Orientation==VERTICAL
- && !(pItem->modeResize()&ABSOLUTE_VERT)
- && !(pItem->modeResize()&RELATIVE_VERT)
- && sizePrimary[i] > 0
- )
- )
- {
- // keep a flag for termination of this iteration
- bool bLast = false;
-
- // the difference should be distributed among all non-limited items/subpanes equally.
- // nDiff is the amount for the current item/subpane
- int nDiff = (greedyDiff * sizePrimary[i]) / greedyCount;
-
- // if it's a too small value just add it to the current pane and break iteration
- if( abs(greedyDiff) <= FIXUP_CUTOFF || nDiff == 0) {
- // take it all in this step
- nDiff = greedyDiff;
-
- // set break flag
- bLast = true;
- }
-
- // calculate the new size for the current item/subpane
- int nNewSize = sizePrimary[i] - nDiff;
-
- if( nNewSize < sizeMin[i] ) {
- // oh, we are limited here. Revise our plan:
-
- if( sizePrimary[i] != sizeMin[i] )
- bAtLeastOne = true;
-
- // Not all of the space could be saved, add the actually possible space
- // to the sum
- greedyDist += ( sizePrimary[i] - sizeMin[i] );
-
- // set it to the minimum possible size
- sizePrimary[i] = sizeMin[i];
-
- // as this item/subpane is now limited its occupied space doesn't count
- // for relCount anymore
- greedyCount -= ( sizePrimary[i] );
- }
- else {
- // yes, there is one
- bAtLeastOne = true;
-
- // account the difference of the sizes in relDist and set new size
- greedyDist += ( sizePrimary[i] - nNewSize );
- sizePrimary[i] = nNewSize;
-
- // if it's the last one break now
- if(bLast)
- break;
- }
- }
- }
- // Distributed some greedyDiff-space in every iteration
- ASSERT(!bAtLeastOne || greedyDist != 0 || greedyCount<=0);
- greedyDiff -= greedyDist;
- }
-
-
- // Fixup Greedy II
- if( greedyDiff < 0 ) {
- // still difference, some space left
-
- // are there any items which are minimum-limited where we can give more space?
- for(int i=0; i<m_paneItems.GetSize() && greedyDiff!=0; ++i) {
- CPaneBase pItem = m_paneItems[i];
-
- if( (m_Orientation==HORIZONTAL
- && !(pItem->modeResize()&ABSOLUTE_HORZ)
- && !(pItem->modeResize()&RELATIVE_HORZ)
- )
- ||
- (m_Orientation==VERTICAL
- && !(pItem->modeResize()&ABSOLUTE_VERT)
- && !(pItem->modeResize()&RELATIVE_VERT)
- )
- )
- {
- if( sizePrimary[i] == -sizeMin[i] ) {
- // fill this one up as much as possible
- if( sizeMax[i] == -1) {
- // all fits in
- sizePrimary[i] += greedyDiff;
- greedyDiff = 0;
- }
- else {
- sizePrimary[i] += -min( -greedyDiff, sizeMax[i]-sizeMin[i]);
- greedyDiff -= -min( -greedyDiff, sizeMax[i]-sizeMin[i]);
- }
- }
- }
- }
- }
-
-
- // Fixup Greedy III: invert all negative (limited) sized to correct value
- for(int i=0; i<m_paneItems.GetSize(); ++i) {
- CPaneBase pItem = m_paneItems[i];
-
- if( (m_Orientation==HORIZONTAL
- && !(pItem->modeResize() & ABSOLUTE_HORZ)
- && !(pItem->modeResize() & RELATIVE_HORZ)
- && sizePrimary[i] < 0
- && sizeMin[i] >= 0
- )
- ||
- (m_Orientation==VERTICAL
- && !(pItem->modeResize() & ABSOLUTE_VERT)
- && !(pItem->modeResize() & RELATIVE_VERT)
- && sizePrimary[i] < 0
- && sizeMin[i] >= 0
- )
- )
- {
- if(sizePrimary[i] < 0)
- sizePrimary[i] *= -1;
- }
- }
-
- return true;
-}
-
-
-bool ETSLayoutMgr::Pane::resizeTo(CRect& rcNewArea)
-{
- // There must be some items or subpanes
- ASSERT(m_paneItems.GetSize());
-
- // This Array holds the size in primary direction for each item/subpane
- CArray<int,int> sizePrimary;
- sizePrimary.SetSize(m_paneItems.GetSize());
-
- // This Array holds information about the minimum size in primary direction
- CArray<int,int> sizeMin;
- sizeMin.SetSize(m_paneItems.GetSize());
-
- // This Array holds information about the maximum size in primary direction
- CArray<int,int> sizeMax;
- sizeMax.SetSize(m_paneItems.GetSize());
-
-
- // How much space is actually available, subtract all borders between items
- int availSpace = (m_Orientation == HORIZONTAL ? rcNewArea.Width() : rcNewArea.Height() ) - (m_paneItems.GetUpperBound()*m_sizeBorder);
-
- // If there is some Extra border (on top/bottem resp. left/right) subtract it too
- availSpace -= 2*m_sizeExtraBorder;
-
- // Add the extra Border to top/bottem resp. left/right
- if(m_Orientation == HORIZONTAL) {
- rcNewArea.top += m_sizeExtraBorder;
- rcNewArea.bottom -= m_sizeExtraBorder;
- }
- else {
- rcNewArea.left += m_sizeExtraBorder;
- rcNewArea.right -= m_sizeExtraBorder;
- }
-
- // Counts the number of greedy items/subpanes
- int nGreedy = resizeToAbsolute(availSpace, sizePrimary, sizeMin, sizeMax );
-
- if(nGreedy == -1)
- return false;
-
- if(! resizeToRelative(availSpace, sizePrimary, sizeMin, sizeMax ) )
- return false;
-
- if(! resizeToGreedy(availSpace, nGreedy, sizePrimary, sizeMin, sizeMax ) )
- return false;
-
-
- // If there is any left space and there are ALIGN_FILL_* Items to assign it
- // equally among them
- if( availSpace > 0 ) {
- // Count possible Items
- int nFillItems = 0;
-
- for(int i=0; i<m_paneItems.GetSize(); ++i) {
- CPaneBase pItem = m_paneItems[i];
- if( m_Orientation == HORIZONTAL
- && (pItem->modeResize() & ABSOLUTE_HORZ )
- && (pItem->modeResize() & ALIGN_FILL_HORZ)
-
- ||
-
- (pItem->modeResize() & ABSOLUTE_VERT )
- && (pItem->modeResize() & ALIGN_FILL_VERT)
- )
- {
- ++nFillItems;
- }
- }
-
- if( nFillItems > 0 ) {
- // okay, there are nFillItems, make them all availSpace/nFillItems bigger
- for(int i=0; i<m_paneItems.GetSize(); ++i) {
- CPaneBase pItem = m_paneItems[i];
-
- if( m_Orientation == HORIZONTAL
- && (pItem->modeResize() & ABSOLUTE_HORZ )
- && (pItem->modeResize() & ALIGN_FILL_HORZ)
-
- ||
-
- (pItem->modeResize() & ABSOLUTE_VERT )
- && (pItem->modeResize() & ALIGN_FILL_VERT)
- )
- {
-
- if( nFillItems == 1 ) {
- // the last one gets all the rest
- sizePrimary[i] += availSpace;
- availSpace = 0;
- --nFillItems;
- }
- else {
- sizePrimary[i] += availSpace/nFillItems;
- availSpace -= availSpace/nFillItems;
- --nFillItems;
- }
-
- }
- }
- }
-
- }
-
- // Now reposition all items:
-
- // starting offset
- int nOffset = (m_Orientation==HORIZONTAL ? rcNewArea.left : rcNewArea.top ) + m_sizeExtraBorder;
- for(int i=0; i<m_paneItems.GetSize(); ++i) {
- CPaneBase pItem = m_paneItems[i];
-
- // Calculate rect of item/subpane
- CRect rcPane;
-
- if( m_Orientation==HORIZONTAL ) {
- rcPane.SetRect(nOffset, rcNewArea.top, nOffset+sizePrimary[i], rcNewArea.bottom);
- }
- else {
- rcPane.SetRect(rcNewArea.left, nOffset, rcNewArea.right, nOffset+sizePrimary[i]);
- }
-
- // do the resizing!
- pItem->resizeTo( rcPane );
-
- // go to the next position (old pos + size + border)
- ASSERT(sizePrimary[i] >= 0);
- nOffset += m_sizeBorder + sizePrimary[i];
- }
-
-
- return true;
-}
-
-
-/////////////////////////////////////////////////////////////////////////////
-// ETSLayoutDialog dialog
-
-#pragma warning(disable: 4355)
-ETSLayoutDialog::ETSLayoutDialog(UINT nID, CWnd* pParent /*=NULL*/, LPCTSTR strName /*=NULL*/, bool bGripper /*=true*/)
- : CBaseDialog(nID, pParent), ETSLayoutMgr( this )
-{
- //{{AFX_DATA_INIT(ETSLayoutDialog)
- // NOTE: the ClassWizard will add member initialization here
- //}}AFX_DATA_INIT
- m_bGripper = bGripper;
-
- if(strName)
- m_strRegStore = strName;
-}
-#pragma warning(default: 4355)
-
-BEGIN_MESSAGE_MAP(ETSLayoutDialog, CDialog)
- //{{AFX_MSG_MAP(ETSLayoutDialog)
- ON_WM_SIZE()
- ON_WM_GETMINMAXINFO()
- ON_WM_ERASEBKGND()
- ON_WM_DESTROY()
- //}}AFX_MSG_MAP
-END_MESSAGE_MAP()
-
-
-/////////////////////////////////////////////////////////////////////////////
-// ETSLayoutDialog message handlers
-
-BOOL ETSLayoutDialog::OnEraseBkgnd(CDC* pDC)
-{
- EraseBkgnd(pDC);
- return true;
-}
-
-void ETSLayoutDialog::OnSize(UINT nType, int cx, int cy)
-{
- CBaseDialog::OnSize(nType, cx, cy);
-
- if( abs(cx) + abs(cy) > 0)
- {
- // Reposition Size Marker
- // Re-Layout all controls
- UpdateLayout();
- RepositionBars(AFX_IDW_CONTROLBAR_FIRST, AFX_IDW_CONTROLBAR_LAST, 0);
- }
-
-}
-
-void ETSLayoutDialog::OnGetMinMaxInfo(MINMAXINFO FAR* lpMMI)
-{
- if(m_RootPane.IsValid()) {
-
- CRect rcClient = GetRect();
- if( rcClient.Height() > 0 || rcClient.Width() > 0 )
- {
-
- CRect rcWnd;
- GetWindowRect(rcWnd);
-
- // How much do Window and Client differ
- int nDiffHorz = rcWnd.Width() - rcClient.Width();
- int nDiffVert = rcWnd.Height() - rcClient.Height();
-
- // Take into account that there is a border around the rootPane
- lpMMI->ptMinTrackSize = CPoint(m_RootPane->getMinConstrainHorz() + nDiffHorz + 2*m_sizeRootBorders.cx,
- m_RootPane->getMinConstrainVert() + nDiffVert + 2*m_sizeRootBorders.cy);
-
- int maxWidth = m_RootPane->getMaxConstrainHorz();
- int maxHeight = m_RootPane->getMaxConstrainVert();
-
- if( maxWidth != -1 ) {
- lpMMI->ptMaxTrackSize.x = maxWidth + nDiffHorz + 2*m_sizeRootBorders.cx;
- lpMMI->ptMaxSize.x = maxWidth + nDiffHorz + 2*m_sizeRootBorders.cx;
- }
-
- if( maxHeight != -1 ) {
- lpMMI->ptMaxTrackSize.y = maxHeight + nDiffVert + 2*m_sizeRootBorders.cy;
- lpMMI->ptMaxSize.y = maxHeight + nDiffVert + 2*m_sizeRootBorders.cy;
- }
- }
- }
-}
-
-
-CRect ETSLayoutDialog::GetRect()
-{
- CRect r;
- GetClientRect(r);
-
- if( m_bGripper )
- {
- if( ::IsWindow(m_StatusBar.GetSafeHwnd()) )
- {
- CRect rcSizeIcon;
- m_StatusBar.GetWindowRect( rcSizeIcon);
- r.bottom -= (rcSizeIcon.Height() - m_sizeRootBorders.cy - 5);
- }
- }
-
- return r;
-}
-
-
-BOOL ETSLayoutDialog::OnInitDialog()
-{
- CBaseDialog::OnInitDialog();
-
- // Ensure that the dialog is resizable
- this->ModifyStyle(0, WS_THICKFRAME);
-
- if(!m_strRegStore.IsEmpty()) {
- Load(m_strRegStore);
- }
-
-#ifdef _AUTO_SET_ICON
- POSITION pos = AfxGetApp()->GetFirstDocTemplatePosition();
- if(pos) {
-
- class ETSPseudoDocTemplate : public CDocTemplate
- {
- friend class ETSLayoutDialog;
- };
-
- ETSPseudoDocTemplate* pDocT = (ETSPseudoDocTemplate*) AfxGetApp()->GetNextDocTemplate(pos);
- SetIcon( AfxGetApp()->LoadIcon(pDocT->m_nIDResource) ,FALSE);
- }
-#endif
-
- // Sizing icon
- if(m_bGripper)
- {
- if(m_StatusBar.Create(m_pWnd))
- {
- m_StatusBar.SetIndicators(auIDStatusBar, sizeof(auIDStatusBar) / sizeof(UINT));
- m_StatusBar.SetWindowText(_T(""));
- m_StatusBar.SetPaneStyle( 0, SBPS_STRETCH | SBPS_NOBORDERS );
- m_pWnd -> RepositionBars(AFX_IDW_CONTROLBAR_FIRST, AFX_IDW_CONTROLBAR_LAST, 0);
- }
- else
- AfxMessageBox(_T("Error - Statusbar"));
-
- }
- return TRUE; // return TRUE unless you set the focus to a control
- // EXCEPTION: OCX Property Pages should return FALSE
-}
-
-void ETSLayoutDialog::OnDestroy()
-{
- // Store size/position
- if(!m_strRegStore.IsEmpty()) {
- Save(m_strRegStore);
- }
-
- // manually delete layout definition if object is reused
- m_RootPane = 0;
-
- CBaseDialog::OnDestroy();
-}
-
-/////////////////////////////////////////////////////////////////////////////
-// ETSLayoutDialog dialog
-
-#pragma warning(disable: 4355)
-#ifdef CS_HELP
-ETSLayoutDialogBar::ETSLayoutDialogBar(UINT nID )
- : CBaseDialogBar( nID ), ETSLayoutMgr( this )
-#else
-ETSLayoutDialogBar::ETSLayoutDialogBar()
- : ETSLayoutMgr( this )
-#endif
-{
- //{{AFX_DATA_INIT(ETSLayoutDialogBar)
- // NOTE: the ClassWizard will add member initialization here
- //}}AFX_DATA_INIT
- m_bInitialized = false;
- setRootBorders(0,0);
-}
-#pragma warning(default: 4355)
-
-BEGIN_MESSAGE_MAP(ETSLayoutDialogBar, CDialogBar)
- //{{AFX_MSG_MAP(ETSLayoutDialogBar)
- ON_WM_SIZE()
- ON_WM_GETMINMAXINFO()
- ON_WM_DESTROY()
- ON_WM_ERASEBKGND()
- ON_MESSAGE(WM_INITDIALOG, OnInitDialog)
- //}}AFX_MSG_MAP
-END_MESSAGE_MAP()
-
-
-/////////////////////////////////////////////////////////////////////////////
-// ETSLayoutDialogBar message handlers
-
-LRESULT ETSLayoutDialogBar::OnInitDialog(WPARAM, LPARAM)
-{
- Default();
- Initialize();
- return TRUE;
-}
-
-void ETSLayoutDialogBar::UpdateLayout()
-{
- ETSLayoutMgr::UpdateLayout();
-
- if(m_RootPane.IsValid()) {
- CRect rcClient = GetRect();
-
- CRect rcWnd;
- GetWindowRect(rcWnd);
-
- // How much do Window and Client differ
- CSize sizeDiff( rcWnd.Width() - rcClient.Width(), rcWnd.Height() - rcClient.Height());
-
- // Take into account that there is a border around the rootPane
-// m_szMin = CSize(m_RootPane->getMinConstrainHorz() + sizeDiff.cx + 2*m_sizeRootBorders.cx,
-// m_RootPane->getMinConstrainVert() + sizeDiff.cy + 2*m_sizeRootBorders.cy);
- }
-}
-
-CSize ETSLayoutDialogBar::CalcDynamicLayout(int nLength, DWORD dwMode)
-{
- CSize sizeRet = CBaseDialogBar::CalcDynamicLayout(nLength, dwMode);
-
- CSize sizeMin = sizeRet;
- CSize sizeMax = sizeRet;
-
- if(m_RootPane.IsValid()) {
- CRect rcClient = GetRect();
-
- CRect rcWnd;
- GetWindowRect(rcWnd);
-
- // How much do Window and Client differ
- CSize sizeDiff( rcWnd.Width() - rcClient.Width(), rcWnd.Height() - rcClient.Height());
-
- // Take into account that there is a border around the rootPane
-// sizeMin = CSize(m_RootPane->getMinConstrainHorz() + sizeDiff.cx + 2*m_sizeRootBorders.cx,
-// m_RootPane->getMinConstrainVert() + sizeDiff.cy + 2*m_sizeRootBorders.cy);
-
-
- int maxWidth = m_RootPane->getMaxConstrainHorz();
- int maxHeight = m_RootPane->getMaxConstrainVert();
-
- if( maxWidth != -1 ) {
- sizeMax.cx = maxWidth + sizeDiff.cy + 2*m_sizeRootBorders.cx;
- }
-
- if( maxHeight != -1 ) {
- sizeMax.cy = maxHeight + sizeDiff.cy + 2*m_sizeRootBorders.cy;
- }
- }
-
- if( IsFloating() || !(dwMode&LM_HORZ))
- {
- sizeRet.cx = min( sizeRet.cx, sizeMax.cx );
- }
- if( IsFloating() || (dwMode&LM_HORZ))
- {
- sizeRet.cy = min( sizeRet.cy, sizeMax.cy );
- }
-
- sizeRet.cx = max( sizeRet.cx, sizeMin.cx );
- sizeRet.cy = max( sizeRet.cy, sizeMin.cy );
-
- return sizeRet;
-}
-
-BOOL ETSLayoutDialogBar::OnEraseBkgnd(CDC* pDC)
-{
- EraseBkgnd(pDC);
- return true;
-}
-
-
-void ETSLayoutDialogBar::OnSize(UINT nType, int cx, int cy)
-{
- CBaseDialogBar::OnSize(nType, cx, cy);
-
- if( abs(cx) + abs(cy) > 0)
- {
- // Re-Layout all controls
- UpdateLayout();
- }
- RepositionBars(AFX_IDW_CONTROLBAR_FIRST, AFX_IDW_CONTROLBAR_LAST, 0);
-
-}
-
-
-CRect ETSLayoutDialogBar::GetRect()
-{
- CRect r;
- GetClientRect(r);
-
- if( IsFloating() )
- r.DeflateRect(4,4);
-
- return r;
-}
-
-
-void ETSLayoutDialogBar::OnDestroy()
-{
- // Store size/position on your own!
- CBaseDialogBar::OnDestroy();
-}
-
-
-
-/////////////////////////////////////////////////////////////////////////////
-// ETSLayoutFormView dialog
-
-IMPLEMENT_DYNAMIC(ETSLayoutFormView, CFormView)
-
-#pragma warning(disable: 4355)
-ETSLayoutFormView::ETSLayoutFormView(UINT nID, LPCTSTR strName /*=NULL*/)
- : CBaseFormView(nID), ETSLayoutMgr( this )
-{
- if(strName)
- m_strRegStore = strName;
-}
-#pragma warning(default: 4355)
-
-BEGIN_MESSAGE_MAP(ETSLayoutFormView, CFormView)
- //{{AFX_MSG_MAP(ETSLayoutFormView)
- ON_WM_SIZE()
- ON_WM_GETMINMAXINFO()
- ON_WM_ERASEBKGND()
- //}}AFX_MSG_MAP
-END_MESSAGE_MAP()
-
-
-/////////////////////////////////////////////////////////////////////////////
-// ETSLayoutFormView message handlers
-
-BOOL ETSLayoutFormView::OnEraseBkgnd(CDC* pDC)
-{
- EraseBkgnd(pDC);
- return true;
-}
-
-
-void ETSLayoutFormView::OnSize(UINT nType, int cx, int cy)
-{
-// CBaseFormView::OnSize(nType, cx, cy);
- SetScrollSizes(MM_TEXT, CSize(cx,cy));
- if( abs(cx) + abs(cy) > 0) {
- // Re-Layout all controls
- UpdateLayout();
- }
-// MoveWindow(0,0,cx,cy);
-}
-
-/*
-void ETSLayoutFormView::UpdateLayout()
-{
- ETSLayoutMgr::UpdateLayout();
-
- if(m_RootPane.IsValid()) {
- // Force MainFrame to re-layout
- CFrameWnd* pFrame = static_cast<CFrameWnd*>(GetParent());
- if(pFrame) {
-
- CRect rcWnd;
- pFrame->GetWindowRect(rcWnd);
- pFrame->MoveWindow(rcWnd);
- pFrame->RecalcLayout();
-
- }
- return;
- }
-}
-*/
-
-void ETSLayoutFormView::OnGetMinMaxInfo(MINMAXINFO FAR* lpMMI)
-{
- // To use this you'll have to modify your CMainFrame:
- //
- // 1) Add a handler for WM_GETMINMAXINFO()
- // 2) Let this handler be:
- // void CMainFrame::OnGetMinMaxInfo(MINMAXINFO FAR* lpMMI)
- // {
- // CFrameWnd::OnGetMinMaxInfo(lpMMI);
- //
- // if( GetActiveView() && GetActiveView()->IsKindOf( RUNTIME_CLASS(ETSLayoutFormView) ) ) {
- // GetActiveView()->SendMessage( WM_GETMINMAXINFO, 0, (LPARAM) lpMMI );
- // }
- // }
- // 3) Add "#include "dialogmgr.h" to MainFrm.cpp
-
- if(m_RootPane.IsValid()) {
- CRect rcClient = GetRect();
-
- CRect rcWnd;
- GetParent()->GetWindowRect(rcWnd);
-
- // How much do Window and Client differ
- rcWnd-=rcClient;
-
- // Take into account that there is a border around the rootPane
- lpMMI->ptMinTrackSize = CPoint(m_RootPane->getMinConstrainHorz() + rcWnd.Width() + 2*m_sizeRootBorders.cx,
- m_RootPane->getMinConstrainVert() + rcWnd.Height() + 2*m_sizeRootBorders.cy);
-
- int maxWidth = m_RootPane->getMaxConstrainHorz();
- int maxHeight = m_RootPane->getMaxConstrainVert();
-
- if( maxWidth != -1 ) {
- lpMMI->ptMaxTrackSize.x = maxWidth + rcWnd.Width()+ 2*m_sizeRootBorders.cx;
- lpMMI->ptMaxSize.x = maxWidth + rcWnd.Width()+ 2*m_sizeRootBorders.cx;
- }
-
- if( maxHeight != -1 ) {
- lpMMI->ptMaxTrackSize.y = maxHeight + rcWnd.Height() + 2*m_sizeRootBorders.cy;
- lpMMI->ptMaxSize.y = maxHeight + rcWnd.Height() + 2*m_sizeRootBorders.cy;
- }
- }
-}
-
-ETSLayoutFormView::~ETSLayoutFormView()
-{
- // Cleanup
-}
-
-
-/////////////////////////////////////////////////////////////////////////////
-// ETSLayoutPropertyPage
-
-#ifdef CS_HELP
- IMPLEMENT_DYNCREATE(ETSLayoutPropertyPage, ETSCSHelpPropPage)
-#else
- IMPLEMENT_DYNCREATE(ETSLayoutPropertyPage, CPropertyPage)
-#endif
-
-#pragma warning(disable: 4355)
-ETSLayoutPropertyPage::ETSLayoutPropertyPage( ) : ETSLayoutMgr( this )
-{
- m_bLockMove = false;
- m_bResetBuddyOnNextTimeVisible = true;
-}
-
-ETSLayoutPropertyPage::ETSLayoutPropertyPage( UINT nIDTemplate, UINT nIDCaption /*= 0*/ )
- : CBasePropertyPage(nIDTemplate, nIDCaption), ETSLayoutMgr( this )
-{
- m_bLockMove = false;
- m_bResetBuddyOnNextTimeVisible = true;
-}
-
-ETSLayoutPropertyPage::ETSLayoutPropertyPage( LPCTSTR lpszTemplateName, UINT nIDCaption /*= 0*/ )
- : CBasePropertyPage(lpszTemplateName, nIDCaption), ETSLayoutMgr( this )
-{
- m_bLockMove = false;
- m_bResetBuddyOnNextTimeVisible = true;
-}
-#pragma warning(default: 4355)
-
-ETSLayoutPropertyPage::~ETSLayoutPropertyPage()
-{
-}
-
-
-BEGIN_MESSAGE_MAP(ETSLayoutPropertyPage, CPropertyPage)
- //{{AFX_MSG_MAP(ETSLayoutPropertyPage)
- ON_WM_SIZE()
- ON_WM_GETMINMAXINFO()
- ON_WM_ERASEBKGND()
- ON_WM_WINDOWPOSCHANGING()
- ON_WM_DESTROY()
- ON_WM_WINDOWPOSCHANGED()
- //}}AFX_MSG_MAP
-END_MESSAGE_MAP()
-
-
-/////////////////////////////////////////////////////////////////////////////
-// Behandlungsroutinen für Nachrichten ETSLayoutPropertyPage
-
-
-
-void ETSLayoutPropertyPage::OnWindowPosChanged(WINDOWPOS FAR* lpwndpos)
-{
- CBasePropertyPage::OnWindowPosChanged(lpwndpos);
-
- // This code is needed in order to reset the buddy after this page has
- // been activated. At least on Win2k this is not done thru normal resizing,
- // as the page is not visible when first layouted. And without the page
- // being visible it's not possible to tell if the attached buddy is visible
- // or not (at least I don't know any way to do so)
-
- if( ::IsWindowVisible( GetWnd()->GetSafeHwnd() ) )
- {
- if( m_bResetBuddyOnNextTimeVisible )
- {
- // Take special care of SpinButtons (Up-Down Controls) with Buddy set, enumerate
- // all childs:
- CWnd* pWndChild = GetWnd()->GetWindow(GW_CHILD);
- TCHAR szClassName[ MAX_PATH ];
- while(pWndChild)
- {
- ::GetClassName( pWndChild->GetSafeHwnd(), szClassName, MAX_PATH );
- DWORD dwStyle = pWndChild->GetStyle();
-
- // is it a SpinButton?
- if( _tcscmp(szClassName, UPDOWN_CLASS)==0 && ::IsWindowVisible(pWndChild->GetSafeHwnd()) ) {
- HWND hwndBuddy = (HWND)::SendMessage( pWndChild->GetSafeHwnd(), UDM_GETBUDDY, 0, 0);
- if( hwndBuddy != 0 && (dwStyle&(UDS_ALIGNRIGHT|UDS_ALIGNLEFT)) != 0 )
- {
- // reset Buddy
- ::SendMessage( pWndChild->GetSafeHwnd(), UDM_SETBUDDY, (WPARAM)hwndBuddy, 0);
- }
- }
-
-
- pWndChild = pWndChild->GetWindow(GW_HWNDNEXT);
- }
-
- m_bResetBuddyOnNextTimeVisible = false;
- }
- }
- else
- {
- // has been hidden again
- m_bResetBuddyOnNextTimeVisible = true;
- }
-}
-
-void ETSLayoutPropertyPage::OnWindowPosChanging( WINDOWPOS* lpwndpos )
-{
- // In WizardMode the System calls SetWindowPos with the
- // original size at every activation. This could cause
- // some flicker in certain circumstances. Therefore we lock
- // moving the page and unlock it only if _we_ move the page
- if( m_bLockMove)
- {
- lpwndpos->flags |= SWP_NOMOVE | SWP_NOSIZE;
- }
- CBasePropertyPage::OnWindowPosChanging( lpwndpos );
-}
-
-BOOL ETSLayoutPropertyPage::OnEraseBkgnd(CDC* pDC)
-{
- EraseBkgnd(pDC);
- return true;
-}
-
-void ETSLayoutPropertyPage::OnDestroy()
-{
- // manually delete layout definition if object is reused
- m_RootPane = 0;
-
- CBasePropertyPage::OnDestroy();
-}
-
-void ETSLayoutPropertyPage::OnSize(UINT nType, int cx, int cy)
-{
- CBasePropertyPage::OnSize(nType, cx, cy);
-
- if( abs(cx) + abs(cy) > 0)
- {
- // Re-Layout all controls
- UpdateLayout();
- }
-}
-
-void ETSLayoutPropertyPage::OnGetMinMaxInfo(MINMAXINFO FAR* lpMMI)
-{
- if(m_RootPane.IsValid()) {
- CRect rcClient = GetRect();
-
- CRect rcWnd;
- GetWindowRect(rcWnd);
-
- // How much do Window and Client differ
- int nDiffHorz = rcWnd.Width() - rcClient.Width();
- int nDiffVert = rcWnd.Height() - rcClient.Height();
-
- // Take into account that there is a border around the rootPane
- lpMMI->ptMinTrackSize = CPoint(m_RootPane->getMinConstrainHorz() + nDiffHorz + 2*m_sizeRootBorders.cx,
- m_RootPane->getMinConstrainVert() + nDiffVert + 2*m_sizeRootBorders.cy);
-
- int maxWidth = m_RootPane->getMaxConstrainHorz();
- int maxHeight = m_RootPane->getMaxConstrainVert();
-
- if( maxWidth != -1 ) {
- lpMMI->ptMaxTrackSize.x = maxWidth + nDiffHorz + 2*m_sizeRootBorders.cx;
- lpMMI->ptMaxSize.x = maxWidth + nDiffHorz + 2*m_sizeRootBorders.cx;
- }
-
- if( maxHeight != -1 ) {
- lpMMI->ptMaxTrackSize.y = maxHeight + nDiffVert + 2*m_sizeRootBorders.cy;
- lpMMI->ptMaxSize.y = maxHeight + nDiffVert + 2*m_sizeRootBorders.cy;
- }
- }
-}
-
-
-CRect ETSLayoutPropertyPage::GetRect()
-{
- CRect r;
- GetClientRect(r);
- return r;
-}
-
-
-BOOL ETSLayoutPropertyPage::OnInitDialog()
-{
- CBasePropertyPage::OnInitDialog();
- UpdateLayout();
-
- ETSLayoutPropertySheet* pSheet = (ETSLayoutPropertySheet*) GetParent();
-
- ASSERT_KINDOF( ETSLayoutPropertySheet, pSheet);
- if(pSheet)
- {
- if(pSheet->IsWizard())
- {
- m_bLockMove = true;
- }
- }
-
- return TRUE;
-}
-
-BOOL ETSLayoutPropertyPage::OnSetActive()
-{
- ETSLayoutPropertySheet* pSheet = (ETSLayoutPropertySheet*) GetParent();
-
- ASSERT_KINDOF( ETSLayoutPropertySheet, pSheet);
- if(pSheet)
- {
- if(pSheet->IsWizard())
- {
- // In WizardMode the System calls SetWindowPos with the
- // original size on Page Activation. This will position the
- // page at the correct position
- m_bLockMove = false;
- MoveWindow(pSheet->m_rcPage);
- m_bLockMove = true;
- }
- }
-
- UpdateLayout();
-
- return CBasePropertyPage::OnSetActive();
-}
-
-/////////////////////////////////////////////////////////////////////////////
-// ETSLayoutPropertySheet
-
-IMPLEMENT_DYNAMIC(ETSLayoutPropertySheet, CPropertySheet)
-
-#pragma warning(disable: 4355)
-ETSLayoutPropertySheet::ETSLayoutPropertySheet(UINT nIDCaption, CWnd* pParentWnd, UINT iSelectPage,
- LPCTSTR strName /*=NULL*/, bool bGripper/*=true*/)
- : CPropertySheet(nIDCaption, pParentWnd, iSelectPage), ETSLayoutMgr( this )
-{
- Init(strName, bGripper);
-}
-
-ETSLayoutPropertySheet::ETSLayoutPropertySheet(LPCTSTR pszCaption, CWnd* pParentWnd, UINT iSelectPage,
- LPCTSTR strName /*=NULL*/, bool bGripper/*=true*/)
- : CPropertySheet(pszCaption, pParentWnd, iSelectPage), ETSLayoutMgr( this )
-{
- Init(strName, bGripper);
-}
-#pragma warning(default: 4355)
-
-void ETSLayoutPropertySheet::Init(LPCTSTR strName, bool bGripper)
-{
- m_bGripper = bGripper;
- if(strName)
- m_strRegStore = strName;
-
- m_bAutoDestroy = false;
- m_bAutoDestroyPages = false;
- m_bModelessButtons = false;
-}
-
-ETSLayoutPropertySheet::~ETSLayoutPropertySheet()
-{
-}
-
-
-BEGIN_MESSAGE_MAP(ETSLayoutPropertySheet, CPropertySheet)
- //{{AFX_MSG_MAP(ETSLayoutPropertySheet)
- ON_WM_CREATE()
- ON_WM_SIZE()
- ON_WM_GETMINMAXINFO()
- ON_WM_DESTROY()
- ON_WM_ERASEBKGND()
- //}}AFX_MSG_MAP
-END_MESSAGE_MAP()
-
-/////////////////////////////////////////////////////////////////////////////
-// Behandlungsroutinen für Nachrichten ETSLayoutPropertySheet
-
-BOOL ETSLayoutPropertySheet::OnEraseBkgnd(CDC* pDC)
-{
- EraseBkgnd(pDC);
- return true;
-}
-
-
-int ETSLayoutPropertySheet::OnCreate(LPCREATESTRUCT lpCreateStruct)
-{
- if (CPropertySheet::OnCreate(lpCreateStruct) == -1)
- return -1;
-
- ModifyStyle(0,WS_THICKFRAME| WS_SYSMENU);
- return 0;
-}
-
-
-void ETSLayoutPropertySheet::Resize(int cx, int cy)
-{
- if( abs(cx) + abs(cy) > 0 && m_RootPane.IsValid() )
- {
- UpdateLayout();
-
- // Fix for PSH_WIZARDHASFINISH [Thömmi]
- if (IsWizard() && !(m_psh.dwFlags & PSH_WIZARDHASFINISH) )
- {
- // manual reposition of the FINISH button
- // can not be done with normaly layouting because it
- // shares position with the NEXT button
- CWnd *pWndFinish;
- pWndFinish=GetDlgItem(ID_WIZFINISH);
-
- if(pWndFinish)
- {
- CRect rcWnd;
- GetDlgItem(ID_WIZNEXT)->GetWindowRect(&rcWnd);
- ScreenToClient(&rcWnd);
- pWndFinish->MoveWindow(rcWnd);
- pWndFinish->RedrawWindow(0,0, RDW_INVALIDATE | RDW_UPDATENOW );
- }
- }
-
- // reposition Gripper
- if(m_bGripper)
- RepositionBars(AFX_IDW_CONTROLBAR_FIRST, AFX_IDW_CONTROLBAR_LAST, 0);
-
- CPropertyPage* pPage = (CPropertyPage*)GetActivePage();
-
- if(pPage)
- {
- CRect rcWnd;
- GetTabControl()->GetWindowRect(&rcWnd);
- ScreenToClient(&rcWnd);
-
- if(!IsWizard()) {
- // get inside of tab
- GetTabControl()->AdjustRect(FALSE, &rcWnd);
- }
- else
- {
- rcWnd.bottom += 5;
- }
-
- // we need this size in WizardMode in order to
- // reposition newly activated page correctly
- m_rcPage = rcWnd;
-
- if( IsWizard() && pPage->IsKindOf(RUNTIME_CLASS(ETSLayoutPropertyPage)) )
- {
- ETSLayoutPropertyPage* pEtsPage = reinterpret_cast<ETSLayoutPropertyPage*>(pPage);
-
- pEtsPage->m_bLockMove = false;
- pEtsPage->MoveWindow(m_rcPage);
- pEtsPage->m_bLockMove = true;
- }
- else
- {
- pPage->MoveWindow(m_rcPage);
- }
-
- }
-
- if(IsWindowVisible())
- {
- RedrawWindow(0,0, RDW_INVALIDATE|RDW_UPDATENOW );
-
- if(!IsWizard())
- GetTabControl()->RedrawWindow(0,0, RDW_INVALIDATE|RDW_UPDATENOW );
- }
- }
-}
-
-void ETSLayoutPropertySheet::OnSize(UINT nType, int cx, int cy)
-{
- CPropertySheet::OnSize(nType, cx, cy);
- Resize(cx,cy);
-}
-
-// IDs of all PropertySheet controls
-long _PropertySheetIDs[] =
-{
- ID_WIZBACK,
- ID_WIZNEXT,
- ID_WIZFINISH,
- IDOK,
- IDCANCEL,
- ID_APPLY_NOW,
- IDHELP
-};
-
-void ETSLayoutPropertySheet::AddMainArea(CPane paneRoot, CPaneBase itemTab)
-{
- // the default is: Whole main Area is covered by the TabCtrl
- paneRoot << itemTab;
-}
-
-void ETSLayoutPropertySheet::AddButtons(CPane paneBottom)
-{
- // first item greedy to keep others right
- paneBottom->addItem (paneNull, GREEDY);
-
-
- // add all Controls to the layouting
- bool bFirst = true;
- for(int i = 0; i < (sizeof(_PropertySheetIDs) / sizeof(long)) ; i++)
- {
- // Prevent movement of finish button, if it is not shown explicitly [Thömmi]
- if( IsWizard()
- && _PropertySheetIDs[i] == ID_WIZFINISH
- && !(m_psh.dwFlags & PSH_WIZARDHASFINISH) )
- {
- continue;
- }
-
- CWnd* pWnd = GetDlgItem(_PropertySheetIDs[i]);
-
- if(pWnd)
- {
-
- if(!(m_psh.dwFlags & PSH_HASHELP) && _PropertySheetIDs[i] == IDHELP)
- {
- // don't insert
- continue;
- }
-
- if((m_psh.dwFlags & PSH_NOAPPLYNOW) && _PropertySheetIDs[i] == ID_APPLY_NOW)
- {
- // don't insert
- continue;
- }
-
- // space before first one and between BACK & NEXT
- if( IsWizard() )
- {
- if( !bFirst && !(_PropertySheetIDs[i]==ID_WIZNEXT) )
- {
- paneBottom->addItem(paneNull, NORESIZE,12,0,0,0);
- }
- }
-
- pWnd->ShowWindow(true);
- paneBottom->addItem(_PropertySheetIDs[i], NORESIZE);
- bFirst = false;
- }
- }
-
-}
-
-BOOL ETSLayoutPropertySheet::OnInitDialog()
-{
- BOOL bRet = CPropertySheet::OnInitDialog();
-
- //ASSERT(!m_RootPane);
-
- // Save initial rect
- GetWindowRect(&m_rcStart);
-
- CPropertyPage* pPage = CPropertySheet::GetActivePage();
- ASSERT(pPage);
-
- CRect rcPage;
- pPage->GetClientRect(&rcPage);
-
- CreateRoot(VERTICAL);
- //ASSERT(m_RootPane);
-
- // Add Tabcontrol to root pane
- m_ItemTab = item( GetTabControl(), GREEDY, 0, 0, 0, 0);
- AddMainArea(m_RootPane, m_ItemTab);
-
- // Tabcontrol is invisible in WizardMode
- if(IsWizard())
- {
- GetTabControl()->ShowWindow(false);
- }
-
- // add horizontal line in WizardMode
- if(IsWizard() && GetDlgItem(ID_WIZFINISH+1))
- {
- m_RootPane << item(ID_WIZFINISH+1, ABSOLUTE_VERT, 0, 0, 0, 0);
- }
-
- if( IsWizard() || !m_bModeless || m_bModelessButtons )
- {
- // No spaces in WizardMode in order to keep BACK & NEXT together
- CPane bottomPane = pane(HORIZONTAL, ABSOLUTE_VERT, IsWizard() ? 0 : 5);
-
- AddButtons(bottomPane);
- // add bottom (button) pane if any controls were added
- if(bottomPane->m_paneItems.GetSize() > 0) {
- m_RootPane << bottomPane;
- }
- }
-
-
-
- // some Space between Buttons und Gripper
- if(m_bGripper)
- {
- m_RootPane->addItem(paneNull, ABSOLUTE_VERT,0,2);
-
- if(m_StatusBar.Create(m_pWnd))
- {
- m_StatusBar.SetIndicators(auIDStatusBar,
- sizeof(auIDStatusBar) / sizeof(UINT));
- m_StatusBar.SetWindowText(_T(""));
- RepositionBars(AFX_IDW_CONTROLBAR_FIRST, AFX_IDW_CONTROLBAR_LAST, 0);
- }
- else
- {
- AfxMessageBox(_T("Error - Statusbar"));
- }
- }
-
- if(!m_strRegStore.IsEmpty())
- {
- Load(m_strRegStore);
- }
-
- Resize(1,1); // Fix. for 95/98/NT difference
-
- CRect rcWnd;
- GetWindowRect( & rcWnd );
- MoveWindow( rcWnd );
-
- return bRet;
-}
-
-
-void ETSLayoutPropertySheet::OnGetMinMaxInfo(MINMAXINFO FAR* lpMMI)
-{
- if(m_RootPane.IsValid() && GetTabControl() != 0 )
- {
- CRect rcWnd;
- GetWindowRect(rcWnd);
-
- CRect rcClient = GetRect();
- rcWnd-=rcClient;
-
- // ask for MinMax of all pages
- CSize sizePageMax(0,0);
- CSize sizePageMin(0,0);
- for( int nPage=0; nPage<GetPageCount(); ++nPage)
- {
- CPropertyPage* pPage = GetPage(nPage);
- ASSERT(pPage);
- if( pPage )
- {
- MINMAXINFO mmi;
- memset(&mmi, 0, sizeof(mmi));
-
- if( IsWindow(pPage->GetSafeHwnd()) )
- {
- pPage->SendMessage(WM_GETMINMAXINFO, 0, (LPARAM) &mmi);
-
- if(mmi.ptMaxTrackSize.x != 0)
- {
- sizePageMax.cx = min(sizePageMax.cx, mmi.ptMaxTrackSize.x);
- }
- if(mmi.ptMaxTrackSize.y != 0)
- {
- sizePageMax.cy = min(sizePageMax.cy, mmi.ptMaxTrackSize.y);
- }
- if(mmi.ptMinTrackSize.x != 0)
- {
- sizePageMin.cx = max(sizePageMin.cx, mmi.ptMinTrackSize.x);
- }
- if(mmi.ptMinTrackSize.y != 0)
- {
- sizePageMin.cy = max(sizePageMin.cy, mmi.ptMinTrackSize.y);
- }
- }
- }
- }
- static_cast<PaneItem*>( m_ItemTab.GetPaneBase() )->m_sizeXMin = sizePageMin.cx;
- static_cast<PaneItem*>( m_ItemTab.GetPaneBase() )->m_sizeYMin = sizePageMin.cy;
-
- // calculate the needed size of the tabctrl in non-wizard-mode
- CRect rcItem(0,0,0,0);
- if(!IsWizard())
- {
- GetTabControl()->AdjustRect( TRUE, rcItem );
- }
-
- lpMMI->ptMinTrackSize.x = m_RootPane->getMinConstrainHorz() + rcWnd.Width() + 2*m_sizeRootBorders.cx
- + rcItem.Width();
-
- lpMMI->ptMinTrackSize.y = m_RootPane->getMinConstrainVert() + rcWnd.Height() + 2*m_sizeRootBorders.cy
- + rcItem.Height();
-
- // never smaller than inital size!
- lpMMI->ptMinTrackSize.x = max(lpMMI->ptMinTrackSize.x, m_rcStart.Width() );
- lpMMI->ptMinTrackSize.y = max(lpMMI->ptMinTrackSize.y, m_rcStart.Height() );
-
- // Rest like ETSLayoutMgr
-
- int maxWidth = m_RootPane->getMaxConstrainHorz();
- int maxHeight = m_RootPane->getMaxConstrainVert();
-
- if( maxWidth != -1 )
- {
- lpMMI->ptMaxSize.x = sizePageMax.cx + rcWnd.Width()+ 2*m_sizeRootBorders.cx + rcItem.Width() ;
- }
-
- if( maxHeight != -1 )
- {
- lpMMI->ptMaxSize.y = sizePageMax.cy + rcWnd.Height() + 2*m_sizeRootBorders.cy + rcItem.Width() ;
- }
-
- lpMMI->ptMaxTrackSize = lpMMI->ptMaxSize;
-
- }
-}
-
-
-void ETSLayoutPropertySheet::OnDestroy()
-{
- // Store size/position
- if(!m_strRegStore.IsEmpty())
- {
- Save(m_strRegStore);
- }
- m_RootPane = 0;
-
- CPropertySheet::OnDestroy();
-}
-
-void ETSLayoutPropertySheet::PostNcDestroy()
-{
- if(m_bAutoDestroyPages)
- {
- // walk all pages and destry them
- for( int nPage=0; nPage<GetPageCount(); ++nPage)
- {
- CPropertyPage* pPage = GetPage(nPage);
- ASSERT(pPage);
- if( pPage )
- {
- delete pPage;
- }
- }
- }
-
- if(m_bAutoDestroy)
- delete this;
-}
-
-
-
-/**
- * CPane represents an autopointer to a PaneBase. Use this and you won't have to worry
- * about cleaning up any Panes. Also this autopointer lets you return Pane objects
- * from function without using pointers (at least you won't see them :) )
- */
-ETSLayoutMgr::PaneHolder::PaneHolder(PaneBase* pPane )
-{
-
- ASSERT( pPane );
- m_pPane = pPane;
-
- // Implicitly AddRef()
- m_nRefCount = 1;
-}
-
-ETSLayoutMgr::PaneHolder::~PaneHolder()
-{
- ASSERT( m_pPane );
- ASSERT( m_nRefCount == 0 );
-
- delete m_pPane;
-}
-
-void ETSLayoutMgr::PaneHolder::AddRef()
-{
- InterlockedIncrement( &m_nRefCount );
-}
-
-void ETSLayoutMgr::PaneHolder::Release()
-{
- if( InterlockedDecrement( &m_nRefCount ) <= 0 )
- {
- // no more references on me, so destroy myself
- delete this;
- }
-}
-
-ETSLayoutMgr::CPaneBase::CPaneBase( )
-{
- // MUST be initialized later
- m_pPaneHolder = 0;
-}
-
-ETSLayoutMgr::CPaneBase::CPaneBase( PaneBase* pPane )
-{
- m_pPaneHolder = 0;
-
- if( pPane != 0)
- operator=( pPane );
-}
-
-ETSLayoutMgr::CPaneBase::CPaneBase( const CPaneBase& other )
-{
- m_pPaneHolder = 0;
- operator=(other);
-}
-
-ETSLayoutMgr::CPaneBase::~CPaneBase()
-{
- if(m_pPaneHolder)
- m_pPaneHolder->Release();
-}
-
-void ETSLayoutMgr::CPaneBase::operator=( PaneBase* pPane )
-{
- if(m_pPaneHolder)
- {
- m_pPaneHolder->Release();
- m_pPaneHolder = 0;
- }
-
- if( pPane != 0 )
- m_pPaneHolder = new PaneHolder( pPane );
-}
-
-void ETSLayoutMgr::CPaneBase::operator=( const CPaneBase& other )
-{
- ASSERT( other.m_pPaneHolder );
-
- if(m_pPaneHolder)
- {
- m_pPaneHolder->Release();
- m_pPaneHolder = 0;
- }
-
- other.m_pPaneHolder->AddRef();
- m_pPaneHolder = other.m_pPaneHolder;
-}
-
-ETSLayoutMgr::PaneBase* ETSLayoutMgr::CPaneBase::operator->() const
-{
- ASSERT(m_pPaneHolder);
-
- if(!m_pPaneHolder)
- return 0;
-
- return (m_pPaneHolder->m_pPane);
-}
-
-
-
-ETSLayoutMgr::CPane::CPane( )
-{
-}
-
-ETSLayoutMgr::CPane::CPane( Pane* pPane ) : ETSLayoutMgr::CPaneBase( static_cast<PaneBase*>(pPane) )
-{
-}
-
-ETSLayoutMgr::CPane::CPane( const CPane& other )
-{
- operator=(other);
-}
-
-ETSLayoutMgr::CPane::~CPane()
-{
-}
-
-void ETSLayoutMgr::CPane::operator=( Pane* pPane )
-{
- CPaneBase::operator=(pPane);
-}
-
-void ETSLayoutMgr::CPane::operator=( const ETSLayoutMgr::CPane& other )
-{
- ASSERT( other.m_pPaneHolder );
-
- if(m_pPaneHolder)
- {
- m_pPaneHolder->Release();
- m_pPaneHolder = 0;
- }
-
- other.m_pPaneHolder->AddRef();
- m_pPaneHolder = other.m_pPaneHolder;
-}
-
-ETSLayoutMgr::Pane* ETSLayoutMgr::CPane::operator->() const
-{
- ASSERT(m_pPaneHolder);
-
- if(!m_pPaneHolder)
- return 0;
-
- return reinterpret_cast<Pane*>(m_pPaneHolder->m_pPane);
-}
-
-ETSLayoutMgr::CPaneBase ETSLayoutMgr::CPane::ConvertBase() const
-{
- ASSERT(m_pPaneHolder);
- return CPaneBase( m_pPaneHolder->m_pPane );
-}
-
-ETSLayoutMgr::CPane& ETSLayoutMgr::CPane::operator<< ( const ETSLayoutMgr::CPane pPane )
-{
- GetPane()->addPane( pPane, (ETSLayoutMgr::layResizeMode)pPane->m_modeResize, pPane->m_sizeSecondary);
- return (*this);
-}
-
-ETSLayoutMgr::CPane& ETSLayoutMgr::CPane::operator<< ( const ETSLayoutMgr::CPaneBase pItem )
-{
- GetPane()->addPane( pItem );
- return (*this);
-}
diff --git a/Bus/IvyProbe/ETSLayout.h b/Bus/IvyProbe/ETSLayout.h
deleted file mode 100644
index 3bdc0da..0000000
--- a/Bus/IvyProbe/ETSLayout.h
+++ /dev/null
@@ -1,963 +0,0 @@
-////////////////////////////////////////////
-// ___ ____ _________________ //
-// / _/_ _// _______________/ //
-// / _/ / / / / ___ ___ ____ //
-// /__/ /_/ / / / // _/_ _/ //
-// _________/ / / / // _/ / / //
-// (c) 1998-2000_/ /___//_/ /_/ //
-// //
-////////////////////////////////////////////
-// all rights reserved //
-////////////////////////////////////////////
-
-/////////////////////////////////////////////////////////////////////////////
-// ETSLayoutDialog
-//
-// A class for smart layouting of Dialogs and such
-//
-// USAGE: See LayoutMgr.html
-//
-// AUTHOR: Erwin Tratar <tr@et-soft.de>
-//
-// DISCLAIMER:
-//
-// This Sourcecode and all accompaning material is ©1998-1999 Erwin Tratar.
-// All rights reserved.
-//
-// The source code may be used in compiled form in any way you desire
-// (including usage in commercial applications), providing that your
-// application adds essential code (i.e. it is not only a wrapper) to the
-// functionality found here
-//
-// Redistribution of the sourcecode itself, publication in any media or
-// inclusion in a library requires the authors expressed written consent.
-// You may not sale this code for profit.
-//
-// THIS SOFTWARE IS PROVIDED "AS IS" WITHOUT EXPRESS OR IMPLIED WARRANTY. USE IT
-// AT YOUR OWN RISK! THE AUTHOR ACCEPTS NO LIABILITY FOR ANY DAMAGE/LOSS OF
-// BUSINESS THAT THIS PRODUCT MAY CAUSE.
-
-
-#if !defined(ETS_LAYOUTMGR_INCLUDED_)
-#define ETS_LAYOUTMGR_INCLUDED_
-
-#if _MSC_VER >= 1000
-#pragma once
-#endif // _MSC_VER >= 1000
-// DialogMgr.h : header file
-//
-namespace ETSLayout
-{
-
-#ifdef CS_HELP
- typedef ETSCSHelpDialog CBaseDialog;
- typedef ETSCSHelpFormView CBaseFormView;
- typedef ETSCSHelpDlgBar CBaseDialogBar;
- typedef ETSCSHelpPropPage CBasePropertyPage;
-#else
- typedef CDialog CBaseDialog;
- typedef CFormView CBaseFormView;
- typedef CDialogBar CBaseDialogBar;
- typedef CPropertyPage CBasePropertyPage;
-#endif
-}
-
-// Support for CBCGDialogBar instead of CDialogBar available:
-// you just have to change the typedef to CBaseDialogBar
-
-#ifndef ETSGUI_EXT_CLASS
-#define ETSGUI_EXT_CLASS
-#endif
-
-#include <afxtempl.h>
-
-// Support for CBCGDialogBar instead of CDialogBar
-
-/**
- * Controls whether the Icon is automatically set to IDR_MAINFRAME
- */
-#define _AUTO_SET_ICON
-
-/**
- * Forward class declarations
- */
-class ETSLayoutDialog;
-class ETSLayoutDialogBar;
-class ETSLayoutFormView;
-class ETSLayoutMgr;
-class ETSLayoutPropertyPage;
-class ETSLayoutPropertySheet;
-
-
-/**
- * These are NOOPs now
- */
-#define DECLARE_LAYOUT()
-#define IMPLEMENT_LAYOUT()
-
-/**
- * This is the default border size between the panes. You
- * may override it in Pane constructor, but it is the
- * fixed border around the root pane
- */
-const int nDefaultBorder = 5;
-
-/**
- * The minimum size for not ABSOLUTE_XXX items
- */
-const int nMinConstrain = 5;
-
-class ETSGUI_EXT_CLASS ETSLayoutMgr
-{
-public:
-
- enum layResizeMode {
- GREEDY = 0, // Will eat up as much as it can
- ABSOLUTE_HORZ = 1 << 0, // Horizontal size is absolute
- RELATIVE_HORZ = 1 << 1, // Horizontal size in percent
- ABSOLUTE_VERT = 1 << 2, // Vertical size is absolute
- RELATIVE_VERT = 1 << 3, // Vertical size in percent
-
- NORESIZE = ABSOLUTE_HORZ | ABSOLUTE_VERT,
-
- SIZE_MASK = NORESIZE,
-
- ALIGN_LEFT = 1 << 4, // following only for NORESIZE
- ALIGN_RIGHT = 1 << 5,
- ALIGN_TOP = 1 << 6,
- ALIGN_BOTTOM = 1 << 7,
-
- ALIGN_HCENTER = ALIGN_LEFT | ALIGN_RIGHT,
- ALIGN_VCENTER = ALIGN_TOP | ALIGN_BOTTOM,
-
- ALIGN_CENTER = ALIGN_HCENTER | ALIGN_VCENTER,
-
- ALIGN_FILL_HORZ = 1 << 8,
- ALIGN_FILL_VERT = 1 << 9,
- ALIGN_FILL = ALIGN_FILL_HORZ | ALIGN_FILL_VERT,
-
-/* TRACKER_LEFT = 1 << 10, // not yet. May allow tracking of borders
- TRACKER_RIGHT = 1 << 11, // between items in the future
- TRACKER_TOP = 1 << 12,
- TRACKER_BOTTOM = 1 << 13,
-*/
- };
-
- enum layOrientation {
- HORIZONTAL,
- VERTICAL
- };
-
- /**
- * This is the base class for all kind of panes.
- */
- class ETSGUI_EXT_CLASS PaneBase {
- friend class ETSLayoutMgr;
- friend class CPaneBase;
- friend class CPane;
-
- public:
-
- /**
- * Informs the caller how much of the given space this pane would
- * like to receive in horizontal direction
- */
- virtual int getConstrainHorz(int sizeParent) = 0;
-
-
- /**
- * Informs the caller how much of the given space this pane would
- * like to receive in vertical direction
- */
- virtual int getConstrainVert(int sizeParent) = 0;
-
- /**
- * Informs the caller how much of the given space this pane
- * minimally need. This would be an absolute Value if
- * the mode contains ABSOLUTE_HORZ or an explicit minimum
- * value, else nMinConstrain
- */
- virtual int getMinConstrainHorz() = 0;
- /**
- * Informs the caller if there is an restriction for maximum
- * space this pane needs. Return -1 for unrestricted (GREEDY
- * or RELATIVE)
- */
- virtual int getMaxConstrainHorz() = 0;
-
- /**
- * Informs the caller how much of the given space this pane
- * minimally need. This would be an absolute Value if
- * the mode contains ABSOLUTE_VERT or an explicit minimum
- * value, else nMinConstrain
- */
- virtual int getMinConstrainVert() = 0;
-
- /**
- * Informs the caller if there is an restriction for maximum
- * space this pane needs. Return -1 for unrestricted (GREEDY
- * or RELATIVE)
- */
- virtual int getMaxConstrainVert() = 0;
-
- /**
- * This will do the actual resize operation after the
- * caller computed a new area for this pane
- */
- virtual bool resizeTo(CRect& rcNewArea) = 0;
-
- /**
- * Constructor needed pointer to LayoutManager
- */
- PaneBase( ETSLayoutMgr* pMgr ) { m_pMgr = pMgr; };
-
- /**
- * Virtual destructor needed in Container operations
- */
- virtual ~PaneBase() {};
-
- /**
- * Returs the Resize Mode of this pane
- */
- DWORD modeResize() { return m_modeResize; };
-
- protected:
- /**
- * How this Item will be resized, a combination of the flags above
- */
- DWORD m_modeResize;
-
- /**
- * A pointer to the holding LayoutManager derivate
- */
- ETSLayoutMgr* m_pMgr;
- };
-
- /**
- * CPaneBase represents an autopointer to a PaneBase. Use this and you won't have to worry
- * about cleaning up any Panes. Also this autopointer lets you return Pane objects
- * from function without using pointers (at least you won't see them :) )
- */
- struct ETSGUI_EXT_CLASS PaneHolder
- {
- PaneHolder(PaneBase* pPane );
- ~PaneHolder();
-
- void AddRef();
- void Release();
-
- PaneBase* m_pPane;
- long m_nRefCount;
- };
-
- class ETSGUI_EXT_CLASS CPaneBase
- {
- protected:
- PaneHolder* m_pPaneHolder;
-
- public:
- // Standardconstructor
- CPaneBase( );
- CPaneBase( PaneBase* pPane );
- CPaneBase( const CPaneBase& other );
-
- ~CPaneBase();
-
- void operator=( PaneBase* pPane );
- void operator=( const CPaneBase& other );
- PaneBase* operator->() const;
- PaneBase* GetPaneBase() { return operator->(); }
-
- bool IsValid() { return (m_pPaneHolder != 0); }
- bool operator !() { return (m_pPaneHolder == 0); }
-
- };
-
- class Pane;
- class ETSGUI_EXT_CLASS CPane : public CPaneBase
- {
- public:
- // Standardconstructor
- CPane( );
- CPane( Pane* pPane );
- CPane( const CPane& other );
-
- ~CPane();
-
- void operator=( Pane* pPane );
- void operator=( const CPane& other );
- Pane* operator->() const;
- Pane* GetPane() { return operator->(); }
-
- CPaneBase ConvertBase() const;
-
- CPane& operator<< ( const CPane pPane );
- CPane& operator<< ( const CPaneBase pItem );
- };
-
-
-
- /**
- * PaneItem represents a single control
- */
- class ETSGUI_EXT_CLASS PaneItem : public PaneBase {
- friend class ETSLayoutMgr;
- friend class Pane;
- protected:
- /**
- * Creates a new PaneItem from an Control. If sizeX or sizeY are 0
- * and modeResize is ABSOLUTE will copy the current dimensions of
- * the control to m_sizeX/Y. So the appearance does not change
- * from the Dialog Editor
- */
- PaneItem( CWnd* pWnd, ETSLayoutMgr* pMgr, layResizeMode modeResize = GREEDY, int sizeX=0, int sizeY=0, int sizeXMin=0, int sizeYMin=0);
-
- /**
- * If your control is not mapped you can name it by its ChildID. Pass
- * the pMgr to receive the CWnd* of nID.
- * The rest as stated above
- */
- PaneItem( UINT nID, ETSLayoutMgr* pMgr, layResizeMode modeResize = GREEDY, int sizeX=0, int sizeY=0, int sizeXMin=0, int sizeYMin=0);
-
-
- public:
- /**
- * see PaneBase
- */
- virtual int getConstrainHorz(int sizeParent);
- virtual int getConstrainVert(int sizeParent);
- virtual int getMinConstrainHorz();
- virtual int getMinConstrainVert();
- virtual int getMaxConstrainHorz();
- virtual int getMaxConstrainVert();
- virtual bool resizeTo(CRect& rcNewArea);
-
- bool isDummy() { return (m_hwndCtrl == 0); }
-
- protected:
- friend class ETSLayoutPropertySheet;
-
- /**
- * The horizontal size of the control (see m_modeResize)
- */
- int m_sizeX;
- int m_sizeXMin;
-
- /**
- * The vertical size of the control (see m_modeResize)
- */
- int m_sizeY;
- int m_sizeYMin;
-
- /**
- * Child Control pointer
- */
- HWND m_hwndCtrl;
-
- /**
- * Combo box needs special treatment
- */
- bool m_bComboSpecial;
- };
-
-
- /**
- * This class encapsulates a Subpane (and indeed the root Pane too)
- * it is a container of PaneBase* which it will recursivly resize
- */
- class ETSGUI_EXT_CLASS Pane : public PaneBase {
- friend class ETSLayoutMgr;
- friend class CPaneBase;
- friend class CPane;
- friend class ETSLayoutPropertySheet;
-
- protected:
- /**
- * Tell the pane in which direction it is positioned. A HORIZONTAL pane
- * arranges it's subpanes from left to right, a VERTICAL from top to bottom
- */
- Pane( ETSLayoutMgr* pMgr, layOrientation orientation, int sizeBorder = nDefaultBorder, int sizeExtraBorder = 0 );
-
- public:
- /**
- * If your control is not mapped you can name it by its ChildID. Pass
- * the pMgr to receive the CWnd* of nID.
- * The rest as stated above
- */
- bool addItem( UINT nID, layResizeMode modeResize = GREEDY, int sizeX=0, int sizeY=0, int sizeXMin=-1, int sizeYMin=-1);
-
- /**
- * Creates a new PaneItem from an Control. If sizeX or sizeY are 0
- * and modeResize is ABSOLUTE will copy the current dimensions of
- * the control to m_sizeX/Y. So the appearance does not change
- * from the Dialog Editor
- */
- bool addItem( CWnd* pWnd, layResizeMode modeResize = GREEDY, int sizeX=0, int sizeY=0, int sizeXMin=-1, int sizeYMin=-1);
-
-
- /**
- * Add a whitespace Item (paneNull) of variable size with
- * a minimum size of 0
- */
- bool addItemGrowing();
-
- /**
- * Add a whitespace Item (paneNull) with fixed size
- */
- bool addItemFixed(int size);
-
- /**
- * Add a whitespace Item (paneNull) of fixed size based on the
- * current layout (as in the dialog template). Based on the layout
- * of the pane vertical or horizontal spacing is considered
- *
- * First argument is the left (top) item for a HORIZONTAL (VERTICAL) pane
- */
- bool addItemSpaceBetween( CWnd* pWndFirst, CWnd* pWndSecond );
- bool addItemSpaceBetween( UINT nIDFirst, UINT nIDSecond );
-
-
- /**
- * Add a whitespace Item (paneNull) of fixed size based on the
- * size of another item
- */
- bool addItemSpaceLike( CWnd* pWnd );
- bool addItemSpaceLike( UINT nID );
-
-
- /**
- * Add an item to the pane, appending at the end. This may be either obtained
- * by a call to ETSLayoutMgr::item() or one of the ETSLayoutMgr::paneXXX() calls
- */
- bool addPane( CPaneBase pItem );
- bool addPane( CPane pSubpane, layResizeMode modeResize, int sizeSecondary /* = 0 */);
-
- virtual int getConstrainHorz(int sizeParent);
- virtual int getConstrainVert(int sizeParent);
- virtual int getMinConstrainHorz();
- virtual int getMinConstrainVert();
- virtual int getMaxConstrainHorz();
- virtual int getMaxConstrainVert();
- virtual bool resizeTo(CRect& rcNewArea);
-
- /**
- * The destructor takes care of destroying all Subpanes and items
- */
- virtual ~Pane();
-
- /**
- * Access to the orientation of this pane
- */
- layOrientation getOrientation() { return m_Orientation; };
-
-
- protected:
-
- int resizeToAbsolute(int& availSpace, CArray<int,int>& sizePrimary,
- CArray<int,int>& sizeMin, CArray<int,int>& sizeMax);
-
- bool resizeToRelative(int& availSpace, CArray<int,int>& sizePrimary,
- CArray<int,int>& sizeMin, CArray<int,int>& sizeMax);
-
- bool resizeToGreedy( int& availSpace, int nGreedy, CArray<int,int>& sizePrimary,
- CArray<int,int>& sizeMin, CArray<int,int>& sizeMax);
-
- /**
- * The orientation of the pane. Keep in mind that all subpanes
- * must have the complementary orientation, i.e. a VERTICAL
- * pane must have all HORIZONTAL SubPanes (or normal Items
- * of course)
- */
- layOrientation m_Orientation;
-
- /**
- * This array holds the pointers to the Items/SubPanes
- */
- CArray<CPaneBase, CPaneBase> m_paneItems;
-
- /**
- * The secondary constrain
- */
- int m_sizeSecondary;
-
- /**
- * Size of gap between childs
- */
- int m_sizeBorder;
- int m_sizeExtraBorder;
- };
-
-
- /**
- * This class encapsulates a Subpane which is a Tab
- * it will use calls to AdjustRect to position it's
- * childs
- */
- class ETSGUI_EXT_CLASS PaneTab : public Pane
- {
- friend class ETSLayoutMgr;
-
- protected:
- /**
- * Tell the pane in which direction it is positioned. A HORIZONTAL pane
- * arranges it's subpanes from left to right, a VERTICAL from top to bottom
- */
- PaneTab( CTabCtrl* pTab, ETSLayoutMgr* pMgr, layOrientation orientation, int sizeBorder = nDefaultBorder, int sizeExtraBorder = 0 );
-
- public:
- virtual int getConstrainHorz(int sizeParent);
- virtual int getConstrainVert(int sizeParent);
- virtual int getMinConstrainHorz();
- virtual int getMinConstrainVert();
- virtual int getMaxConstrainHorz();
- virtual int getMaxConstrainVert();
- virtual bool resizeTo(CRect& rcNewArea);
-
- private:
- CTabCtrl* m_pTab;
- };
-
- /**
- * This class encapsulates a Subpane which is a Static
- * it will use calls to AdjustRect to position it's
- * childs
- */
- class ETSGUI_EXT_CLASS PaneCtrl : public Pane
- {
- friend class ETSLayoutMgr;
- protected:
- /**
- * Tell the pane in which direction it is positioned. A HORIZONTAL pane
- * arranges it's subpanes from left to right, a VERTICAL from top to bottom
- */
- PaneCtrl( CWnd* pCtrl, ETSLayoutMgr* pMgr, layOrientation orientation, int sizeBorder = nDefaultBorder, int sizeExtraBorder = 0, int sizeTopExtra = 0);
- PaneCtrl( UINT nID, ETSLayoutMgr* pMgr, layOrientation orientation, int sizeBorder = nDefaultBorder, int sizeExtraBorder = 0, int sizeTopExtra = 0 );
-
- public:
-
- virtual int getConstrainHorz(int sizeParent);
- virtual int getConstrainVert(int sizeParent);
- virtual int getMinConstrainHorz();
- virtual int getMinConstrainVert();
- virtual int getMaxConstrainHorz();
- virtual int getMaxConstrainVert();
- virtual bool resizeTo(CRect& rcNewArea);
-
- private:
- HWND m_hwndCtrl;
- int m_sizeTopExtra;
- };
-
-
-
-
- ETSLayoutMgr(CWnd* pWnd) { m_pWnd = pWnd; m_sizeRootBorders = CSize(5,5); };
- virtual ~ETSLayoutMgr();
-
- virtual CRect GetRect() { CRect r; m_pWnd->GetClientRect(r); return r; };
- CWnd* m_pWnd;
- CWnd* GetWnd() { return m_pWnd; };
- void setRootBorders(int cx, int cy) { m_sizeRootBorders = CSize(cx,cy); };
-
- /**
- * Pass this for a pseudo Pane with no content
- */
- static CWnd* paneNull;
-
- /**
- * Loads the current position and size from the registry using a supplied
- * key. Will be loaded with AfxGetApp()->WriteProfileXXX(). You may
- * specify a subfolder (e.g. Load( _T("MyDialog\\Layout") ); ). Will
- * load the following keys:
- *
- * - lpstrRegKey+"SizeX";
- * - lpstrRegKey+"SizeY";
- * - lpstrRegKey+"PosX";
- * - lpstrRegKey+"PosY";
- *
- * Is automatically called during OnActivate() if key specified in
- * constructor.
- */
- bool Load(LPCTSTR lpstrRegKey);
-
- /**
- * Store the current position and size to the registry using a supplied
- * key. Will be stored with AfxGetApp()->WriteProfileXXX(). You may
- * specify a subfolder (e.g. Save( _T("MyDialog\\Layout") ); ). Will
- * create the following keys:
- *
- * - lpstrRegKey+"SizeX";
- * - lpstrRegKey+"SizeY";
- * - lpstrRegKey+"PosX";
- * - lpstrRegKey+"PosY";
- *
- * Is automatically called during DestroyWindow() if key specified in
- * constructor.
- */
- bool Save(LPCTSTR lpstrRegKey);
-
- /**
- * Updates the layout after you specify the new
- * layout
- */
- virtual void UpdateLayout();
- virtual void UpdateLayout(CPane p) {
- if(m_RootPane.IsValid())
- {
- // free old root
- m_RootPane = 0;
- }
- m_RootPane = p;
- UpdateLayout();
- }
-
- /**
- * Does the actual Layout, called from OnSize()
- * Default implementation does nothing, use
- * IMPLEMENT_LAYOUT in your derived class (see above)
- */
- virtual void Layout(CRect& rcClient);
-
-
- /**
- * Erasing only the these parts of the client area where
- * there is no child window. Extra-code for group-boxes
- * included!
- */
- void EraseBkgnd(CDC* pDC);
-
- /**
- * Helperfunctions for the stream-interface. For usage see sample Application
- * and/or documentation.
- */
-
- /**
- * Create a new Pane. You may specify the resize
- * mode for both directions. If you add modes for the secondary direction
- * (i.e. *_VERT for a HORIZONTAL pane) then sizeSecondary is used as it's
- * size. If you do not specify sizeSecondary and the mode is ABSOLUTE_VERT
- * it will be computed as the maximum Height of all SubPanes (the same is
- * true for VERTICAL panes and subpanes with *_HORZ)
- */
- CPane pane( layOrientation orientation, layResizeMode modeResize = GREEDY, int sizeBorder = nDefaultBorder, int sizeExtraBorder = 0, int sizeSecondary = 0);
-
- /**
- * Create one of the special control panes. Parameter are like pane(). For
- * additional information see documentation
- */
- CPane paneTab( CTabCtrl* pTab, layOrientation orientation, layResizeMode modeResize = GREEDY, int sizeBorder = nDefaultBorder, int sizeExtraBorder = 0, int sizeSecondary = 0);
- CPane paneCtrl( UINT nID, layOrientation orientation, layResizeMode modeResize = GREEDY, int sizeBorder = nDefaultBorder, int sizeExtraBorder = 0, int sizeTopExtra = 0, int sizeSecondary = 0);
- CPane paneCtrl( CWnd* pCtrl, layOrientation orientation, layResizeMode modeResize = GREEDY, int sizeBorder = nDefaultBorder, int sizeExtraBorder = 0, int sizeTopExtra = 0, int sizeSecondary = 0);
-
- /**
- * Creates a new PaneItem for an Control. If sizeX or sizeY are 0
- * and modeResize is ABSOLUTE will copy the current dimensions of
- * the control to m_sizeX/Y. So the appearance does not change
- * from the Dialog Editor. size*Min = -1 means: do not make smaller
- * than in Dialog Template.
- */
- CPaneBase item(UINT nID, layResizeMode modeResize = GREEDY, int sizeX =0, int sizeY =0, int sizeXMin =-1, int sizeYMin =-1);
- CPaneBase item(CWnd* pWnd, layResizeMode modeResize = GREEDY, int sizeX =0, int sizeY =0, int sizeXMin =-1, int sizeYMin =-1);
-
-
- /**
- * Add a whitespace Item (paneNull) of variable size with
- * a minimum size of 0
- */
- CPaneBase itemGrowing(layOrientation orientation);
-
- /**
- * Add a whitespace Item (paneNull) with fixed size
- */
- CPaneBase itemFixed(layOrientation orientation, int sizePrimary);
-
- /**
- * Add a whitespace Item (paneNull) of fixed size based on the
- * current layout (as in the dialog template). Based on the layout
- * of the pane vertical or horizontal spacing is considered
- *
- * First argument is the left (top) item for a HORIZONTAL (VERTICAL) pane
- */
- CPaneBase itemSpaceBetween( layOrientation orientation, CWnd* pWndFirst, CWnd* pWndSecond );
- CPaneBase itemSpaceBetween( layOrientation orientation, UINT nIDFirst, UINT nIDSecond );
-
- /**
- * Add a whitespace Item (paneNull) of fixed size based on the
- * size of another item
- */
- CPaneBase itemSpaceLike( layOrientation orientation, CWnd* pWnd );
- CPaneBase itemSpaceLike( layOrientation orientation, UINT nID );
-
-protected:
- /**
- * This holds the root pane. Fill in InitDialog()
- */
- CPane m_RootPane;
-
- /**
- * Create a root pane
- */
- CPane CreateRoot(layOrientation orientation, int sizeBorder = nDefaultBorder, int sizeExtraBorder = 0 )
- {
- if(m_RootPane.IsValid())
- {
- // free old root
- m_RootPane = 0;
- }
- m_RootPane = new Pane( this, orientation, sizeBorder, sizeExtraBorder);
- return m_RootPane;
- }
-
- /**
- * Key in Registry where to store Size
- */
- CString m_strRegStore;
-
- /**
- * Borders around root
- */
- CSize m_sizeRootBorders;
-};
-
-inline ETSLayoutMgr::layResizeMode operator|(const ETSLayoutMgr::layResizeMode m1,
- const ETSLayoutMgr::layResizeMode m2)
- { return (ETSLayoutMgr::layResizeMode)( (DWORD)m1|(DWORD)m2); }
-
-
-/**
- * Base class for the Layout function. Derive your own class
- * from this or derive it from CDialog and modify _all_
- * references to CDialog to ETSLayoutDialog
- */
-class ETSGUI_EXT_CLASS ETSLayoutDialog : public ETSLayout::CBaseDialog, protected ETSLayoutMgr
-{
-// Construction
-public:
- ETSLayoutDialog(UINT nID, CWnd* pParent = NULL, LPCTSTR strName = NULL, bool bGripper = true); // standard constructor
-
-// Dialog Data
- //{{AFX_DATA(ETSLayoutDialog)
- //}}AFX_DATA
-
-
-// Overrides
- // ClassWizard generated virtual function overrides
- //{{AFX_VIRTUAL(ETSLayoutDialog)
- //}}AFX_VIRTUAL
-
-// Implementation
-protected:
- // Generated message map functions
- //{{AFX_MSG(ETSLayoutDialog)
- afx_msg void OnSize(UINT nType, int cx, int cy);
- afx_msg void OnGetMinMaxInfo(MINMAXINFO FAR* lpMMI);
- afx_msg BOOL OnEraseBkgnd(CDC* pDC);
- virtual BOOL OnInitDialog();
- afx_msg void OnDestroy();
- //}}AFX_MSG
- DECLARE_MESSAGE_MAP()
-
- virtual CRect GetRect();
-
- bool m_bGripper;
- CStatusBar m_StatusBar;
-};
-
-
-/**
- * Base class for the Layout function. Derive your own class
- * from this or derive it from CDialog and modify _all_
- * references to CFormView to ETSLayoutFormView
- */
-class ETSGUI_EXT_CLASS ETSLayoutFormView : public ETSLayout::CBaseFormView, public ETSLayoutMgr
-{
-// Construction
- DECLARE_DYNAMIC(ETSLayoutFormView)
-public:
- ETSLayoutFormView(UINT nID, LPCTSTR strName = NULL); // standard constructor
- virtual ~ETSLayoutFormView();
-
-// virtual void UpdateLayout();
-
-
-// Overrides
- // ClassWizard generated virtual function overrides
- //{{AFX_VIRTUAL(ETSLayoutDialog)
- //}}AFX_VIRTUAL
-
-// Implementation
-protected:
-
- // Generated message map functions
- //{{AFX_MSG(ETSLayoutDialog)
- afx_msg void OnSize(UINT nType, int cx, int cy);
- afx_msg BOOL OnEraseBkgnd(CDC* pDC);
- afx_msg void OnGetMinMaxInfo(MINMAXINFO FAR* lpMMI);
- //}}AFX_MSG
- DECLARE_MESSAGE_MAP()
-};
-
-
-/**
- * Base class for the Layout function. Derive your own class
- * from this or derive it from CBCGDialogBar/CDialogBar and
- * modify _all_ references to CBCGDialogBar/CDialogBar to
- * ETSLayoutDialogBar
- */
-class ETSGUI_EXT_CLASS ETSLayoutDialogBar : public ETSLayout::CBaseDialogBar, protected ETSLayoutMgr
-{
-// Construction
-public:
-#ifdef CS_HELP
- ETSLayoutDialogBar(UINT nID);
-#else
- ETSLayoutDialogBar();
-#endif
-
-
-// Overrides
- // ClassWizard generated virtual function overrides
- //{{AFX_VIRTUAL(ETSLayoutDialogBar)
- virtual CSize CalcDynamicLayout(int nLength, DWORD dwMode);
- //}}AFX_VIRTUAL
-
- /**
- * Override this to define Layout
- */
- virtual BOOL Initialize() { return false; };
- virtual void UpdateLayout();
-
-// Implementation
-protected:
- // Generated message map functions
- //{{AFX_MSG(ETSLayoutDialogBar)
- afx_msg void OnSize(UINT nType, int cx, int cy);
- afx_msg void OnDestroy();
- afx_msg BOOL OnEraseBkgnd(CDC* pDC);
- //}}AFX_MSG
- LRESULT OnInitDialog(WPARAM, LPARAM);
- DECLARE_MESSAGE_MAP()
-
- virtual CRect GetRect();
- bool m_bInitialized;
-};
-
-
-
-/**************************************************
- ** ! the code is only tested for modal sheets ! **
- **************************************************/
-
-
-/**
- * Resizable PropertySheet. Use this class standalone
- * or as your base class (instead CProptertySheet)
- */
-class ETSGUI_EXT_CLASS ETSLayoutPropertySheet : public CPropertySheet, protected ETSLayoutMgr
-{
- DECLARE_DYNAMIC(ETSLayoutPropertySheet)
-
-// Construction
-public:
- ETSLayoutPropertySheet(UINT nIDCaption, CWnd *pParentWnd = NULL, UINT iSelectPage = 0, LPCTSTR strName=NULL, bool bGripper=true);
- ETSLayoutPropertySheet(LPCTSTR pszCaption, CWnd *pParentWnd = NULL, UINT iSelectPage = 0, LPCTSTR strName=NULL, bool bGripper=true);
-
-// Operationen
-public:
- void SetAutoDestroy() { m_bAutoDestroy = true; }
- void SetAutoDestroyPages() { m_bAutoDestroyPages = true; }
- void ModelessWithButtons() { m_bModelessButtons = true; }
-// Overrides
- virtual void AddMainArea(CPane paneRoot, CPaneBase itemTab);
- virtual void AddButtons(CPane paneBottom);
-
- // ClassWizard generated virtual function overrides
- //{{AFX_VIRTUAL(ETSLayoutPropertySheet)
- public:
- virtual BOOL OnInitDialog();
- virtual void PostNcDestroy();
- //}}AFX_VIRTUAL
-
-// Implementation
-public:
- virtual ~ETSLayoutPropertySheet();
-
- // Generated message map functions
-protected:
- //{{AFX_MSG(ETSLayoutPropertySheet)
- afx_msg int OnCreate(LPCREATESTRUCT lpCreateStruct);
- afx_msg void OnSize(UINT nType, int cx, int cy);
- afx_msg void OnGetMinMaxInfo(MINMAXINFO FAR* lpMMI);
- afx_msg void OnDestroy();
- afx_msg BOOL OnEraseBkgnd(CDC* pDC);
- //}}AFX_MSG
- DECLARE_MESSAGE_MAP()
-
- void Resize(int cx, int cy);
-
-friend class ETSLayoutPropertyPage;
-
- void Init(LPCTSTR strName, bool bGripper);
- CRect m_rcStart;
- CRect m_rcPage;
- bool m_bGripper;
- CStatusBar m_StatusBar;
- CPaneBase m_ItemTab;
- bool m_bAutoDestroy;
- bool m_bAutoDestroyPages;
- bool m_bModelessButtons;
-};
-
-/**
- * Base class for the Layout function. Derive your own class
- * from this or derive it from CPropertyPage and
- * modify _all_ references to CPropertyPage to
- * ETSLayoutPropertyPage
- */
-class ETSGUI_EXT_CLASS ETSLayoutPropertyPage : public ETSLayout::CBasePropertyPage, protected ETSLayoutMgr
-{
-friend class ETSLayoutPropertySheet;
-
- DECLARE_DYNCREATE(ETSLayoutPropertyPage)
-
-// Konstruktion
-public:
- ETSLayoutPropertyPage( );
- ETSLayoutPropertyPage( UINT nIDTemplate, UINT nIDCaption = 0 );
- ETSLayoutPropertyPage( LPCTSTR lpszTemplateName, UINT nIDCaption = 0 );
-
- ~ETSLayoutPropertyPage();
-
-
-// Overrides
- // ClassWizard generated virtual function overrides
- //{{AFX_VIRTUAL(ETSLayoutPropertyPage)
- public:
- virtual BOOL OnSetActive();
- //}}AFX_VIRTUAL
-
-// Implementation
-protected:
- // Generated message map functions
- //{{AFX_MSG(ETSLayoutPropertyPage)
- afx_msg void OnSize(UINT nType, int cx, int cy);
- afx_msg void OnGetMinMaxInfo(MINMAXINFO FAR* lpMMI);
- virtual BOOL OnInitDialog();
- afx_msg BOOL OnEraseBkgnd(CDC* pDC);
- afx_msg void OnWindowPosChanging( WINDOWPOS* lpwndpos );
- afx_msg void OnDestroy();
- afx_msg void OnWindowPosChanged(WINDOWPOS FAR* lpwndpos);
- //}}AFX_MSG
- DECLARE_MESSAGE_MAP()
-
- virtual CRect GetRect();
- bool m_bLockMove;
- bool m_bResetBuddyOnNextTimeVisible;
-};
-
-
-
-//{{AFX_INSERT_LOCATION}}
-// Microsoft Developer Studio will insert additional declarations immediately before the previous line.
-
-#endif // !defined(ETS_LAYOUTMGR_INCLUDED_)
diff --git a/Bus/IvyProbe/HistoryEdit.cpp b/Bus/IvyProbe/HistoryEdit.cpp
deleted file mode 100644
index cdb1f0f..0000000
--- a/Bus/IvyProbe/HistoryEdit.cpp
+++ /dev/null
@@ -1,82 +0,0 @@
-/*
- * HistoryEdit.cpp
- *
- * Description:
- * CHistoryEdit implementation
- *
- * A CEdit subclass that allows you to display a text history
- * of events.
- *
- * Author:
- * Ravi Bhavnani (ravib@datablast.net)
- *
- * Revision History:
- * 15 Mar 1998 rab Original version
- */
-
-#include "stdafx.h"
-#include "HistoryEdit.h"
-
-#ifdef _DEBUG
-#define new DEBUG_NEW
-#undef THIS_FILE
-static char THIS_FILE[] = __FILE__;
-#endif
-
-/////////////////////////////////////////////////////////////////////////////
-// CHistoryEdit
-
-CHistoryEdit::CHistoryEdit()
-{
- m_bSelectable = FALSE;
-}
-
-CHistoryEdit::~CHistoryEdit()
-{
-}
-
-BEGIN_MESSAGE_MAP(CHistoryEdit, CEdit)
- //{{AFX_MSG_MAP(CHistoryEdit)
- ON_WM_SETFOCUS()
- //}}AFX_MSG_MAP
-END_MESSAGE_MAP()
-
-/////////////////////////////////////////////////////////////////////////////
-// CHistoryEdit operations
-
-void CHistoryEdit::AppendString
- (CString str)
-//
-// Purpose:
-// Appends a text string to the history buffer.
-//
-// Returns:
-// None.
-//
-{
-CString strBuffer; // current contents of edit control
-
- // Append string
- GetWindowText (strBuffer);
- if (!strBuffer.IsEmpty())
- strBuffer += "\r\n";
- strBuffer += str;
- SetWindowText (strBuffer);
-
- // Scroll the edit control
- LineScroll (GetLineCount(), 0);
-}
-
-/////////////////////////////////////////////////////////////////////////////
-// CHistoryEdit message handlers
-
-void CHistoryEdit::OnSetFocus(CWnd* pOldWnd)
-{
- // Don't allow user to select text
- if (m_bSelectable)
- CEdit::OnSetFocus (pOldWnd);
- else
- pOldWnd->SetFocus();
-}
-
-// End EditHistroy.cpp \ No newline at end of file
diff --git a/Bus/IvyProbe/HistoryEdit.h b/Bus/IvyProbe/HistoryEdit.h
deleted file mode 100644
index 7e2a112..0000000
--- a/Bus/IvyProbe/HistoryEdit.h
+++ /dev/null
@@ -1,65 +0,0 @@
-/*
- * HistoryEdit.h
- *
- * Description:
- * CHistoryEdit interface
- *
- * A CEdit subclass that allows you to display a scrolling history
- * of text entries.
- *
- * Author:
- * Ravi Bhavnani (ravib@datablast.net)
- *
- * Revision History:
- * 15 Mar 1998 rab Original version
- */
-
-#ifndef _HistoryEdit_h_
-#define _HistoryEdit_h_
-
-/////////////////////////////////////////////////////////////////////////////
-// CHistoryEdit window
-
-class CHistoryEdit : public CEdit
-{
-// Construction
-public:
- CHistoryEdit();
-
-// Attributes
-public:
-
-// Operations
-public:
- void AppendString (CString str);
- BOOL IsSelectable() { return m_bSelectable; }
- void AllowSelection (BOOL bAllowSelect) { m_bSelectable = bAllowSelect; }
-
-// Overrides
- // ClassWizard generated virtual function overrides
- //{{AFX_VIRTUAL(CHistoryEdit)
- //}}AFX_VIRTUAL
-
-// Implementation
-public:
- virtual ~CHistoryEdit();
-
- // Generated message map functions
-protected:
- //{{AFX_MSG(CHistoryEdit)
- afx_msg void OnSetFocus(CWnd* pOldWnd);
- //}}AFX_MSG
- DECLARE_MESSAGE_MAP()
-
-protected:
- BOOL m_bSelectable; // flag: user can select text in control
-};
-
-/////////////////////////////////////////////////////////////////////////////
-
-//{{AFX_INSERT_LOCATION}}
-// Microsoft Developer Studio will insert additional declarations immediately before the previous line.
-
-#endif
-
-// End HistoryEdit.h \ No newline at end of file
diff --git a/Bus/IvyProbe/InstIvyProbe/InstIvy.vdproj b/Bus/IvyProbe/InstIvyProbe/InstIvy.vdproj
deleted file mode 100644
index 4723fde..0000000
--- a/Bus/IvyProbe/InstIvyProbe/InstIvy.vdproj
+++ /dev/null
@@ -1,945 +0,0 @@
-"DeployProject"
-{
-"VSVersion" = "3:800"
-"ProjectType" = "8:{978C614F-708E-4E1A-B201-565925725DBA}"
-"IsWebType" = "8:FALSE"
-"ProjectName" = "8:InstallIvyProbe"
-"LanguageId" = "3:1036"
-"CodePage" = "3:1252"
-"UILanguageId" = "3:1036"
-"SccProjectName" = "8:SAK"
-"SccLocalPath" = "8:SAK"
-"SccAuxPath" = "8:SAK"
-"SccProvider" = "8:SAK"
- "Hierarchy"
- {
- "Entry"
- {
- "MsmKey" = "8:_0BD6F02CECD440B69ED6C192591DACC5"
- "OwnerKey" = "8:_57A5694E20F44D878FE43630B5B52BF5"
- "MsmSig" = "8:_UNDEFINED"
- }
- "Entry"
- {
- "MsmKey" = "8:_0DEC983A1D87453191CA274F5F2176F4"
- "OwnerKey" = "8:_2BA590EA79FA40D288D4C357A0EB663F"
- "MsmSig" = "8:_UNDEFINED"
- }
- "Entry"
- {
- "MsmKey" = "8:_0DEC983A1D87453191CA274F5F2176F4"
- "OwnerKey" = "8:_60AC32E483D448BD9E9F46857BA217C9"
- "MsmSig" = "8:_UNDEFINED"
- }
- "Entry"
- {
- "MsmKey" = "8:_0DEC983A1D87453191CA274F5F2176F4"
- "OwnerKey" = "8:_57A5694E20F44D878FE43630B5B52BF5"
- "MsmSig" = "8:_UNDEFINED"
- }
- "Entry"
- {
- "MsmKey" = "8:_1EFC5F9E826F4C7E822FFAE03114C84F"
- "OwnerKey" = "8:_0DEC983A1D87453191CA274F5F2176F4"
- "MsmSig" = "8:_UNDEFINED"
- }
- "Entry"
- {
- "MsmKey" = "8:_28A6C3696FE941E1BA95263704863C73"
- "OwnerKey" = "8:_0BD6F02CECD440B69ED6C192591DACC5"
- "MsmSig" = "8:_UNDEFINED"
- }
- "Entry"
- {
- "MsmKey" = "8:_2BA590EA79FA40D288D4C357A0EB663F"
- "OwnerKey" = "8:_UNDEFINED"
- "MsmSig" = "8:_UNDEFINED"
- }
- "Entry"
- {
- "MsmKey" = "8:_57A5694E20F44D878FE43630B5B52BF5"
- "OwnerKey" = "8:_UNDEFINED"
- "MsmSig" = "8:_UNDEFINED"
- }
- "Entry"
- {
- "MsmKey" = "8:_60AC32E483D448BD9E9F46857BA217C9"
- "OwnerKey" = "8:_UNDEFINED"
- "MsmSig" = "8:_UNDEFINED"
- }
- "Entry"
- {
- "MsmKey" = "8:_CE403128DFF0A5ADE28CDD21A4FA625C"
- "OwnerKey" = "8:_60AC32E483D448BD9E9F46857BA217C9"
- "MsmSig" = "8:_UNDEFINED"
- }
- }
- "Configurations"
- {
- "Debug"
- {
- "DisplayName" = "8:Debug"
- "IsDebugOnly" = "11:TRUE"
- "IsReleaseOnly" = "11:FALSE"
- "OutputFilename" = "8:Debug\\InstIvy.msi"
- "PackageFilesAs" = "3:2"
- "PackageFileSize" = "3:-2147483648"
- "CabType" = "3:1"
- "Compression" = "3:2"
- "SignOutput" = "11:FALSE"
- "CertificateFile" = "8:"
- "PrivateKeyFile" = "8:"
- "TimeStampServer" = "8:"
- "InstallerBootstrapper" = "3:2"
- "BootstrapperCfg:{63ACBE69-63AA-4F98-B2B6-99F9E24495F2}"
- {
- "Enabled" = "11:TRUE"
- "PromptEnabled" = "11:TRUE"
- "PrerequisitesLocation" = "2:1"
- "Url" = "8:"
- "ComponentsUrl" = "8:"
- "Items"
- {
- }
- }
- }
- "Release"
- {
- "DisplayName" = "8:Release"
- "IsDebugOnly" = "11:FALSE"
- "IsReleaseOnly" = "11:TRUE"
- "OutputFilename" = "8:..\\..\\..\\..\\Install\\IvyProbex86.msi"
- "PackageFilesAs" = "3:2"
- "PackageFileSize" = "3:-2147483648"
- "CabType" = "3:1"
- "Compression" = "3:2"
- "SignOutput" = "11:FALSE"
- "CertificateFile" = "8:"
- "PrivateKeyFile" = "8:"
- "TimeStampServer" = "8:"
- "InstallerBootstrapper" = "3:1"
- "BootstrapperCfg:{63ACBE69-63AA-4F98-B2B6-99F9E24495F2}"
- {
- "Enabled" = "11:FALSE"
- "PromptEnabled" = "11:TRUE"
- "PrerequisitesLocation" = "2:1"
- "Url" = "8:http://www.tls.cena.fr/products/ivy/download/packages"
- "ComponentsUrl" = "8:"
- "Items"
- {
- }
- }
- }
- }
- "Deployable"
- {
- "CustomAction"
- {
- }
- "DefaultFeature"
- {
- "Name" = "8:DefaultFeature"
- "Title" = "8:"
- "Description" = "8:"
- }
- "ExternalPersistence"
- {
- "LaunchCondition"
- {
- }
- }
- "File"
- {
- "{1FB2D0AE-D3B9-43D4-B9DD-F88EC61E35DE}:_CE403128DFF0A5ADE28CDD21A4FA625C"
- {
- "SourcePath" = "8:WSOCK32.dll"
- "TargetName" = "8:WSOCK32.dll"
- "Tag" = "8:"
- "Folder" = "8:_8C785282719E44848328E169496E2F49"
- "Condition" = "8:"
- "Transitive" = "11:FALSE"
- "Vital" = "11:TRUE"
- "ReadOnly" = "11:FALSE"
- "Hidden" = "11:FALSE"
- "System" = "11:FALSE"
- "Permanent" = "11:FALSE"
- "SharedLegacy" = "11:FALSE"
- "PackageAs" = "3:1"
- "Register" = "3:1"
- "Exclude" = "11:FALSE"
- "IsDependency" = "11:TRUE"
- "IsolateTo" = "8:"
- }
- }
- "FileType"
- {
- }
- "Folder"
- {
- "{1525181F-901A-416C-8A58-119130FE478E}:_6810FE826BCA47699640BBE149228D19"
- {
- "Name" = "8:#1916"
- "AlwaysCreate" = "11:FALSE"
- "Condition" = "8:"
- "Transitive" = "11:FALSE"
- "Property" = "8:DesktopFolder"
- "Folders"
- {
- }
- }
- "{1525181F-901A-416C-8A58-119130FE478E}:_7E2D48F81BBB4C3E85E07FE19427A508"
- {
- "Name" = "8:#1919"
- "AlwaysCreate" = "11:FALSE"
- "Condition" = "8:"
- "Transitive" = "11:FALSE"
- "Property" = "8:ProgramMenuFolder"
- "Folders"
- {
- "{9EF0B969-E518-4E46-987F-47570745A589}:_E78B932249794DE1A6AD0A860FBA7DA8"
- {
- "Name" = "8:SDER PII"
- "AlwaysCreate" = "11:FALSE"
- "Condition" = "8:"
- "Transitive" = "11:FALSE"
- "Property" = "8:_F25DEE7C682F4C46A5C9D75BC2CEDD0A"
- "Folders"
- {
- }
- }
- }
- }
- "{3C67513D-01DD-4637-8A68-80971EB9504F}:_8C785282719E44848328E169496E2F49"
- {
- "DefaultLocation" = "8:[ProgramFilesFolder][Manufacturer]\\[ProductName]"
- "Name" = "8:#1925"
- "AlwaysCreate" = "11:FALSE"
- "Condition" = "8:"
- "Transitive" = "11:FALSE"
- "Property" = "8:TARGETDIR"
- "Folders"
- {
- }
- }
- }
- "LaunchCondition"
- {
- }
- "Locator"
- {
- }
- "MsiBootstrapper"
- {
- "LangId" = "3:1036"
- }
- "Product"
- {
- "Name" = "8:Microsoft Visual Studio"
- "ProductName" = "8:IvyProbe"
- "ProductCode" = "8:{F526A4E7-6E14-4D82-8C87-F483AEE19CEC}"
- "PackageCode" = "8:{95A8A0F5-3264-46D3-986E-49849DEAA566}"
- "UpgradeCode" = "8:{FF452596-4F4B-4240-847F-38D0FA88DBB0}"
- "RestartWWWService" = "11:FALSE"
- "RemovePreviousVersions" = "11:TRUE"
- "DetectNewerInstalledVersion" = "11:TRUE"
- "InstallAllUsers" = "11:TRUE"
- "ProductVersion" = "8:1.1.1"
- "Manufacturer" = "8:SDER PII"
- "ARPHELPTELEPHONE" = "8:"
- "ARPHELPLINK" = "8:http://www.tls.cena.fr/products/ivy"
- "Title" = "8:IvyProbe"
- "Subject" = "8:"
- "ARPCONTACT" = "8:SDER PII"
- "Keywords" = "8:Ivy"
- "ARPCOMMENTS" = "8:"
- "ARPURLINFOABOUT" = "8:"
- "ARPPRODUCTICON" = "8:"
- "ARPIconIndex" = "3:0"
- "SearchPath" = "8:"
- "UseSystemSearchPath" = "11:TRUE"
- "TargetPlatform" = "3:0"
- "PreBuildEvent" = "8:"
- "PostBuildEvent" = "8:\"$(ProjectDir)..\\..\\UpdateIvyWeb.bat\" \"$(BuiltOuputPath)\""
- "RunPostBuildEvent" = "3:0"
- }
- "Registry"
- {
- "HKLM"
- {
- "Keys"
- {
- "{60EA8692-D2D5-43EB-80DC-7906BF13D6EF}:_3CFCEFACEAB64F9DA1C4D0BF5DB65AF2"
- {
- "Name" = "8:Software"
- "Condition" = "8:"
- "AlwaysCreate" = "11:FALSE"
- "DeleteAtUninstall" = "11:FALSE"
- "Transitive" = "11:FALSE"
- "Keys"
- {
- "{60EA8692-D2D5-43EB-80DC-7906BF13D6EF}:_30BD5DA559A740258BDEE3A9A52D6355"
- {
- "Name" = "8:[Manufacturer]"
- "Condition" = "8:"
- "AlwaysCreate" = "11:FALSE"
- "DeleteAtUninstall" = "11:FALSE"
- "Transitive" = "11:FALSE"
- "Keys"
- {
- }
- "Values"
- {
- }
- }
- }
- "Values"
- {
- }
- }
- }
- }
- "HKCU"
- {
- "Keys"
- {
- "{60EA8692-D2D5-43EB-80DC-7906BF13D6EF}:_8D5BE70E7653487A9D35B4DAFC2995D0"
- {
- "Name" = "8:Software"
- "Condition" = "8:"
- "AlwaysCreate" = "11:FALSE"
- "DeleteAtUninstall" = "11:FALSE"
- "Transitive" = "11:FALSE"
- "Keys"
- {
- "{60EA8692-D2D5-43EB-80DC-7906BF13D6EF}:_58B700D8E98A4CE9BF8CF67ADA0B9C99"
- {
- "Name" = "8:[Manufacturer]"
- "Condition" = "8:"
- "AlwaysCreate" = "11:FALSE"
- "DeleteAtUninstall" = "11:FALSE"
- "Transitive" = "11:FALSE"
- "Keys"
- {
- }
- "Values"
- {
- }
- }
- }
- "Values"
- {
- }
- }
- }
- }
- "HKCR"
- {
- "Keys"
- {
- }
- }
- "HKU"
- {
- "Keys"
- {
- }
- }
- "HKPU"
- {
- "Keys"
- {
- }
- }
- }
- "Sequences"
- {
- }
- "Shortcut"
- {
- "{970C0BB2-C7D0-45D7-ABFA-7EC378858BC0}:_B5814460213041F499A85C9521ED219F"
- {
- "Name" = "8:IvyProbe"
- "Arguments" = "8:"
- "Description" = "8:"
- "ShowCmd" = "3:1"
- "IconIndex" = "3:0"
- "Transitive" = "11:FALSE"
- "Target" = "8:_57A5694E20F44D878FE43630B5B52BF5"
- "Folder" = "8:_E78B932249794DE1A6AD0A860FBA7DA8"
- "WorkingFolder" = "8:_8C785282719E44848328E169496E2F49"
- "Icon" = "8:"
- "Feature" = "8:"
- }
- }
- "UserInterface"
- {
- "{DF760B10-853B-4699-99F2-AFF7185B4A62}:_022345F0521F463B86815C734F1947EA"
- {
- "Name" = "8:#1901"
- "Sequence" = "3:2"
- "Attributes" = "3:2"
- "Dialogs"
- {
- "{688940B3-5CA9-4162-8DEE-2993FA9D8CBC}:_DFD3FCE52AD84DFA98F21EA2D4E5300C"
- {
- "Sequence" = "3:100"
- "DisplayName" = "8:Progress"
- "UseDynamicProperties" = "11:TRUE"
- "IsDependency" = "11:FALSE"
- "SourcePath" = "8:<VsdDialogDir>\\VsdAdminProgressDlg.wid"
- "Properties"
- {
- "BannerBitmap"
- {
- "Name" = "8:BannerBitmap"
- "DisplayName" = "8:#1001"
- "Description" = "8:#1101"
- "Type" = "3:8"
- "ContextData" = "8:Bitmap"
- "Attributes" = "3:4"
- "Setting" = "3:1"
- "UsePlugInResources" = "11:TRUE"
- }
- "ShowProgress"
- {
- "Name" = "8:ShowProgress"
- "DisplayName" = "8:#1009"
- "Description" = "8:#1109"
- "Type" = "3:5"
- "ContextData" = "8:1;True=1;False=0"
- "Attributes" = "3:0"
- "Setting" = "3:0"
- "Value" = "3:1"
- "DefaultValue" = "3:1"
- "UsePlugInResources" = "11:TRUE"
- }
- }
- }
- }
- }
- "{DF760B10-853B-4699-99F2-AFF7185B4A62}:_1E6A5A56054A4B9287DEFFDCBE6D9F4B"
- {
- "Name" = "8:#1902"
- "Sequence" = "3:1"
- "Attributes" = "3:3"
- "Dialogs"
- {
- "{688940B3-5CA9-4162-8DEE-2993FA9D8CBC}:_FCFBFF119DAD44FAAA795641018FC42F"
- {
- "Sequence" = "3:100"
- "DisplayName" = "8:Finished"
- "UseDynamicProperties" = "11:TRUE"
- "IsDependency" = "11:FALSE"
- "SourcePath" = "8:<VsdDialogDir>\\VsdFinishedDlg.wid"
- "Properties"
- {
- "BannerBitmap"
- {
- "Name" = "8:BannerBitmap"
- "DisplayName" = "8:#1001"
- "Description" = "8:#1101"
- "Type" = "3:8"
- "ContextData" = "8:Bitmap"
- "Attributes" = "3:4"
- "Setting" = "3:1"
- "UsePlugInResources" = "11:TRUE"
- }
- "UpdateText"
- {
- "Name" = "8:UpdateText"
- "DisplayName" = "8:#1058"
- "Description" = "8:#1158"
- "Type" = "3:15"
- "ContextData" = "8:"
- "Attributes" = "3:0"
- "Setting" = "3:1"
- "Value" = "8:#1258"
- "DefaultValue" = "8:#1258"
- "UsePlugInResources" = "11:TRUE"
- }
- }
- }
- }
- }
- "{2479F3F5-0309-486D-8047-8187E2CE5BA0}:_39324675C5D24D6FB11A1F89C6A50838"
- {
- "UseDynamicProperties" = "11:FALSE"
- "IsDependency" = "11:FALSE"
- "SourcePath" = "8:<VsdDialogDir>\\VsdBasicDialogs.wim"
- }
- "{DF760B10-853B-4699-99F2-AFF7185B4A62}:_7BA271C57B2945AB90EA4E3B81F2352C"
- {
- "Name" = "8:#1902"
- "Sequence" = "3:2"
- "Attributes" = "3:3"
- "Dialogs"
- {
- "{688940B3-5CA9-4162-8DEE-2993FA9D8CBC}:_BCB663D68120404AAE84380C98DEDD48"
- {
- "Sequence" = "3:100"
- "DisplayName" = "8:Finished"
- "UseDynamicProperties" = "11:TRUE"
- "IsDependency" = "11:FALSE"
- "SourcePath" = "8:<VsdDialogDir>\\VsdAdminFinishedDlg.wid"
- "Properties"
- {
- "BannerBitmap"
- {
- "Name" = "8:BannerBitmap"
- "DisplayName" = "8:#1001"
- "Description" = "8:#1101"
- "Type" = "3:8"
- "ContextData" = "8:Bitmap"
- "Attributes" = "3:4"
- "Setting" = "3:1"
- "UsePlugInResources" = "11:TRUE"
- }
- }
- }
- }
- }
- "{DF760B10-853B-4699-99F2-AFF7185B4A62}:_A791F39DCDF943EFB51C225AB3BA8A50"
- {
- "Name" = "8:#1901"
- "Sequence" = "3:1"
- "Attributes" = "3:2"
- "Dialogs"
- {
- "{688940B3-5CA9-4162-8DEE-2993FA9D8CBC}:_97F78B3941544772A5EC49812DAD11D5"
- {
- "Sequence" = "3:100"
- "DisplayName" = "8:Progress"
- "UseDynamicProperties" = "11:TRUE"
- "IsDependency" = "11:FALSE"
- "SourcePath" = "8:<VsdDialogDir>\\VsdProgressDlg.wid"
- "Properties"
- {
- "BannerBitmap"
- {
- "Name" = "8:BannerBitmap"
- "DisplayName" = "8:#1001"
- "Description" = "8:#1101"
- "Type" = "3:8"
- "ContextData" = "8:Bitmap"
- "Attributes" = "3:4"
- "Setting" = "3:1"
- "UsePlugInResources" = "11:TRUE"
- }
- "ShowProgress"
- {
- "Name" = "8:ShowProgress"
- "DisplayName" = "8:#1009"
- "Description" = "8:#1109"
- "Type" = "3:5"
- "ContextData" = "8:1;True=1;False=0"
- "Attributes" = "3:0"
- "Setting" = "3:0"
- "Value" = "3:1"
- "DefaultValue" = "3:1"
- "UsePlugInResources" = "11:TRUE"
- }
- }
- }
- }
- }
- "{DF760B10-853B-4699-99F2-AFF7185B4A62}:_CDE881ABAB7C4726B526DDBA45B4BDE1"
- {
- "Name" = "8:#1900"
- "Sequence" = "3:1"
- "Attributes" = "3:1"
- "Dialogs"
- {
- "{688940B3-5CA9-4162-8DEE-2993FA9D8CBC}:_B620B069BE064ABA87B90550DA692268"
- {
- "Sequence" = "3:300"
- "DisplayName" = "8:Confirm Installation"
- "UseDynamicProperties" = "11:TRUE"
- "IsDependency" = "11:FALSE"
- "SourcePath" = "8:<VsdDialogDir>\\VsdConfirmDlg.wid"
- "Properties"
- {
- "BannerBitmap"
- {
- "Name" = "8:BannerBitmap"
- "DisplayName" = "8:#1001"
- "Description" = "8:#1101"
- "Type" = "3:8"
- "ContextData" = "8:Bitmap"
- "Attributes" = "3:4"
- "Setting" = "3:1"
- "UsePlugInResources" = "11:TRUE"
- }
- }
- }
- "{688940B3-5CA9-4162-8DEE-2993FA9D8CBC}:_C345A4ECF4334C0299B1BF93AF8DD68B"
- {
- "Sequence" = "3:100"
- "DisplayName" = "8:Welcome"
- "UseDynamicProperties" = "11:TRUE"
- "IsDependency" = "11:FALSE"
- "SourcePath" = "8:<VsdDialogDir>\\VsdWelcomeDlg.wid"
- "Properties"
- {
- "BannerBitmap"
- {
- "Name" = "8:BannerBitmap"
- "DisplayName" = "8:#1001"
- "Description" = "8:#1101"
- "Type" = "3:8"
- "ContextData" = "8:Bitmap"
- "Attributes" = "3:4"
- "Setting" = "3:1"
- "UsePlugInResources" = "11:TRUE"
- }
- "CopyrightWarning"
- {
- "Name" = "8:CopyrightWarning"
- "DisplayName" = "8:#1002"
- "Description" = "8:#1102"
- "Type" = "3:3"
- "ContextData" = "8:"
- "Attributes" = "3:0"
- "Setting" = "3:1"
- "Value" = "8:#1202"
- "DefaultValue" = "8:#1202"
- "UsePlugInResources" = "11:TRUE"
- }
- "Welcome"
- {
- "Name" = "8:Welcome"
- "DisplayName" = "8:#1003"
- "Description" = "8:#1103"
- "Type" = "3:3"
- "ContextData" = "8:"
- "Attributes" = "3:0"
- "Setting" = "3:1"
- "Value" = "8:#1203"
- "DefaultValue" = "8:#1203"
- "UsePlugInResources" = "11:TRUE"
- }
- }
- }
- "{688940B3-5CA9-4162-8DEE-2993FA9D8CBC}:_DA4D7E682468404D838C7F08BA4E6124"
- {
- "Sequence" = "3:200"
- "DisplayName" = "8:Installation Folder"
- "UseDynamicProperties" = "11:TRUE"
- "IsDependency" = "11:FALSE"
- "SourcePath" = "8:<VsdDialogDir>\\VsdFolderDlg.wid"
- "Properties"
- {
- "BannerBitmap"
- {
- "Name" = "8:BannerBitmap"
- "DisplayName" = "8:#1001"
- "Description" = "8:#1101"
- "Type" = "3:8"
- "ContextData" = "8:Bitmap"
- "Attributes" = "3:4"
- "Setting" = "3:1"
- "UsePlugInResources" = "11:TRUE"
- }
- "InstallAllUsersVisible"
- {
- "Name" = "8:InstallAllUsersVisible"
- "DisplayName" = "8:#1059"
- "Description" = "8:#1159"
- "Type" = "3:5"
- "ContextData" = "8:1;True=1;False=0"
- "Attributes" = "3:0"
- "Setting" = "3:0"
- "Value" = "3:1"
- "DefaultValue" = "3:1"
- "UsePlugInResources" = "11:TRUE"
- }
- }
- }
- }
- }
- "{2479F3F5-0309-486D-8047-8187E2CE5BA0}:_F349BA4DD2FF4C538D17E0E5A2E0CF02"
- {
- "UseDynamicProperties" = "11:FALSE"
- "IsDependency" = "11:FALSE"
- "SourcePath" = "8:<VsdDialogDir>\\VsdUserInterface.wim"
- }
- "{DF760B10-853B-4699-99F2-AFF7185B4A62}:_F6158F17384D4EE89AE7C515234C4964"
- {
- "Name" = "8:#1900"
- "Sequence" = "3:2"
- "Attributes" = "3:1"
- "Dialogs"
- {
- "{688940B3-5CA9-4162-8DEE-2993FA9D8CBC}:_7F57E9802DDD47E7BB8A93A6650F6889"
- {
- "Sequence" = "3:300"
- "DisplayName" = "8:Confirm Installation"
- "UseDynamicProperties" = "11:TRUE"
- "IsDependency" = "11:FALSE"
- "SourcePath" = "8:<VsdDialogDir>\\VsdAdminConfirmDlg.wid"
- "Properties"
- {
- "BannerBitmap"
- {
- "Name" = "8:BannerBitmap"
- "DisplayName" = "8:#1001"
- "Description" = "8:#1101"
- "Type" = "3:8"
- "ContextData" = "8:Bitmap"
- "Attributes" = "3:4"
- "Setting" = "3:1"
- "UsePlugInResources" = "11:TRUE"
- }
- }
- }
- "{688940B3-5CA9-4162-8DEE-2993FA9D8CBC}:_A37E56D6E5634F64BA1D3DEF6558A9B1"
- {
- "Sequence" = "3:100"
- "DisplayName" = "8:Welcome"
- "UseDynamicProperties" = "11:TRUE"
- "IsDependency" = "11:FALSE"
- "SourcePath" = "8:<VsdDialogDir>\\VsdAdminWelcomeDlg.wid"
- "Properties"
- {
- "BannerBitmap"
- {
- "Name" = "8:BannerBitmap"
- "DisplayName" = "8:#1001"
- "Description" = "8:#1101"
- "Type" = "3:8"
- "ContextData" = "8:Bitmap"
- "Attributes" = "3:4"
- "Setting" = "3:1"
- "UsePlugInResources" = "11:TRUE"
- }
- "CopyrightWarning"
- {
- "Name" = "8:CopyrightWarning"
- "DisplayName" = "8:#1002"
- "Description" = "8:#1102"
- "Type" = "3:3"
- "ContextData" = "8:"
- "Attributes" = "3:0"
- "Setting" = "3:1"
- "Value" = "8:#1202"
- "DefaultValue" = "8:#1202"
- "UsePlugInResources" = "11:TRUE"
- }
- "Welcome"
- {
- "Name" = "8:Welcome"
- "DisplayName" = "8:#1003"
- "Description" = "8:#1103"
- "Type" = "3:3"
- "ContextData" = "8:"
- "Attributes" = "3:0"
- "Setting" = "3:1"
- "Value" = "8:#1203"
- "DefaultValue" = "8:#1203"
- "UsePlugInResources" = "11:TRUE"
- }
- }
- }
- "{688940B3-5CA9-4162-8DEE-2993FA9D8CBC}:_CC824A96BD584085B9BF72FA74944CD7"
- {
- "Sequence" = "3:200"
- "DisplayName" = "8:Installation Folder"
- "UseDynamicProperties" = "11:TRUE"
- "IsDependency" = "11:FALSE"
- "SourcePath" = "8:<VsdDialogDir>\\VsdAdminFolderDlg.wid"
- "Properties"
- {
- "BannerBitmap"
- {
- "Name" = "8:BannerBitmap"
- "DisplayName" = "8:#1001"
- "Description" = "8:#1101"
- "Type" = "3:8"
- "ContextData" = "8:Bitmap"
- "Attributes" = "3:4"
- "Setting" = "3:1"
- "UsePlugInResources" = "11:TRUE"
- }
- }
- }
- }
- }
- }
- "MergeModule"
- {
- "{CEE29DC0-9FBA-4B99-8D47-5BC643D9B626}:_0BD6F02CECD440B69ED6C192591DACC5"
- {
- "UseDynamicProperties" = "11:TRUE"
- "IsDependency" = "11:TRUE"
- "SourcePath" = "8:Microsoft_VC80_MFC_x86_x64.msm"
- "Properties"
- {
- }
- "LanguageId" = "3:0"
- "Exclude" = "11:FALSE"
- "Folder" = "8:"
- "Feature" = "8:"
- "IsolateTo" = "8:"
- }
- "{CEE29DC0-9FBA-4B99-8D47-5BC643D9B626}:_0DEC983A1D87453191CA274F5F2176F4"
- {
- "UseDynamicProperties" = "11:TRUE"
- "IsDependency" = "11:TRUE"
- "SourcePath" = "8:Microsoft_VC80_CRT_x86_x64.msm"
- "Properties"
- {
- }
- "LanguageId" = "3:0"
- "Exclude" = "11:FALSE"
- "Folder" = "8:"
- "Feature" = "8:"
- "IsolateTo" = "8:"
- }
- "{CEE29DC0-9FBA-4B99-8D47-5BC643D9B626}:_1EFC5F9E826F4C7E822FFAE03114C84F"
- {
- "UseDynamicProperties" = "11:TRUE"
- "IsDependency" = "11:TRUE"
- "SourcePath" = "8:policy_8_0_microsoft_vc80_crt_x86_x64.msm"
- "Properties"
- {
- }
- "LanguageId" = "3:0"
- "Exclude" = "11:FALSE"
- "Folder" = "8:"
- "Feature" = "8:"
- "IsolateTo" = "8:"
- }
- "{CEE29DC0-9FBA-4B99-8D47-5BC643D9B626}:_28A6C3696FE941E1BA95263704863C73"
- {
- "UseDynamicProperties" = "11:TRUE"
- "IsDependency" = "11:TRUE"
- "SourcePath" = "8:policy_8_0_microsoft_vc80_mfc_x86_x64.msm"
- "Properties"
- {
- }
- "LanguageId" = "3:0"
- "Exclude" = "11:FALSE"
- "Folder" = "8:"
- "Feature" = "8:"
- "IsolateTo" = "8:"
- }
- }
- "ProjectOutput"
- {
- "{5259A561-127C-4D43-A0A1-72F10C7B3BF8}:_2BA590EA79FA40D288D4C357A0EB663F"
- {
- "SourcePath" = "8:..\\x64\\Release\\pcre.dll"
- "TargetName" = "8:"
- "Tag" = "8:"
- "Folder" = "8:_8C785282719E44848328E169496E2F49"
- "Condition" = "8:"
- "Transitive" = "11:FALSE"
- "Vital" = "11:TRUE"
- "ReadOnly" = "11:FALSE"
- "Hidden" = "11:FALSE"
- "System" = "11:FALSE"
- "Permanent" = "11:FALSE"
- "SharedLegacy" = "11:FALSE"
- "PackageAs" = "3:1"
- "Register" = "3:1"
- "Exclude" = "11:FALSE"
- "IsDependency" = "11:FALSE"
- "IsolateTo" = "8:"
- "ProjectOutputGroupRegister" = "3:1"
- "OutputConfiguration" = "8:"
- "OutputGroupCanonicalName" = "8:Built"
- "OutputProjectGuid" = "8:{D79FC143-498E-4342-B2C7-BDAD1B8D0E6B}"
- "ShowKeyOutput" = "11:TRUE"
- "ExcludeFilters"
- {
- }
- }
- "{5259A561-127C-4D43-A0A1-72F10C7B3BF8}:_57A5694E20F44D878FE43630B5B52BF5"
- {
- "SourcePath" = "8:..\\x64\\Release\\IvyProbe.exe"
- "TargetName" = "8:"
- "Tag" = "8:"
- "Folder" = "8:_8C785282719E44848328E169496E2F49"
- "Condition" = "8:"
- "Transitive" = "11:FALSE"
- "Vital" = "11:TRUE"
- "ReadOnly" = "11:FALSE"
- "Hidden" = "11:FALSE"
- "System" = "11:FALSE"
- "Permanent" = "11:FALSE"
- "SharedLegacy" = "11:FALSE"
- "PackageAs" = "3:1"
- "Register" = "3:1"
- "Exclude" = "11:FALSE"
- "IsDependency" = "11:FALSE"
- "IsolateTo" = "8:"
- "ProjectOutputGroupRegister" = "3:1"
- "OutputConfiguration" = "8:"
- "OutputGroupCanonicalName" = "8:Built"
- "OutputProjectGuid" = "8:{B7F7F0F7-9029-4D1A-8CB4-C42DAF86A21C}"
- "ShowKeyOutput" = "11:TRUE"
- "ExcludeFilters"
- {
- }
- }
- "{5259A561-127C-4D43-A0A1-72F10C7B3BF8}:_60AC32E483D448BD9E9F46857BA217C9"
- {
- "SourcePath" = "8:..\\x64\\Release\\Ivy.dll"
- "TargetName" = "8:"
- "Tag" = "8:"
- "Folder" = "8:_8C785282719E44848328E169496E2F49"
- "Condition" = "8:"
- "Transitive" = "11:FALSE"
- "Vital" = "11:TRUE"
- "ReadOnly" = "11:FALSE"
- "Hidden" = "11:FALSE"
- "System" = "11:FALSE"
- "Permanent" = "11:FALSE"
- "SharedLegacy" = "11:FALSE"
- "PackageAs" = "3:1"
- "Register" = "3:1"
- "Exclude" = "11:FALSE"
- "IsDependency" = "11:FALSE"
- "IsolateTo" = "8:"
- "ProjectOutputGroupRegister" = "3:1"
- "OutputConfiguration" = "8:"
- "OutputGroupCanonicalName" = "8:Built"
- "OutputProjectGuid" = "8:{84E0039A-6721-4B18-9792-E9AE4274AC0E}"
- "ShowKeyOutput" = "11:TRUE"
- "ExcludeFilters"
- {
- }
- }
- "{5259A561-127C-4D43-A0A1-72F10C7B3BF8}:_B619C71BCF024E7FBF55B2FECBD581F4"
- {
- "SourcePath" = "8:"
- "TargetName" = "8:"
- "Tag" = "8:"
- "Folder" = "8:_8C785282719E44848328E169496E2F49"
- "Condition" = "8:"
- "Transitive" = "11:FALSE"
- "Vital" = "11:TRUE"
- "ReadOnly" = "11:FALSE"
- "Hidden" = "11:FALSE"
- "System" = "11:FALSE"
- "Permanent" = "11:FALSE"
- "SharedLegacy" = "11:FALSE"
- "PackageAs" = "3:1"
- "Register" = "3:1"
- "Exclude" = "11:FALSE"
- "IsDependency" = "11:FALSE"
- "IsolateTo" = "8:"
- "ProjectOutputGroupRegister" = "3:1"
- "OutputConfiguration" = "8:"
- "OutputGroupCanonicalName" = "8:ContentFiles"
- "OutputProjectGuid" = "8:{B7F7F0F7-9029-4D1A-8CB4-C42DAF86A21C}"
- "ShowKeyOutput" = "11:TRUE"
- "ExcludeFilters"
- {
- }
- }
- }
- "VJSharpPlugin"
- {
- }
- }
-}
diff --git a/Bus/IvyProbe/InstIvyProbe/InstIvy.vdproj.vspscc b/Bus/IvyProbe/InstIvyProbe/InstIvy.vdproj.vspscc
deleted file mode 100644
index 7b71a95..0000000
--- a/Bus/IvyProbe/InstIvyProbe/InstIvy.vdproj.vspscc
+++ /dev/null
@@ -1,10 +0,0 @@
-""
-{
-"FILE_VERSION" = "9237"
-"ENLISTMENT_CHOICE" = "NEVER"
-"PROJECT_FILE_RELATIVE_PATH" = ""
-"NUMBER_OF_EXCLUDED_FILES" = "0"
-"ORIGINAL_PROJECT_FILE_PATH" = ""
-"NUMBER_OF_NESTED_PROJECTS" = "0"
-"SOURCE_CONTROL_SETTINGS_PROVIDER" = "PROVIDER"
-}
diff --git a/Bus/IvyProbe/IvyProbe.cpp b/Bus/IvyProbe/IvyProbe.cpp
deleted file mode 100644
index df84f85..0000000
--- a/Bus/IvyProbe/IvyProbe.cpp
+++ /dev/null
@@ -1,81 +0,0 @@
-// Test.cpp : Defines the class behaviors for the application.
-//
-
-#include "stdafx.h"
-#include "IvyProbe.h"
-#include "IvyProbeDlg.h"
-
-#ifdef _DEBUG
-#define new DEBUG_NEW
-#undef THIS_FILE
-static char THIS_FILE[] = __FILE__;
-#endif
-
-/////////////////////////////////////////////////////////////////////////////
-// CTestApp
-
-BEGIN_MESSAGE_MAP(CIvyProbeApp, CWinApp)
- //{{AFX_MSG_MAP(CTestApp)
- ON_COMMAND(ID_APP_ABOUT, OnAppAbout)
- // NOTE - the ClassWizard will add and remove mapping macros here.
- // DO NOT EDIT what you see in these blocks of generated code!
- //}}AFX_MSG
- ON_COMMAND(ID_HELP, CWinApp::OnHelp)
-END_MESSAGE_MAP()
-
-/////////////////////////////////////////////////////////////////////////////
-// CTestApp construction
-
-CIvyProbeApp::CIvyProbeApp()
-{
- // TODO: add construction code here,
- // Place all significant initialization in InitInstance
-}
-
-/////////////////////////////////////////////////////////////////////////////
-// The one and only CTestApp object
-
-CIvyProbeApp theApp;
-
-/////////////////////////////////////////////////////////////////////////////
-// CTestApp initialization
-
-BOOL CIvyProbeApp::InitInstance()
-{
- InitCommonControls();
- CWinApp::InitInstance();
-
- // CG: The following block was added by the Windows Sockets component.
- {
- if (!AfxSocketInit())
- {
- AfxMessageBox(CG_IDS_SOCKETS_INIT_FAILED);
- return FALSE;
- }
-
- }
-
- CIvyProbeDlg dlg;
- m_pMainWnd = &dlg;
- int nResponse = dlg.DoModal();
- if (nResponse == IDOK)
- {
- // TODO: Place code here to handle when the dialog is
- // dismissed with OK
- }
- else if (nResponse == IDCANCEL)
- {
- // TODO: Place code here to handle when the dialog is
- // dismissed with Cancel
- }
-
- // Since the dialog has been closed, return FALSE so that we exit the
- // application, rather than start the application's message pump.
- return FALSE;
-}
-// App command to run the dialog
-void CIvyProbeApp::OnAppAbout()
-{
- CAboutDlg aboutDlg;
- aboutDlg.DoModal();
-}
diff --git a/Bus/IvyProbe/IvyProbe.h b/Bus/IvyProbe/IvyProbe.h
deleted file mode 100644
index 998fd04..0000000
--- a/Bus/IvyProbe/IvyProbe.h
+++ /dev/null
@@ -1,50 +0,0 @@
-// Test.h : main header file for the TEST application
-//
-
-#if !defined(AFX_TEST_H__F7F08FEE_E653_11D0_AE3E_080009F92591__INCLUDED_)
-#define AFX_TEST_H__F7F08FEE_E653_11D0_AE3E_080009F92591__INCLUDED_
-
-#if _MSC_VER >= 1000
-#pragma once
-#endif // _MSC_VER >= 1000
-
-#ifndef __AFXWIN_H__
- #error include 'stdafx.h' before including this file for PCH
-#endif
-
-#include "resource.h" // main symbols
-
-/////////////////////////////////////////////////////////////////////////////
-// CTestApp:
-// See Test.cpp for the implementation of this class
-//
-
-class CIvyProbeApp : public CWinApp
-{
-public:
- CIvyProbeApp();
-
-// Overrides
- // ClassWizard generated virtual function overrides
- //{{AFX_VIRTUAL(CTestApp)
- public:
- virtual BOOL InitInstance();
- //}}AFX_VIRTUAL
-
-// Implementation
-
- //{{AFX_MSG(CTestApp)
- afx_msg void OnAppAbout();
- // NOTE - the ClassWizard will add and remove member functions here.
- // DO NOT EDIT what you see in these blocks of generated code !
- //}}AFX_MSG
- DECLARE_MESSAGE_MAP()
-};
-
-
-/////////////////////////////////////////////////////////////////////////////
-
-//{{AFX_INSERT_LOCATION}}
-// Microsoft Developer Studio will insert additional declarations immediately before the previous line.
-
-#endif // !defined(AFX_TEST_H__F7F08FEE_E653_11D0_AE3E_080009F92591__INCLUDED_)
diff --git a/Bus/IvyProbe/IvyProbe.rc b/Bus/IvyProbe/IvyProbe.rc
deleted file mode 100644
index 6896394..0000000
--- a/Bus/IvyProbe/IvyProbe.rc
+++ /dev/null
@@ -1,243 +0,0 @@
-// Microsoft Visual C++ generated resource script.
-//
-#include "resource.h"
-
-#define APSTUDIO_READONLY_SYMBOLS
-/////////////////////////////////////////////////////////////////////////////
-//
-// Generated from the TEXTINCLUDE 2 resource.
-//
-#include "afxres.h"
-
-/////////////////////////////////////////////////////////////////////////////
-#undef APSTUDIO_READONLY_SYMBOLS
-
-/////////////////////////////////////////////////////////////////////////////
-// French (France) resources
-
-#if !defined(AFX_RESOURCE_DLL) || defined(AFX_TARG_FRA)
-#ifdef _WIN32
-LANGUAGE LANG_FRENCH, SUBLANG_FRENCH
-#pragma code_page(1252)
-#endif //_WIN32
-
-#ifdef APSTUDIO_INVOKED
-/////////////////////////////////////////////////////////////////////////////
-//
-// TEXTINCLUDE
-//
-
-1 TEXTINCLUDE
-BEGIN
- "resource.h\0"
-END
-
-2 TEXTINCLUDE
-BEGIN
- "#include ""afxres.h""\r\n"
- "\0"
-END
-
-3 TEXTINCLUDE
-BEGIN
- "#define _AFX_NO_SPLITTER_RESOURCES\r\n"
- "#define _AFX_NO_OLE_RESOURCES\r\n"
- "#define _AFX_NO_TRACKER_RESOURCES\r\n"
- "#define _AFX_NO_PROPERTY_RESOURCES\r\n"
- "\r\n"
- "#if !defined(AFX_RESOURCE_DLL) || defined(AFX_TARG_FRA)\r\n"
- "#ifdef _WIN32\r\n"
- "LANGUAGE 12, 1\r\n"
- "#pragma code_page(1252)\r\n"
- "#endif\r\n"
- "#include ""res\\IvyProbe.rc2"" // non-Microsoft Visual C++ edited resources\r\n"
- "#include ""l.fra\\afxres.rc"" // Standard components\r\n"
- "#endif\0"
-END
-
-#endif // APSTUDIO_INVOKED
-
-
-/////////////////////////////////////////////////////////////////////////////
-//
-// Icon
-//
-
-// Icon with lowest ID value placed first to ensure application icon
-// remains consistent on all systems.
-IDR_MAINFRAME ICON "res\\IvyProbe.ico"
-
-/////////////////////////////////////////////////////////////////////////////
-//
-// Dialog
-//
-
-IDD_ABOUTBOX DIALOGEX 0, 0, 217, 55
-STYLE DS_SETFONT | DS_MODALFRAME | WS_POPUP | WS_CAPTION | WS_SYSMENU
-CAPTION "A propos de IvyProbe"
-FONT 8, "MS Sans Serif", 0, 0, 0x0
-BEGIN
- ICON IDR_MAINFRAME,IDC_STATIC,11,17,20,20
- LTEXT "IvyProbe version 1.1",IDC_STATIC,40,10,119,8,SS_NOPREFIX
- LTEXT "Copyright (C) 1997",IDC_STATIC,40,25,119,8
- DEFPUSHBUTTON "OK",IDOK,178,7,32,14,WS_GROUP
-END
-
-IDD_IVYPROBE_DIALOG DIALOGEX 0, 0, 163, 152
-STYLE DS_SETFONT | WS_MINIMIZEBOX | WS_MAXIMIZEBOX | WS_POPUP | WS_VISIBLE | WS_CAPTION | WS_SYSMENU | WS_THICKFRAME
-EXSTYLE WS_EX_APPWINDOW
-CAPTION "IvyProbe"
-MENU IDR_MENU1
-FONT 8, "MS Sans Serif", 0, 0, 0x0
-BEGIN
- EDITTEXT IDC_BUSNUMBER,4,14,120,14,ES_AUTOHSCROLL
- PUSHBUTTON "Start",IDC_START,130,15,25,14
- LTEXT "Bind:",IDC_STATIC_BIND,4,135,17,8
- LTEXT "Msg:",IDC_STATIC_MSG,4,117,17,12
- COMBOBOX IDC_MSG,27,117,100,82,CBS_DROPDOWN | WS_VSCROLL | WS_TABSTOP
- DEFPUSHBUTTON "Send",IDC_SEND,128,116,27,14
- PUSHBUTTON "Bind",IDC_BIND,128,132,27,14
- COMBOBOX IDC_REGEXP,27,133,100,66,CBS_DROPDOWN | WS_VSCROLL | WS_TABSTOP
- EDITTEXT IDC_TEXT,4,31,151,82,ES_MULTILINE | ES_AUTOVSCROLL | ES_AUTOHSCROLL | ES_NOHIDESEL | ES_READONLY | WS_VSCROLL
-END
-
-
-/////////////////////////////////////////////////////////////////////////////
-//
-// Version
-//
-
-VS_VERSION_INFO VERSIONINFO
- FILEVERSION 1,0,0,1
- PRODUCTVERSION 1,0,0,1
- FILEFLAGSMASK 0x3fL
-#ifdef _DEBUG
- FILEFLAGS 0x1L
-#else
- FILEFLAGS 0x0L
-#endif
- FILEOS 0x4L
- FILETYPE 0x1L
- FILESUBTYPE 0x0L
-BEGIN
- BLOCK "StringFileInfo"
- BEGIN
- BLOCK "040c04b0"
- BEGIN
- VALUE "FileDescription", "Application IvyProbe"
- VALUE "FileVersion", "1, 0, 0, 1"
- VALUE "InternalName", "Test"
- VALUE "LegalCopyright", "Copyright (C) 1997"
- VALUE "OriginalFilename", "IvyProbe.exe"
- VALUE "ProductName", "IvyProbe"
- VALUE "ProductVersion", "1, 0, 0, 1"
- END
- END
- BLOCK "VarFileInfo"
- BEGIN
- VALUE "Translation", 0x40c, 1200
- END
-END
-
-
-/////////////////////////////////////////////////////////////////////////////
-//
-// DESIGNINFO
-//
-
-#ifdef APSTUDIO_INVOKED
-GUIDELINES DESIGNINFO
-BEGIN
- IDD_ABOUTBOX, DIALOG
- BEGIN
- LEFTMARGIN, 7
- RIGHTMARGIN, 210
- TOPMARGIN, 7
- BOTTOMMARGIN, 48
- END
-
- IDD_IVYPROBE_DIALOG, DIALOG
- BEGIN
- LEFTMARGIN, 4
- RIGHTMARGIN, 155
- TOPMARGIN, 1
- BOTTOMMARGIN, 148
- END
-END
-#endif // APSTUDIO_INVOKED
-
-
-/////////////////////////////////////////////////////////////////////////////
-//
-// Dialog Info
-//
-
-IDD_IVYPROBE_DIALOG DLGINIT
-BEGIN
- IDC_REGEXP, 0x403, 5, 0
-0x2e28, 0x292a, "\000"
- 0
-END
-
-
-/////////////////////////////////////////////////////////////////////////////
-//
-// Menu
-//
-
-IDR_MENU1 MENU
-BEGIN
- POPUP "File"
- BEGIN
- MENUITEM "Save Msg", FILE_SAVE
- MENUITEM "Load Msg", FILE_LOAD
- MENUITEM "Save Bindings", ID_FILE_SAVEBINDINGS
- MENUITEM "Load Bindings", ID_FILE_LOADBINDINGS
- END
-END
-
-
-/////////////////////////////////////////////////////////////////////////////
-//
-// RT_MANIFEST
-//
-
-IDR_MANIFEST RT_MANIFEST "res\\IvyProbe.manifest"
-
-/////////////////////////////////////////////////////////////////////////////
-//
-// String Table
-//
-
-STRINGTABLE
-BEGIN
- IDS_ABOUTBOX "&A propos de IvyProbe..."
- CG_IDS_SOCKETS_INIT_FAILED "Windows sockets initialization failed."
-END
-
-#endif // French (France) resources
-/////////////////////////////////////////////////////////////////////////////
-
-
-
-#ifndef APSTUDIO_INVOKED
-/////////////////////////////////////////////////////////////////////////////
-//
-// Generated from the TEXTINCLUDE 3 resource.
-//
-#define _AFX_NO_SPLITTER_RESOURCES
-#define _AFX_NO_OLE_RESOURCES
-#define _AFX_NO_TRACKER_RESOURCES
-#define _AFX_NO_PROPERTY_RESOURCES
-
-#if !defined(AFX_RESOURCE_DLL) || defined(AFX_TARG_FRA)
-#ifdef _WIN32
-LANGUAGE 12, 1
-#pragma code_page(1252)
-#endif
-#include "res\IvyProbe.rc2" // non-Microsoft Visual C++ edited resources
-#include "l.fra\afxres.rc" // Standard components
-#endif
-/////////////////////////////////////////////////////////////////////////////
-#endif // not APSTUDIO_INVOKED
-
diff --git a/Bus/IvyProbe/IvyProbe.sln b/Bus/IvyProbe/IvyProbe.sln
deleted file mode 100644
index 22e0629..0000000
--- a/Bus/IvyProbe/IvyProbe.sln
+++ /dev/null
@@ -1,42 +0,0 @@
-Microsoft Visual Studio Solution File, Format Version 8.00
-Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "IvyProbe", "IvyProbe.vcproj", "{B7F7F0F7-9029-4D1A-8CB4-C42DAF86A21C}"
- ProjectSection(ProjectDependencies) = postProject
- EndProjectSection
-EndProject
-Project("{54435603-DBB4-11D2-8724-00A0C9A8B90C}") = "Install", "InstIvy\InstIvy.vdproj", "{61A08759-9E99-481F-811D-204553D27E75}"
- ProjectSection(ProjectDependencies) = postProject
- EndProjectSection
-EndProject
-Global
- GlobalSection(SourceCodeControl) = preSolution
- SccNumberOfProjects = 3
- SccProjectUniqueName0 = IvyProbe.vcproj
- SccLocalPath0 = .
- CanCheckoutShared = false
- SccProjectUniqueName1 = InstIvy\\InstIvy.vdproj
- SccProjectName1 = \u0022$/InstIvyProbe\u0022,\u0020IPFAAAAA
- SccLocalPath1 = InstIvy
- CanCheckoutShared = false
- SccLocalPath2 = .
- CanCheckoutShared = false
- SolutionUniqueID = {CFBC3463-2A25-4A65-99D7-92F0A19DACAB}
- EndGlobalSection
- GlobalSection(SolutionConfiguration) = preSolution
- Debug = Debug
- Release = Release
- EndGlobalSection
- GlobalSection(ProjectConfiguration) = postSolution
- {B7F7F0F7-9029-4D1A-8CB4-C42DAF86A21C}.Debug.ActiveCfg = Debug|Win32
- {B7F7F0F7-9029-4D1A-8CB4-C42DAF86A21C}.Debug.Build.0 = Debug|Win32
- {B7F7F0F7-9029-4D1A-8CB4-C42DAF86A21C}.Release.ActiveCfg = Release|Win32
- {B7F7F0F7-9029-4D1A-8CB4-C42DAF86A21C}.Release.Build.0 = Release|Win32
- {61A08759-9E99-481F-811D-204553D27E75}.Debug.ActiveCfg = Debug
- {61A08759-9E99-481F-811D-204553D27E75}.Debug.Build.0 = Debug
- {61A08759-9E99-481F-811D-204553D27E75}.Release.ActiveCfg = Release
- {61A08759-9E99-481F-811D-204553D27E75}.Release.Build.0 = Release
- EndGlobalSection
- GlobalSection(ExtensibilityGlobals) = postSolution
- EndGlobalSection
- GlobalSection(ExtensibilityAddIns) = postSolution
- EndGlobalSection
-EndGlobal
diff --git a/Bus/IvyProbe/IvyProbe.vcproj b/Bus/IvyProbe/IvyProbe.vcproj
deleted file mode 100644
index cdf5dda..0000000
--- a/Bus/IvyProbe/IvyProbe.vcproj
+++ /dev/null
@@ -1,535 +0,0 @@
-<?xml version="1.0" encoding="Windows-1252"?>
-<VisualStudioProject
- ProjectType="Visual C++"
- Version="8,00"
- Name="IvyProbe"
- ProjectGUID="{B7F7F0F7-9029-4D1A-8CB4-C42DAF86A21C}"
- RootNamespace="IvyProbe"
- SccProjectName="&quot;$/Bus/IvyProbe&quot;, ZPBAAAAA"
- SccLocalPath="."
- SccProvider="MSSCCI:Microsoft Visual SourceSafe"
- Keyword="MFCProj"
- >
- <Platforms>
- <Platform
- Name="Win32"
- />
- <Platform
- Name="x64"
- />
- </Platforms>
- <ToolFiles>
- </ToolFiles>
- <Configurations>
- <Configuration
- Name="Debug|Win32"
- OutputDirectory="$(SolutionDir)$(ConfigurationName)"
- IntermediateDirectory="$(ConfigurationName)"
- ConfigurationType="1"
- InheritedPropertySheets="$(VCInstallDir)VCProjectDefaults\UpgradeFromVC71.vsprops"
- UseOfMFC="2"
- ATLMinimizesCRunTimeLibraryUsage="false"
- >
- <Tool
- Name="VCPreBuildEventTool"
- />
- <Tool
- Name="VCCustomBuildTool"
- />
- <Tool
- Name="VCXMLDataGeneratorTool"
- />
- <Tool
- Name="VCWebServiceProxyGeneratorTool"
- />
- <Tool
- Name="VCMIDLTool"
- PreprocessorDefinitions="_DEBUG"
- MkTypLibCompatible="true"
- SuppressStartupBanner="true"
- TargetEnvironment="1"
- TypeLibraryName=".\Debug/Test.tlb"
- />
- <Tool
- Name="VCCLCompilerTool"
- Optimization="0"
- AdditionalIncludeDirectories="..\Ivy;&quot;..\..\..\pcre-6.4&quot;"
- PreprocessorDefinitions="USE_ETS"
- RuntimeLibrary="3"
- UsePrecompiledHeader="2"
- PrecompiledHeaderThrough="stdafx.h"
- BrowseInformation="1"
- WarningLevel="3"
- SuppressStartupBanner="true"
- DebugInformationFormat="4"
- />
- <Tool
- Name="VCManagedResourceCompilerTool"
- />
- <Tool
- Name="VCResourceCompilerTool"
- PreprocessorDefinitions="_DEBUG"
- Culture="1036"
- />
- <Tool
- Name="VCPreLinkEventTool"
- />
- <Tool
- Name="VCLinkerTool"
- LinkIncremental="2"
- SuppressStartupBanner="true"
- AdditionalLibraryDirectories=""
- GenerateDebugInformation="true"
- SubSystem="2"
- />
- <Tool
- Name="VCALinkTool"
- />
- <Tool
- Name="VCManifestTool"
- />
- <Tool
- Name="VCXDCMakeTool"
- />
- <Tool
- Name="VCBscMakeTool"
- />
- <Tool
- Name="VCFxCopTool"
- />
- <Tool
- Name="VCAppVerifierTool"
- />
- <Tool
- Name="VCWebDeploymentTool"
- />
- <Tool
- Name="VCPostBuildEventTool"
- />
- </Configuration>
- <Configuration
- Name="Debug|x64"
- OutputDirectory="$(SolutionDir)$(PlatformName)\$(ConfigurationName)"
- IntermediateDirectory="$(PlatformName)\$(ConfigurationName)"
- ConfigurationType="1"
- InheritedPropertySheets="$(VCInstallDir)VCProjectDefaults\UpgradeFromVC71.vsprops"
- UseOfMFC="2"
- ATLMinimizesCRunTimeLibraryUsage="false"
- >
- <Tool
- Name="VCPreBuildEventTool"
- />
- <Tool
- Name="VCCustomBuildTool"
- />
- <Tool
- Name="VCXMLDataGeneratorTool"
- />
- <Tool
- Name="VCWebServiceProxyGeneratorTool"
- />
- <Tool
- Name="VCMIDLTool"
- PreprocessorDefinitions="_DEBUG"
- MkTypLibCompatible="true"
- SuppressStartupBanner="true"
- TargetEnvironment="3"
- TypeLibraryName=".\Debug/Test.tlb"
- />
- <Tool
- Name="VCCLCompilerTool"
- Optimization="0"
- AdditionalIncludeDirectories="..\Ivy;&quot;..\..\..\pcre-6.4&quot;"
- PreprocessorDefinitions="USE_ETS"
- BasicRuntimeChecks="3"
- RuntimeLibrary="3"
- UsePrecompiledHeader="2"
- PrecompiledHeaderThrough="stdafx.h"
- BrowseInformation="1"
- WarningLevel="3"
- SuppressStartupBanner="true"
- DebugInformationFormat="3"
- />
- <Tool
- Name="VCManagedResourceCompilerTool"
- />
- <Tool
- Name="VCResourceCompilerTool"
- PreprocessorDefinitions="_DEBUG"
- Culture="1036"
- />
- <Tool
- Name="VCPreLinkEventTool"
- />
- <Tool
- Name="VCLinkerTool"
- LinkIncremental="2"
- SuppressStartupBanner="true"
- AdditionalLibraryDirectories=""
- GenerateDebugInformation="true"
- SubSystem="2"
- TargetMachine="17"
- />
- <Tool
- Name="VCALinkTool"
- />
- <Tool
- Name="VCManifestTool"
- />
- <Tool
- Name="VCXDCMakeTool"
- />
- <Tool
- Name="VCBscMakeTool"
- />
- <Tool
- Name="VCFxCopTool"
- />
- <Tool
- Name="VCAppVerifierTool"
- />
- <Tool
- Name="VCWebDeploymentTool"
- />
- <Tool
- Name="VCPostBuildEventTool"
- />
- </Configuration>
- <Configuration
- Name="Release|Win32"
- OutputDirectory="$(SolutionDir)$(ConfigurationName)"
- IntermediateDirectory="$(ConfigurationName)"
- ConfigurationType="1"
- InheritedPropertySheets="$(VCInstallDir)VCProjectDefaults\UpgradeFromVC71.vsprops"
- UseOfMFC="2"
- ATLMinimizesCRunTimeLibraryUsage="false"
- >
- <Tool
- Name="VCPreBuildEventTool"
- />
- <Tool
- Name="VCCustomBuildTool"
- />
- <Tool
- Name="VCXMLDataGeneratorTool"
- />
- <Tool
- Name="VCWebServiceProxyGeneratorTool"
- />
- <Tool
- Name="VCMIDLTool"
- PreprocessorDefinitions="NDEBUG"
- MkTypLibCompatible="true"
- SuppressStartupBanner="true"
- TargetEnvironment="1"
- TypeLibraryName=".\Release/Test.tlb"
- />
- <Tool
- Name="VCCLCompilerTool"
- InlineFunctionExpansion="1"
- AdditionalIncludeDirectories="..\Ivy;&quot;..\..\..\pcre-6.4&quot;"
- PreprocessorDefinitions="USE_ETS"
- StringPooling="true"
- RuntimeLibrary="2"
- EnableFunctionLevelLinking="true"
- UsePrecompiledHeader="2"
- PrecompiledHeaderThrough="stdafx.h"
- WarningLevel="3"
- SuppressStartupBanner="true"
- />
- <Tool
- Name="VCManagedResourceCompilerTool"
- />
- <Tool
- Name="VCResourceCompilerTool"
- PreprocessorDefinitions="_AFXDLL;NDEBUG"
- Culture="1036"
- />
- <Tool
- Name="VCPreLinkEventTool"
- />
- <Tool
- Name="VCLinkerTool"
- LinkIncremental="1"
- SuppressStartupBanner="true"
- AdditionalLibraryDirectories=""
- SubSystem="2"
- />
- <Tool
- Name="VCALinkTool"
- />
- <Tool
- Name="VCManifestTool"
- />
- <Tool
- Name="VCXDCMakeTool"
- />
- <Tool
- Name="VCBscMakeTool"
- />
- <Tool
- Name="VCFxCopTool"
- />
- <Tool
- Name="VCAppVerifierTool"
- />
- <Tool
- Name="VCWebDeploymentTool"
- />
- <Tool
- Name="VCPostBuildEventTool"
- />
- </Configuration>
- <Configuration
- Name="Release|x64"
- OutputDirectory="$(SolutionDir)$(PlatformName)\$(ConfigurationName)"
- IntermediateDirectory="$(PlatformName)\$(ConfigurationName)"
- ConfigurationType="1"
- InheritedPropertySheets="$(VCInstallDir)VCProjectDefaults\UpgradeFromVC71.vsprops"
- UseOfMFC="2"
- ATLMinimizesCRunTimeLibraryUsage="false"
- >
- <Tool
- Name="VCPreBuildEventTool"
- />
- <Tool
- Name="VCCustomBuildTool"
- />
- <Tool
- Name="VCXMLDataGeneratorTool"
- />
- <Tool
- Name="VCWebServiceProxyGeneratorTool"
- />
- <Tool
- Name="VCMIDLTool"
- PreprocessorDefinitions="NDEBUG"
- MkTypLibCompatible="true"
- SuppressStartupBanner="true"
- TargetEnvironment="3"
- TypeLibraryName=".\Release/Test.tlb"
- />
- <Tool
- Name="VCCLCompilerTool"
- InlineFunctionExpansion="1"
- AdditionalIncludeDirectories="..\Ivy;&quot;..\..\..\pcre-6.4&quot;"
- PreprocessorDefinitions="USE_ETS"
- StringPooling="true"
- RuntimeLibrary="2"
- EnableFunctionLevelLinking="true"
- UsePrecompiledHeader="2"
- WarningLevel="3"
- SuppressStartupBanner="true"
- Detect64BitPortabilityProblems="true"
- />
- <Tool
- Name="VCManagedResourceCompilerTool"
- />
- <Tool
- Name="VCResourceCompilerTool"
- PreprocessorDefinitions="_AFXDLL;NDEBUG"
- Culture="1036"
- />
- <Tool
- Name="VCPreLinkEventTool"
- />
- <Tool
- Name="VCLinkerTool"
- LinkIncremental="1"
- SuppressStartupBanner="true"
- AdditionalLibraryDirectories=""
- SubSystem="2"
- TargetMachine="17"
- />
- <Tool
- Name="VCALinkTool"
- />
- <Tool
- Name="VCManifestTool"
- />
- <Tool
- Name="VCXDCMakeTool"
- />
- <Tool
- Name="VCBscMakeTool"
- />
- <Tool
- Name="VCFxCopTool"
- />
- <Tool
- Name="VCAppVerifierTool"
- />
- <Tool
- Name="VCWebDeploymentTool"
- />
- <Tool
- Name="VCPostBuildEventTool"
- />
- </Configuration>
- </Configurations>
- <References>
- <ProjectReference
- ReferencedProjectIdentifier="{9BD87B7A-517E-4900-B3EA-A358885CD876}"
- RelativePathToProject=".\Ivy\Ivy.vcproj"
- />
- </References>
- <Files>
- <Filter
- Name="Source Files"
- Filter="cpp;c;cxx;rc;def;r;odl;idl;hpj;bat"
- >
- <File
- RelativePath=".\ETSLayout.cpp"
- >
- </File>
- <File
- RelativePath=".\HistoryEdit.cpp"
- >
- </File>
- <File
- RelativePath="IvyProbe.cpp"
- >
- </File>
- <File
- RelativePath="IvyProbeDlg.cpp"
- >
- </File>
- <File
- RelativePath=".\StdAfx.cpp"
- >
- <FileConfiguration
- Name="Debug|Win32"
- >
- <Tool
- Name="VCCLCompilerTool"
- UsePrecompiledHeader="1"
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Debug|x64"
- >
- <Tool
- Name="VCCLCompilerTool"
- UsePrecompiledHeader="1"
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Release|Win32"
- >
- <Tool
- Name="VCCLCompilerTool"
- UsePrecompiledHeader="1"
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Release|x64"
- >
- <Tool
- Name="VCCLCompilerTool"
- UsePrecompiledHeader="1"
- />
- </FileConfiguration>
- </File>
- <File
- RelativePath=".\TestParseCmdLine.cpp"
- >
- </File>
- </Filter>
- <Filter
- Name="Header Files"
- Filter="h;hpp;hxx;hm;inl"
- >
- <File
- RelativePath=".\ETSLayout.h"
- >
- </File>
- <File
- RelativePath=".\HistoryEdit.h"
- >
- </File>
- <File
- RelativePath="IvyProbe.h"
- >
- </File>
- <File
- RelativePath="IvyProbeDlg.h"
- >
- </File>
- <File
- RelativePath=".\Resource.h"
- >
- </File>
- <File
- RelativePath=".\StdAfx.h"
- >
- </File>
- <File
- RelativePath=".\TestParseCmdLine.h"
- >
- </File>
- </Filter>
- <Filter
- Name="Resource Files"
- Filter="ico;cur;bmp;dlg;rc2;rct;bin;cnt;rtf;gif;jpg;jpeg;jpe"
- >
- <File
- RelativePath="res\IvyProbe.ico"
- >
- </File>
- <File
- RelativePath="res\IvyProbe.manifest"
- >
- <FileConfiguration
- Name="Debug|Win32"
- ExcludedFromBuild="true"
- >
- <Tool
- Name="VCCustomBuildTool"
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Debug|x64"
- ExcludedFromBuild="true"
- >
- <Tool
- Name="VCCustomBuildTool"
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Release|Win32"
- ExcludedFromBuild="true"
- >
- <Tool
- Name="VCCustomBuildTool"
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Release|x64"
- ExcludedFromBuild="true"
- >
- <Tool
- Name="VCCustomBuildTool"
- />
- </FileConfiguration>
- </File>
- <File
- RelativePath="IvyProbe.rc"
- >
- </File>
- <File
- RelativePath="res\IvyProbe.rc2"
- >
- </File>
- </Filter>
- <File
- RelativePath=".\ReadMe.txt"
- >
- </File>
- </Files>
- <Globals>
- <Global
- Name="RESOURCE_FILE"
- Value="IvyProbe.rc"
- />
- </Globals>
-</VisualStudioProject>
diff --git a/Bus/IvyProbe/IvyProbe.vcproj.vspscc b/Bus/IvyProbe/IvyProbe.vcproj.vspscc
deleted file mode 100644
index 794f014..0000000
--- a/Bus/IvyProbe/IvyProbe.vcproj.vspscc
+++ /dev/null
@@ -1,10 +0,0 @@
-""
-{
-"FILE_VERSION" = "9237"
-"ENLISTMENT_CHOICE" = "NEVER"
-"PROJECT_FILE_RELATIVE_PATH" = ""
-"NUMBER_OF_EXCLUDED_FILES" = "0"
-"ORIGINAL_PROJECT_FILE_PATH" = ""
-"NUMBER_OF_NESTED_PROJECTS" = "0"
-"SOURCE_CONTROL_SETTINGS_PROVIDER" = "PROJECT"
-}
diff --git a/Bus/IvyProbe/IvyProbe.vssscc b/Bus/IvyProbe/IvyProbe.vssscc
deleted file mode 100644
index 794f014..0000000
--- a/Bus/IvyProbe/IvyProbe.vssscc
+++ /dev/null
@@ -1,10 +0,0 @@
-""
-{
-"FILE_VERSION" = "9237"
-"ENLISTMENT_CHOICE" = "NEVER"
-"PROJECT_FILE_RELATIVE_PATH" = ""
-"NUMBER_OF_EXCLUDED_FILES" = "0"
-"ORIGINAL_PROJECT_FILE_PATH" = ""
-"NUMBER_OF_NESTED_PROJECTS" = "0"
-"SOURCE_CONTROL_SETTINGS_PROVIDER" = "PROJECT"
-}
diff --git a/Bus/IvyProbe/IvyProbeDlg.cpp b/Bus/IvyProbe/IvyProbeDlg.cpp
deleted file mode 100644
index ef7bff8..0000000
--- a/Bus/IvyProbe/IvyProbeDlg.cpp
+++ /dev/null
@@ -1,394 +0,0 @@
-// TestDlg.cpp : implementation file
-//
-
-#include "stdafx.h"
-#include "IvyProbe.h"
-#include "IvyProbeDlg.h"
-#include "TestParseCmdLine.h"
-
-#include "IvyApplication.h"
-
-#ifdef _DEBUG
-#define new DEBUG_NEW
-#undef THIS_FILE
-static char THIS_FILE[] = __FILE__;
-#endif
-
-static char BASED_CODE szFilterMsg[] = "Ivy Messages Files (*.ivm)|*.ivm|Ivy Files (*.ivm;*.ivb;*.txt)|*.ivm;*.ivb;*.txt|All Files (*.*)|*.*||";
-static char BASED_CODE szFilterBind[] = "Ivy Bindings Files (*.ivb)|*.ivb|Ivy Files (*.ivm;*.ivb;*.txt)|*.ivm;*.ivb;*.txt|All Files (*.*)|*.*||";
-
-CAboutDlg::CAboutDlg() : CDialog(CAboutDlg::IDD)
-{
- //{{AFX_DATA_INIT(CAboutDlg)
- //}}AFX_DATA_INIT
-}
-
-void CAboutDlg::DoDataExchange(CDataExchange* pDX)
-{
- CDialog::DoDataExchange(pDX);
- //{{AFX_DATA_MAP(CAboutDlg)
- //}}AFX_DATA_MAP
-}
-
-BEGIN_MESSAGE_MAP(CAboutDlg, CDialog)
- //{{AFX_MSG_MAP(CAboutDlg)
- // No message handlers
- //}}AFX_MSG_MAP
-END_MESSAGE_MAP()
-
-/////////////////////////////////////////////////////////////////////////////
-// CTestDlg dialog
-
-CIvyProbeDlg::CIvyProbeDlg(CWnd* pParent /*=NULL*/)
- : MyDialog(CIvyProbeDlg::IDD, pParent)
-{
- //{{AFX_DATA_INIT(CTestDlg)
- m_busnumber = "";
- //}}AFX_DATA_INIT
- // Note that LoadIcon does not require a subsequent DestroyIcon in Win32
- m_hIcon = AfxGetApp()->LoadIcon(IDR_MAINFRAME);
-
- bus = NULL;
-}
-
-void CIvyProbeDlg::DoDataExchange(CDataExchange* pDX)
-{
- MyDialog::DoDataExchange(pDX);
- //{{AFX_DATA_MAP(CTestDlg)
- DDX_Control(pDX, IDC_REGEXP, m_expr);
- DDX_Control(pDX, IDC_MSG, m_msg);
- DDX_Text(pDX, IDC_BUSNUMBER, m_busnumber);
- //}}AFX_DATA_MAP
-}
-
-BEGIN_MESSAGE_MAP(CIvyProbeDlg, MyDialog)
- //{{AFX_MSG_MAP(CTestDlg)
- ON_WM_QUERYDRAGICON()
- ON_BN_CLICKED(IDC_START, OnStart)
- ON_WM_CLOSE()
- ON_BN_CLICKED(IDC_SEND, OnSend)
- ON_BN_CLICKED(IDC_BIND, OnBind)
- ON_WM_SYSCOMMAND()
- ON_COMMAND(FILE_LOAD, OnLoad)
- ON_COMMAND(FILE_SAVE, OnSave)
- //}}AFX_MSG_MAP
- ON_COMMAND(ID_FILE_SAVEBINDINGS, &CIvyProbeDlg::OnFileSavebindings)
- ON_COMMAND(ID_FILE_LOADBINDINGS, &CIvyProbeDlg::OnFileLoadbindings)
-END_MESSAGE_MAP()
-
-
-
-const char * CONVSTR( const CString& str )
-{
-#ifdef UNDER_CE
-
- static char buffer[4096];
- int len = str.GetLength();
- buffer[len] = '\0';
- if ( len )
- {
- int err = WideCharToMultiByte( CP_ACP, 0, str, len, buffer, 4096, NULL, NULL );
- if ( err == 0 )
- TRACE(TEXT("Error converting chars %d\n"),GetLastError());
- }
- return buffer;
-#else
- return (LPCSTR) str;
-#endif
-
-}
-
-
-/////////////////////////////////////////////////////////////////////////////
-// CTestDlg message handlers
-
-BOOL CIvyProbeDlg::OnInitDialog()
-{
- MyDialog::OnInitDialog();
-
-// // Add "About..." menu item to system menu.
-//
-// // IDM_ABOUTBOX must be in the system command range.
-// ASSERT((IDM_ABOUTBOX & 0xFFF0) == IDM_ABOUTBOX);
-// ASSERT(IDM_ABOUTBOX < 0xF000);
-//
-// CMenu* pSysMenu = GetSystemMenu(FALSE);
-// if (pSysMenu != NULL)
-// {
-// CString strAboutMenu;
-// strAboutMenu.LoadString(IDS_ABOUTBOX);
-// if (!strAboutMenu.IsEmpty())
-// {
-// pSysMenu->AppendMenu(MF_SEPARATOR);
-// pSysMenu->AppendMenu(MF_STRING, IDM_ABOUTBOX, strAboutMenu);
-// }
-// }
-
- // Set the icon for this dialog. The framework does this automatically
- // when the application's main window is not a dialog
- SetIcon(m_hIcon, TRUE); // Set big icon
- SetIcon(m_hIcon, FALSE); // Set small icon
-
-#ifdef USE_ETS
- // define the Layout
- CreateRoot( VERTICAL, nDefaultBorder, 5 )
- << ( pane( HORIZONTAL, ABSOLUTE_VERT )
- << item ( IDC_BUSNUMBER, GREEDY )
- << item ( IDC_START, NORESIZE )
- )
- << item ( IDC_TEXT, GREEDY )
- << ( pane( HORIZONTAL, ABSOLUTE_VERT )
- << item( IDC_STATIC_MSG, NORESIZE )
- << item( IDC_MSG, GREEDY )
- << item( IDC_SEND, NORESIZE )
- )
- << ( pane( HORIZONTAL, ABSOLUTE_VERT )
- << item( IDC_STATIC_BIND, NORESIZE )
- << item( IDC_REGEXP, GREEDY )
- << item( IDC_BIND, NORESIZE )
- );
- UpdateLayout ();
-#endif
- // extra initialization here
- m_text.SubclassDlgItem (IDC_TEXT, this);
-
-
- // parse command Line Info
- TestParseCmdLine cmd;
- AfxGetApp()->ParseCommandLine( cmd );
-
- // Set Argument from Command Line
- m_busnumber = cmd.m_busNumber;
-
- bus = new Ivy( "IvyProbe Windows","IvyProbe Windows Ready",this,FALSE);
- bus->SetBindCallback( this );
-
-// bus->BindMsg("(.*)", BUS_CALLBACK_OF(CTestDlg, IvyCallback ));
-
- //bus->BindMsg("^S( A=([0-9]+))?( B=([0-9]+))?",cb);
- m_busnumber = bus->GetDomain( CONVSTR(m_busnumber) );
- UpdateData(FALSE);
-
- // force bus start in case of start
- if ( cmd.m_start )
- OnStart();
-
- return TRUE; // return TRUE unless you set the focus to a control
-}
-
-
-//void CTestDlg::OnSysCommand(UINT nID, LPARAM lParam)
-//{
-// if ((nID & 0xFFF0) == IDM_ABOUTBOX)
-// {
-// CAboutDlg dlgAbout;
-// dlgAbout.DoModal();
-// }
-// else
-// {
-// MyDialog::OnSysCommand(nID, lParam);
-// }
-//}
-
-
-
-// The system calls this to obtain the cursor to display while the user drags
-// the minimized window.
-HCURSOR CIvyProbeDlg::OnQueryDragIcon()
-{
- return (HCURSOR) m_hIcon;
-}
-
-void CIvyProbeDlg::OnStart()
-{
- UpdateData(TRUE);
- bus->stop();
- m_busnumber = bus->GetDomain( CONVSTR(m_busnumber) );
- bus->start(CONVSTR(m_busnumber));
- UpdateData(FALSE);
-}
-
-void CIvyProbeDlg::OnMessage(IvyApplication *app, int argc, const char **argv)
-{
- int i;
- CString text;
- TRACE(TEXT(" Called function args:"));
- WriteMessage( "Ivy callback %d args",argc );
- for ( i = 0; i < argc; i++ )
- {
- WriteMessage(" arg%d='%s'",i, argv[i] );
- TRACE(TEXT(" '%s'"),argv[i]);
- }
- TRACE(TEXT("\n"));
-
-}
-
-
-
-void CIvyProbeDlg::OnDirectMessage(IvyApplication *app, int id, const char *arg)
-{
-TRACE(TEXT("Direct Msg Receive %d, %s\n"),id,arg );
-}
-
-void CIvyProbeDlg::OnApplicationConnected(IvyApplication *app)
-{
- WriteMessage( "Application: %s ready",(LPCSTR)(app->GetName()) );
-}
-void CIvyProbeDlg::OnApplicationDisconnected(IvyApplication *app)
-{
- WriteMessage( "Application: %s bye",(LPCSTR)(app->GetName()) );
-}
-
-void CIvyProbeDlg::OnAddBind (IvyApplication *app, int id, const char * regexp)
-{
- WriteMessage( "Application: %s Add Binding %s",(LPCSTR)(app->GetName()), regexp );
-}
-void CIvyProbeDlg::OnRemoveBind (IvyApplication *app, int id, const char * regexp)
-{
- WriteMessage( "Application: %s Remove Binding %s",(LPCSTR)(app->GetName()), regexp );
-}
-void CIvyProbeDlg::OnFilterBind (IvyApplication *app, int id, const char * regexp)
-{
- WriteMessage( "Application: %s Filtered Binding %s",(LPCSTR)(app->GetName()), regexp );
-}
-
-void CIvyProbeDlg::WriteMessage(const char *format, ...)
-{
- char str[4096];
- // format and write the data we were given
- va_list args;
- va_start(args, format);
- _vsnprintf_s(str, sizeof(str), sizeof(str)-1, format, args);
-
- m_text.AppendString( str );
-}
-
-
-void CIvyProbeDlg::OnClose()
-{
- // TODO: Add your message handler code here and/or call default
- TRACE ( TEXT("IvyProbe Quitting\n"));
- if (bus)
- {
- bus->stop();
- delete bus;
- }
-
- MyDialog::OnClose();
-}
-
-
-void CIvyProbeDlg::OnSend()
-{
- CString buffer;
- m_msg.SetEditSel( 0, -1 );
- m_msg.GetWindowText( buffer );
- if ( buffer.IsEmpty() ) return;
- int count = bus->SendMsg( CONVSTR(buffer) );
- if ( m_msg.FindStringExact(-1, buffer) == CB_ERR )
- {
- //m_msg.AddString( buffer );
- m_msg.InsertString( 0, buffer );
- }
- WriteMessage( "Sending %d message %s",count,CONVSTR(buffer) );
- m_msg.Clear();
-}
-
-void CIvyProbeDlg::OnBind()
-{
- CString buffer;
- m_expr.SetEditSel( 0, -1 );
- m_expr.GetWindowText( buffer );
- if ( buffer.IsEmpty() ) return;
- int count = bus->BindMsg( CONVSTR(buffer) , this );
- if ( m_expr.FindStringExact(-1, buffer) == CB_ERR )
- {
- m_expr.AddString( buffer );
- }
- WriteMessage( "Binding to %s", CONVSTR(buffer) );
- m_expr.Clear();
-}
-
-
-void CIvyProbeDlg::OnLoad()
-{
-#ifndef UNDER_CE
- // TODO ReadString doesn't existe
- CString message;
-
- CFileDialog dialog( TRUE, TEXT("ivm"), NULL, OFN_HIDEREADONLY | OFN_OVERWRITEPROMPT, szFilterMsg);
- if ( dialog.DoModal() == IDOK )
- {
- CStdioFile file( dialog.GetPathName(), CFile::modeRead | CFile::typeText );
- m_msg.ResetContent();
- while ( file.ReadString( message ))
- {
- m_msg.AddString( message );
- }
- file.Close();
- }
-#endif
-}
-
-void CIvyProbeDlg::OnSave()
-{
-#ifndef UNDER_CE
- // TODO WriteString doesn't existe
- CString message;
-
- CFileDialog dialog( FALSE, TEXT("ivm") , NULL, OFN_HIDEREADONLY | OFN_OVERWRITEPROMPT, szFilterMsg);
- if ( dialog.DoModal() == IDOK )
- {
- CStdioFile file( dialog.GetPathName(), CFile::modeCreate | CFile::modeWrite | CFile::typeText );
- for (int i=0;i < m_msg.GetCount();i++)
- {
- m_msg.GetLBText( i, message );
- file.WriteString(message + TEXT("\n"));
- }
- file.Close();
-
- }
-#endif
-}
-
-void CIvyProbeDlg::OnFileLoadbindings()
-{
-#ifndef UNDER_CE
- // TODO ReadString doesn't existe
- CString message;
-
- CFileDialog dialog( TRUE, TEXT("ivb"), NULL, OFN_HIDEREADONLY | OFN_OVERWRITEPROMPT, szFilterBind);
- if ( dialog.DoModal() == IDOK )
- {
- CStdioFile file( dialog.GetPathName(), CFile::modeRead | CFile::typeText );
- m_expr.ResetContent();
- while ( file.ReadString( message ))
- {
- m_expr.AddString( message );
- bus->BindMsg( CONVSTR(message) , this );
- }
- file.Close();
- }
-#endif
-}
-
-void CIvyProbeDlg::OnFileSavebindings()
-{
-#ifndef UNDER_CE
- // TODO WriteString doesn't existe
- CString message;
-
- CFileDialog dialog( FALSE, TEXT("ivb") , NULL, OFN_HIDEREADONLY | OFN_OVERWRITEPROMPT, szFilterBind);
- if ( dialog.DoModal() == IDOK )
- {
- CStdioFile file( dialog.GetPathName(), CFile::modeCreate | CFile::modeWrite | CFile::typeText );
- for (int i=0;i < m_expr.GetCount();i++)
- {
- m_expr.GetLBText( i, message );
- file.WriteString(message + TEXT("\n"));
- }
- file.Close();
-
- }
-#endif
-}
diff --git a/Bus/IvyProbe/IvyProbeDlg.h b/Bus/IvyProbe/IvyProbeDlg.h
deleted file mode 100644
index eee40ef..0000000
--- a/Bus/IvyProbe/IvyProbeDlg.h
+++ /dev/null
@@ -1,110 +0,0 @@
-// TestDlg.h : header file
-//
-
-#if !defined(AFX_TESTDLG_H__F7F08FF0_E653_11D0_AE3E_080009F92591__INCLUDED_)
-#define AFX_TESTDLG_H__F7F08FF0_E653_11D0_AE3E_080009F92591__INCLUDED_
-
-#if _MSC_VER >= 1000
-#pragma once
-#endif // _MSC_VER >= 1000
-
-#include "Ivy.h"
-#ifdef USE_ETS
-#include "ETSLayout.h"
-#define MyDialog ETSLayoutDialog
-#else
-#define MyDialog CDialog
-#endif
-#include "HistoryEdit.h"
-/////////////////////////////////////////////////////////////////////////////
-// CAboutDlg dialog used for App About
-
-class CAboutDlg : public CDialog
-{
-public:
- CAboutDlg();
-
-// Dialog Data
- //{{AFX_DATA(CAboutDlg)
- enum { IDD = IDD_ABOUTBOX };
- //}}AFX_DATA
-
- // ClassWizard generated virtual function overrides
- //{{AFX_VIRTUAL(CAboutDlg)
- protected:
- virtual void DoDataExchange(CDataExchange* pDX); // DDX/DDV support
- //}}AFX_VIRTUAL
-
-// Implementation
-protected:
- //{{AFX_MSG(CAboutDlg)
- //}}AFX_MSG
- DECLARE_MESSAGE_MAP()
-};
-
-/////////////////////////////////////////////////////////////////////////////
-// CTestDlg dialog
-
-class CIvyProbeDlg : public MyDialog, public IvyApplicationCallback, public IvyBindingCallback, public IvyMessageCallback
-{
-// Construction
-public:
-
- CIvyProbeDlg(CWnd* pParent = NULL); // standard constructor
-#ifdef USE_ETS
- DECLARE_LAYOUT();
-#endif
- CHistoryEdit m_text;
-// Dialog Data
- //{{AFX_DATA(CTestDlg)
- enum { IDD = IDD_TEST_DIALOG };
- CComboBox m_expr;
- CComboBox m_msg;
- CString m_busnumber;
- //}}AFX_DATA
-
- // ClassWizard generated virtual function overrides
- //{{AFX_VIRTUAL(CTestDlg)
- protected:
- virtual void DoDataExchange(CDataExchange* pDX); // DDX/DDV support
- //}}AFX_VIRTUAL
-
-// Implementation
-protected:
- void WriteMessage(const char * format, ...);
- void OnApplicationConnected( IvyApplication *app );
- void OnApplicationDisconnected( IvyApplication *app );
- void OnDirectMessage( IvyApplication *app, int id, const char *arg );
- void OnAddBind (IvyApplication *app, int id, const char * regexp);
- void OnRemoveBind (IvyApplication *app, int id, const char * regexp);
- void OnFilterBind (IvyApplication *app, int id, const char * regexp);
-
- void FaderCallback ( IvyApplication *app, int argc, const char **argv );
- void OnMessage ( IvyApplication *app, int argc, const char **argv );
- Ivy *bus;
- HICON m_hIcon;
-
- // Generated message map functions
- //{{AFX_MSG(CTestDlg)
- virtual BOOL OnInitDialog();
- afx_msg HCURSOR OnQueryDragIcon();
- afx_msg void OnStart();
- afx_msg void OnVScroll(UINT nSBCode, UINT nPos, CScrollBar* pScrollBar);
- afx_msg void OnClose();
- afx_msg void OnSend();
- afx_msg void OnBind();
- afx_msg void OnLoad();
- afx_msg void OnSave();
- //}}AFX_MSG
- DECLARE_MESSAGE_MAP()
-
-public:
- afx_msg void OnFileSavebindings();
-public:
- afx_msg void OnFileLoadbindings();
-};
-
-//{{AFX_INSERT_LOCATION}}
-// Microsoft Developer Studio will insert additional declarations immediately before the previous line.
-
-#endif // !defined(AFX_TESTDLG_H__F7F08FF0_E653_11D0_AE3E_080009F92591__INCLUDED_)
diff --git a/Bus/IvyProbe/ReadMe.txt b/Bus/IvyProbe/ReadMe.txt
deleted file mode 100644
index 333432d..0000000
--- a/Bus/IvyProbe/ReadMe.txt
+++ /dev/null
@@ -1,81 +0,0 @@
-========================================================================
- MICROSOFT FOUNDATION CLASS LIBRARY : Test
-========================================================================
-
-
-AppWizard has created this Test application for you. This application
-not only demonstrates the basics of using the Microsoft Foundation classes
-but is also a starting point for writing your application.
-
-This file contains a summary of what you will find in each of the files that
-make up your Test application.
-
-Test.h
- This is the main header file for the application. It includes other
- project specific headers (including Resource.h) and declares the
- CTestApp application class.
-
-Test.cpp
- This is the main application source file that contains the application
- class CTestApp.
-
-Test.rc
- This is a listing of all of the Microsoft Windows resources that the
- program uses. It includes the icons, bitmaps, and cursors that are stored
- in the RES subdirectory. This file can be directly edited in Microsoft
- Developer Studio.
-
-res\Test.ico
- This is an icon file, which is used as the application's icon. This
- icon is included by the main resource file Test.rc.
-
-res\Test.rc2
- This file contains resources that are not edited by Microsoft
- Developer Studio. You should place all resources not
- editable by the resource editor in this file.
-
-Test.clw
- This file contains information used by ClassWizard to edit existing
- classes or add new classes. ClassWizard also uses this file to store
- information needed to create and edit message maps and dialog data
- maps and to create prototype member functions.
-
-
-/////////////////////////////////////////////////////////////////////////////
-
-AppWizard creates one dialog class:
-
-TestDlg.h, TestDlg.cpp - the dialog
- These files contain your CTestDlg class. This class defines
- the behavior of your application's main dialog. The dialog's
- template is in Test.rc, which can be edited in Microsoft
- Developer Studio.
-
-
-/////////////////////////////////////////////////////////////////////////////
-Other standard files:
-
-StdAfx.h, StdAfx.cpp
- These files are used to build a precompiled header (PCH) file
- named Test.pch and a precompiled types file named StdAfx.obj.
-
-Resource.h
- This is the standard header file, which defines new resource IDs.
- Microsoft Developer Studio reads and updates this file.
-
-/////////////////////////////////////////////////////////////////////////////
-Other notes:
-
-AppWizard uses "TODO:" to indicate parts of the source code you
-should add to or customize.
-
-If your application uses MFC in a shared DLL, and your application is
-in a language other than the operating system's current language, you
-will need to copy the corresponding localized resources MFC40XXX.DLL
-from the Microsoft Visual C++ CD-ROM onto the system or system32 directory,
-and rename it to be MFCLOC.DLL. ("XXX" stands for the language abbreviation.
-For example, MFC40DEU.DLL contains resources translated to German.) If you
-don't do this, some of the UI elements of your application will remain in the
-language of the operating system.
-
-/////////////////////////////////////////////////////////////////////////////