1. Project description
The Continuous Measurement and Logging (CML) Delacor Queued Message Handler (DQMH) sample project is a variation of the NI QMH based CML project using DQMH(R) modules instead of separate Message Handle Loops.
2. DQMH® modules
This section describes DQMH® module responsibilities and relationships.
2.1. Preamble
A DQMH module is the main component of an architecture based on DQMH® framework. A DQMH module is used to implement a section of the application that has one responsibility.
DQMH® framework defines two different type of DQMH module.
Singleton:
A Singleton DQMH module can have only one instance running at any given time.
Cloneable:
A Cloneable DQMH module can have one or multiple instances running in parallel.
DQMH® framework defines two different ways to carry data throughout the application and with both other DQMH modules and non-DQMH based code.
Request events:
A request is a code that fires an event requesting the DQMH module to do something. Multiple locations in the code can send events to the DQMH module.
Request events are many-to-one.
Requests are usually named using imperative tense.
Broadcast events:
A broadcast is a code that fires an event broadcasting that the DQMH module did something. Multiple Event Structures can register to handle the Broadcast Events.
Broadcast Events are one-to-many.
Broadcasts are usually named using past tense or passive voice.
Note
|
Refer to the DQMH® framework official documentation to find more details on how the framework works |
The following section gives you details on the project architecture relying on this framework. It gives you an overview of the modules' interaction and detailed information on each module.
Graphs used in this section have the following legend:
Components:

Events:

Note
|
One arrow can represent one or more events between two components |
Note
|
Request and Request and wait for Reply are represented by only one arrow. If there is no Request and wait for Reply, Request representation is used. Otherwise Request and wait for Reply is used |
Start and Stop module callers:


2.2. Modules overview
This project contains 4 singleton modules and 0 cloneable module.
Singleton | Cloneable |
---|---|
This graph represents the links between all DQMH modules.

2.3. CML UI.lvlib
Type: Singleton
Responsibility: This module is the user interface of the Continuous Measurement and Logging application.
2.3.1. Event list
Name | Type | Connector pane | Description | S. | R. | I. |
---|---|---|---|---|---|---|
Start Module |
Launches the Module Main.vi. |
|||||
Stop Module |
Send the Stop request to the Module's Main.vi. If Wait for Module to Stop? is TRUE, this VI will wait until the module main VI stops, and will timeout at the Timeout to Wait for Stop value. This value defaults to "-1", which means the VI will not timeout, and will always wait until the module main VI stops before completing execution. Note: The Timeout to Wait for Stop value is ignored if 'Wait for Module to Stop?' is set to FALSE. |
|||||
Show Panel |
Send the Show Panel request to the Module's Main.vi. |
|||||
Hide Panel |
Send the Hide Panel request to the Module's Main.vi. |
|||||
Get Module Execution Status |
Fire the Get Module Execution Status request. |
|||||
Show Diagram |
This VI tells the Module to show its block diagram to facilitate troubleshooting (add probes, breakpoints, highlight execution, etc). |
|||||
Module Did Init |
Send the Module Did Init event to any VI registered to listen to this module's broadcast events. |
|||||
Status Updated |
Send the Status Updated event to any VI registered to listen to events from the owning module. |
|||||
Error Reported |
Send the Error Reported event to any VI registered to listen to events from the owning module. |
|||||
Module Did Stop |
Send the Module Did Stop event to any VI registered to listen to this module's broadcast events. |
|||||
Update Module Execution Status |
Broadcast event to specify whether or not the module is running. |
Type: → Request |
→ Request and Wait for Reply |
→ Broadcast
Scope: → Protected |
→ Community
Reentrancy: → Preallocated reentrancy |
→ Shared reentrancy
Inlining: → Inlined
2.3.2. Module relationship

Request Name | Callers |
---|---|
Get Module Execution Status |
CML UI.lvlib:Obtain Broadcast Events for Registration.vi |
Hide Panel |
Test CML UI API.vi |
Show Diagram |
Test CML UI API.vi |
Show Panel |
CML Main.vi |
Broadcast Name | Listeners |
---|---|
Error Reported |
Test CML UI API.vi |
Module Did Init |
Test CML UI API.vi |
Module Did Stop |
Test CML UI API.vi |
Status Updated |
Test CML UI API.vi |
Update Module Execution Status |
Test CML UI API.vi |
Module | Requests |
---|---|
Acquisition.lvlib |
Calibrate DAQ.vi |
CML UI.lvlib |
Stop Module.vi |
Logger.lvlib |
Get Module Execution Status.vi |
Settings Editor.lvlib |
Get Module Execution Status.vi |
Module | Broadcasts |
---|---|
Acquisition.lvlib |
Acquisition Started.vi |
Logger.lvlib |
Error Reported.vi |
Settings Editor.lvlib |
Error Reported.vi |
2.3.3. Module Start/Stop calls

