diff --git a/.github/workflows/docker.yml b/.github/workflows/docker.yml
index bfb20809..9b5d4e93 100644
--- a/.github/workflows/docker.yml
+++ b/.github/workflows/docker.yml
@@ -10,7 +10,7 @@ jobs:
container: docker://nasatrick/${{matrix.container}}:latest
strategy:
matrix:
- container: [trick_centos7, trick_centos8, trick_ubuntu1804]
+ container: [trick_ubuntu1804]
steps:
- name: run tests
run: |
diff --git a/.github/workflows/python_tests_32.yml b/.github/workflows/python_tests_32.yml
deleted file mode 100644
index 74754de0..00000000
--- a/.github/workflows/python_tests_32.yml
+++ /dev/null
@@ -1,86 +0,0 @@
-name: Python Tests 32-bit
-
-on:
- push:
- # Temporarily disable all tests for Issue #1188.
- branches-ignore:
- - '**'
- paths-ignore:
- - 'docs/**'
- - '.github/workflows/**'
- - '!.github/workflows/python_tests_32.yml'
- pull_request:
- # Temporarily disable all tests for Issue #1188.
- branches-ignore:
- - '**'
-
-jobs:
- trick_32bit:
- runs-on: ubuntu-18.04
- container: docker://centos:7
- steps:
- - name: Checkout repository
- uses: actions/checkout@master
- - name: Add yum repo
- run: yum -y install epel-release.noarch && yum -y update
- - name: Install python dependencies
- run: yum install -y python3-venv python3 python3-pip python3-devel gcc
- - name: Info
- run: |
- python3 --version
- - name: Build Python environment
- run: |
- cd share/trick/pymods/trick
- python3 -m venv .venv && . .venv/bin/activate && pip3 install -r requirements.txt
- - name: Install dependency group
- run: yum -y groupinstall "Development tools" && yum -y update
- - name: Install other dependencies
- run: >
- yum remove -y swig && yum install -y llvm llvm-devel llvm-static clang clang-devel
- bison flex gcc gcc-c++ libxml2-devel make cmake wget
- ncurses-devel openmotif openmotif-devel python-devel perl
- perl-Digest-MD5 swig3 zlib-devel glibc.x86_64 libxml2-devel.i686
- ncurses-devel.i686 zlib-devel.i686 python-libs.i686
- expat-2.1.0-10.el7_3.i686 glibc-devel-2.17-196.el7.i686
- glibc.i686 glibc-devel.i686 udunits2 udunits2-devel gtest-devel.i686
- java-11-openjdk java-11-openjdk-devel expat-devel.i686
- which gcc-gfortran git wget gsl-devel gtest-devel gsl-devel.i686
- maven udunits2 udunits2-devel zip python3-tkinter xorg-x11-server-Xvfb
- - name: Symlink python
- run: |
- cd /usr/lib
- ln -s ./libpython2.7.so.1.0 libpython2.7.so
- - name: Install Udunits (32 bit)
- run: |
- cd /
- curl --retry 4 -O https://artifacts.unidata.ucar.edu/repository/downloads-udunits/udunits-2.2.28.tar.gz
- tar xfvz udunits-2.2.28.tar.gz
- rm -rf udunits-2.2.28.tar.gz
- cd udunits-2.2.28
- export CFLAGS="-m32"
- ./configure
- make
- make install
- - name: Install GTest (32 bit)
- run: |
- wget https://github.com/google/googletest/archive/release-1.8.0.tar.gz
- tar xfvz release-1.8.0.tar.gz
- cd googletest-release-1.8.0/googletest
- export CFLAGS="-m32"
- export CXXFLAGS="-m32"
- cmake .
- make
- make install
- - name: Build Trick
- run: |
- yum -y update && yum clean all
- export MAKEFLAGS=-j`nproc`
- ./configure --without-hdf5 --enable-32bit
- make
- - name: Run civet tests
- run: |
- cd share/trick/pymods/trick/
- . .venv/bin/activate
- ./run_tests.py
- env:
- TRICK_HOME: "${{ github.workspace }}"
diff --git a/.github/workflows/python_tests_linux.yml b/.github/workflows/python_tests_linux.yml
index 712a2b4c..63b47575 100644
--- a/.github/workflows/python_tests_linux.yml
+++ b/.github/workflows/python_tests_linux.yml
@@ -24,8 +24,6 @@ jobs:
- { os: ubuntu, tag: 18.04, arch: debian } # EOL April 2023
- { os: ubuntu, tag: 20.04, arch: debian } # EOL April 2025
- { os: debian, tag: 10, arch: debian } # EOL 2024
- - { os: centos, tag: 7, arch: rhel } # EOL June 2024
- - { os: centos, tag: latest, arch: rhel } # 8 as of April 2020
# - { os: fedora, tag: latest, arch: rhel } # 31 as of April 2020
# - { os: fedora, tag: 33, arch: rhel } # feeling confident?
# - { os: fedora, tag: rawhide, arch: rhel } # for thrill-seekers only
@@ -102,13 +100,6 @@ jobs:
- cfg: { os: debian }
os_deps: >-
openjdk-11-jdk
-#-------- CentOS Only Dependencies ----------------
- - cfg: { os: centos }
- pkg_mgr: yum
- conf_pkg: yum -y install epel-release && yum -y update
- os_deps: >-
- libX11-devel
- libXt-devel
#-------- Fedora Only Dependencies ----------------
# - cfg: { os: fedora }
# pkg_mgr: dnf
@@ -123,21 +114,6 @@ jobs:
install_gtest: cd /usr/src/gtest && cmake . && make && cp lib/libgtest* /usr/lib/
tag_deps: >-
python3.8-dev
- - cfg: { os: centos, tag: 7 }
- tag_deps: >-
- swig3
- python-devel
- - cfg: { os: centos, tag: latest }
- pkg_mgr: dnf
- conf_pkg: >
- sed -i -e "s|mirrorlist=|#mirrorlist=|g" -e "s|#baseurl=http://mirror.centos.org|baseurl=http://vault.centos.org|g" /etc/yum.repos.d/CentOS-Linux-* &&
- dnf -y install epel-release &&
- dnf -y update &&
- dnf install -y 'dnf-command(config-manager)' &&
- dnf config-manager --enable powertools
- tag_deps: >-
- swig
- python3-devel diffutils
#-------- Job definition ----------------
runs-on: ubuntu-18.04
container: docker://${{matrix.cfg.os}}:${{matrix.cfg.tag}}
diff --git a/.github/workflows/report_linux.yml b/.github/workflows/report_linux.yml
index 668be883..907dc2b4 100644
--- a/.github/workflows/report_linux.yml
+++ b/.github/workflows/report_linux.yml
@@ -13,7 +13,6 @@ jobs:
cfg:
#-------- Operating Systems ----------------
- { os: ubuntu, tag: 22.04, arch: debian, arch_ver: 12 }
- - { os: centos, tag: 7, arch: rhel, arch_ver: 7 }
- { os: rockylinux, tag: 8, arch: rhel, arch_ver: 8 }
- { os: oraclelinux, tag: 8, arch: rhel, arch_ver: 8 }
python: [3]
diff --git a/.github/workflows/report_linux_py2.yml b/.github/workflows/report_linux_py2.yml
index d324d7b8..952e4a2a 100644
--- a/.github/workflows/report_linux_py2.yml
+++ b/.github/workflows/report_linux_py2.yml
@@ -13,7 +13,6 @@ jobs:
cfg:
#-------- Operating Systems ----------------
- { os: ubuntu, tag: 22.04, arch: debian, arch_ver: 12 }
- - { os: centos, tag: 7, arch: rhel, arch_ver: 7 }
- { os: rockylinux, tag: 8, arch: rhel, arch_ver: 8 }
- { os: oraclelinux, tag: 8, arch: rhel, arch_ver: 8 }
python: [2]
diff --git a/.github/workflows/test_32.yml b/.github/workflows/test_32.yml
deleted file mode 100644
index d96b7cfb..00000000
--- a/.github/workflows/test_32.yml
+++ /dev/null
@@ -1,69 +0,0 @@
-name: 32-bit
-
-on:
- schedule:
- - cron: '0 0 * * 0'
- workflow_dispatch:
-
-jobs:
- trick_32bit:
- runs-on: ubuntu-latest
- container: docker://centos:7
- steps:
- - name: Add yum repo
- run: yum -y install epel-release.noarch && yum -y update
- - name: Install dependency group
- run: yum -y groupinstall "Development tools" && yum -y update
- - name: Install other dependencies
- run: >
- yum remove -y swig && yum install -y llvm llvm-devel llvm-static clang clang-devel
- bison flex gcc gcc-c++ libxml2-devel make cmake wget
- ncurses-devel openmotif openmotif-devel python-devel perl
- perl-Digest-MD5 swig3 zlib-devel glibc.x86_64 libxml2-devel.i686
- ncurses-devel.i686 zlib-devel.i686 python-libs.i686
- expat-2.1.0-10.el7_3.i686 glibc-devel-2.17-196.el7.i686
- glibc.i686 glibc-devel.i686 udunits2 udunits2-devel gtest-devel.i686
- java-11-openjdk java-11-openjdk-devel expat-devel.i686
- which gcc-gfortran git wget gsl-devel gtest-devel gsl-devel.i686
- maven udunits2 udunits2-devel zip libgcc*i686 libstdc++*i686 glibc*i686
- - name: Symlink python
- run: |
- cd /usr/lib
- ln -s ./libpython2.7.so.1.0 libpython2.7.so
- - name: Install Udunits (32 bit)
- run: |
- cd /
- curl --retry 4 -O https://artifacts.unidata.ucar.edu/repository/downloads-udunits/current/udunits-2.2.28.tar.gz
- tar xfvz udunits-2.2.28.tar.gz
- rm -rf udunits-2.2.28.tar.gz
- cd udunits-2.2.28
- export CFLAGS="-m32"
- ./configure
- make
- make install
- - name: Install GTest (32 bit)
- run: |
- wget https://github.com/google/googletest/archive/release-1.8.0.tar.gz
- tar xfvz release-1.8.0.tar.gz
- cd googletest-release-1.8.0/googletest
- export CFLAGS="-m32"
- export CXXFLAGS="-m32"
- cmake .
- make
- make install
- - name: Checkout repository
- uses: actions/checkout@v3
- - name: Build Trick
- run: |
- yum -y update && yum clean all
- export MAKEFLAGS=-j`nproc`
- ./configure --without-hdf5 --enable-32bit
- make
- - name: Run tests
- run: |
- cd share/trick/trickops/
- yum install -y python3-devel
- python3 -m venv .venv && . .venv/bin/activate && pip install --upgrade pip && pip3 install -r requirements.txt
- cd ../../../
- echo $MAKEFLAGS $CXXFLAGS $CFLAGS
- make test32
diff --git a/.github/workflows/test_linux.yml b/.github/workflows/test_linux.yml
index 135501b7..17e587a7 100644
--- a/.github/workflows/test_linux.yml
+++ b/.github/workflows/test_linux.yml
@@ -23,7 +23,6 @@ jobs:
cfg:
#-------- Operating Systems ----------------
- { os: ubuntu, tag: 22.04, arch: debian, arch_ver: 12 }
- - { os: centos, tag: 7, arch: rhel, arch_ver: 7 }
- { os: rockylinux, tag: 8, arch: rhel, arch_ver: 8 }
- { os: oraclelinux, tag: 8, arch: rhel, arch_ver: 8 }
python: [3]
@@ -95,30 +94,6 @@ jobs:
zlib-devel
python2-devel
python3-devel
-#-------- RHEL 7-based Only Dependencies ----------------
- - cfg: { arch: rhel, arch_ver: 7 }
- pkg_mgr: yum
- conf_pkg: |
- sed -i -e "s|mirrorlist=|#mirrorlist=|g" -e "s|#baseurl=http://mirror.centos.org|baseurl=http://vault.centos.org|g" /etc/yum.repos.d/CentOS-* &&
- yum -y install epel-release
- yum -y update
- yum -y install wget
- os_deps: >-
- libX11-devel
- libXt-devel
- swig3
- install_gtest: |
- cd /tmp
- wget https://github.com/google/googletest/archive/release-1.8.0.tar.gz
- tar xzvf release-1.8.0.tar.gz
- cd /tmp/googletest-release-1.8.0/googletest
- cmake .
- make
- make install
- cd /tmp/googletest-release-1.8.0/googlemock
- cmake .
- make
- make install
#-------- RHEL 8-based Only Dependencies ----------------
- cfg: { arch: rhel, arch_ver: 8 }
pkg_mgr: dnf
diff --git a/.github/workflows/test_linux_py2.yml b/.github/workflows/test_linux_py2.yml
index f14fc1c4..ce2ef9bb 100644
--- a/.github/workflows/test_linux_py2.yml
+++ b/.github/workflows/test_linux_py2.yml
@@ -13,7 +13,6 @@ jobs:
cfg:
#-------- Operating Systems ----------------
- { os: ubuntu, tag: 22.04, arch: debian, arch_ver: 12 }
- - { os: centos, tag: 7, arch: rhel, arch_ver: 7 }
- { os: rockylinux, tag: 8, arch: rhel, arch_ver: 8 }
- { os: oraclelinux, tag: 8, arch: rhel, arch_ver: 8 }
python: [2]
diff --git a/libexec/trick/convert_swig b/libexec/trick/convert_swig
index e3a08c38..b7ffe9c9 100755
--- a/libexec/trick/convert_swig
+++ b/libexec/trick/convert_swig
@@ -338,23 +338,6 @@ sub process_file() {
print OUT "$contents\n" ;
print OUT $global_template_typedefs ;
- # Add _swig_setattr_nondynamic_instance_variable function for raising AttributeError for improper non-class attribute assingment in input processor.
- # _swig_setattr_nondynamic_instance_variable function is added for each class in process_class subroutine.
- foreach my $c ( @class_names ) {
- if ( ! exists $class_typemap_printed{$c} ) {
- my $c_ = $c ;
- $c_ =~ s/\:/_/g ;
- if ( $c !~ /::/ ) {
- print OUT "\n#if SWIG_VERSION > 0x040000\n";
- print OUT "%pythoncode %{\n" ;
- print OUT " if '$c' in globals():\n";
- print OUT " $c.__setattr__ = _swig_setattr_nondynamic_instance_variable(object.__setattr__)\n" ;
- print OUT "%}\n" ;
- print OUT "#endif\n";
- }
- }
- }
-
# Add a trick_cast_as macro line for each class parsed in the file. These lines must appear at the bottom of the
# file to ensure they are not in a namespace directive and they are after the #define statements they depend on.
undef %class_typemap_printed ;
@@ -785,7 +768,7 @@ sub process_typedef_struct($$$$) {
my ($typedef_struct_string , $contents_ref, $new_contents_ref , $class_names_ref) = @_ ;
my $extracted ;
- my ($tail , $struct_names, @struct_names) ;
+ my ($tail , $my_struct_contents, $struct_names, @struct_names) ;
#print "*** typedef_struct_string = $typedef_struct_string ***\n" ;
@@ -811,10 +794,12 @@ sub process_typedef_struct($$$$) {
foreach my $s ( @struct_names ) {
if ( $s !~ /\*/ ) {
push @$class_names_ref , $s ;
+ # Add _swig_setattr_nondynamic_instance_variable function for raising AttributeError for improper struct attribute assingment in input processor
+ $my_struct_contents .= "\n#if SWIG_VERSION > 0x040000\n\%pythoncode \%{\n if '$s' in globals():\n $s.__setattr__ = _swig_setattr_nondynamic_instance_variable(object.__setattr__)\n\%}\n#endif\n" ;
}
}
- $$new_contents_ref .= $extracted . $tail ;
+ $$new_contents_ref .= $extracted . $tail . $my_struct_contents ;
}
diff --git a/share/trick/makefiles/trickify.mk b/share/trick/makefiles/trickify.mk
index 9f2ab8c9..68aa90e8 100644
--- a/share/trick/makefiles/trickify.mk
+++ b/share/trick/makefiles/trickify.mk
@@ -115,7 +115,7 @@ TRICK_CFLAGS += $(TRICKIFY_CXX_FLAGS)
TRICK_CXXFLAGS += $(TRICKIFY_CXX_FLAGS)
# Ensure we can process all headers
-TRICK_EXT_LIB_DIRS :=
+TRICK_EXT_LIB_DIRS := $(TRICKIFY_EXT_LIB_DIRS)
.PHONY: all
all: $(TRICKIFY_OBJECT_NAME) $(TRICKIFY_PYTHON_DIR)
diff --git a/trick_sims/SIM_singlerigidbody/Images/AccOmega.png b/trick_sims/SIM_singlerigidbody/Images/AccOmega.png
new file mode 100644
index 00000000..b464863e
Binary files /dev/null and b/trick_sims/SIM_singlerigidbody/Images/AccOmega.png differ
diff --git a/trick_sims/SIM_singlerigidbody/Images/Angle.png b/trick_sims/SIM_singlerigidbody/Images/Angle.png
new file mode 100644
index 00000000..4a73f19d
Binary files /dev/null and b/trick_sims/SIM_singlerigidbody/Images/Angle.png differ
diff --git a/trick_sims/SIM_singlerigidbody/Images/Angularvelocity.png b/trick_sims/SIM_singlerigidbody/Images/Angularvelocity.png
new file mode 100644
index 00000000..426687ac
Binary files /dev/null and b/trick_sims/SIM_singlerigidbody/Images/Angularvelocity.png differ
diff --git a/trick_sims/SIM_singlerigidbody/Images/Centerofmass.png b/trick_sims/SIM_singlerigidbody/Images/Centerofmass.png
new file mode 100644
index 00000000..7ab5ebe7
Binary files /dev/null and b/trick_sims/SIM_singlerigidbody/Images/Centerofmass.png differ
diff --git a/trick_sims/SIM_singlerigidbody/Images/EquationsofMotion.png b/trick_sims/SIM_singlerigidbody/Images/EquationsofMotion.png
new file mode 100644
index 00000000..5336fd77
Binary files /dev/null and b/trick_sims/SIM_singlerigidbody/Images/EquationsofMotion.png differ
diff --git a/trick_sims/SIM_singlerigidbody/Images/Force.png b/trick_sims/SIM_singlerigidbody/Images/Force.png
new file mode 100644
index 00000000..5f001808
Binary files /dev/null and b/trick_sims/SIM_singlerigidbody/Images/Force.png differ
diff --git a/trick_sims/SIM_singlerigidbody/Images/ForceTorque.png b/trick_sims/SIM_singlerigidbody/Images/ForceTorque.png
new file mode 100644
index 00000000..168af35f
Binary files /dev/null and b/trick_sims/SIM_singlerigidbody/Images/ForceTorque.png differ
diff --git a/trick_sims/SIM_singlerigidbody/Images/ForceTorqueRemain.png b/trick_sims/SIM_singlerigidbody/Images/ForceTorqueRemain.png
new file mode 100644
index 00000000..528594f0
Binary files /dev/null and b/trick_sims/SIM_singlerigidbody/Images/ForceTorqueRemain.png differ
diff --git a/trick_sims/SIM_singlerigidbody/Images/Inertia.png b/trick_sims/SIM_singlerigidbody/Images/Inertia.png
new file mode 100644
index 00000000..1ff297df
Binary files /dev/null and b/trick_sims/SIM_singlerigidbody/Images/Inertia.png differ
diff --git a/trick_sims/SIM_singlerigidbody/Images/Mass.png b/trick_sims/SIM_singlerigidbody/Images/Mass.png
new file mode 100644
index 00000000..d7b47246
Binary files /dev/null and b/trick_sims/SIM_singlerigidbody/Images/Mass.png differ
diff --git a/trick_sims/SIM_singlerigidbody/Images/MassMatrix.png b/trick_sims/SIM_singlerigidbody/Images/MassMatrix.png
new file mode 100644
index 00000000..884bdc4e
Binary files /dev/null and b/trick_sims/SIM_singlerigidbody/Images/MassMatrix.png differ
diff --git a/trick_sims/SIM_singlerigidbody/Images/Position.png b/trick_sims/SIM_singlerigidbody/Images/Position.png
new file mode 100644
index 00000000..aec80ccd
Binary files /dev/null and b/trick_sims/SIM_singlerigidbody/Images/Position.png differ
diff --git a/trick_sims/SIM_singlerigidbody/Images/Radius.png b/trick_sims/SIM_singlerigidbody/Images/Radius.png
new file mode 100644
index 00000000..8e420da3
Binary files /dev/null and b/trick_sims/SIM_singlerigidbody/Images/Radius.png differ
diff --git a/trick_sims/SIM_singlerigidbody/Images/Torque.png b/trick_sims/SIM_singlerigidbody/Images/Torque.png
new file mode 100644
index 00000000..fc7366a4
Binary files /dev/null and b/trick_sims/SIM_singlerigidbody/Images/Torque.png differ
diff --git a/trick_sims/SIM_singlerigidbody/Images/Vectora.png b/trick_sims/SIM_singlerigidbody/Images/Vectora.png
new file mode 100644
index 00000000..e301c7c9
Binary files /dev/null and b/trick_sims/SIM_singlerigidbody/Images/Vectora.png differ
diff --git a/trick_sims/SIM_singlerigidbody/Images/Velocity.png b/trick_sims/SIM_singlerigidbody/Images/Velocity.png
new file mode 100644
index 00000000..73cc2fa8
Binary files /dev/null and b/trick_sims/SIM_singlerigidbody/Images/Velocity.png differ
diff --git a/trick_sims/SIM_singlerigidbody/Images/koviz.png b/trick_sims/SIM_singlerigidbody/Images/koviz.png
new file mode 100644
index 00000000..7e7605f7
Binary files /dev/null and b/trick_sims/SIM_singlerigidbody/Images/koviz.png differ
diff --git a/trick_sims/SIM_singlerigidbody/Images/trick-dp.png b/trick_sims/SIM_singlerigidbody/Images/trick-dp.png
new file mode 100644
index 00000000..a7880be9
Binary files /dev/null and b/trick_sims/SIM_singlerigidbody/Images/trick-dp.png differ
diff --git a/trick_sims/SIM_singlerigidbody/Modified_data/realtime.py b/trick_sims/SIM_singlerigidbody/Modified_data/realtime.py
new file mode 100644
index 00000000..05daed29
--- /dev/null
+++ b/trick_sims/SIM_singlerigidbody/Modified_data/realtime.py
@@ -0,0 +1,12 @@
+
+trick.frame_log_on()
+trick.real_time_enable()
+trick.exec_set_software_frame(0.033)
+trick.itimer_enable()
+
+trick.exec_set_enable_freeze(True)
+#trick.exec_set_freeze_command(True)
+
+#simControlPanel = trick.SimControlPanel()
+#trick.add_external_application(simControlPanel)
+
diff --git a/trick_sims/SIM_singlerigidbody/Modified_data/state_data.dr b/trick_sims/SIM_singlerigidbody/Modified_data/state_data.dr
new file mode 100644
index 00000000..ca5afb40
--- /dev/null
+++ b/trick_sims/SIM_singlerigidbody/Modified_data/state_data.dr
@@ -0,0 +1,54 @@
+global DR_GROUP_ID
+global drg
+try:
+ if DR_GROUP_ID >= 0:
+ DR_GROUP_ID += 1
+except NameError:
+ DR_GROUP_ID = 0
+ drg = []
+
+drg.append(trick.DRBinary("StateData"))
+drg[DR_GROUP_ID].set_freq(trick.DR_Always)
+drg[DR_GROUP_ID].set_cycle(0.10)
+drg[DR_GROUP_ID].set_single_prec_only(False)
+drg[DR_GROUP_ID].add_variable("dyn.body.force[0]")
+drg[DR_GROUP_ID].add_variable("dyn.body.force[1]")
+drg[DR_GROUP_ID].add_variable("dyn.body.force[2]")
+drg[DR_GROUP_ID].add_variable("dyn.body.angle_force[0]")
+drg[DR_GROUP_ID].add_variable("dyn.body.angle_force[1]")
+drg[DR_GROUP_ID].add_variable("dyn.body.angle_force[2]")
+drg[DR_GROUP_ID].add_variable("dyn.body.rotate[0][0]")
+drg[DR_GROUP_ID].add_variable("dyn.body.rotate[0][1]")
+drg[DR_GROUP_ID].add_variable("dyn.body.rotate[0][2]")
+drg[DR_GROUP_ID].add_variable("dyn.body.rotate[1][0]")
+drg[DR_GROUP_ID].add_variable("dyn.body.rotate[1][1]")
+drg[DR_GROUP_ID].add_variable("dyn.body.rotate[1][2]")
+drg[DR_GROUP_ID].add_variable("dyn.body.rotate[2][0]")
+drg[DR_GROUP_ID].add_variable("dyn.body.rotate[2][1]")
+drg[DR_GROUP_ID].add_variable("dyn.body.rotate[2][2]")
+drg[DR_GROUP_ID].add_variable("dyn.body.pos[0]")
+drg[DR_GROUP_ID].add_variable("dyn.body.pos[1]")
+drg[DR_GROUP_ID].add_variable("dyn.body.pos[2]")
+drg[DR_GROUP_ID].add_variable("dyn.body.angle[0]")
+drg[DR_GROUP_ID].add_variable("dyn.body.angle[1]")
+drg[DR_GROUP_ID].add_variable("dyn.body.angle[2]")
+drg[DR_GROUP_ID].add_variable("dyn.body.vel[0]")
+drg[DR_GROUP_ID].add_variable("dyn.body.vel[1]")
+drg[DR_GROUP_ID].add_variable("dyn.body.vel[2]")
+drg[DR_GROUP_ID].add_variable("dyn.body.acc[0]")
+drg[DR_GROUP_ID].add_variable("dyn.body.acc[1]")
+drg[DR_GROUP_ID].add_variable("dyn.body.acc[2]")
+drg[DR_GROUP_ID].add_variable("dyn.body.omega[0]")
+drg[DR_GROUP_ID].add_variable("dyn.body.omega[1]")
+drg[DR_GROUP_ID].add_variable("dyn.body.omega[2]")
+drg[DR_GROUP_ID].add_variable("dyn.body.omegaDot[0]")
+drg[DR_GROUP_ID].add_variable("dyn.body.omegaDot[1]")
+drg[DR_GROUP_ID].add_variable("dyn.body.omegaDot[2]")
+drg[DR_GROUP_ID].add_variable("dyn.body.FORCE_INIT[0]")
+drg[DR_GROUP_ID].add_variable("dyn.body.FORCE_INIT[1]")
+drg[DR_GROUP_ID].add_variable("dyn.body.FORCE_INIT[2]")
+
+
+
+trick.add_data_record_group(drg[DR_GROUP_ID], trick.DR_Buffer)
+drg[DR_GROUP_ID].enable()
diff --git a/trick_sims/SIM_singlerigidbody/README.md b/trick_sims/SIM_singlerigidbody/README.md
new file mode 100644
index 00000000..8de86906
--- /dev/null
+++ b/trick_sims/SIM_singlerigidbody/README.md
@@ -0,0 +1,122 @@
+# Single Rigid Body
+``SIM_singlerigidbody`` is a simulation of the motion of a sphere that is a single rigid body with six degrees of freedom.
+
+The motion of the sphere is found by using Euler's equations of motion, and can be controlled by changing several initial input values such as force, position, angle, angular velocity, velocity, and position of the force. The recorded data of the motion can then be viewed and analyzed.
+
+## Dynamics model
+
+### Equations of Motion
+To determine the sphere's motion, we will use Euler's equations of motion for a single rigid body. Euler's equations describe the combined translational and rotational dynamics of a rigid body in three-dimensional space.
+
+![Equations_of_motion](images\EquationsofMotion.png)
+
+Where,
+
+![Force_and_Torque_eq](images\ForceTorque.png)
+* is a 6x1 column vector.
+* F is the applied force.
+* τ is the torque.
+
+![Mass_Matrix_eq](images\MassMatrix.png)
+* is a 6x6 matrix.
+* m is the mass.
+* I 3x3 is the identity matrix.
+* I is the inertia.
+* C m is the center of mass.
+
+![Acceleration_Omega](images\AccOmega.png)
+* is a 6x1 column vector.
+* a o is the acceleration.
+
+![Force_Torque_Remain](images\ForceTorqueRemain.png)
+* is a 6x1 column vector.
+* ω A is the angular velocity.
+
+
+#### Force
+The force acting on the sphere is calculated by the cross product of the rotation matrix and initial force.
+
+![Force](images\Force.png)
+
+#### Torque
+Torque is found by the cross product of the rotation matrix and the cross product of the position of force and initial force.
+
+![Torque](images\Torque.png)
+
+#### Mass
+The default value of the mass of the sphere is:
+
+![Mass](images\Mass.png)
+
+#### Radius
+The default value of the radius is:
+
+![Radius](images\Radius.png)
+
+#### Center of mass
+The center of mass of a sphere is equal to its radius.
+
+![Center_of_mass](images\Centerofmass.png)
+
+#### Inertia
+Inertia of a sphere is calculated by:
+
+![Inertia](images\Inertia.png)
+
+#### Acceleration and angular acceleration
+To determine the acceleration and angular acceleration, ```dLU_Choleski``` must be used. ```dLU_Choleski``` solves linear sets of equations in the form of [A]x = b and returns the vector x, which is the acceleration. It decomposes the symmetric, positive definite [A] matrix into a lower triangular form, where we can then substitute and our equation becomes:
+
+![Vector_a](images\Vectora.png)
+
+The term 'a' is a 6x1 vector. Acceleration is equal to the first three values of vector a and angular acceleration is equal to the last three values of vector a.
+
+### State Integration
+The state is defined by position, velocity, angle, and angular velocity. They are calculated by numerically integrating velocity, acceleration, angular velocity, and angular acceleration, respectively.
+
+#### Position
+The position of the sphere is determined by integrating the velocity over time.
+
+![Position](images\Position.png)
+
+#### Velocity
+The velocity is determined by integrating the acceleration of the sphere over time.
+
+![Velocity](images\Velocity.png)
+
+#### Angle
+The angle is determined by integrating the angular velocity over time.
+
+![Angle](images\Angle.png)
+
+#### Angular velocity
+The angular velocity is determined by integrating the angular acceleration over time.
+
+![Angular_Velocity](images\Angularvelocity.png)
+
+
+
+## Inputs
+
+Variable |Type |Units
+----------------------------|-------------|---------
+dyn.body.POS_INIT |double[3] |m
+dyn.body.ANGLE_INIT |double[3] |rad
+dyn.body.OMEGA_INIT |double[3] |rad*s^-1
+dyn.body.FORCE_INIT |double[3] |N
+dyn.body.TORQUE_INIT |double[3] |N*m
+dyn.body.VEL_INIT |double[3] |m/s
+dyn.body.POS_FORCE |double[3] |m
+
+## Outputs
+
+Variable |Type |Units
+----------------------------|-------------|--------
+dyn.body.pos |double[3] |m
+dyn.body.vel |double[3] |m/s
+dyn.body.acc |double[3] |m/s^2
+dyn.FORCE_INIT |double[3] |N
+dyn.force |double[3] |N
+dyn.body.angle_force |double[3] |rad
+dyn.body.omegaDot |double[3] |rad/^s2
+dyn.body.omega |double[3] |rad*s^-1
+dyn.body.rotate |double[3] |
diff --git a/trick_sims/SIM_singlerigidbody/RUN_test/input.py b/trick_sims/SIM_singlerigidbody/RUN_test/input.py
new file mode 100644
index 00000000..b4e8e739
--- /dev/null
+++ b/trick_sims/SIM_singlerigidbody/RUN_test/input.py
@@ -0,0 +1,81 @@
+################################################################################
+# _ ___ _ #
+# / |___| _ ) ___ __| |_ _ #
+# | |___| _ \/ _ \/ _` | || | #
+# |_| |___/\___/\__,_|\_, | #
+# __ ___ ___ __|__/ #
+# / / ___| \ / _ \| __| #
+# / _ \___| |) | (_) | _| #
+# \___/ |___/ \___/|_| #
+# #
+# This input creates a simple body with 6 DOF: #
+# -Creates 1 body #
+# -Initializes 6 DOF #
+################################################################################
+
+# ============================================================================ -
+# This file is used to store several quality of life python functions.
+# ============================================================================ -
+exec(open("Modified_data/state_data.dr").read())
+exec(open("Modified_data/realtime.py").read())
+
+################################################################################
+# dyn DATA #
+# (NOTE: dyn is our instance of BodySimObject) #
+# This builds our objects, and defines their physical properties. #
+################################################################################
+
+# ============================================================================ -
+# Establish the physical properties of the body...CONSTANTS!
+# ============================================================================ -
+dyn.body.mass = 20.0
+dyn.body.radius = 2.0
+
+# ============================================================================ -
+# Initialize system
+# ============================================================================ -
+M_PI = 3.141592653589793238460
+
+#dyn.body.POS_INIT[0] = 0.0
+#dyn.body.POS_INIT[1] = 0.0
+#dyn.body.POS_INIT[2] = 0.0
+
+#dyn.body.ANGLE_INIT[0] = 0.0
+#dyn.body.ANGLE_INIT[1] = 0.0
+#dyn.body.ANGLE_INIT[2] = 0.0
+
+#dyn.body.OMEGA_INIT[0] = 0.0
+#dyn.body.OMEGA_INIT[1] = 0.0
+#dyn.body.OMEGA_INIT[2] = 0.0
+
+#dyn.body.FORCE_INIT[0] = 0.0
+#dyn.body.FORCE_INIT[1] = 0.0
+#dyn.body.FORCE_INIT[2] = 10.0
+
+#dyn.body.TORQUE_INIT[0] = 0.0
+#dyn.body.TORQUE_INIT[1] = 0.0
+#dyn.body.TORQUE_INIT[2] = 0.0
+
+#dyn.body.VEL_INIT[0] = 0.0
+#dyn.body.VEL_INIT[1] = 0.0
+#dyn.body.VEL_INIT[2] = 0.0
+
+#dyn.body.POS_FORCE[0] = 2.0
+#dyn.body.POS_FORCE[1] = 0.0
+#dyn.body.POS_FORCE[2] = 0.0
+
+################################################################################
+# SIMULATION SET UP #
+# This is where we set up the remaining inputs to create a working sim. #
+################################################################################
+
+# ============================================================================ -
+# getintegrator(integration method, number of variables to be integrated)
+# This sets up the integration scheme we use to analyze this system.
+# ============================================================================ -
+dyn_integloop.getIntegrator(trick.Runge_Kutta_4, 12)
+
+# ============================================================================ -
+# This tells the sim to stop after a few seconds
+# ============================================================================ -
+trick.stop(10.0)
diff --git a/trick_sims/SIM_singlerigidbody/S_define b/trick_sims/SIM_singlerigidbody/S_define
new file mode 100644
index 00000000..89cc89b5
--- /dev/null
+++ b/trick_sims/SIM_singlerigidbody/S_define
@@ -0,0 +1,32 @@
+/************************TRICK HEADER*************************
+PURPOSE:
+ ( Single body rigid dynamics simulation )
+LIBRARY DEPENDENCIES:
+ ((src/body.cpp)
+ (src/body_shutdown.cpp)
+ )
+*************************************************************/
+#define TRICK_NO_MONTE_CARLO
+#define TRICK_NO_MASTERSLAVE
+#define TRICK_NO_INSTRUMENTATION
+#define TRICK_NO_REALTIMEINJECTOR
+#define TRICK_NO_ZEROCONF
+
+#include "sim_objects/default_trick_sys.sm"
+##include "include/body.hh"
+class BodySimObject : public Trick::SimObject {
+ public:
+ BODY body;
+
+ BodySimObject() {
+ ("default_data") body.default_data() ;
+ ("initialization") body.init() ;
+ ("derivative") body.derivative() ;
+ ("integration") trick_ret = body.integ() ;
+ ("shutdown") body.body_shutdown();
+ }
+};
+
+BodySimObject dyn;
+IntegLoop dyn_integloop(0.01) dyn;
+
diff --git a/trick_sims/SIM_singlerigidbody/S_overrides.mk b/trick_sims/SIM_singlerigidbody/S_overrides.mk
new file mode 100644
index 00000000..e1f6cccd
--- /dev/null
+++ b/trick_sims/SIM_singlerigidbody/S_overrides.mk
@@ -0,0 +1,2 @@
+TRICK_CFLAGS += -Imodels
+TRICK_CXXFLAGS += -Imodels
diff --git a/trick_sims/SIM_singlerigidbody/models/include/body.hh b/trick_sims/SIM_singlerigidbody/models/include/body.hh
new file mode 100644
index 00000000..2508bb49
--- /dev/null
+++ b/trick_sims/SIM_singlerigidbody/models/include/body.hh
@@ -0,0 +1,78 @@
+/*********************************************************************
+PURPOSE: (Simulate a single rigid body with six degrees of freedom)
+LIBRARY DEPENDENCIES:
+ ((SingleRigidBody/src/body.o))
+*********************************************************************/
+#ifndef BODY_HH
+#define BODY_HH
+
+class BODY {
+public:
+ BODY();
+ ~BODY();
+ //Variables
+
+ //Initializes state variables
+ double POS_INIT[3];
+ double VEL_INIT[3];
+ double ANGLE_INIT[3];
+ double OMEGA_INIT[3];
+
+ //State variables
+ double pos[3];
+ double vel[3];
+ double angle[3];
+ double omega[3];
+
+ double acc[3];
+ double omegaDot[3];
+
+ double force[3];
+ double FORCE_INIT[3];
+ double force_remain[3];
+ double POS_FORCE[3];
+
+ double torque[3];
+ double TORQUE_INIT[3];
+ double torque_remain[3];
+
+ double inertia;
+ double inertia_matrix[3][3];
+
+ double radius;
+ double mass;
+ double mat_mass[6][6];
+ double massmatrix[3][3];
+
+ double CM[3];
+ double CM_skew[3][3];
+ double m_CM_skew[3][3];
+ double neg_m_CM_skew[3][3];
+
+ double vec_a[6];
+ double vec_b[6];
+
+ double rotate[3][3];
+ double angle_force[3];
+
+ double tmp_vec[6];
+ double **mat_mass_dyn;
+ double **mat_L;
+
+ // Methods
+ void default_data();
+ void init();
+ void derivative();
+ int integ();
+ int body_shutdown();
+
+ void rotation_matrix();
+ void calcforce();
+ void calctorque();
+ void calcforce_remain();
+ void calctorque_remain();
+ void eq_setup();
+ void eq_solver();
+};
+
+#endif
diff --git a/trick_sims/SIM_singlerigidbody/models/src/body.cpp b/trick_sims/SIM_singlerigidbody/models/src/body.cpp
new file mode 100644
index 00000000..7721ef44
--- /dev/null
+++ b/trick_sims/SIM_singlerigidbody/models/src/body.cpp
@@ -0,0 +1,314 @@
+/**************************************************************************
+PURPOSE: (Test trick macros (matrix and vector) as well as trick functions
+ including euler_matrix, deuler_123, and dLU_Choleski. Perform a
+ single body motion with six degrees of freedom)
+LIBRARY DEPENDENCIES:
+ ((src/body.o))
+**************************************************************************/
+
+#include
+
+#include "trick/integrator_c_intf.h"
+#include "trick/trick_math_proto.h"
+#include "trick/trick_math_error.h"
+#include "trick/reference_frame.h"
+#include "trick/vector_macros.h"
+#include "trick/matrix_macros.h"
+
+#include "../include/body.hh"
+
+BODY::BODY(){};
+BODY::~BODY(){};
+
+/*************************************************************************
+FUNCTION: SingleRigidBody::default_data()
+PURPOSE:` (Creates an object)
+*************************************************************************/
+
+void BODY::default_data() {
+
+ //Initializing vectors and matricies to zero.
+
+ for(int i = 0; i<6; i++)
+ vec_a[i] = 0.0;
+
+
+ for(int i = 0; i<6; i++)
+ vec_b[i] = 0.0;
+
+
+ for(int i = 0; i<6; i++)
+ for(int j = 0; j<6; j++)
+ mat_mass[i][j] = 0.0;
+ V_INIT(pos);
+ V_INIT(vel);
+ V_INIT(acc);
+ V_INIT(force);
+ V_INIT(force_remain);
+ V_INIT(torque);
+ V_INIT(torque_remain);
+ V_INIT(angle);
+ V_INIT(omega);
+ V_INIT(omegaDot);
+ V_INIT(angle_force);
+
+ M_INIT(CM_skew);
+ M_INIT(m_CM_skew);
+ M_INIT(massmatrix);
+ M_INIT(rotate);
+
+
+ // Inputs
+ mass = 20.0;
+ radius = 2.0;
+
+ POS_INIT[0] = 0.0;
+ POS_INIT[1] = 0.0;
+ POS_INIT[2] = 0.0;
+
+ ANGLE_INIT[0] = 0.0;
+ ANGLE_INIT[1] = 0.0;
+ ANGLE_INIT[2] = 0.0;
+
+ OMEGA_INIT[0] = 0.0;
+ OMEGA_INIT[1] = 0.0;
+ OMEGA_INIT[2] = 0.0;
+
+ FORCE_INIT[0] = 0.0;
+ FORCE_INIT[1] = 0.0;
+ FORCE_INIT[2] = 10.0;
+
+ VEL_INIT[0] = 0.0;
+ VEL_INIT[1] = 0.0;
+ VEL_INIT[2] = 0.0;
+
+ POS_FORCE[0] = 2.0;
+ POS_FORCE[1] = 0.0;
+ POS_FORCE[2] = 0.0;
+
+};
+
+/************************************************************************
+FUNCTION: SingleRigidBody::init()
+PURPOSE: (Initializing state variables, creating inertia and CoM skew
+ matrices)
+************************************************************************/
+
+void BODY::init() {
+
+ V_COPY(pos, POS_INIT);
+ V_COPY(vel, VEL_INIT);
+ V_COPY(angle, ANGLE_INIT);
+ V_COPY(omega, OMEGA_INIT);
+
+ // Center of mass skew matrix
+ V_INIT(CM);
+
+ V_SKEW(CM_skew, CM);
+
+ MxSCALAR(m_CM_skew, CM_skew, mass);
+ MxSCALAR(neg_m_CM_skew, m_CM_skew, -1.0);
+
+ // Creates 3x3 matrix for inerta
+ inertia = (2.0/5.0) * mass * radius * radius;
+ inertia_matrix[0][0] = inertia_matrix[1][1] = inertia_matrix[2][2] = inertia;
+
+ // Creates 3x3 matrix for mass
+ massmatrix[0][0] = massmatrix[1][1] = massmatrix[2][2] = mass;
+
+ // Combines inertia, center of mass, and mass matrix into a 6x6 matrix
+ for(int i = 0; i<3; i++)
+ for(int j = 0; j<3; j++)
+ mat_mass[i][j] = massmatrix[i][j];
+
+ for(int i = 0; i<3; i++)
+ for(int j = 3; j<6; j++)
+ mat_mass[i][j] = neg_m_CM_skew[i][j-3];
+
+ for(int i = 3; i<6; i++)
+ for(int j = 0; j<3; j++)
+ mat_mass[i][j] = m_CM_skew[i-3][j];
+
+ for(int i = 3; i<6; i++)
+ for(int j = 3; j<6; j++)
+ mat_mass[i][j] = inertia_matrix[i-3][j-3];
+
+ // Temporary vector and dynamic memory for Choleski
+ for(int i = 0; i<6; i++)
+ tmp_vec[i] = 0.0;
+
+ mat_L = new double*[6];
+ mat_mass_dyn = new double*[6];
+
+};
+
+/*****************************************************************************
+FUNCTION: BODY::rotation_matrix()
+PURPOSE: (Calculates transformation matrix from provided angles)
+*****************************************************************************/
+void BODY::rotation_matrix() {
+
+ // euler_matrix outputs the rotate matrix from angle
+ euler_matrix(angle, rotate, 0, Roll_Pitch_Yaw);
+
+};
+
+/******************************************************************************
+FUNCTION: BODY::calcforce()
+PURPOSE: (Calculates force wrt inertial frame)
+******************************************************************************/
+void BODY::calcforce() {
+
+ MxV(force, rotate, FORCE_INIT);
+
+};
+
+/*****************************************************************************
+FUNCTION: BODY::calctorque()
+PURPOSE: (Calculates torque wrt inertial frame)
+*****************************************************************************/
+void BODY::calctorque() {
+
+ double torque_force[3];
+
+ V_CROSS(torque_force, POS_FORCE, FORCE_INIT);
+ MxV(torque, rotate, torque_force);
+
+};
+
+/****************************************************************************
+FUNCTION: BODY::calcforce_remain()
+PURPOSE: (Calculate remaining force wrt inertial frame)
+****************************************************************************/
+void BODY::calcforce_remain() {
+
+ double cross1[3];
+ double cross2[3];
+
+ V_CROSS(cross1, omega, CM);
+ V_CROSS(cross2, omega, cross1);
+ V_SCALE(force_remain, cross2, mass);
+
+};
+
+
+/***************************************************************************
+FUNCTION: BODY::calctorque_remain()
+PURPOSE: (Calculate remaining torque wrt inertial frame)
+***************************************************************************/
+void BODY::calctorque_remain() {
+
+ double I_w[3];
+
+ MxV(I_w, inertia_matrix, omega);
+ V_CROSS(torque_remain, omega, I_w);
+
+
+};
+
+/***************************************************************************
+FUNCTION: BODY::eq_setup()
+PURPOSE: (Establishes b column vector for final eq M*a=b)
+***************************************************************************/
+void BODY::eq_setup() {
+
+ double remainder_force[3];
+ double remainder_torque[3];
+
+ // Subtracts remaining from force & torque to get vec_b.
+ V_SUB(remainder_force, force, force_remain);
+ V_SUB(remainder_torque, torque, torque_remain);
+
+ for(int i = 0; i<3; i++){
+ vec_b[i] = remainder_force[i];
+ }
+
+ for(int i = 3; i<6; i++){
+ vec_b[i] = remainder_torque[i-3];
+ }
+
+};
+
+/**************************************************************************
+FUNCTION: BODY::eq_solver()
+PURPOSE: (Performs choleski decomposition and computes linear and angular
+ accelerations)
+**************************************************************************/
+
+void BODY::eq_solver() {
+
+ // Solving a = b * M^-1
+
+ for(int i = 0; i<6; i++)
+ {
+ mat_mass_dyn[i] = mat_mass[i];
+ mat_L[i] = new double[6];
+ }
+
+ dLU_Choleski(mat_mass_dyn, mat_L, tmp_vec, 6, vec_b, vec_a, 0);
+
+ // Acceleration output
+ for(int i = 0; i<3; i++)
+ acc[i] = vec_a[i];
+
+ // Angular accleration output
+ for(int i = 0; i<3; i++)
+ omegaDot[i] = vec_a[i + 3];
+
+};
+
+/***************************************************************************
+FUNCTION: BODY::derivative()
+PURPOSE: (Calls all functions in desired order for calculations)
+***************************************************************************/
+void BODY::derivative() {
+
+ rotation_matrix();
+ calcforce();
+ calctorque();
+ calcforce_remain();
+ calctorque_remain();
+ eq_setup();
+ eq_solver();
+
+};
+
+/***************************************************************************
+FUNCTION: BODY::integrate()
+PURPOSE: (Sets up trick integration)
+***************************************************************************/
+
+int BODY::integ() {
+
+ int integration_step;
+
+ load_state(
+ &pos[0], &pos[1], &pos[2],
+ &vel[0], &vel[1], &vel[2],
+ &angle[0], &angle[1], &angle[2],
+ &omega[0], &omega[1], &omega[2],
+
+ NULL);
+
+
+ load_deriv(
+ &vel[0], &vel[1], &vel[2],
+ &acc[0], &acc[1], &acc[2],
+ &omega[0], &omega[1], &omega[2],
+ &omegaDot[0], &omegaDot[1], &omegaDot[2],
+
+ NULL);
+
+ integration_step = integrate();
+
+ unload_state(
+ &pos[0], &pos[1], &pos[2],
+ &vel[0], &vel[1], &vel[2],
+ &angle[0], &angle[1], &angle[2],
+ &omega[0], &omega[1], &omega[2],
+
+ NULL);
+
+ return(integration_step);
+
+};
diff --git a/trick_sims/SIM_singlerigidbody/models/src/body_shutdown.cpp b/trick_sims/SIM_singlerigidbody/models/src/body_shutdown.cpp
new file mode 100644
index 00000000..bd16d766
--- /dev/null
+++ b/trick_sims/SIM_singlerigidbody/models/src/body_shutdown.cpp
@@ -0,0 +1,14 @@
+/************************************************************************
+PURPOSE: (Shutdown the simulation)
+*************************************************************************/
+#include "../include/body.hh"
+#include "trick/exec_proto.h"
+
+int BODY::body_shutdown() {
+
+ delete[] mat_mass_dyn;
+ delete[] mat_L;
+
+ return 0;
+};
+
diff --git a/trick_source/codegen/Interface_Code_Gen/PrintAttributes.cpp b/trick_source/codegen/Interface_Code_Gen/PrintAttributes.cpp
index 758a84cd..5d443163 100644
--- a/trick_source/codegen/Interface_Code_Gen/PrintAttributes.cpp
+++ b/trick_source/codegen/Interface_Code_Gen/PrintAttributes.cpp
@@ -395,8 +395,11 @@ std::set PrintAttributes::getEmptyFiles() {
const clang::FileEntry * fe = (*fi).first ;
#if (LIBCLANG_MAJOR < 4) // TODO delete when RHEL 7 no longer supported
std::string header_file_name = fe->getName() ;
-#else
+#elif (LIBCLANG_MAJOR >= 4 && LIBCLANG_MAJOR < 18)
std::string header_file_name = fe->getName().str() ;
+#else
+ const clang::FileEntryRef fer = fi->first ;
+ std::string header_file_name = fer.getName().str();
#endif
if ( visited_files.find(header_file_name) != visited_files.end() ) {
diff --git a/trick_source/codegen/Interface_Code_Gen/Utilities.cpp b/trick_source/codegen/Interface_Code_Gen/Utilities.cpp
index 39bec7d5..11080f27 100644
--- a/trick_source/codegen/Interface_Code_Gen/Utilities.cpp
+++ b/trick_source/codegen/Interface_Code_Gen/Utilities.cpp
@@ -66,68 +66,69 @@ std::string trim(const std::string& str, const std::string& whitespace ) {
}
bool isInUserCode( clang::CompilerInstance & ci , clang::SourceLocation sl , HeaderSearchDirs & hsd ) {
- clang::FileID fid = ci.getSourceManager().getFileID(sl) ;
bool ret = false ;
- if ( ! fid.isInvalid() ) {
- const clang::FileEntry * fe = ci.getSourceManager().getFileEntryForID(fid) ;
- if ( fe != NULL ) {
-#if (LIBCLANG_MAJOR < 4) // TODO delete when RHEL 7 no longer supported
- char * resolved_path = almostRealPath( fe->getName() ) ;
-#else
- char * resolved_path = almostRealPath( fe->getName().str() ) ;
-#endif
- if ( resolved_path != NULL ) {
- if ( hsd.isPathInUserDir(resolved_path)) {
- ret = true ;
- }
- free(resolved_path) ;
- }
+ char* resolved_path = getResolvedPath(ci, sl);
+
+ if ( resolved_path != NULL ) {
+ if ( hsd.isPathInUserDir(resolved_path)) {
+ ret = true ;
}
+ free(resolved_path) ;
}
+
return ret ;
}
bool isInUserOrTrickCode( clang::CompilerInstance & ci , clang::SourceLocation sl , HeaderSearchDirs & hsd ) {
- clang::FileID fid = ci.getSourceManager().getFileID(sl) ;
bool ret = false ;
- if ( ! fid.isInvalid() ) {
- const clang::FileEntry * fe = ci.getSourceManager().getFileEntryForID(fid) ;
- if ( fe != NULL ) {
-#if (LIBCLANG_MAJOR < 4) // TODO delete when RHEL 7 no longer supported
- char * resolved_path = almostRealPath( fe->getName() ) ;
-#else
- char * resolved_path = almostRealPath( fe->getName().str() ) ;
-#endif
- if ( resolved_path != NULL ) {
- if ( hsd.isPathInUserOrTrickDir(resolved_path)) {
- ret = true ;
- }
- free(resolved_path) ;
- }
+ char* resolved_path = getResolvedPath(ci, sl);
+
+ if ( resolved_path != NULL ) {
+ if ( hsd.isPathInUserOrTrickDir(resolved_path)) {
+ ret = true ;
}
+ free(resolved_path) ;
}
+
return ret ;
}
std::string getFileName( clang::CompilerInstance & ci , clang::SourceLocation sl , HeaderSearchDirs & hsd ) {
- clang::FileID fid = ci.getSourceManager().getFileID(sl) ;
std::string file_name;
- char* resolved_path;
+ char* resolved_path = getResolvedPath(ci, sl);
+
+ if (resolved_path != NULL ) {
+ if (hsd.isPathInUserDir(resolved_path)) {
+ file_name.append(resolved_path);
+ }
+ free(resolved_path);
+ }
+
+ return file_name;
+}
+
+char * getResolvedPath(clang::CompilerInstance & ci , clang::SourceLocation sl) {
+ clang::FileID fid = ci.getSourceManager().getFileID(sl) ;
+ char* resolved_path = NULL;
+
if ( ! fid.isInvalid() ) {
const clang::FileEntry * fe = ci.getSourceManager().getFileEntryForID(fid) ;
if ( fe != NULL ) {
#if (LIBCLANG_MAJOR < 4) // TODO delete when RHEL 7 no longer supported
- char * resolved_path = almostRealPath( fe->getName() ) ;
+ resolved_path = almostRealPath( fe->getName() ) ;
+#elif (LIBCLANG_MAJOR >= 4 && LIBCLANG_MAJOR < 18)
+ resolved_path = almostRealPath( fe->getName().str() ) ;
#else
- char * resolved_path = almostRealPath( fe->getName().str() ) ;
+ const clang::CustomizableOptional cfer = ci.getSourceManager().getFileEntryRefForID(fid) ;
+ if (cfer.has_value()) {
+ resolved_path = almostRealPath( cfer->getName().str() ) ;
+ }
+
#endif
- if ( resolved_path != NULL and hsd.isPathInUserDir(resolved_path)) {
- file_name.append(resolved_path);
- }
- free(resolved_path);
}
}
- return file_name;
+
+ return resolved_path;
}
#include
diff --git a/trick_source/codegen/Interface_Code_Gen/Utilities.hh b/trick_source/codegen/Interface_Code_Gen/Utilities.hh
index 6fcfe13d..90491c0c 100644
--- a/trick_source/codegen/Interface_Code_Gen/Utilities.hh
+++ b/trick_source/codegen/Interface_Code_Gen/Utilities.hh
@@ -21,7 +21,7 @@ bool isInUserOrTrickCode( clang::CompilerInstance & ci , clang::SourceLocation s
std::string getFileName( clang::CompilerInstance & ci , clang::SourceLocation sl , HeaderSearchDirs & hsd ) ;
char * almostRealPath( const std::string& in_path ) ;
char * almostRealPath( const char * in_path ) ;
-
+char * getResolvedPath(clang::CompilerInstance & ci , clang::SourceLocation sl);
std::string color(const Color& color, const std::string& text);
std::string bold(const std::string& text);
std::string underline(const std::string& text);
diff --git a/trick_source/codegen/Interface_Code_Gen/main.cpp b/trick_source/codegen/Interface_Code_Gen/main.cpp
index 84380329..41d26c4a 100644
--- a/trick_source/codegen/Interface_Code_Gen/main.cpp
+++ b/trick_source/codegen/Interface_Code_Gen/main.cpp
@@ -312,7 +312,7 @@ int main(int argc, char * argv[]) {
#if (LIBCLANG_MAJOR >= 10 && LIBCLANG_MAJOR < 18)
const clang::FileEntry* fileEntry = ci.getFileManager().getFile(inputFilePath).get();
#elif (LIBCLANG_MAJOR >= 18)
- clang::FileEntryRef fileEntryRef = llvm::cantFail(ci.getFileManager().getFileRef(inputFilePath));
+ const clang::FileEntryRef fileEntryRef = llvm::cantFail(ci.getFileManager().getFileRef(inputFilePath));
#else
const clang::FileEntry* fileEntry = ci.getFileManager().getFile(inputFilePath);
#endif
diff --git a/trick_source/java/src/main/java/trick/sie/utils/SearchPanel.java b/trick_source/java/src/main/java/trick/sie/utils/SearchPanel.java
index 34c7de17..2fe40178 100644
--- a/trick_source/java/src/main/java/trick/sie/utils/SearchPanel.java
+++ b/trick_source/java/src/main/java/trick/sie/utils/SearchPanel.java
@@ -115,7 +115,8 @@ public class SearchPanel extends JXPanel {
listModel.clear();
searcher.search(textField.getText().trim(),
caseSensitiveCheckBox.isSelected(),
- regularExpressionCheckBox.isSelected());
+ regularExpressionCheckBox.isSelected(),
+ greedySearchCheckBox.isSelected());
if (searcher.elementCount == 0) {
progressBar.setIndeterminate(true);
}
@@ -136,6 +137,12 @@ public class SearchPanel extends JXPanel {
setToolTipText("Toggle regular expression searching.");
}};
+ /** toggles case-insensitive searching */
+ JCheckBox greedySearchCheckBox = new JCheckBox("Greedy Search") {{
+ setName("greedySearchCheckBox");
+ setToolTipText("Toggle multi-threaded search (Warning: may cause overruns).");
+ }};
+
/** search results list model */
EfficientListModel listModel = new EfficientListModel();
@@ -227,6 +234,7 @@ public class SearchPanel extends JXPanel {
setLayout(new BoxLayout(this, BoxLayout.Y_AXIS));
add(caseSensitiveCheckBox);
add(regularExpressionCheckBox);
+ add(greedySearchCheckBox);
}});
}}, constraints);
@@ -306,6 +314,7 @@ public class SearchPanel extends JXPanel {
textField.setEnabled(enabled);
caseSensitiveCheckBox.setEnabled(enabled);
regularExpressionCheckBox.setEnabled(enabled);
+ greedySearchCheckBox.setEnabled(enabled);
list.setEnabled(enabled);
list.setComponentPopupMenu(enabled ? popupMenu : null);
}
diff --git a/trick_source/java/src/main/java/trick/sie/utils/Searcher.java b/trick_source/java/src/main/java/trick/sie/utils/Searcher.java
index 04a2245c..aaf20e1b 100644
--- a/trick_source/java/src/main/java/trick/sie/utils/Searcher.java
+++ b/trick_source/java/src/main/java/trick/sie/utils/Searcher.java
@@ -89,9 +89,10 @@ public class Searcher {
* @param targetText the text for which to search
* @param caseSensitive enables case sensitive searching
* @param regularExpression enables regular expression searching
+ * @param greedSearch enabled multi-threaded search
*/
public void search(final String targetText, final boolean caseSensitive,
- final boolean regularExpression) {
+ final boolean regularExpression, final boolean greedySearch) {
final SearchFunction searchFunction = regularExpression ?
@@ -124,7 +125,11 @@ public class Searcher {
cancelSearch();
count = 0;
- threads = Runtime.getRuntime().availableProcessors();
+ if (greedySearch) {
+ threads = Runtime.getRuntime().availableProcessors();
+ } else {
+ threads = 1;
+ }
propertyChangeListener.propertyChange(new PropertyChangeEvent(this, "progress", 0, 0));
final ConcurrentLinkedQueue roots = new ConcurrentLinkedQueue(rootTemplates);
executorService = Executors.newFixedThreadPool(threads);
diff --git a/trick_source/sim_services/DebugPause/DebugPause.cpp b/trick_source/sim_services/DebugPause/DebugPause.cpp
index b95bcbd2..91d4751e 100644
--- a/trick_source/sim_services/DebugPause/DebugPause.cpp
+++ b/trick_source/sim_services/DebugPause/DebugPause.cpp
@@ -68,7 +68,7 @@ int Trick::DebugPause::debug_pause_on() {
debug_pause_flag = true ;
- sem_name_stream << "itimersepmaphore_" << getpid() ;
+ sem_name_stream << "debugstepmaphore_" << getpid() ;
sem_name = sem_name_stream.str() ;
debug_sem = sem_open(sem_name.c_str(), O_CREAT, S_IRWXU , 0);
diff --git a/trick_source/sim_services/ScheduledJobQueue/ScheduledJobQueue.cpp b/trick_source/sim_services/ScheduledJobQueue/ScheduledJobQueue.cpp
index e604a864..45660248 100644
--- a/trick_source/sim_services/ScheduledJobQueue/ScheduledJobQueue.cpp
+++ b/trick_source/sim_services/ScheduledJobQueue/ScheduledJobQueue.cpp
@@ -92,7 +92,7 @@ int Trick::ScheduledJobQueue::push( JobData * new_job ) {
/* Increment the size of the queue */
list_size++ ;
- int new_job_index = (insert_pt - list) / sizeof(JobData**);
+ int new_job_index = ((unsigned long)insert_pt - (unsigned long)list) / sizeof(JobData**);
if(new_job_index < curr_index) {
curr_index++;
}
diff --git a/trick_source/sim_services/ScheduledJobQueue/test/ScheduledJobQueue_test.cpp b/trick_source/sim_services/ScheduledJobQueue/test/ScheduledJobQueue_test.cpp
index ba1c3cc5..a1086b1c 100644
--- a/trick_source/sim_services/ScheduledJobQueue/test/ScheduledJobQueue_test.cpp
+++ b/trick_source/sim_services/ScheduledJobQueue/test/ScheduledJobQueue_test.cpp
@@ -70,6 +70,117 @@ TEST_F( ScheduledJobQueueTest , PushJobsbyJobOrder ) {
EXPECT_TRUE( sjq.empty() ) ;
}
+TEST_F( ScheduledJobQueueTest , PushJobOntoSameIndex_CurrIndex0 ) {
+
+ Trick::JobData * job_ptr ;
+
+ EXPECT_EQ( sjq.size() , (unsigned int)0) ;
+ EXPECT_TRUE( sjq.empty() ) ;
+
+ job_ptr = new Trick::JobData(0, 2 , "class_100", NULL, 1.0 , "job_4") ;
+ job_ptr->sim_object_id = 4 ;
+ job_ptr->job_class = 100 ;
+ sjq.push(job_ptr) ;
+
+ EXPECT_EQ( sjq.size() , (unsigned int)1) ;
+ EXPECT_EQ( sjq.get_curr_index() , (unsigned int)0) ;
+
+ job_ptr = new Trick::JobData(0, 2 , "class_100", NULL, 1.0 , "job_3") ;
+ job_ptr->sim_object_id = 3 ;
+ job_ptr->job_class = 100 ;
+ sjq.push(job_ptr) ;
+
+ EXPECT_EQ( sjq.size() , (unsigned int)2) ;
+ EXPECT_EQ( sjq.get_curr_index() , (unsigned int)0) ;
+
+ job_ptr = new Trick::JobData(0, 2 , "class_100", NULL, 1.0 , "job_2") ;
+ job_ptr->sim_object_id = 2 ;
+ job_ptr->job_class = 100 ;
+ sjq.push(job_ptr) ;
+
+ EXPECT_EQ( sjq.size() , (unsigned int)3) ;
+ EXPECT_EQ( sjq.get_curr_index() , (unsigned int)0) ;
+
+ job_ptr = new Trick::JobData(0, 2 , "class_100", NULL, 1.0 , "job_1") ;
+ job_ptr->sim_object_id = 1 ;
+ job_ptr->job_class = 100 ;
+ sjq.push(job_ptr) ;
+
+ EXPECT_EQ( sjq.size() , (unsigned int)4) ;
+ EXPECT_EQ( sjq.get_curr_index() , (unsigned int)0) ;
+
+ job_ptr = sjq.get_next_job() ;
+ EXPECT_STREQ( job_ptr->name.c_str() , "job_1") ;
+
+ job_ptr = sjq.get_next_job() ;
+ EXPECT_STREQ( job_ptr->name.c_str() , "job_2") ;
+
+ job_ptr = sjq.get_next_job() ;
+ EXPECT_STREQ( job_ptr->name.c_str() , "job_3") ;
+
+ job_ptr = sjq.get_next_job() ;
+ EXPECT_STREQ( job_ptr->name.c_str() , "job_4") ;
+
+ sjq.clear() ;
+ EXPECT_EQ( sjq.size() , (unsigned int)0) ;
+ EXPECT_TRUE( sjq.empty() ) ;
+}
+
+TEST_F( ScheduledJobQueueTest , PushJobOntoSameIndex_CurrIndex1 ) {
+
+ Trick::JobData * job_ptr ;
+
+ EXPECT_EQ( sjq.size() , (unsigned int)0) ;
+ EXPECT_TRUE( sjq.empty() ) ;
+
+ job_ptr = new Trick::JobData(0, 2 , "class_100", NULL, 1.0 , "job_1") ;
+ job_ptr->sim_object_id = 1 ;
+ job_ptr->job_class = 100 ;
+ sjq.push(job_ptr) ;
+
+ sjq.get_next_job() ;
+
+ EXPECT_EQ( sjq.size() , (unsigned int)1) ;
+ EXPECT_EQ( sjq.get_curr_index() , (unsigned int)1) ;
+
+ job_ptr = new Trick::JobData(0, 2 , "class_100", NULL, 1.0 , "job_4") ;
+ job_ptr->sim_object_id = 4 ;
+ job_ptr->job_class = 100 ;
+ sjq.push(job_ptr) ;
+
+ EXPECT_EQ( sjq.size() , (unsigned int)2) ;
+ EXPECT_EQ( sjq.get_curr_index() , (unsigned int)1) ;
+
+ job_ptr = new Trick::JobData(0, 2 , "class_100", NULL, 1.0 , "job_3") ;
+ job_ptr->sim_object_id = 3 ;
+ job_ptr->job_class = 100 ;
+ sjq.push(job_ptr) ;
+
+ EXPECT_EQ( sjq.size() , (unsigned int)3) ;
+ EXPECT_EQ( sjq.get_curr_index() , (unsigned int)1) ;
+
+ job_ptr = new Trick::JobData(0, 2 , "class_100", NULL, 1.0 , "job_2") ;
+ job_ptr->sim_object_id = 2 ;
+ job_ptr->job_class = 100 ;
+ sjq.push(job_ptr) ;
+
+ EXPECT_EQ( sjq.size() , (unsigned int)4) ;
+ EXPECT_EQ( sjq.get_curr_index() , (unsigned int)1) ;
+
+ job_ptr = sjq.get_next_job() ;
+ EXPECT_STREQ( job_ptr->name.c_str() , "job_2") ;
+
+ job_ptr = sjq.get_next_job() ;
+ EXPECT_STREQ( job_ptr->name.c_str() , "job_3") ;
+
+ job_ptr = sjq.get_next_job() ;
+ EXPECT_STREQ( job_ptr->name.c_str() , "job_4") ;
+
+ sjq.clear() ;
+ EXPECT_EQ( sjq.size() , (unsigned int)0) ;
+ EXPECT_TRUE( sjq.empty() ) ;
+}
+
TEST_F( ScheduledJobQueueTest , PushJobsbySimObjectOrder ) {
//req.add_requirement("512154259");
diff --git a/trick_source/web/dashboard/package-lock.json b/trick_source/web/dashboard/package-lock.json
index 31567b33..b720d426 100644
--- a/trick_source/web/dashboard/package-lock.json
+++ b/trick_source/web/dashboard/package-lock.json
@@ -6051,11 +6051,6 @@
"safe-buffer": "~5.1.1"
}
},
- "cookie": {
- "version": "0.6.0",
- "resolved": "https://registry.npmjs.org/cookie/-/cookie-0.6.0.tgz",
- "integrity": "sha512-U71cyTamuh1CRNCfpGY6to28lxvNwPG4Guz/EVjgf3Jmzv0vlDp1atT9eS5dDjMYHucpHbWns6Lwf3BKz6svdw=="
- },
"cookie-signature": {
"version": "1.0.6",
"resolved": "https://registry.npmjs.org/cookie-signature/-/cookie-signature-1.0.6.tgz",
@@ -6906,6 +6901,11 @@
"resolved": "https://registry.npmjs.org/emojis-list/-/emojis-list-3.0.0.tgz",
"integrity": "sha512-/kyM18EfinwXZbno9FyUGeFh87KC8HRQBQGildHZbEuRyWFOmv1U10o9BBp8XVZDVNNuQKyIGIu5ZYAAXJ0V2Q=="
},
+ "encodeurl": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/encodeurl/-/encodeurl-2.0.0.tgz",
+ "integrity": "sha512-Q0n9HRi4m6JuGIV1eFlmvJB7ZEVxu93IrMyiMsGC0lrMJMWzRgx6WGquyfQgZVb31vhGgXnfmPNNXmxnOkRBrg=="
+ },
"end-of-stream": {
"version": "1.4.4",
"resolved": "https://registry.npmjs.org/end-of-stream/-/end-of-stream-1.4.4.tgz",
@@ -7883,16 +7883,16 @@
}
},
"express": {
- "version": "4.21.0",
- "resolved": "https://registry.npmjs.org/express/-/express-4.21.0.tgz",
- "integrity": "sha512-VqcNGcj/Id5ZT1LZ/cfihi3ttTn+NJmkli2eZADigjq29qTlWi/hAQ43t/VLPq8+UX06FCEx3ByOYet6ZFblng==",
+ "version": "4.21.1",
+ "resolved": "https://registry.npmjs.org/express/-/express-4.21.1.tgz",
+ "integrity": "sha512-YSFlK1Ee0/GC8QaO91tHcDxJiE/X4FbpAyQWkxAvG6AXCuR65YzK8ua6D9hvi/TzUfZMpc+BwuM1IPw8fmQBiQ==",
"requires": {
"accepts": "~1.3.8",
"array-flatten": "1.1.1",
"body-parser": "1.20.3",
"content-disposition": "0.5.4",
"content-type": "~1.0.4",
- "cookie": "0.6.0",
+ "cookie": "0.7.1",
"cookie-signature": "1.0.6",
"debug": "2.6.9",
"depd": "2.0.0",
@@ -7925,17 +7925,10 @@
"resolved": "https://registry.npmjs.org/array-flatten/-/array-flatten-1.1.1.tgz",
"integrity": "sha512-PCVAQswWemu6UdxsDFFX/+gVeYqKAod3D3UVm91jHwynguOwAvYPhx8nNlM++NqRcK6CxxpUafjmhIdKiHibqg=="
},
- "call-bind": {
- "version": "1.0.7",
- "resolved": "https://registry.npmjs.org/call-bind/-/call-bind-1.0.7.tgz",
- "integrity": "sha512-GHTSNSYICQ7scH7sZ+M2rFopRoLh8t2bLSW6BbgrtLsahOIB5iyAVJf9GjWK3cYTDaMj4XdBpM1cA6pIS0Kv2w==",
- "requires": {
- "es-define-property": "^1.0.0",
- "es-errors": "^1.3.0",
- "function-bind": "^1.1.2",
- "get-intrinsic": "^1.2.4",
- "set-function-length": "^1.2.1"
- }
+ "cookie": {
+ "version": "0.7.1",
+ "resolved": "https://registry.npmjs.org/cookie/-/cookie-0.7.1.tgz",
+ "integrity": "sha512-6DnInpx7SJ2AK3+CTUE/ZM0vWTUboZCegxhC2xiIydHR9jNuTAASBrfEpHhiGOZw/nX51bHt6YQl8jsGo4y/0w=="
},
"debug": {
"version": "2.6.9",
@@ -7945,128 +7938,15 @@
"ms": "2.0.0"
}
},
- "encodeurl": {
- "version": "2.0.0",
- "resolved": "https://registry.npmjs.org/encodeurl/-/encodeurl-2.0.0.tgz",
- "integrity": "sha512-Q0n9HRi4m6JuGIV1eFlmvJB7ZEVxu93IrMyiMsGC0lrMJMWzRgx6WGquyfQgZVb31vhGgXnfmPNNXmxnOkRBrg=="
- },
- "finalhandler": {
- "version": "1.3.1",
- "resolved": "https://registry.npmjs.org/finalhandler/-/finalhandler-1.3.1.tgz",
- "integrity": "sha512-6BN9trH7bp3qvnrRyzsBz+g3lZxTNZTbVO2EV1CS0WIcDbawYVdYvGflME/9QP0h0pYlCDBCTjYa9nZzMDpyxQ==",
- "requires": {
- "debug": "2.6.9",
- "encodeurl": "~2.0.0",
- "escape-html": "~1.0.3",
- "on-finished": "2.4.1",
- "parseurl": "~1.3.3",
- "statuses": "2.0.1",
- "unpipe": "~1.0.0"
- }
- },
- "function-bind": {
- "version": "1.1.2",
- "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.2.tgz",
- "integrity": "sha512-7XHNxH7qX9xG5mIwxkhumTox/MIRNcOgDrxWsMt2pAr23WHp6MrRlN7FBSFpCpr+oVO0F744iUgR82nJMfG2SA=="
- },
- "get-intrinsic": {
- "version": "1.2.4",
- "resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.2.4.tgz",
- "integrity": "sha512-5uYhsJH8VJBTv7oslg4BznJYhDoRI6waYCxMmCdnTrcCrHA/fCFKoTFz2JKKE0HdDFUF7/oQuhzumXJK7paBRQ==",
- "requires": {
- "es-errors": "^1.3.0",
- "function-bind": "^1.1.2",
- "has-proto": "^1.0.1",
- "has-symbols": "^1.0.3",
- "hasown": "^2.0.0"
- }
- },
- "has-symbols": {
- "version": "1.0.3",
- "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.0.3.tgz",
- "integrity": "sha512-l3LCuF6MgDNwTDKkdYGEihYjt5pRPbEg46rtlmnSPlUbgmB8LOIrKJbYYFBSbnPaJexMKtiPO8hmeRjRz2Td+A=="
- },
- "merge-descriptors": {
- "version": "1.0.3",
- "resolved": "https://registry.npmjs.org/merge-descriptors/-/merge-descriptors-1.0.3.tgz",
- "integrity": "sha512-gaNvAS7TZ897/rVaZ0nMtAyxNyi/pdbjbAwUpFQpN70GqnVfOiXpeUUMKRBmzXaSQ8DdTX4/0ms62r2K+hE6mQ=="
- },
"ms": {
"version": "2.0.0",
"resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz",
"integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A=="
},
- "path-to-regexp": {
- "version": "0.1.10",
- "resolved": "https://registry.npmjs.org/path-to-regexp/-/path-to-regexp-0.1.10.tgz",
- "integrity": "sha512-7lf7qcQidTku0Gu3YDPc8DJ1q7OOucfa/BSsIwjuh56VU7katFvuM8hULfkwB3Fns/rsVF7PwPKVw1sl5KQS9w=="
- },
- "qs": {
- "version": "6.13.0",
- "resolved": "https://registry.npmjs.org/qs/-/qs-6.13.0.tgz",
- "integrity": "sha512-+38qI9SOr8tfZ4QmJNplMUxqjbe7LKvvZgWdExBOmd+egZTtjLB67Gu0HRX3u/XOq7UU2Nx6nsjvS16Z9uwfpg==",
- "requires": {
- "side-channel": "^1.0.6"
- }
- },
"safe-buffer": {
"version": "5.2.1",
"resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz",
"integrity": "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ=="
- },
- "send": {
- "version": "0.19.0",
- "resolved": "https://registry.npmjs.org/send/-/send-0.19.0.tgz",
- "integrity": "sha512-dW41u5VfLXu8SJh5bwRmyYUbAoSB3c9uQh6L8h/KtsFREPWpbX1lrljJo186Jc4nmci/sGUZ9a0a0J2zgfq2hw==",
- "requires": {
- "debug": "2.6.9",
- "depd": "2.0.0",
- "destroy": "1.2.0",
- "encodeurl": "~1.0.2",
- "escape-html": "~1.0.3",
- "etag": "~1.8.1",
- "fresh": "0.5.2",
- "http-errors": "2.0.0",
- "mime": "1.6.0",
- "ms": "2.1.3",
- "on-finished": "2.4.1",
- "range-parser": "~1.2.1",
- "statuses": "2.0.1"
- },
- "dependencies": {
- "encodeurl": {
- "version": "1.0.2",
- "resolved": "https://registry.npmjs.org/encodeurl/-/encodeurl-1.0.2.tgz",
- "integrity": "sha512-TPJXq8JqFaVYm2CWmPvnP2Iyo4ZSM7/QKcSmuMLDObfpH5fi7RUGmd/rTDf+rut/saiDiQEeVTNgAmJEdAOx0w=="
- },
- "ms": {
- "version": "2.1.3",
- "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz",
- "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA=="
- }
- }
- },
- "serve-static": {
- "version": "1.16.2",
- "resolved": "https://registry.npmjs.org/serve-static/-/serve-static-1.16.2.tgz",
- "integrity": "sha512-VqpjJZKadQB/PEbEwvFdO43Ax5dFBZ2UECszz8bQ7pi7wt//PWe1P6MN7eCnjsatYtBT6EuiClbjSWP2WrIoTw==",
- "requires": {
- "encodeurl": "~2.0.0",
- "escape-html": "~1.0.3",
- "parseurl": "~1.3.3",
- "send": "0.19.0"
- }
- },
- "side-channel": {
- "version": "1.0.6",
- "resolved": "https://registry.npmjs.org/side-channel/-/side-channel-1.0.6.tgz",
- "integrity": "sha512-fDW/EZ6Q9RiO8eFG8Hj+7u/oW+XrPTIChwCOM2+th2A6OblDtYYIpve9m+KvI9Z4C9qSEXlaGR6bTEYHReuglA==",
- "requires": {
- "call-bind": "^1.0.7",
- "es-errors": "^1.3.0",
- "get-intrinsic": "^1.2.4",
- "object-inspect": "^1.13.1"
- }
}
}
},
@@ -8218,6 +8098,35 @@
"resolved": "https://registry.npmjs.org/filesize/-/filesize-8.0.7.tgz",
"integrity": "sha512-pjmC+bkIF8XI7fWaH8KxHcZL3DPybs1roSKP4rKDvy20tAWwIObE4+JIseG2byfGKhud5ZnM4YSGKBz7Sh0ndQ=="
},
+ "finalhandler": {
+ "version": "1.3.1",
+ "resolved": "https://registry.npmjs.org/finalhandler/-/finalhandler-1.3.1.tgz",
+ "integrity": "sha512-6BN9trH7bp3qvnrRyzsBz+g3lZxTNZTbVO2EV1CS0WIcDbawYVdYvGflME/9QP0h0pYlCDBCTjYa9nZzMDpyxQ==",
+ "requires": {
+ "debug": "2.6.9",
+ "encodeurl": "~2.0.0",
+ "escape-html": "~1.0.3",
+ "on-finished": "2.4.1",
+ "parseurl": "~1.3.3",
+ "statuses": "2.0.1",
+ "unpipe": "~1.0.0"
+ },
+ "dependencies": {
+ "debug": {
+ "version": "2.6.9",
+ "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz",
+ "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==",
+ "requires": {
+ "ms": "2.0.0"
+ }
+ },
+ "ms": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz",
+ "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A=="
+ }
+ }
+ },
"find-cache-dir": {
"version": "3.3.2",
"resolved": "https://registry.npmjs.org/find-cache-dir/-/find-cache-dir-3.3.2.tgz",
@@ -9335,9 +9244,9 @@
}
},
"http-proxy-middleware": {
- "version": "2.0.6",
- "resolved": "https://registry.npmjs.org/http-proxy-middleware/-/http-proxy-middleware-2.0.6.tgz",
- "integrity": "sha512-ya/UeJ6HVBYxrgYotAZo1KvPWlgB48kUJLDePFeneHsVujFaW5WNj2NgWCAE//B1Dl02BIfYlpNgBy8Kf8Rjmw==",
+ "version": "2.0.7",
+ "resolved": "https://registry.npmjs.org/http-proxy-middleware/-/http-proxy-middleware-2.0.7.tgz",
+ "integrity": "sha512-fgVY8AV7qU7z/MmXJ/rxwbrtQH4jBQ9m7kp3llF0liB7glmFeVZFBepQb32T3y8n8k2+AEYuMPCpinYW+/CuRA==",
"requires": {
"@types/http-proxy": "^1.17.8",
"http-proxy": "^1.18.1",
@@ -11901,6 +11810,11 @@
"fs-monkey": "^1.0.4"
}
},
+ "merge-descriptors": {
+ "version": "1.0.3",
+ "resolved": "https://registry.npmjs.org/merge-descriptors/-/merge-descriptors-1.0.3.tgz",
+ "integrity": "sha512-gaNvAS7TZ897/rVaZ0nMtAyxNyi/pdbjbAwUpFQpN70GqnVfOiXpeUUMKRBmzXaSQ8DdTX4/0ms62r2K+hE6mQ=="
+ },
"merge-stream": {
"version": "2.0.0",
"resolved": "https://registry.npmjs.org/merge-stream/-/merge-stream-2.0.0.tgz",
@@ -13149,6 +13063,11 @@
"resolved": "https://registry.npmjs.org/path-parse/-/path-parse-1.0.7.tgz",
"integrity": "sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw=="
},
+ "path-to-regexp": {
+ "version": "0.1.10",
+ "resolved": "https://registry.npmjs.org/path-to-regexp/-/path-to-regexp-0.1.10.tgz",
+ "integrity": "sha512-7lf7qcQidTku0Gu3YDPc8DJ1q7OOucfa/BSsIwjuh56VU7katFvuM8hULfkwB3Fns/rsVF7PwPKVw1sl5KQS9w=="
+ },
"path-type": {
"version": "4.0.0",
"resolved": "https://registry.npmjs.org/path-type/-/path-type-4.0.0.tgz",
@@ -14225,6 +14144,61 @@
"resolved": "https://registry.npmjs.org/q/-/q-1.5.1.tgz",
"integrity": "sha512-kV/CThkXo6xyFEZUugw/+pIOywXcDbFYgSct5cT3gqlbkBE1SJdwy6UQoZvodiWF/ckQLZyDE/Bu1M6gVu5lVw=="
},
+ "qs": {
+ "version": "6.13.0",
+ "resolved": "https://registry.npmjs.org/qs/-/qs-6.13.0.tgz",
+ "integrity": "sha512-+38qI9SOr8tfZ4QmJNplMUxqjbe7LKvvZgWdExBOmd+egZTtjLB67Gu0HRX3u/XOq7UU2Nx6nsjvS16Z9uwfpg==",
+ "requires": {
+ "side-channel": "^1.0.6"
+ },
+ "dependencies": {
+ "call-bind": {
+ "version": "1.0.7",
+ "resolved": "https://registry.npmjs.org/call-bind/-/call-bind-1.0.7.tgz",
+ "integrity": "sha512-GHTSNSYICQ7scH7sZ+M2rFopRoLh8t2bLSW6BbgrtLsahOIB5iyAVJf9GjWK3cYTDaMj4XdBpM1cA6pIS0Kv2w==",
+ "requires": {
+ "es-define-property": "^1.0.0",
+ "es-errors": "^1.3.0",
+ "function-bind": "^1.1.2",
+ "get-intrinsic": "^1.2.4",
+ "set-function-length": "^1.2.1"
+ }
+ },
+ "function-bind": {
+ "version": "1.1.2",
+ "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.2.tgz",
+ "integrity": "sha512-7XHNxH7qX9xG5mIwxkhumTox/MIRNcOgDrxWsMt2pAr23WHp6MrRlN7FBSFpCpr+oVO0F744iUgR82nJMfG2SA=="
+ },
+ "get-intrinsic": {
+ "version": "1.2.4",
+ "resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.2.4.tgz",
+ "integrity": "sha512-5uYhsJH8VJBTv7oslg4BznJYhDoRI6waYCxMmCdnTrcCrHA/fCFKoTFz2JKKE0HdDFUF7/oQuhzumXJK7paBRQ==",
+ "requires": {
+ "es-errors": "^1.3.0",
+ "function-bind": "^1.1.2",
+ "has-proto": "^1.0.1",
+ "has-symbols": "^1.0.3",
+ "hasown": "^2.0.0"
+ }
+ },
+ "has-symbols": {
+ "version": "1.0.3",
+ "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.0.3.tgz",
+ "integrity": "sha512-l3LCuF6MgDNwTDKkdYGEihYjt5pRPbEg46rtlmnSPlUbgmB8LOIrKJbYYFBSbnPaJexMKtiPO8hmeRjRz2Td+A=="
+ },
+ "side-channel": {
+ "version": "1.0.6",
+ "resolved": "https://registry.npmjs.org/side-channel/-/side-channel-1.0.6.tgz",
+ "integrity": "sha512-fDW/EZ6Q9RiO8eFG8Hj+7u/oW+XrPTIChwCOM2+th2A6OblDtYYIpve9m+KvI9Z4C9qSEXlaGR6bTEYHReuglA==",
+ "requires": {
+ "call-bind": "^1.0.7",
+ "es-errors": "^1.3.0",
+ "get-intrinsic": "^1.2.4",
+ "object-inspect": "^1.13.1"
+ }
+ }
+ }
+ },
"querystringify": {
"version": "2.2.0",
"resolved": "https://registry.npmjs.org/querystringify/-/querystringify-2.2.0.tgz",
@@ -15006,9 +14980,9 @@
}
},
"rollup": {
- "version": "2.79.1",
- "resolved": "https://registry.npmjs.org/rollup/-/rollup-2.79.1.tgz",
- "integrity": "sha512-uKxbd0IhMZOhjAiD5oAFp7BqvkA4Dv47qpOCtaNvng4HBwdbWtdOh8f5nZNuk2rp51PMGk3bzfWu5oayNEuYnw==",
+ "version": "2.79.2",
+ "resolved": "https://registry.npmjs.org/rollup/-/rollup-2.79.2.tgz",
+ "integrity": "sha512-fS6iqSPZDs3dr/y7Od6y5nha8dW1YnbgtsyotCVvoFGKbERG++CVRFv1meyGDE1SNItQA8BrnCw7ScdAhRJ3XQ==",
"requires": {
"fsevents": "~2.3.2"
}
@@ -15206,6 +15180,53 @@
}
}
},
+ "send": {
+ "version": "0.19.0",
+ "resolved": "https://registry.npmjs.org/send/-/send-0.19.0.tgz",
+ "integrity": "sha512-dW41u5VfLXu8SJh5bwRmyYUbAoSB3c9uQh6L8h/KtsFREPWpbX1lrljJo186Jc4nmci/sGUZ9a0a0J2zgfq2hw==",
+ "requires": {
+ "debug": "2.6.9",
+ "depd": "2.0.0",
+ "destroy": "1.2.0",
+ "encodeurl": "~1.0.2",
+ "escape-html": "~1.0.3",
+ "etag": "~1.8.1",
+ "fresh": "0.5.2",
+ "http-errors": "2.0.0",
+ "mime": "1.6.0",
+ "ms": "2.1.3",
+ "on-finished": "2.4.1",
+ "range-parser": "~1.2.1",
+ "statuses": "2.0.1"
+ },
+ "dependencies": {
+ "debug": {
+ "version": "2.6.9",
+ "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz",
+ "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==",
+ "requires": {
+ "ms": "2.0.0"
+ },
+ "dependencies": {
+ "ms": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz",
+ "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A=="
+ }
+ }
+ },
+ "encodeurl": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/encodeurl/-/encodeurl-1.0.2.tgz",
+ "integrity": "sha512-TPJXq8JqFaVYm2CWmPvnP2Iyo4ZSM7/QKcSmuMLDObfpH5fi7RUGmd/rTDf+rut/saiDiQEeVTNgAmJEdAOx0w=="
+ },
+ "ms": {
+ "version": "2.1.3",
+ "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz",
+ "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA=="
+ }
+ }
+ },
"serialize-javascript": {
"version": "6.0.1",
"resolved": "https://registry.npmjs.org/serialize-javascript/-/serialize-javascript-6.0.1.tgz",
@@ -15274,6 +15295,17 @@
}
}
},
+ "serve-static": {
+ "version": "1.16.2",
+ "resolved": "https://registry.npmjs.org/serve-static/-/serve-static-1.16.2.tgz",
+ "integrity": "sha512-VqpjJZKadQB/PEbEwvFdO43Ax5dFBZ2UECszz8bQ7pi7wt//PWe1P6MN7eCnjsatYtBT6EuiClbjSWP2WrIoTw==",
+ "requires": {
+ "encodeurl": "~2.0.0",
+ "escape-html": "~1.0.3",
+ "parseurl": "~1.3.3",
+ "send": "0.19.0"
+ }
+ },
"set-function-length": {
"version": "1.2.2",
"resolved": "https://registry.npmjs.org/set-function-length/-/set-function-length-1.2.2.tgz",