commit 1fb06240f04a4a539dd8bd7daa7f7d935485ba9b
Author: skenneweg <skenneweg@techfak.uni-bielefeld.de>
Date:   Mon Apr 27 21:20:30 2020 +0200

    started the simple skeleton of the urtware

diff --git a/README.txt b/README.txt
index 471e99e..4659873 100644
--- a/README.txt
+++ b/README.txt
@@ -2,7 +2,7 @@ uRtWare is a lightweight publish/subscribe middleware for real-time
 applications. It was developed as part of the software habitat for the
 Autonomous Mini Robot [1] (AMiRo) but can be used for other purposes as well.
 
-Copyright (C) 2018..2019  Thomas Schöpping et al.
+Copyright (C) 2018..2020  Thomas Schöpping et al.
 (a complete list of all authors is given below)
 
 This program is free software: you can redistribute it and/or modify
@@ -25,6 +25,7 @@ University, which is funded by the German Research Foundation (DFG).
 Authors:
  - Thomas Schöpping          <tschoepp[at]cit-ec.uni-bielefeld.de>
  - Marc Rothmann             <mrothmann[at]techfak.uni-bielefeld.de>
+ - Svenja Kenneweg	     <skenneweg[at]techfak.uni-bielefeld.de>
 
 References:
  [1] S. Herbrechtsmeier, T. Korthals, T. Schopping and U. Rückert, "AMiRo: A
diff --git a/inc/urt_confcheck.h b/inc/urt_confcheck.h
index ef82902..f797b1e 100644
--- a/inc/urt_confcheck.h
+++ b/inc/urt_confcheck.h
@@ -3,7 +3,7 @@
 applications. It was developed as part of the software habitat for the
 Autonomous Mini Robot [1] (AMiRo) but can be used for other purposes as well.
 
-Copyright (C) 2018..2019  Thomas Schöpping et al.
+Copyright (C) 2018..2020  Thomas Schöpping et al.
 
 This program is free software: you can redistribute it and/or modify
 it under the terms of the GNU General Public License as published by