Function | Callers |
---|---|
Start Module |
CML Main.vi |
Stop Module |
CML UI.lvlib:Handle Exit.vi |
2.3.4. Module custom errors
Tip
|
Custom errors are added to the module via vi named *--error.vi .
|
Module CML UI.lvlib use the following custom errors:
Name | Code | Description |
---|---|---|
Module Not Running |
403681 |
%s Module is not running. |
Module Not Stopped |
403682 |
The Stop Module VI for the %s module timed out while waiting for the module main VI to stop. The module main VI may still be running. |
Module Not Synced |
403683 |
%s Module was unable to synchronize events. |
2.4. Acquisition.lvlib
Type: Singleton
Responsibility: This module handle the continuous data acquisition.
2.4.1. Event list
Name | Type | Connector pane | Description | S. | R. | I. |
---|---|---|---|---|---|---|
Start Module |
Launches the Module Main.vi. |
|||||
Stop Module |
Send the Stop request to the Module's Main.vi. If Wait for Module to Stop? is TRUE, this VI will wait until the module main VI stops, and will timeout at the Timeout to Wait for Stop value. This value defaults to "-1", which means the VI will not timeout, and will always wait until the module main VI stops before completing execution. Note: The Timeout to Wait for Stop value is ignored if 'Wait for Module to Stop?' is set to FALSE. |
|||||
Show Panel |
Send the Show Panel request to the Module's Main.vi. |
|||||
Hide Panel |
Send the Hide Panel request to the Module's Main.vi. |
|||||
Get Module Execution Status |
Fire the Get Module Execution Status request. |
|||||
Show Diagram |
This VI tells the Module to show its block diagram to facilitate troubleshooting (add probes, breakpoints, highlight execution, etc). |
|||||
Stop Acquiring |
Requests the Acquisition Module to stop acquiring |
|||||
Calibrate DAQ |
Add calibration routine, and linear slope and offset to the acquisition helper loop. |
|||||
Start Acquiring |
Note: This VI was renamed by the DQMH Rename Event utility. Make sure the VI Description is updated to reflect the new event name, then delete this comment. Requests Acquisition Module to start acquiring. |
|||||
Module Did Init |
Send the Module Did Init event to any VI registered to listen to this module's broadcast events. |
|||||
Status Updated |
Send the Status Updated event to any VI registered to listen to events from the owning module. |
|||||
Error Reported |
Send the Error Reported event to any VI registered to listen to events from the owning module. |
|||||
Module Did Stop |
Send the Module Did Stop event to any VI registered to listen to this module's broadcast events. |
|||||
Update Module Execution Status |
Broadcast event to specify whether or not the module is running. |
|||||
Acquisition Started |
Broadcasts that the Acquisition Module started acquiring |
|||||
Acquisition Stopped |
Broadcasts that the Acquisition Module has stopped acquiring data. |
|||||
Data Updated |
Broadcasts the latest data acquired |
|||||
Device Calibrated |
Broadcasts that the Acquisition module calibrated the device. |
|||||
Wakeup Helper Loop |
This is a private request to wake up the Helper Loop and start acquiring. |
|||||
Change Settings |
Fire an event to change the hardware settings in the helper loop. This is a private request event that should only be fired from within the Acquisition Module. If this request was public, other modules could call it and the Settings Editor would not get the notification that the values changed. |
Type: → Request |
→ Request and Wait for Reply |
→ Broadcast
Scope: → Protected |
→ Community
Reentrancy: → Preallocated reentrancy |
→ Shared reentrancy
Inlining: → Inlined
2.4.2. Module relationship

Request Name | Callers |
---|---|
Calibrate DAQ |
CML UI.lvlib:Main.vi |
Change Settings |
Acquisition.lvlib:Main.vi |
Get Module Execution Status |
Acquisition.lvlib:Obtain Broadcast Events for Registration.vi |
Hide Panel |
Test Acquisition API.vi |
Show Diagram |
Test Acquisition API.vi |
Show Panel |
Test Acquisition API.vi |
Start Acquiring |
CML UI.lvlib:Main.vi |
Stop Acquiring |
CML UI.lvlib:Main.vi |
Wakeup Helper Loop |
Acquisition.lvlib:Main.vi |
Broadcast Name | Listeners |
---|---|
Acquisition Started |
CML UI.lvlib:Main.vi |
Acquisition Stopped |
CML UI.lvlib:Main.vi |
Data Updated |
CML UI.lvlib:Main.vi |
Device Calibrated |
CML UI.lvlib:Main.vi |
Error Reported |
CML UI.lvlib:Main.vi |
Module Did Init |
CML UI.lvlib:Main.vi |
Module Did Stop |
Test Acquisition API.vi |
Status Updated |
CML UI.lvlib:Main.vi |
Update Module Execution Status |
CML UI.lvlib:Main.vi |
Module | Requests |
---|---|
Acquisition.lvlib |
Change Settings.vi |
Logger.lvlib |
Log Data.vi |
Settings Editor.lvlib |
Get Module Execution Status.vi |
Module | Broadcasts |
---|---|
Settings Editor.lvlib |
Application Settings Updated.vi |
2.4.3. Module Start/Stop calls

Function | Callers |
---|---|
Start Module |
CML UI.lvlib:Main.vi |
Stop Module |
CML UI.lvlib:Main.vi |
2.4.4. Module custom errors
Tip
|
Custom errors are added to the module via vi named *--error.vi .
|
Module Acquisition.lvlib use the following custom errors:
Name | Code | Description |
---|---|---|
Module Not Running |
403681 |
%s Module is not running. |
Module Not Stopped |
403682 |
The Stop Module VI for the %s module timed out while waiting for the module main VI to stop. The module main VI may still be running. |
Module Not Synced |
403683 |
%s Module was unable to synchronize events. |
2.5. Logger.lvlib
Type: Singleton
Responsibility: This module handle data logging in file.
2.5.1. Event list
Name | Type | Connector pane | Description | S. | R. | I. |
---|---|---|---|---|---|---|
Start Module |
Launches the Module Main.vi. |
|||||
Stop Module |
Send the Stop request to the Module's Main.vi. If Wait for Module to Stop? is TRUE, this VI will wait until the module main VI stops, and will timeout at the Timeout to Wait for Stop value. This value defaults to "-1", which means the VI will not timeout, and will always wait until the module main VI stops before completing execution. Note: The Timeout to Wait for Stop value is ignored if 'Wait for Module to Stop?' is set to FALSE. |
|||||
Show Panel |
Send the Show Panel request to the Module's Main.vi. |
|||||
Hide Panel |
Send the Hide Panel request to the Module's Main.vi. |
|||||
Get Module Execution Status |
Fire the Get Module Execution Status request. |
|||||
Show Diagram |
This VI tells the Module to show its block diagram to facilitate troubleshooting (add probes, breakpoints, highlight execution, etc). |
|||||
Initialize File |
Request the Logger to initialize the file and report when the Logger has initialized the file. |
|||||
Log Data |
Note: This VI was renamed by the DQMH Rename Event utility. Make sure the VI Description is updated to reflect the new event name, then delete this comment. Requests Logger module to log data to file |
|||||
Stop Logging |
Requests Logger module to stop logging and the module broadcasts when the logging has stopped. |
|||||
Module Did Init |
Send the Module Did Init event to any VI registered to listen to this module's broadcast events. |
|||||
Status Updated |
Send the Status Updated event to any VI registered to listen to events from the owning module. |
|||||
Error Reported |
Send the Error Reported event to any VI registered to listen to events from the owning module. |
|||||
Module Did Stop |
Send the Module Did Stop event to any VI registered to listen to this module's broadcast events. |
|||||
Update Module Execution Status |
Broadcast event to specify whether or not the module is running. |
|||||
Logging Stopped |
Requests Logger module to stop logging and the module broadcasts when the logging has stopped. |
|||||
File Initialized |
Request the Logger to initialize the file and report when the Logger has initialized the file. |
Type: → Request |
→ Request and Wait for Reply |
→ Broadcast
Scope: → Protected |
→ Community
Reentrancy: → Preallocated reentrancy |
→ Shared reentrancy
Inlining: → Inlined
2.5.2. Module relationship