diff --git a/inc/urt_core.h b/inc/urt_core.h
new file mode 100644
index 0000000..03a180b
--- /dev/null
+++ b/inc/urt_core.h
@@ -0,0 +1,53 @@
+/*
+µRtWare is a lightweight publish/subscribe middleware for real-time
+applications. It was developed as part of the software habitat for the
+Autonomous Mini Robot [1] (AMiRo) but can be used for other purposes as well.
+
+Copyright (C) 2018..2020  Thomas Schöpping et al.
+
+This program is free software: you can redistribute it and/or modify
+it under the terms of the GNU General Public License as published by
+the Free Software Foundation, either version 3 of the License, or
+(at your option) any later version.
+
+This program is distributed in the hope that it will be useful,
+but WITHOUT ANY WARRANTY; without even the implied warranty of
+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+GNU General Public License for more details.
+
+You should have received a copy of the GNU General Public License
+along with this program.  If not, see <http://www.gnu.org/licenses/>.
+*/
+
+#ifndef URTWARE_CORE_H
+#define URTWARE_CORE_H
+
+/******************************************************************************/
+/* CONSTANTS                                                                  */
+/******************************************************************************/
+
+/******************************************************************************/
+/* SETTINGS                                                                   */
+/******************************************************************************/
+
+/******************************************************************************/
+/* CHECKS                                                                     */
+/******************************************************************************/
+
+/******************************************************************************/
+/* DATA STRUCTURES AND TYPES                                                  */
+/******************************************************************************/
+
+/******************************************************************************/
+/* MACROS                                                                     */
+/******************************************************************************/
+
+/******************************************************************************/
+/* EXTERN DECLARATIONS                                                        */
+/******************************************************************************/
+
+/******************************************************************************/
+/* INLINE FUNCTIONS                                                           */
+/******************************************************************************/
+
+#endif /* URTWARE_CORE_H */
diff --git a/inc/urt_message.h b/inc/urt_message.h
new file mode 100644
index 0000000..d0ab053
--- /dev/null
+++ b/inc/urt_message.h
@@ -0,0 +1,53 @@
+/*
+µRtWare is a lightweight publish/subscribe middleware for real-time
+applications. It was developed as part of the software habitat for the
+Autonomous Mini Robot [1] (AMiRo) but can be used for other purposes as well.
+
+Copyright (C) 2018..2020  Thomas Schöpping et al.
+
+This program is free software: you can redistribute it and/or modify
+it under the terms of the GNU General Public License as published by
+the Free Software Foundation, either version 3 of the License, or
+(at your option) any later version.
+
+This program is distributed in the hope that it will be useful,
+but WITHOUT ANY WARRANTY; without even the implied warranty of
+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+GNU General Public License for more details.
+
+You should have received a copy of the GNU General Public License
+along with this program.  If not, see <http://www.gnu.org/licenses/>.
+*/
+
+#ifndef URTWARE_MESSAGE_H
+#define URTWARE_MESSAGE_H
+
+/******************************************************************************/
+/* CONSTANTS                                                                  */
+/******************************************************************************/
+
+/******************************************************************************/
+/* SETTINGS                                                                   */
+/******************************************************************************/
+
+/******************************************************************************/
+/* CHECKS                                                                     */
+/******************************************************************************/
+
+/******************************************************************************/
+/* DATA STRUCTURES AND TYPES                                                  */
+/******************************************************************************/
+
+/******************************************************************************/
+/* MACROS                                                                     */
+/******************************************************************************/
+
+/******************************************************************************/
+/* EXTERN DECLARATIONS                                                        */
+/******************************************************************************/
+
+/******************************************************************************/
+/* INLINE FUNCTIONS                                                           */
+/******************************************************************************/
+
+#endif /* URTWARE_MESSAGE_H */
diff --git a/inc/urt_node.h b/inc/urt_node.h
new file mode 100644
index 0000000..b6efc65
--- /dev/null
+++ b/inc/urt_node.h
@@ -0,0 +1,53 @@
+/*
+µRtWare is a lightweight publish/subscribe middleware for real-time
+applications. It was developed as part of the software habitat for the
+Autonomous Mini Robot [1] (AMiRo) but can be used for other purposes as well.
+
+Copyright (C) 2018..2020  Thomas Schöpping et al.
+
+This program is free software: you can redistribute it and/or modify
+it under the terms of the GNU General Public License as published by
+the Free Software Foundation, either version 3 of the License, or
+(at your option) any later version.
+
+This program is distributed in the hope that it will be useful,
+but WITHOUT ANY WARRANTY; without even the implied warranty of
+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+GNU General Public License for more details.
+
+You should have received a copy of the GNU General Public License
+along with this program.  If not, see <http://www.gnu.org/licenses/>.
+*/
+
+#ifndef URTWARE_NODE_H
+#define URTWARE_NODE_H
+
+/******************************************************************************/
+/* CONSTANTS                                                                  */
+/******************************************************************************/
+
+/******************************************************************************/
+/* SETTINGS                                                                   */
+/******************************************************************************/
+
+/******************************************************************************/
+/* CHECKS                                                                     */
+/******************************************************************************/
+
+/******************************************************************************/
+/* DATA STRUCTURES AND TYPES                                                  */
+/******************************************************************************/
+
+/******************************************************************************/
+/* MACROS                                                                     */
+/******************************************************************************/
+
+/******************************************************************************/
+/* EXTERN DECLARATIONS                                                        */
+/******************************************************************************/
+
+/******************************************************************************/
+/* INLINE FUNCTIONS                                                           */
+/******************************************************************************/
+
+#endif /* URTWARE_NODE_H */
diff --git a/inc/urt_publisher.h b/inc/urt_publisher.h
new file mode 100644
index 0000000..606a9b7
--- /dev/null
+++ b/inc/urt_publisher.h
@@ -0,0 +1,53 @@
+/*
+µRtWare is a lightweight publish/subscribe middleware for real-time
+applications. It was developed as part of the software habitat for the
+Autonomous Mini Robot [1] (AMiRo) but can be used for other purposes as well.
+
+Copyright (C) 2018..2020  Thomas Schöpping et al.
+
+This program is free software: you can redistribute it and/or modify
+it under the terms of the GNU General Public License as published by
+the Free Software Foundation, either version 3 of the License, or
+(at your option) any later version.
+
+This program is distributed in the hope that it will be useful,
+but WITHOUT ANY WARRANTY; without even the implied warranty of
+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+GNU General Public License for more details.
+
+You should have received a copy of the GNU General Public License
+along with this program.  If not, see <http://www.gnu.org/licenses/>.
+*/
+
+#ifndef URTWARE_PUBLISHER_H
+#define URTWARE_PUBLISHER_H
+
+/******************************************************************************/
+/* CONSTANTS                                                                  */
+/******************************************************************************/
+
+/******************************************************************************/
+/* SETTINGS                                                                   */
+/******************************************************************************/
+
+/******************************************************************************/
+/* CHECKS                                                                     */
+/******************************************************************************/
+
+/******************************************************************************/
+/* DATA STRUCTURES AND TYPES                                                  */
+/******************************************************************************/
+
+/******************************************************************************/
+/* MACROS                                                                     */
+/******************************************************************************/
+
+/******************************************************************************/
+/* EXTERN DECLARATIONS                                                        */
+/******************************************************************************/
+
+/******************************************************************************/
+/* INLINE FUNCTIONS                                                           */
+/******************************************************************************/
+
+#endif /* URTWARE_PUBLISHER_H */
diff --git a/inc/urt_service.h b/inc/urt_service.h
new file mode 100644
index 0000000..9efb824
--- /dev/null
+++ b/inc/urt_service.h
@@ -0,0 +1,53 @@
+/*
+µRtWare is a lightweight publish/subscribe middleware for real-time
+applications. It was developed as part of the software habitat for the
+Autonomous Mini Robot [1] (AMiRo) but can be used for other purposes as well.
+
+Copyright (C) 2018..2020  Thomas Schöpping et al.
+
+This program is free software: you can redistribute it and/or modify
+it under the terms of the GNU General Public License as published by
+the Free Software Foundation, either version 3 of the License, or
+(at your option) any later version.
+
+This program is distributed in the hope that it will be useful,
+but WITHOUT ANY WARRANTY; without even the implied warranty of
+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+GNU General Public License for more details.
+
+You should have received a copy of the GNU General Public License
+along with this program.  If not, see <http://www.gnu.org/licenses/>.
+*/
+
+#ifndef URTWARE_SERVICE_H
+#define URTWARE_SERVICE_H
+
+/******************************************************************************/
+/* CONSTANTS                                                                  */
+/******************************************************************************/
+
+/******************************************************************************/
+/* SETTINGS                                                                   */
+/******************************************************************************/
+
+/******************************************************************************/
+/* CHECKS                                                                     */
+/******************************************************************************/
+
+/******************************************************************************/
+/* DATA STRUCTURES AND TYPES                                                  */
+/******************************************************************************/
+
+/******************************************************************************/
+/* MACROS                                                                     */
+/******************************************************************************/
+
+/******************************************************************************/
+/* EXTERN DECLARATIONS                                                        */
+/******************************************************************************/
+
+/******************************************************************************/
+/* INLINE FUNCTIONS                                                           */
+/******************************************************************************/
+
+#endif /* URTWARE_SERVICE_H */
diff --git a/inc/urt_subscriber.h b/inc/urt_subscriber.h
new file mode 100644
index 0000000..5e3659a
--- /dev/null
+++ b/inc/urt_subscriber.h
@@ -0,0 +1,172 @@
+/*
+µRtWare is a lightweight publish/subscribe middleware for real-time
+applications. It was developed as part of the software habitat for the
+Autonomous Mini Robot [1] (AMiRo) but can be used for other purposes as well.
+
+Copyright (C) 2018..2020  Thomas Schöpping et al.
+
+This program is free software: you can redistribute it and/or modify
+it under the terms of the GNU General Public License as published by
+the Free Software Foundation, either version 3 of the License, or
+(at your option) any later version.
+
+This program is distributed in the hope that it will be useful,
+but WITHOUT ANY WARRANTY; without even the implied warranty of
+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+GNU General Public License for more details.
+
+You should have received a copy of the GNU General Public License
+along with this program.  If not, see <http://www.gnu.org/licenses/>.
+*/
+
+#ifndef URTWARE_SUBSCRIBER_H
+#define URTWARE_SUBSCRIBER_H
+
+#include <urt_types.h>
+
+/******************************************************************************/
+/* CONSTANTS                                                                  */
+/******************************************************************************/
+
+/******************************************************************************/
+/* SETTINGS                                                                   */
+/******************************************************************************/
+
+/******************************************************************************/
+/* CHECKS                                                                     */
+/******************************************************************************/
+
+/******************************************************************************/
+/* DATA STRUCTURES AND TYPES                                                  */
+/******************************************************************************/
+
+/**
+ * @brief  Base subscriber
+ * @details The base subscriber is included in each specialized subscriber
+ */
+typedef struct urt_basesubscriber
+{
+    urt_topic_t* topic;
+    urt_osEventListener_t evtListener;
+    urt_message_t* lastMessage;
+    urt_osTime_t lastMessageTime;
+    #if (URT_CFG_PUBSUB_PROFILING)
+        uint64_t sumLatencies;
+        uint64_t numMessagesReceived;
+    #endif /* URT_CFG_PUBSUB_PROFILING */
+}urt_basesubscriber_t;
+
+/**
+ * @brief  nrt subscriber
+ */
+typedef struct urt_nrtsubscriber
+{
+    urt_basesubscriber_t base;
+    #if (URT_CFG_PUBSUB_PROFILING)
+        urt_delay_t minLatency;
+        urt_delay_t maxLatency;
+    #endif /* URT_CFG_PUBSUB_PROFILING */
+}urt_nrtsubscriber_t;
+
+/**
+ * @brief  nrt subscriber
+ */
+typedef struct urt_srtsubscriber
+{
+    urt_basesubscriber_t base;
+    urt_srtusefulnessfunc_t* usefulnesscb;
+    #if (URT_CFG_PUBSUB_PROFILING)
+        urt_delay_t minLatency;
+        urt_delay_t maxLatency;
+    #endif /* URT_CFG_PUBSUB_PROFILING */
+}urt_srtsubscriber_t;
+
+/**
+ * @brief  nrt subscriber
+ */
+typedef struct urt_frtsubscriber
+{
+    urt_basesubscriber_t base;
+    #if (URT_CFG_PUBSUB_QOS_DEADLINECHECKS)
+        urt_delay_t deadlineOffset;
+    #endif /* URT_CFG_PUBSUB_QOS_DEADLINECHECKS */
+    #if (URT_CFG_PUBSUB_QOS_JITTERCHECKS)
+        urt_delay_t maxJitter;
+    #endif /* URT_CFG_PUBSUB_QOS_JITTERCHECKS */
+    #if (URT_CFG_PUBSUB_QOS_JITTERCHECKS || URT_CFG_PUBSUB_PROFILING)
+        urt_delay_t minLatency;
+        urt_delay_t maxLatency;
+    #endif /* URT_CFG_PUBSUB_QOS_JITTERCHECKS || URT_CFG_PUBSUB_PROFILING */
+}urt_frtsubscriber_t;
+
+/**
+ * @brief  nrt subscriber
+ */
+typedef struct urt_hrtsubscriber
+{
+    urt_basesubscriber_t base;
+    urt_hrtsubscriber_t* next;
+    #if (URT_CFG_PUBSUB_QOS_DEADLINECHECKS)
+        urt_delay_t deadlineOffset;
+        urt_osTimer_t qosDeadlineTimer;
+    #endif /* URT_CFG_PUBSUB_QOS_DEADLINECHECKS */
+    #if (URT_CFG_PUBSUB_QOS_JITTERCHECKS)
+        urt_delay_t maxJitter;
+    #endif /* URT_CFG_PUBSUB_QOS_JITTERCHECKS */
+    #if (URT_CFG_PUBSUB_QOS_JITTERCHECKS || URT_CFG_PUBSUB_PROFILING)
+        urt_delay_t minLatency;
+        urt_delay_t maxLatency;
+    #endif /* URT_CFG_PUBSUB_QOS_JITTERCHECKS || URT_CFG_PUBSUB_PROFILING */
+    #if (URT_CFG_PUBSUB_QOS_RATECHECKS)
+        urt_delay_t expectedRate;
+    #endif /* URT_CFG_PUBSUB_QOS_RATECHECKS */
+}urt_hrtsubscriber_t;
+
+/******************************************************************************/
+/* MACROS                                                                     */
+/******************************************************************************/
+
+/******************************************************************************/
+/* EXTERN DECLARATIONS                                                        */
+/******************************************************************************/
+
+#if defined(__cplusplus)
+extern "C" {
+#endif /* defined(__cplusplus) */
+
+    void urtNrtSubscriberInit();
+    urt_status_t urtNrtSubscriberSubscribe();
+    urt_status_t urtNrtSubscriberFetchNextMessage();
+    urt_status_t urtNrtSubscriberFetchLatestMessage();
+    urt_status_t urtNrtSubscriberUnsubscribe();
+
+    void urtSrtSubscriberInit();
+    urt_status_t urtSrtSubscriberSubscribe();
+    urt_status_t urtSrtSubscriberFetchNextMessage();
+    urt_status_t urtSrtSubscriberFetchLatestMessage();
+    urt_status_t urtSrtSubscriberCalculateUsefulness();
+    urt_status_t urtSrtSubscriberUnsubscribe();
+
+    void urtFrtSubscriberInit();
+    urt_status_t urtFrtSubscriberSubscribe();
+    urt_status_t urtFrtSubscriberFetchNextMessage();
+    urt_status_t urtFrtSubscriberFetchLatestMessage();
+    bool urtFrtSubscriberCalculateValidity();
+    urt_status_t urtFrtSubscriberUnsubscribe();
+
+    void urtHrtSubscriberInit();
+    urt_status_t urtHrtSubscriberSubscribe();
+    urt_status_t urtHrtSubscriberFetchNextMessage();
+    urt_status_t urtHrtSubscriberFetchLatestMessage();
+    urt_status_t urtHrtSubscriberUnsubscribe();
+
+    float urt_srtusefulnessfunc_t();
+#if defined(__cplusplus)
+}
+#endif /* defined(__cplusplus) */
+
+/******************************************************************************/
+/* INLINE FUNCTIONS                                                           */
+/******************************************************************************/
+
+#endif /* URTWARE_SUBSCRIBER_H */
diff --git a/inc/urt_topic.h b/inc/urt_topic.h
new file mode 100644
index 0000000..03fa64f
--- /dev/null
+++ b/inc/urt_topic.h
@@ -0,0 +1,53 @@
+/*
+µRtWare is a lightweight publish/subscribe middleware for real-time
+applications. It was developed as part of the software habitat for the
+Autonomous Mini Robot [1] (AMiRo) but can be used for other purposes as well.
+
+Copyright (C) 2018..2020  Thomas Schöpping et al.
+
+This program is free software: you can redistribute it and/or modify
+it under the terms of the GNU General Public License as published by
+the Free Software Foundation, either version 3 of the License, or
+(at your option) any later version.
+
+This program is distributed in the hope that it will be useful,
+but WITHOUT ANY WARRANTY; without even the implied warranty of
+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+GNU General Public License for more details.
+
+You should have received a copy of the GNU General Public License
+along with this program.  If not, see <http://www.gnu.org/licenses/>.
+*/
+
+#ifndef URTWARE_TOPIC_H
+#define URTWARE_TOPIC_H
+
+/******************************************************************************/
+/* CONSTANTS                                                                  */
+/******************************************************************************/
+
+/******************************************************************************/
+/* SETTINGS                                                                   */
+/******************************************************************************/
+
+/******************************************************************************/
+/* CHECKS                                                                     */
+/******************************************************************************/
+
+/******************************************************************************/
+/* DATA STRUCTURES AND TYPES                                                  */
+/******************************************************************************/
+
+/******************************************************************************/
+/* MACROS                                                                     */
+/******************************************************************************/
+
+/******************************************************************************/
+/* EXTERN DECLARATIONS                                                        */
+/******************************************************************************/
+
+/******************************************************************************/
+/* INLINE FUNCTIONS                                                           */
+/******************************************************************************/
+
+#endif /* URTWARE_TOPIC_H */
diff --git a/setup.sh b/setup.sh
new file mode 100755
index 0000000..a42ac63
--- /dev/null
+++ b/setup.sh
@@ -0,0 +1,161 @@
+################################################################################
+# AMiRo-Apps is a collection of applications for the Autonomous Mini Robot     #
+# (AMiRo) platform.                                                            #
+# Copyright (C) 2018..2019  Thomas Schöpping et al.                            #
+#                                                                              #
+# This program is free software: you can redistribute it and/or modify         #
+# it under the terms of the GNU General Public License as published by         #
+# the Free Software Foundation, either version 3 of the License, or            #
+# (at your option) any later version.                                          #
+#                                                                              #
+# This program is distributed in the hope that it will be useful,              #
+# but WITHOUT ANY WARRANTY; without even the implied warranty of               #
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the                #
+# GNU General Public License for more details.                                 #
+#                                                                              #
+# You should have received a copy of the GNU General Public License            #
+# along with this program.  If not, see <http://www.gnu.org/licenses/>.        #
+#                                                                              #
+# This research/work was supported by the Cluster of Excellence Cognitive      #
+# Interaction Technology 'CITEC' (EXC 277) at Bielefeld University, which is   #
+# funded by the German Research Foundation (DFG).                              #
+################################################################################
+
+#!/bin/bash
+
+# load library
+source "$(dirname ${BASH_SOURCE[0]})/tools/bash/setuplib.sh"
+
+### print welcome text #########################################################
+# Prints a welcome message to standard out.
+#
+# usage:      printWelcomeText
+# arguments:  n/a
+# return:     n/a
+#
+function printWelcomeText {
+  printf "######################################################################\n"
+  printf "#                                                                    #\n"
+  printf "#                  Welcome to the AMiRo-Apps setup!                  #\n"
+  printf "#                                                                    #\n"
+  printf "######################################################################\n"
+  printf "#                                                                    #\n"
+  printf "# Copyright (c) 2018..2019  Thomas Schöpping                         #\n"
+  printf "#                                                                    #\n"
+  printf "# This is free software; see the source for copying conditions.      #\n"
+  printf "# There is NO warranty; not even for MERCHANTABILITY or FITNESS FOR  #\n"
+  printf "# A PARTICULAR PURPOSE. The development of this software was         #\n"
+  printf "# supported by the Excellence Cluster EXC 227 Cognitive Interaction  #\n"
+  printf "# Technology. The Excellence Cluster EXC 227 is a grant of the       #\n"
+  printf "# Deutsche Forschungsgemeinschaft (DFG) in the context of the German #\n"
+  printf "# Excellence Initiative.                                             #\n"
+  printf "#                                                                    #\n"
+  printf "######################################################################\n"
+}
+
+### print help #################################################################
+# Prints a help text to standard out.
+#
+# usage:      printHelp
+# arguments:  n/a
+# return:     n/a
+#
+function printHelp {
+  printInfo "printing help text\n"
+  printf "usage:    $(basename ${BASH_SOURCE[0]}) [-h|--help] [-i|--init] [-k|--kernel] [-b|--bootloader] [-p|--periphery-LLD] [-m|--middleware] [-c|--compiler] [--IDE] [-q|--quit] [--log=<file>]\n"
+  printf "\n"
+  printf "options:  -h, --help\n"
+  printf "              Print this help text.\n"
+  printf "          --IDE\n"
+  printf "              Enter IDE setup.\n"
+  printf "          -q, --quit\n"
+  printf "              Quit the script.\n"
+}
+
+### enter IDE setup ############################################################
+# Enter IDE setup.
+#
+# usage:      ideSetup
+# arguments:  n/a
+# return:     n/a
+#
+function ideSetup {
+  printInfo "entering IDE setup\n"
+  $(dirname $(realpath ${BASH_SOURCE[0]}))/tools/ide/idesetup.sh
+}
+
+### main function of this script ###############################################
+# Provides functions for project initialization, configuration of IDE and
+# compiler setup, as well as entry points to the several Git submodules.
+#
+# usage:      see function printHelp
+# arguments:  see function printHelp
+# return:     0
+#                 No error or warning occurred.
+#
+function main {
+  # print welcome/info text if not suppressed
+  if [[ $@ != *"--noinfo"* ]]; then
+    printWelcomeText
+  else
+    printf "######################################################################\n"
+  fi
+  printf "\n"
+
+  # if --help or -h was specified, print the help text and exit
+  if [[ $@ == *"--help"* || $@ == *"-h"* ]]; then
+    printHelp
+    printf "\n"
+    quitScript
+  fi
+
+  # parse arguments
+  local otherargs=()
+  while [ $# -gt 0 ]; do
+    if ( parseIsOption $1 ); then
+      case "$1" in
+        -h|--help) # already handled; ignore
+          shift 1;;
+        --IDE)
+           ideSetup; printf "\n"; shift 1;;
+        -q|--quit)
+          quitScript; shift 1;;
+        *)
+          printError "invalid option: $1\n"; shift 1;;
+      esac
+    else
+      otherargs+=("$1")
+      shift 1
+    fi
+  done
+
+  # interactive menu
+  while ( true ); do
+    # main menu info prompt and selection
+    printInfo "AMiRo-Apps main menu\n"
+    printf "Please select one of the following actions:\n"
+    printf "  [E] - enter IDE project setup\n"
+    printf "  [Q] - quit this setup\n"
+    local userinput=""
+    readUserInput "IiOoMmCcEeQq" userinput
+    printf "\n"
+
+    # evaluate user selection
+    case "$userinput" in
+      E|e)
+        ideSetup; printf "\n";;
+      Q|q)
+        quitScript;;
+      *) # sanity check (exit with error)
+        printError "unexpected argument: $userinput\n";;
+    esac
+  done
+
+  exit 0
+}
+
+################################################################################
+# SCRIPT ENTRY POINT                                                           #
+################################################################################
+
+main "$@"
diff --git a/src/subscriber/nrtsubscriber.c b/src/subscriber/nrtsubscriber.c
deleted file mode 100644
index b5a02c0..0000000
--- a/src/subscriber/nrtsubscriber.c
+++ /dev/null
@@ -1,23 +0,0 @@
-#include "subscriber.h"
-
-void urtNrtSubscriberInit (urt_nrtsubscriber_t* subscriber) {}
-
-urt_status_t urtNrtSubscriberSubscribe (urt_nrtsubscriber_t* subscriber, urt_topic_t* topic, urt_message_t* messages) {
-  return 0;
-}
-
-urt_status_t urtNrtSubscriberFetchNextMessage (urt_nrtsubscriber_t* subscriber, void* payload, size_t bytes, urt_delay_t* latency) {
-  return 0;
-}
-
-urt_status_t urtNrtSubscriberFetchLatestMessage (urt_nrtsubscriber_t* subscriber, void* payload, size_t bytes, urt_delay_t* latency) {
-  return 0;
-}
-
-urt_status_t urtNrtSubscriberUnsubscribe (urt_nrtsubscriber_t* subscriber) {
-  return 0;
-}
-
-int main () {
- return 0;
-}
diff --git a/src/subscriber/subscriber.h b/src/subscriber/subscriber.h
deleted file mode 100644
index d020357..0000000
--- a/src/subscriber/subscriber.h
+++ /dev/null
@@ -1,25 +0,0 @@
-#ifndef SUBSCRIBER_H_
-#define SUBSCRIBER_H_
-#define URT_CFG_PUBSUB_PROFILING 0
-
-// Base subscriber which is included in each specialised subscriber
-struct urt_basesubscriber_t {
-  urt_topic_t *topic;
-  urt_osEventListener_t evtListener;
-  urt_message_t *lastMessage;
-  urt_osTime_t lastMessageTime;
-  #if (URT_CFG_PUBSUB_PROFILING)
-    uint64_t sumLatencies;
-    uint64_t numMessagesReceived;
-  #endif /* URT_CFG_PUBSUB_PROFILING */
-};
-
-struct urt_nrtsubscriber_t {
-  struct urt_basesubscriber_t base;
-  #if (URT_CFG_PUBSUB_PROFILING)
-    urt_delay_t minLatency;
-    urt_delay_t maxLatency;
-  #endif /* URT_CFG_PUBSUB_PROFILING */
-};
-
-#endif /* SUBSCRIBER_H_ */
diff --git a/src/todo.txt b/src/todo.txt
deleted file mode 100644
index 258cd57..0000000
--- a/src/todo.txt
+++ /dev/null
@@ -1 +0,0 @@
-todo
diff --git a/src/urt_core.c b/src/urt_core.c
new file mode 100644
index 0000000..c38d477
--- /dev/null
+++ b/src/urt_core.c
@@ -0,0 +1,44 @@
+/*
+µRtWare is a lightweight publish/subscribe middleware for real-time
+applications. It was developed as part of the software habitat for the
+Autonomous Mini Robot [1] (AMiRo) but can be used for other purposes as well.
+
+Copyright (C) 2018..2020  Thomas Schöpping et al.
+
+This program is free software: you can redistribute it and/or modify
+it under the terms of the GNU General Public License as published by
+the Free Software Foundation, either version 3 of the License, or
+(at your option) any later version.
+
+This program is distributed in the hope that it will be useful,
+but WITHOUT ANY WARRANTY; without even the implied warranty of
+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+GNU General Public License for more details.
+
+You should have received a copy of the GNU General Public License
+along with this program.  If not, see <http://www.gnu.org/licenses/>.
+*/
+
+/******************************************************************************/
+/* LOCAL DEFINITIONS                                                          */
+/******************************************************************************/
+
+/******************************************************************************/
+/* EXPORTED VARIABLES                                                         */
+/******************************************************************************/
+
+/******************************************************************************/
+/* LOCAL TYPES                                                                */
+/******************************************************************************/
+
+/******************************************************************************/
+/* LOCAL VARIABLES                                                            */
+/******************************************************************************/
+
+/******************************************************************************/
+/* LOCAL FUNCTIONS                                                            */
+/******************************************************************************/
+
+/******************************************************************************/
+/* EXPORTED FUNCTIONS                                                         */
+/******************************************************************************/
diff --git a/src/urt_message.c b/src/urt_message.c
new file mode 100644
index 0000000..c38d477
--- /dev/null
+++ b/src/urt_message.c
@@ -0,0 +1,44 @@
+/*
+µRtWare is a lightweight publish/subscribe middleware for real-time
+applications. It was developed as part of the software habitat for the
+Autonomous Mini Robot [1] (AMiRo) but can be used for other purposes as well.
+
+Copyright (C) 2018..2020  Thomas Schöpping et al.
+
+This program is free software: you can redistribute it and/or modify
+it under the terms of the GNU General Public License as published by
+the Free Software Foundation, either version 3 of the License, or
+(at your option) any later version.
+
+This program is distributed in the hope that it will be useful,
+but WITHOUT ANY WARRANTY; without even the implied warranty of
+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+GNU General Public License for more details.
+
+You should have received a copy of the GNU General Public License
+along with this program.  If not, see <http://www.gnu.org/licenses/>.
+*/
+
+/******************************************************************************/
+/* LOCAL DEFINITIONS                                                          */
+/******************************************************************************/
+
+/******************************************************************************/
+/* EXPORTED VARIABLES                                                         */
+/******************************************************************************/
+
+/******************************************************************************/
+/* LOCAL TYPES                                                                */
+/******************************************************************************/
+
+/******************************************************************************/
+/* LOCAL VARIABLES                                                            */
+/******************************************************************************/
+
+/******************************************************************************/
+/* LOCAL FUNCTIONS                                                            */
+/******************************************************************************/
+
+/******************************************************************************/
+/* EXPORTED FUNCTIONS                                                         */
+/******************************************************************************/
diff --git a/src/urt_node.c b/src/urt_node.c
new file mode 100644
index 0000000..c38d477
--- /dev/null
+++ b/src/urt_node.c
@@ -0,0 +1,44 @@
+/*
+µRtWare is a lightweight publish/subscribe middleware for real-time
+applications. It was developed as part of the software habitat for the
+Autonomous Mini Robot [1] (AMiRo) but can be used for other purposes as well.
+
+Copyright (C) 2018..2020  Thomas Schöpping et al.
+
+This program is free software: you can redistribute it and/or modify
+it under the terms of the GNU General Public License as published by
+the Free Software Foundation, either version 3 of the License, or
+(at your option) any later version.
+
+This program is distributed in the hope that it will be useful,
+but WITHOUT ANY WARRANTY; without even the implied warranty of
+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+GNU General Public License for more details.
+
+You should have received a copy of the GNU General Public License
+along with this program.  If not, see <http://www.gnu.org/licenses/>.
+*/
+
+/******************************************************************************/
+/* LOCAL DEFINITIONS                                                          */
+/******************************************************************************/
+
+/******************************************************************************/
+/* EXPORTED VARIABLES                                                         */
+/******************************************************************************/
+
+/******************************************************************************/
+/* LOCAL TYPES                                                                */
+/******************************************************************************/
+
+/******************************************************************************/
+/* LOCAL VARIABLES                                                            */
+/******************************************************************************/
+
+/******************************************************************************/
+/* LOCAL FUNCTIONS                                                            */
+/******************************************************************************/
+
+/******************************************************************************/
+/* EXPORTED FUNCTIONS                                                         */
+/******************************************************************************/
diff --git a/src/urt_publisher.c b/src/urt_publisher.c
new file mode 100644
index 0000000..c38d477
--- /dev/null
+++ b/src/urt_publisher.c
@@ -0,0 +1,44 @@
+/*
+µRtWare is a lightweight publish/subscribe middleware for real-time
+applications. It was developed as part of the software habitat for the
+Autonomous Mini Robot [1] (AMiRo) but can be used for other purposes as well.
+
+Copyright (C) 2018..2020  Thomas Schöpping et al.
+
+This program is free software: you can redistribute it and/or modify
+it under the terms of the GNU General Public License as published by
+the Free Software Foundation, either version 3 of the License, or
+(at your option) any later version.
+
+This program is distributed in the hope that it will be useful,
+but WITHOUT ANY WARRANTY; without even the implied warranty of
+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+GNU General Public License for more details.
+
+You should have received a copy of the GNU General Public License
+along with this program.  If not, see <http://www.gnu.org/licenses/>.
+*/
+
+/******************************************************************************/
+/* LOCAL DEFINITIONS                                                          */
+/******************************************************************************/
+
+/******************************************************************************/
+/* EXPORTED VARIABLES                                                         */
+/******************************************************************************/
+
+/******************************************************************************/
+/* LOCAL TYPES                                                                */
+/******************************************************************************/
+
+/******************************************************************************/
+/* LOCAL VARIABLES                                                            */
+/******************************************************************************/
+
+/******************************************************************************/
+/* LOCAL FUNCTIONS                                                            */
+/******************************************************************************/
+
+/******************************************************************************/
+/* EXPORTED FUNCTIONS                                                         */
+/******************************************************************************/
diff --git a/src/urt_service.c b/src/urt_service.c
new file mode 100644
index 0000000..c38d477
--- /dev/null
+++ b/src/urt_service.c
@@ -0,0 +1,44 @@
+/*
+µRtWare is a lightweight publish/subscribe middleware for real-time
+applications. It was developed as part of the software habitat for the
+Autonomous Mini Robot [1] (AMiRo) but can be used for other purposes as well.
+
+Copyright (C) 2018..2020  Thomas Schöpping et al.
+
+This program is free software: you can redistribute it and/or modify
+it under the terms of the GNU General Public License as published by
+the Free Software Foundation, either version 3 of the License, or
+(at your option) any later version.
+
+This program is distributed in the hope that it will be useful,
+but WITHOUT ANY WARRANTY; without even the implied warranty of
+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+GNU General Public License for more details.
+
+You should have received a copy of the GNU General Public License
+along with this program.  If not, see <http://www.gnu.org/licenses/>.
+*/
+
+/******************************************************************************/
+/* LOCAL DEFINITIONS                                                          */
+/******************************************************************************/
+
+/******************************************************************************/
+/* EXPORTED VARIABLES                                                         */
+/******************************************************************************/
+
+/******************************************************************************/
+/* LOCAL TYPES                                                                */
+/******************************************************************************/
+
+/******************************************************************************/
+/* LOCAL VARIABLES                                                            */
+/******************************************************************************/
+
+/******************************************************************************/
+/* LOCAL FUNCTIONS                                                            */
+/******************************************************************************/
+
+/******************************************************************************/
+/* EXPORTED FUNCTIONS                                                         */
+/******************************************************************************/
diff --git a/src/urt_subscriber.c b/src/urt_subscriber.c
new file mode 100644
index 0000000..c2992d9
--- /dev/null
+++ b/src/urt_subscriber.c
@@ -0,0 +1,67 @@
+/*
+µRtWare is a lightweight publish/subscribe middleware for real-time
+applications. It was developed as part of the software habitat for the
+Autonomous Mini Robot [1] (AMiRo) but can be used for other purposes as well.
+
+Copyright (C) 2018..2020  Thomas Schöpping et al.
+
+This program is free software: you can redistribute it and/or modify
+it under the terms of the GNU General Public License as published by
+the Free Software Foundation, either version 3 of the License, or
+(at your option) any later version.
+
+This program is distributed in the hope that it will be useful,
+but WITHOUT ANY WARRANTY; without even the implied warranty of
+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+GNU General Public License for more details.
+
+You should have received a copy of the GNU General Public License
+along with this program.  If not, see <http://www.gnu.org/licenses/>.
+*/
+
+/******************************************************************************/
+/* LOCAL DEFINITIONS                                                          */
+/******************************************************************************/
+
+/******************************************************************************/
+/* EXPORTED VARIABLES                                                         */
+/******************************************************************************/
+
+/******************************************************************************/
+/* LOCAL TYPES                                                                */
+/******************************************************************************/
+
+/******************************************************************************/
+/* LOCAL VARIABLES                                                            */
+/******************************************************************************/
+
+/******************************************************************************/
+/* LOCAL FUNCTIONS                                                            */
+/******************************************************************************/
+
+/******************************************************************************/
+/* EXPORTED FUNCTIONS                                                         */
+/******************************************************************************/
+#include "subscriber.h"
+
+void urtNrtSubscriberInit (urt_nrtsubscriber_t* subscriber) {}
+
+urt_status_t urtNrtSubscriberSubscribe (urt_nrtsubscriber_t* subscriber, urt_topic_t* topic, urt_message_t* messages) {
+  return 1;
+}
+
+urt_status_t urtNrtSubscriberFetchNextMessage (urt_nrtsubscriber_t* subscriber, void* payload, size_t bytes, urt_delay_t* latency) {
+  return 0;
+}
+
+urt_status_t urtNrtSubscriberFetchLatestMessage (urt_nrtsubscriber_t* subscriber, void* payload, size_t bytes, urt_delay_t* latency) {
+  return 0;
+}
+
+urt_status_t urtNrtSubscriberUnsubscribe (urt_nrtsubscriber_t* subscriber) {
+  return 0;
+}
+
+int main () {
+ return 0;
+}
diff --git a/src/urt_topic.c b/src/urt_topic.c
new file mode 100644
index 0000000..c38d477
--- /dev/null
+++ b/src/urt_topic.c
@@ -0,0 +1,44 @@
+/*
+µRtWare is a lightweight publish/subscribe middleware for real-time
+applications. It was developed as part of the software habitat for the
+Autonomous Mini Robot [1] (AMiRo) but can be used for other purposes as well.
+
+Copyright (C) 2018..2020  Thomas Schöpping et al.
+
+This program is free software: you can redistribute it and/or modify
+it under the terms of the GNU General Public License as published by
+the Free Software Foundation, either version 3 of the License, or
+(at your option) any later version.
+
+This program is distributed in the hope that it will be useful,
+but WITHOUT ANY WARRANTY; without even the implied warranty of
+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+GNU General Public License for more details.
+
+You should have received a copy of the GNU General Public License
+along with this program.  If not, see <http://www.gnu.org/licenses/>.
+*/
+
+/******************************************************************************/
+/* LOCAL DEFINITIONS                                                          */
+/******************************************************************************/
+
+/******************************************************************************/
+/* EXPORTED VARIABLES                                                         */
+/******************************************************************************/
+
+/******************************************************************************/
+/* LOCAL TYPES                                                                */
+/******************************************************************************/
+
+/******************************************************************************/
+/* LOCAL VARIABLES                                                            */
+/******************************************************************************/
+
+/******************************************************************************/
+/* LOCAL FUNCTIONS                                                            */
+/******************************************************************************/
+
+/******************************************************************************/
+/* EXPORTED FUNCTIONS                                                         */
+/******************************************************************************/
diff --git a/tools/bash/setuplib.sh b/tools/bash/setuplib.sh
new file mode 100644
index 0000000..668db81
--- /dev/null
+++ b/tools/bash/setuplib.sh
@@ -0,0 +1,294 @@
+################################################################################
+# AMiRo-uRtWare is a collection of applications for the Autonomous Mini Robot     #
+# (AMiRo) platform.                                                            #
+# Copyright (C) 2016..2020  Thomas Schöpping et al.                            #
+#                                                                              #
+# This program is free software: you can redistribute it and/or modify         #
+# it under the terms of the GNU General Public License as published by         #
+# the Free Software Foundation, either version 3 of the License, or            #
+# (at your option) any later version.                                          #
+#                                                                              #
+# This program is distributed in the hope that it will be useful,              #
+# but WITHOUT ANY WARRANTY; without even the implied warranty of               #
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the                #
+# GNU General Public License for more details.                                 #
+#                                                                              #
+# You should have received a copy of the GNU General Public License            #
+# along with this program.  If not, see <http://www.gnu.org/licenses/>.        #
+#                                                                              #
+# This research/work was supported by the Cluster of Excellence Cognitive      #
+# Interaction Technology 'CITEC' (EXC 277) at Bielefeld University, which is   #
+# funded by the German Research Foundation (DFG).                              #
+################################################################################
+
+### print an error message #####################################################
+# Prints a error <message> to standard output.
+#If variable 'LOG_FILE' is specified, the message is also appended to the given file.
+#
+# usage:      printError <message>
+# arguments:  <message>
+#                 Message string to print.
+# return:     n/a
+#
+function printError {
+  local string="ERROR:   $1"
+  # if a log file is specified
+  if [ -n "$LOG_FILE" ]; then
+    printf "[$(date '+%Y-%m-%d %H:%M:%S')] $string" >> $LOG_FILE
+  fi
+  printf "$(tput setaf 1)>>> $string$(tput sgr 0)" 1>&2
+}
+
+### print a warning message ####################################################
+# Prints a warning <message> to standard output.
+#If variable 'LOG_FILE' is specified, the message is also appended to the given file.
+#
+# usage:      printMessage <message>
+# arguments:  <message>
+#                 Message string to print.
+# return:     n/a
+#
+function printWarning {
+  local string="WARNING: $1"
+  # if a log file is specified
+  if [ -n "$LOG_FILE" ]; then
+    printf "[$(date '+%Y-%m-%d %H:%M:%S')] $string" >> $LOG_FILE
+  fi
+  printf "$(tput setaf 3)>>> $string$(tput sgr 0)"
+}
+
+### print an information message ###############################################
+# Prints an information <message> to standard output.
+#If variable 'LOG_FILE' is specified, the message is also appended to the given file.
+#
+# usage:      printInfo <message>
+# arguments:  <message>
+#                 Message string to print.
+# return:     n/a
+#
+function printInfo {
+  local string="INFO:    $1"
+  # if a log file is specified
+  if [ -n "$LOG_FILE" ]; then
+    printf "[$(date '+%Y-%m-%d %H:%M:%S')] $string" >> $LOG_FILE
+  fi
+  printf "$(tput setaf 2)>>> $string$(tput sgr 0)"
+}
+
+### print a message to file ####################################################
+# Appends a <message> to a log file, specified by the variable 'LOG_FILE'.
+#
+# usage       printLog <message>
+# arguments:  <message>
+#                 Message string to print.
+# return:     n/a
+#
+function printLog {
+  local string="LOG:     $1"
+  # if a log file is specified
+  if [ -n "$LOG_FILE" ]; then
+    printf "[$(date '+%Y-%m-%d %H:%M:%S')] $string" >> $LOG_FILE
+  fi
+}
+
+### exit the script normally ###################################################
+# Prints a delimiter and exits the script normally (returns 0).
+#
+# usage:      quitScript
+# arguments:  n/a
+# return:     0
+#                 No error or warning occurred.
+#
+function quitScript {
+  if [ ! -z ${BASH_SOURCE[1]} ]; then
+    printInfo "exiting $(realpath --relative-to="${PWD}" "${BASH_SOURCE[1]}")\n"
+    printf "\n"
+  fi
+  printf "######################################################################\n"
+  exit 0
+}
+
+### read a user input ##########################################################
+# Reads a single character user input from a set up <options> and stores it in
+# a given <return> variable.
+#
+# usage:      readUserInput <options> <return>
+# arguments:  <options>
+#                 String definiing the set of valid characters.
+#                 If the string is empty, the user can input any character.
+#             <return>
+#                 Variable to store the selected character to.
+# return:     n/a
+#
+function readUserInput {
+  local input=""
+  # read user input
+  while [ -z $input ] || ( [ -n "$1" ] && [[ ! $input =~ ^[$1]$ ]] ); do
+    read -p "your selection: " -n 1 -e input
+    if [ -z $input ] || ( [ -n "$1" ] && [[ ! $input =~ ^[$1]$ ]] ); then
+      printWarning "[$input] is no valid action\n"
+    fi
+  done
+  printLog "[$input] has been selected\n"
+  eval $2="$input"
+}
+
+### check whether argument is an option ########################################
+# Checks a <string> whether it is an option.
+# Options are defined to either start with '--' followed by any string, or
+# to start with a single '-' followed by a single character, or
+# to start with a single '-' followed by a single character, a '=' and any string.
+# Examples: '--option', '--option=arg', '-o', '-o=arg', '--'
+#
+# usage:      parseIsOption <string>
+# arguments:  <string>
+#                 A string to check whether it is an option.
+# return:     0
+#                 <string> is an option.
+#             -1
+#                 <string> is not an option.
+#
+function parseIsOption {
+  if [[ "$1" =~ ^-(.$|.=.*) ]] || [[ "$1" =~ ^--.* ]]; then
+    return 0
+  else
+    return -1
+  fi
+}
+
+### set the log file ###########################################################
+# Sets a specified <infile> as log file and checks whether it already exists.
+# If so, the log may either be appended to the file, its content can be cleared,
+# or no log is generated at all.
+# The resulting path is stored in <outvar>.
+#
+# usage:      setLogFile [--option=<option>] [--quiet] <infile> <outvar>
+# arguments:  --option=<option>
+#                 Select what to do if <file> already exists.
+#                 Possible values are 'a', 'c', 'r' and 'n'.
+#                 - a: append (starts with a separator)
+#                 - c: continue (does not insert a seperator)
+#                 - r: delete and restart
+#                 - n: no log
+#                 If no option is secified but <file> exists, an interactive selection is provided.
+#             --quiet
+#                 Suppress all messages.
+#             <infile>
+#                 Path of the wanted log file.
+#             <outvar>
+#                 Variable to store the path of the log file to.
+# return:     0
+#                 No error or warning occurred.
+#             -1
+#                 Error: invalid input
+#
+function setLogFile {
+  local filepath=""
+  local option=""
+  local quiet=false
+
+  # parse arguments
+  local otherargs=()
+  while [ $# -gt 0 ]; do
+    if ( parseIsOption $1 ); then
+      case "$1" in
+        -o=*|--option=*)
+          option=${1#*=}; shift 1;;
+        -o*|--option*)
+          option="$2"; shift 2;;
+        -q|--quiet)
+          quiet=true; shift 1;;
+        *)
+          printError "invalid option: $1\n"; shift 1;;
+      esac
+    else
+      otherargs+=("$1")
+      shift 1
+    fi
+  done
+  filepath=$(realpath ${otherargs[0]})
+
+  # if file already exists
+  if [ -e $filepath ]; then
+    # if no option was specified, ask what to do
+    if [ -z "$option" ]; then
+      printWarning "log file $filepath already esists\n"
+      local userinput=""
+      printf "Select what to do:\n"
+      printf "  [A] - append log\n"
+      printf "  [R] - restart log (delete existing file)\n"
+      printf "  [N] - no log\n"
+      readUserInput "AaRrNn" userinput
+      option=${userinput,,}
+    fi
+    # evaluate option
+    case "$option" in
+      a|c)
+        if [ $quiet = false ]; then
+          printInfo "appending log to $filepath\n"
+        fi
+        if [ $option != c ]; then
+          printf "\n" >> $filepath
+          printf "######################################################################\n" >> $filepath
+          printf "\n" >> $filepath
+        fi
+        ;;
+      r)
+        echo -n "" > $filepath
+        if [ $quiet = false ]; then
+          printInfo "content of $filepath wiped\n"
+        fi
+        ;;
+      n)
+        if [ $quiet = false ]; then
+          printInfo "no log file will be generated\n"
+        fi
+        filepath=""
+        ;;
+      *) # sanity check (return error)
+        printError "unexpected argument: $option\n"; return -1;;
+    esac
+  else
+    if [ $quiet = false ]; then
+      printInfo "log file set to $filepath\n"
+    fi
+  fi
+
+  eval ${otherargs[1]}="$filepath"
+
+  return 0
+}
+
+### check whether commands are available #######################################
+# Checks whether the specified commands are available and can be executed.
+#
+# usage:      checkCommands [<command> <command> ...]
+# arguments:  <command>
+#                 Name of the command to check.
+# return:     0
+#                 All requested commands are available.
+#             >0
+#                 Number of requested commands that were not found.
+#             -1
+#                 No argument given.
+#
+function checkCommands {
+  local status=0
+
+  # return if no argument was specified
+  if [ $# -eq 0 ]; then
+    return -1
+  fi
+
+  # check all specified commands
+  while [ $# -gt 0 ]; do
+    command -v $1 &>/dev/null
+    if [ $? -ne 0 ]; then
+      printWarning "Command '$1' not available.\n"
+      status=$((status + 1))
+    fi
+    shift 1
+  done
+
+  return $status
+}
diff --git a/tools/ide/QtCreator/QtCreatorSetup.sh b/tools/ide/QtCreator/QtCreatorSetup.sh
new file mode 100755
index 0000000..22791e5
--- /dev/null
+++ b/tools/ide/QtCreator/QtCreatorSetup.sh
@@ -0,0 +1,429 @@
+################################################################################
+# AMiRo-uRtWare is a collection of applications and configurations for the     #
+# Autonomous Mini Robot (AMiRo).                                               #
+# Copyright (C) 2018..2020  Thomas Schöpping et al.                            #
+#                                                                              #
+# This program is free software: you can redistribute it and/or modify         #
+# it under the terms of the GNU General Public License as published by         #
+# the Free Software Foundation, either version 3 of the License, or            #
+# (at your option) any later version.                                          #
+#                                                                              #
+# This program is distributed in the hope that it will be useful,              #
+# but WITHOUT ANY WARRANTY; without even the implied warranty of               #
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the                #
+# GNU General Public License for more details.                                 #
+#                                                                              #
+# You should have received a copy of the GNU General Public License            #
+# along with this program.  If not, see <http://www.gnu.org/licenses/>.        #
+#                                                                              #
+# This research/work was supported by the Cluster of Excellence Cognitive      #
+# Interaction Technology 'CITEC' (EXC 277) at Bielefeld University, which is   #
+# funded by the German Research Foundation (DFG).                              #
+################################################################################
+
+#!/bin/bash
+
+# load library
+source "$(dirname ${BASH_SOURCE[0]})/../../bash/setuplib.sh"
+
+### print welcome text #########################################################
+# Prints a welcome message to standard out.
+#
+# usage:      printWelcomeText
+# arguments:  n/a
+# return:     n/a
+#
+function printWelcomeText {
+  printf "######################################################################\n"
+  printf "#                                                                    #\n"
+  printf "#                  Welcome to the QtCreator setup!                   #\n"
+  printf "#                                                                    #\n"
+  printf "######################################################################\n"
+  printf "#                                                                    #\n"
+  printf "# Copyright (c) 2018..2020  Thomas Schöpping                         #\n"
+  printf "#                                                                    #\n"
+  printf "# This is free software; see the source for copying conditions.      #\n"
+  printf "# There is NO warranty; not even for MERCHANTABILITY or FITNESS FOR  #\n"
+  printf "# A PARTICULAR PURPOSE. The development of this software was         #\n"
+  printf "# supported by the Excellence Cluster EXC 227 Cognitive Interaction  #\n"
+  printf "# Technology. The Excellence Cluster EXC 227 is a grant of the       #\n"
+  printf "# Deutsche Forschungsgemeinschaft (DFG) in the context of the German #\n"
+  printf "# Excellence Initiative.                                             #\n"
+  printf "#                                                                    #\n"
+  printf "######################################################################\n"
+}
+
+### print help #################################################################
+# Prints a help text to standard out.
+#
+# usage:      printHelp
+# arguments:  n/a
+# return:     n/a
+#
+function printHelp {
+  printInfo "printing help text\n"
+  printf "usage:    $(basename ${BASH_SOURCE[0]}) [-h|--help] [-c|--clean] [-w|--wipe] [-q|--quit] [--log=<file>]\n"
+  printf "\n"
+  printf "options:  -h, --help\n"
+  printf "              Print this help text.\n"
+  printf "          -i, --initialize\n"
+  printf "              Initialize project files.\n"
+  printf "          -c, --clean\n"
+  printf "              Delete project files.\n"
+  printf "          -q, --quit\n"
+  printf "              Quit the script.\n"
+}
+
+### read directory where to create/delete projects #############################
+# Read the directory where to create/delete project files from user.
+#
+# usage:      getProjectDir <pathvar>
+# arguments:  <pathvar>
+#                 Variable to store the selected path to.
+# return:     n/a
+#
+function getProjectDir {
+  printLog "reading path for project files from user...\n"
+  local amiroappsdir=$(realpath $(dirname $(realpath ${BASH_SOURCE[0]}))/../../../)
+  local input=""
+  read -p "Path where to create/delete project files: " -i $amiroappsdir -e input
+  printLog "user selected path $(realpath $input)\n"
+  eval $1="$(realpath $input)"
+}
+
+### retrieves the ARM-NONE-EABI-GCC include directory ##########################
+# Retrieves the include directory of the currently set arm-none-eabi-gcc.
+#
+# usage:      retrieveGccIncludeDir <path>
+# arguments:  <path>
+#                 Variable to store the path to.
+# return:    0
+#                 No error or warning occurred.
+#            -1
+#                 Error: Command 'arm-none-eabi-gcc' not found.
+#
+function retrieveGccIncludeDir {
+  # retrieve binary path or link
+  local binpath=$(which arm-none-eabi-gcc)
+  if [ -z "$binpath" ]; then
+    printError "command 'arm-none-eabi-gcc' not found\n"
+    return -1
+  else
+
+    # traverse any links
+    while [ -L "$binpath" ]; do
+      binpath=$(readlink $binpath)
+    done
+    printInfo "gcc-arm-none-eabi detected: $binpath\n"
+
+    # return include path
+    eval $1=$(realpath $(dirname ${binpath})/../arm-none-eabi/include/)
+
+    return 0
+  fi
+}
+
+### intialize project files ####################################################
+# Initailizes all project files.
+#
+# usage:      initProject [-p|--path=<path>] [--gcc=<path>] [-o|--out=<var>] [--gccout=<var>]
+# arguments:  -p, --path <path>
+#                 Path where to create the project files.
+#             --gcc=<path>
+#                 Path to the GCC include directory.
+#             -o, --out <var>
+#                 Variable to store the path to.
+#             --gccout=<var>
+#                 Variable to store the path to the GCC include directory to.
+# return:     0
+#                 No error or warning occurred.
+#
+function initProject {
+  local userdir=$(pwd)
+  local projectdir=""
+  local gccincludedir=""
+  local outvar=""
+  local gccoutvar=""
+
+  # parse arguments
+  local otherargs=()
+  while [ $# -gt 0 ]; do
+    if ( parseIsOption $1 ); then
+      case "$1" in
+        -p=*|--path=*)
+          projectdir=$(realpath "${1#*=}"); shift 1;;
+        -p|--path)
+          projectdir=$(realpath "$2"); shift 2;;
+        --gcc=*)
+          gccincludedir=$(realpath "${1#*=}"); shift 1;;
+        --gcc)
+          gccincludedir=$(realpath "$2"); shift 2;;
+        -o=*|--out=*)
+          outvar=${1#*=}; shift 1;;
+        -o|--out)
+          outvar=$2; shift 2;;
+        --gccout=*)
+          gccoutvar=$(realpath "${1#*=}"); shift 1;;
+        --gccout)
+          gccoutvar=$(realpath "$2"); shift 2;;
+        *)
+          printError "invalid option: $1\n"; shift 1;;
+      esac
+    else
+      otherargs+=("$1")
+      shift 1
+    fi
+  done
+
+  # print message
+  printInfo "creating QtCreator project files...\n"
+
+  # read absolute project directory if required
+  if [ -z "$projectdir" ]; then
+    getProjectDir projectdir
+  fi
+
+  # retrieve absolute GCC include dir
+  if [ -z "$gccincludedir" ]; then
+    retrieveGccIncludeDir gccincludedir
+  fi
+
+  # move to project directory
+  cd $projectdir
+
+  # AMiRo-OS, ChibiOS, AMiRo-BLT, AMiRo-LLD and uRtWare relative root directories
+  local urtwarerootdir=$(realpath --relative-base=$projectdir $(dirname ${BASH_SOURCE[0]})/../../..)
+
+  # generate a file that contains all subdirectories as includes (but ignore hidden and documentation directories)
+  find $gccincludedir -type d > ${projectdir}/AMiRo-Apps.includes
+  find $amiroappsrootdir -type d | grep -E "/(apps|configurations)/.+" >> ${projectdir}/AMiRo-Apps.includes
+  find $amiroosrootdir -type d | grep -v "/doc\|/build\|/.dep\|/hal\|/ports" >> ${projectdir}/AMiRo-Apps.includes
+  find $amiroosrootdir -type d | grep -E "/os/hal/(include|src)" >> ${projectdir}/AMiRo-Apps.includes
+  find $chibiosrootdir -type d | grep -E "/os/common/abstractions/cmsis_os$" >> ${projectdir}/AMiRo-Apps.includes
+  find $chibiosrootdir -type d | grep -E "/os/common/oslib/(include|src)$" >> ${projectdir}/AMiRo-Apps.includes
+  find $chibiosrootdir -type d | grep -E "/os/hal/(include|src)$" >> ${projectdir}/AMiRo-Apps.includes
+  find $chibiosrootdir -type d | grep -E "/os/hal/lib/streams" >> ${projectdir}/AMiRo-Apps.includes
+  find $chibiosrootdir -type d | grep -E "/os/hal/osal/(lib|rt)$" >> ${projectdir}/AMiRo-Apps.includes
+  find $chibiosrootdir -type d | grep -E "/os/license$" >> ${projectdir}/AMiRo-Apps.includes
+  find $chibiosrootdir -type d | grep -E "/os/rt/(include|src)$" >> ${projectdir}/AMiRo-Apps.includes
+  find $chibiosrootdir -type d | grep -E "/os/various/(shell|cpp_wrappers)" >> ${projectdir}/AMiRo-Apps.includes
+  find $chibiosrootdir -type d | grep -E "/test/(lib|rt/source/test)$" >> ${projectdir}/AMiRo-Apps.includes
+  find $amirobltrootdir -type d | grep -E "/Target/Source/AMiRo$" >> ${projectdir}/AMiRo-Apps.includes
+  echo "$(realpath --relative-base=$projectdir ${amirolldrootdir}/..)" >> ${projectdir}/AMiRo-Apps.includes
+  find $amirolldrootdir -type d | grep -v "/doc" >> ${projectdir}/AMiRo-Apps.includes
+  find $urtwarerootdir -type d | grep -v "/doc" >> ${projectdir}/AMiRo-Apps.includes
+  # generate a file that specifies all files
+  echo -n "" > ${projectdir}/AMiRo-Apps.files
+  for path in `cat ${projectdir}/AMiRo-Apps.includes`; do
+    find $path -maxdepth 1 -type f \( ! -iname ".*" \) |
+      grep -Ev "^.*/arm-none-eabi/.*$" |
+      grep -E  "^.*(\.s|\.S|\.h|\.c|\.hpp|\.cpp|\.tpp|\.ld)$" |
+      grep -Ev "^${amirobltrootdir}/Target/Source/AMiRo/helper.*$" >> ${projectdir}/AMiRo-Apps.files;
+  done
+  # generate a default project configuration file if none exists so far
+  if [ ! -f ${projectdir}/AMiRo-Apps.config ]; then
+    echo "// Add predefined macros for your project here. For example:" > ${projectdir}/AMiRo-Apps.config
+    echo "// #define YOUR_CONFIGURATION belongs here" >> ${projectdir}/AMiRo-Apps.config
+  fi
+  # generate a default .creator file if none exists so far
+  if [ ! -f ${projectdir}/AMiRo-Apps}.creator ]; then
+    echo "[general]" > ${projectdir}/AMiRo-Apps.creator
+  fi
+
+  # go back to user directory
+  cd $userdir
+
+  # fill the output variables
+  if [ ! -z "$outvar" ]; then
+    eval $outvar="$projectdir"
+  fi
+  if [ ! -z "$gccoutvar" ]; then
+    eval $gccoutvar="$gccincludedir"
+  fi
+
+  return 0
+}
+
+### delete project files #######################################################
+# Deletes all project files and optionally .user files, too.
+#
+# usage:      deleteProject [-p|--path=<path>] [-o|--out=<var>] [-w|-wipe]
+# arguments:  -p, --path <path>
+#                 Path where to delete the project files.
+#             -o, --out <var>
+#                 Variable to store the path to.
+#             -w, --wipe
+#                 Delete .user files as well.
+# return:
+#  -  0: no error
+#  -  1: warning: function aborted by user
+#  - -1: error: unexpected user input
+function deleteProject {
+  local projectdir=""
+  local outvar=""
+  local wipe=false
+
+  # parse arguments
+  local otherargs=()
+  while [ $# -gt 0 ]; do
+    if ( parseIsOption $1 ); then
+      case "$1" in
+        -p=*|--path=*)
+          projectdir=$(realpath "${1#*=}"); shift 1;;
+        -p|--path)
+          projectdir=$(realpath "$2"); shift 2;;
+        -o=*|--out=*)
+          outvar=${1#*=}; shift 1;;
+        -o|--out)
+          outvar=$2; shift 2;;
+        -w|--wipe)
+          wipe=true; shift 1;;
+        *)
+          printError "invalid option: $1\n"; shift 1;;
+      esac
+    else
+      otherargs+=("$1")
+      shift 1
+    fi
+  done
+
+  # print message
+  if [ $wipe != true ]; then
+    printInfo "deleting all QtCreator project files (*.includes, *.files, *.config, and *.creator)\n"
+  else
+    printInfo "deleting all QtCreator project files (*.includes, *.files, *.config, *.creator, and *.user)\n"
+  fi
+
+  # read project directory if required
+  if [ -z "$projectdir" ]; then
+    getProjectDir projectdir
+  fi
+
+  # remove all project files
+  rm ${projectdir}/AMiRo-Apps.includes 2>&1 | tee -a $LOG_FILE
+  rm ${projectdir}/AMiRo-Apps.files 2>&1 | tee -a $LOG_FILE
+  rm ${projectdir}/AMiRo-Apps.config 2>&1 | tee -a $LOG_FILE
+  rm ${projectdir}/AMiRo-Apps.creator 2>&1 | tee -a $LOG_FILE
+
+  if [ $wipe == true ]; then
+    rm ${projectdir}/AMiRo-Apps.creator.user 2>&1 | tee -a $LOG_FILE
+  fi
+
+  # store the path to the output variable, if required
+  if [ ! -z "$outvar" ]; then
+    eval $outvar="$projectdir"
+  fi
+
+  return 0
+
+}
+
+### main function of this script ###############################################
+# Creates, deletes and wipes QtCreator project files for the three AMiRo base modules.
+#
+# usage:      see function printHelp
+# arguments:  see function printHelp
+# return:     0
+#                 No error or warning ocurred.
+#
+function main {
+# print welcome/info text if not suppressed
+  if [[ $@ != *"--noinfo"* ]]; then
+    printWelcomeText
+  else
+    printf "######################################################################\n"
+  fi
+  printf "\n"
+
+  # if --help or -h was specified, print the help text and exit
+  if [[ $@ == *"--help"* || $@ == *"-h"* ]]; then
+    printHelp
+    printf "\n"
+    quitScript
+  fi
+
+  # set log file if specified
+  if [[ $@ == *"--log"* ]] || [[ $@ == *"--LOG"* ]]; then
+    # get the parameter (file name)
+    local cmdidx=1
+    while [[ ! "${!cmdidx}" = "--log"* ]] && [[ ! "${!cmdidx}" = "--LOG"* ]]; do
+      cmdidx=$[cmdidx + 1]
+    done
+    local cmd="${!cmdidx}"
+    local logfile=""
+    if [[ "$cmd" = "--log="* ]] || [[ "$cmd" = "--LOG="* ]]; then
+      logfile=${cmd#*=}
+    else
+      local filenameidx=$((cmdidx + 1))
+      logfile="${!filenameidx}"
+    fi
+    # optionally force silent appending
+    if [[ "$cmd" = "--LOG"* ]]; then
+      setLogFile --option=c --quiet "$logfile" LOG_FILE
+    else
+      setLogFile "$logfile" LOG_FILE
+      printf "\n"
+    fi
+  fi
+  # log script name
+  printLog "this is $(realpath ${BASH_SOURCE[0]})\n"
+
+  # parse arguments
+  local otherargs=()
+  while [ $# -gt 0 ]; do
+    if ( parseIsOption $1 ); then
+      case "$1" in
+        -h|--help) # already handled; ignore
+          shift 1;;
+        -c|--clean)
+          deleteProjects; printf "\n"; shift 1;;
+        -q|--quit)
+          quitScript; shift 1;;
+        --log=*|--LOG=*) # already handled; ignore
+          shift 1;;
+        --log|--LOG) # already handled; ignore
+          shift 2;;
+        --noinfo) # already handled; ignore
+          shift 1;;
+        *)
+          printError "invalid option: $1\n"; shift 1;;
+      esac
+    else
+      otherargs+=("$1")
+      shift 1
+    fi
+  done
+
+  # interactive menu
+  while ( true ); do
+    # main menu info prompt and selection
+    printInfo "QtCreator setup main menu\n"
+    printf "Please select one of the following actions:\n"
+    printf "  [I] - initialize project files\n"
+    printf "  [C] - clean project files\n"
+    printf "  [Q] - quit this setup\n"
+    local userinput=""
+    readUserInput "IiCcWwQq" userinput
+    printf "\n"
+
+    # evaluate user selection
+    case "$userinput" in
+      I|i)
+        initProject; printf "\n";;
+      C|c)
+        deleteProject; printf "\n";;
+      Q|q)
+        quitScript;;
+      *) # sanity check (exit with error)
+        printError "unexpected argument: $userinput\n";;
+    esac
+  done
+
+  exit 0
+}
+
+################################################################################
+# SCRIPT ENTRY POINT                                                           #
+################################################################################
+
+main "$@"
diff --git a/tools/ide/idesetup.sh b/tools/ide/idesetup.sh
new file mode 100755
index 0000000..d3e79aa
--- /dev/null
+++ b/tools/ide/idesetup.sh
@@ -0,0 +1,156 @@
+################################################################################
+# AMiRo-uRtWare is a collection of applications and configurations for the     #
+# Autonomous Mini Robot (AMiRo).                                               #
+# Copyright (C) 2018..2020  Thomas Schöpping et al.                            #
+#                                                                              #
+# This program is free software: you can redistribute it and/or modify         #
+# it under the terms of the GNU General Public License as published by         #
+# the Free Software Foundation, either version 3 of the License, or            #
+# (at your option) any later version.                                          #
+#                                                                              #
+# This program is distributed in the hope that it will be useful,              #
+# but WITHOUT ANY WARRANTY; without even the implied warranty of               #
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the                #
+# GNU General Public License for more details.                                 #
+#                                                                              #
+# You should have received a copy of the GNU General Public License            #
+# along with this program.  If not, see <http://www.gnu.org/licenses/>.        #
+#                                                                              #
+# This research/work was supported by the Cluster of Excellence Cognitive      #
+# Interaction Technology 'CITEC' (EXC 277) at Bielefeld University, which is   #
+# funded by the German Research Foundation (DFG).                              #
+################################################################################
+
+#!/bin/bash
+
+# load library
+source "$(dirname ${BASH_SOURCE[0]})/../bash/setuplib.sh"
+
+### print welcome text #########################################################
+# Prints a welcome message to standard out.
+#
+# usage:      printWelcomeText
+# arguments:  n/a
+# return:     n/a
+#
+function printWelcomeText {
+  printf "######################################################################\n"
+  printf "#                                                                    #\n"
+  printf "#                Welcome to the AMiRo-uRtWare IDE setup!             #\n"
+  printf "#                                                                    #\n"
+  printf "######################################################################\n"
+  printf "#                                                                    #\n"
+  printf "# Copyright (c) 2018..2020  Thomas Schöpping                         #\n"
+  printf "#                                                                    #\n"
+  printf "# This is free software; see the source for copying conditions.      #\n"
+  printf "# There is NO warranty; not even for MERCHANTABILITY or FITNESS FOR  #\n"
+  printf "# A PARTICULAR PURPOSE. The development of this software was         #\n"
+  printf "# supported by the Excellence Cluster EXC 227 Cognitive Interaction  #\n"
+  printf "# Technology. The Excellence Cluster EXC 227 is a grant of the       #\n"
+  printf "# Deutsche Forschungsgemeinschaft (DFG) in the context of the German #\n"
+  printf "# Excellence Initiative.                                             #\n"
+  printf "#                                                                    #\n"
+  printf "######################################################################\n"
+}
+
+### print help #################################################################
+# Prints a help text to standard out.
+#
+# usage:      printHelp
+# arguments:  n/a
+# return:     n/a
+#
+function printHelp {
+  printInfo "printing help text\n"
+  printf "usage:    $(basename ${BASH_SOURCE[0]}) [-h|--help] [--QtCreator] [-q|--quit]\n"
+  printf "\n"
+  printf "options:  -h, --help\n"
+  printf "              Print this help text.\n"
+  printf "          --QtCreator\n"
+  printf "              Enter QtCreator setup.\n"
+  printf "          -q, --quit\n"
+  printf "              Quit the script.\n"
+}
+
+### enter QtCreator setup ######################################################
+# Enter the QtCreator IDE setup.
+#
+# usage:      qtCreatorSetup
+# arguments:  n/a
+# return:     n/a
+function qtCreatorSetup {
+  printInfo "entering QtCreator setup...\n"
+  $(realpath $(dirname ${BASH_SOURCE[0]}))/QtCreator/QtCreatorSetup.sh
+}
+
+### main function of this script ###############################################
+# The IDE setup lets the user select an IDE of choice.
+# As of now, only QtCreator is supported.
+#
+# usage:      see function printHelp
+# arguments:  see function printHelp
+# return:     0
+#                 No error or warning occurred.
+#
+function main {
+  # print welcome/info text if not suppressed
+  printWelcomeText
+  printf "\n"
+
+  # if --help or -h was specified, print the help text and exit
+  if [[ $@ == *"--help"* || $@ == *"-h"* ]]; then
+    printHelp
+    printf "\n"
+    quitScript
+  fi
+
+  # parse arguments
+  local otherargs=()
+  while [ $# -gt 0 ]; do
+    if ( parseIsOption $1 ); then
+      case "$1" in
+        -h|--help) # already handled; ignore
+          shift 1;;
+        --QtCreator)
+          qtCreatorSetup; printf "\n"; shift 1;;
+        -q|--quit)
+          quitScript; printf "\n"; shift 1;;
+        *)
+          printError "invalid option: $1\n"; shift 1;;
+      esac
+    else
+      otherargs+=("$1")
+      shift 1
+    fi
+  done
+
+  # interactive menu
+  while ( true ); do
+    # main menu info prompt and selection
+    printInfo "AMiRo-OS IDE setup main menu\n"
+    printf "Please select one of the following actions:\n"
+    printf "  [C] - enter QtCreator setup\n"
+    printf "  [Q] - quit this setup\n"
+    local userinput=""
+    readUserInput "CcQq" userinput
+    printf "\n"
+
+    # evaluate user selection
+    case "$userinput" in
+      C|c)
+        qtCreatorSetup; printf "\n";;
+      Q|q)
+        quitScript;;
+      *) # sanity check (exit with error)
+        printError "unexpected argument: $userinput\n";;
+    esac
+  done
+
+  exit 0
+}
+
+################################################################################
+# SCRIPT ENTRY POINT                                                           #
+################################################################################
+
+main "$@"