Request Name | Callers |
---|---|
Get Module Execution Status |
Logger.lvlib:Obtain Broadcast Events for Registration.vi |
Hide Panel |
Test Logger API.vi |
Initialize File |
CML UI.lvlib:Main.vi |
Log Data |
Acquisition.lvlib:Main.vi |
Show Diagram |
Test Logger API.vi |
Show Panel |
Test Logger API.vi |
Stop Logging |
CML UI.lvlib:Main.vi |
Broadcast Name | Listeners |
---|---|
Error Reported |
CML UI.lvlib:Main.vi |
File Initialized |
Test Logger API.vi |
Logging Stopped |
Test Logger API.vi |
Module Did Init |
CML UI.lvlib:Main.vi |
Module Did Stop |
Test Logger API.vi |
Status Updated |
CML UI.lvlib:Main.vi |
Update Module Execution Status |
CML UI.lvlib:Main.vi |
Module | Requests |
---|---|
Logger.lvlib |
Stop Module.vi |
Settings Editor.lvlib |
Get Module Execution Status.vi |
Module | Broadcasts |
---|---|
Settings Editor.lvlib |
Application Settings Updated.vi |
2.5.3. Module Start/Stop calls

Function | Callers |
---|---|
Start Module |
CML UI.lvlib:Main.vi |
Stop Module |
CML UI.lvlib:Main.vi |
2.5.4. Module custom errors
Tip
|
Custom errors are added to the module via vi named *--error.vi .
|
Module Logger.lvlib use the following custom errors:
Name | Code | Description |
---|---|---|
Module Not Running |
403681 |
%s Module is not running. |
Module Not Stopped |
403682 |
The Stop Module VI for the %s module timed out while waiting for the module main VI to stop. The module main VI may still be running. |
Module Not Synced |
403683 |
%s Module was unable to synchronize events. |
2.6. Settings Editor.lvlib
Type: Singleton
Responsibility: This module is an ui that allow user to change application settings.
2.6.1. Event list
Name | Type | Connector pane | Description | S. | R. | I. |
---|---|---|---|---|---|---|
Start Module |
Launches the Module Main.vi. |
|||||
Stop Module |
Send the Stop request to the Module's Main.vi. If Wait for Module to Stop? is TRUE, this VI will wait until the module main VI stops, and will timeout at the Timeout to Wait for Stop value. This value defaults to "-1", which means the VI will not timeout, and will always wait until the module main VI stops before completing execution. Note: The Timeout to Wait for Stop value is ignored if 'Wait for Module to Stop?' is set to FALSE. |
|||||
Show Panel |
Send the Show Panel request to the Module's Main.vi. |
|||||
Hide Panel |
Send the Hide Panel request to the Module's Main.vi. |
|||||
Get Module Execution Status |
Fire the Get Module Execution Status request. |
|||||
Show Diagram |
This VI tells the Module to show its block diagram to facilitate troubleshooting (add probes, breakpoints, highlight execution, etc). |
|||||
Update Application Settings |
Request Settings Editor to return the latest settings. The Settings Editor can send the applications settings as a reply or via broadcast. |
|||||
Module Did Init |
Send the Module Did Init event to any VI registered to listen to this module's broadcast events. |
|||||
Status Updated |
Send the Status Updated event to any VI registered to listen to events from the owning module. |
|||||
Error Reported |
Send the Error Reported event to any VI registered to listen to events from the owning module. |
|||||
Module Did Stop |
Send the Module Did Stop event to any VI registered to listen to this module's broadcast events. |
|||||
Update Module Execution Status |
Broadcast event to specify whether or not the module is running. |
|||||
Application Settings Updated |
Request Settings Editor to return the latest settings. The Settings Editor can send the applications settings as a reply or via broadcast. |
Type: → Request |
→ Request and Wait for Reply |
→ Broadcast
Scope: → Protected |
→ Community
Reentrancy: → Preallocated reentrancy |
→ Shared reentrancy
Inlining: → Inlined
2.6.2. Module relationship

Request Name | Callers |
---|---|
Get Module Execution Status |
Settings Editor.lvlib:Obtain Broadcast Events for Registration.vi |
Hide Panel |
Test Settings Editor API.vi |
Show Diagram |
Test Settings Editor API.vi |
Show Panel |
CML UI.lvlib:Main.vi |
Update Application Settings |
Acquisition.lvlib:Main.vi |
Broadcast Name | Listeners |
---|---|
Application Settings Updated |
Acquisition.lvlib:Main.vi |
Error Reported |
CML UI.lvlib:Main.vi |
Module Did Init |
CML UI.lvlib:Main.vi |
Module Did Stop |
Test Settings Editor API.vi |
Status Updated |
CML UI.lvlib:Main.vi |
Update Module Execution Status |
CML UI.lvlib:Main.vi |
Module | Requests |
---|---|
Settings Editor.lvlib |
Stop Module.vi |
Module | Broadcasts |
---|---|
— |
— |
2.6.3. Module Start/Stop calls

Function | Callers |
---|---|
Start Module |
CML UI.lvlib:Main.vi |
Stop Module |
CML UI.lvlib:Main.vi |
2.6.4. Module custom errors
Tip
|
Custom errors are added to the module via vi named *--error.vi .
|
Module Settings Editor.lvlib use the following custom errors:
Name | Code | Description |
---|---|---|
Module Not Running |
403681 |
%s Module is not running. |
Module Not Stopped |
403682 |
The Stop Module VI for the %s module timed out while waiting for the module main VI to stop. The module main VI may still be running. |
Module Not Synced |
403683 |
%s Module was unable to synchronize events. |
3. Libraries
This section describes the libraries contained in the project.
3.1. CML Shared.lvlib
Responsibility: This library gathers all the resource shared among the different part of the code.
Version: 1.0.0.0
This library has no functions set to non private scope.
3.2. Launcher Support.lvlib
Responsibility: This library gathers functions used to build and laucnh the application.
Version: 1.0.0.0
Name | Connector pane | Description | S. | R. | I. |
---|---|---|---|---|---|
Determine if Running in Debug Mode |
The launcher VI is meant to be run as a headless launcher for the module main VI. The launcher VI can be used as a debugging tool. This VI determines if the launcher VI is running as a debugger by parsing the command line arguments or checking if the VI is running in development mode and sets the Launcher VI properties accordingly. |
||||
Pre-Build Action |
This Pre-Build Action VI sets the Debug mode to false to ensure the top level VI has the headless properties at build time. |
||||
Set VI Properties for Debugging Mode |
This VI sets the properties of the VI Launcher to either headless or debugging mode. |
Scope: → Protected |
→ Community
Reentrancy: → Preallocated reentrancy |
→ Shared reentrancy
Inlining: → Inlined
4. Custom errors
Tip
|
Custom errors are added via vi named *--error.vi .
|
Name | Code | Description | Owned by |
---|---|---|---|
Module Not Running |
403681 |
%s Module is not running. |
CML UI.lvlib |
Module Not Stopped |
403682 |
The Stop Module VI for the %s module timed out while waiting for the module main VI to stop. The module main VI may still be running. |
CML UI.lvlib |
Module Not Synced |
403683 |
%s Module was unable to synchronize events. |
CML UI.lvlib |
5. Legal Information
5.1. Document creation
This document has been generated using the following tools.
5.1.1. Antidoc
Project website: Antidoc
Maintainer website: Wovalab
BSD 3-Clause License
Copyright © 2019, Wovalab, All rights reserved.
Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are met:
-
Redistributions of source code must retain the above copyright notice, this list of conditions and the following disclaimer.
-
Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the following disclaimer in the documentation and/or other materials provided with the distribution.
-
Neither the name of the copyright holder nor the names of its contributors may be used to endorse or promote products derived from this software without specific prior written permission.
THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
5.1.2. Asciidoc for LabVIEW™
Project website: Asciidoc toolkit
Maintainer website: Wovalab
BSD 3-Clause License
Copyright © 2019, Wovalab, All rights reserved.
Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are met:
-
Redistributions of source code must retain the above copyright notice, this list of conditions and the following disclaimer.
-
Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the following disclaimer in the documentation and/or other materials provided with the distribution.
-
Neither the name of the copyright holder nor the names of its contributors may be used to endorse or promote products derived from this software without specific prior written permission.
THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
5.1.3. Graph Builder
Project website: Graph Builder
BSD 3-Clause License
Copyright © 2020, Cyril GAMBINI All rights reserved.
Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are met:
-
Redistributions of source code must retain the above copyright notice, this list of conditions and the following disclaimer.
-
Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the following disclaimer in the documentation and/or other materials provided with the distribution.
-
Neither the name of the copyright holder nor the names of its contributors may be used to endorse or promote products derived from this software without specific prior written permission.
THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
5.1.4. classy Diagram Viewer
Project website: classy Diagram Viewer
BSD 3-Clause License
Copyright © 2021, Tatiana Boyé All rights reserved.
Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are met:
-
Redistributions of source code must retain the above copyright notice, this list of conditions and the following disclaimer.
-
Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the following disclaimer in the documentation and/or other materials provided with the distribution.
-
Neither the name of the copyright holder nor the names of its contributors may be used to endorse or promote products derived from this software without specific prior written permission.
THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
5.2. Product used in the project
The documented project has been developed with the following products.
5.2.1. DQMH®
Copyright © 2021 DQMH® Consortium, LLC. All Rights Reserved.
Find more details on DQMH® Consortium website