User:Bugman/subsystems
Contents
Tracking down subsystems
Script
The following script is for finding all FlightGear dependencies:
This script requires the grep Unix command, which can be installed on any OS. And it must be run with Python3.
#! /usr/bin/env python3
# Python module imports.
from argparse import ArgumentParser
import operator
from os import access, F_OK, sep
from re import search, split
from subprocess import PIPE, Popen
import sys
# Source code repository paths.
SIMGEAR_PATH = "/flightgear/src/flightgear-simgear"
FLIGHTGEAR_PATH = "/flightgear/src/flightgear-flightgear"
# Directories to exclude from the grep.
EXCLUDE_DIR = [
".git",
"build*"
]
class FindSubsystems:
"""Class for finding all subsystems and subsystem groups."""
def __init__(self, output=True):
"""Find all subsystems and subsystem groups.
@keyword output: A flag which if False will suppress all output to STDOUT.
@type output: bool
"""
# Command line options.
self.parse_arguments()
# SGSubsystem storage lists.
self.subsystems = [[], [], [], []]
self.groups = [[], [], [], []]
# Grep exclude options.
self.grep_exclude_dir = ""
for name in EXCLUDE_DIR:
self.grep_exclude_dir += "--exclude-dir \"%s\" " % name
# The base objects.
subsystem_base = Subsystem("SGSubsystem", xml=self.output_xml)
group_base = Subsystem("SGSubsystemGroup", base_class=Subsystem("SGSubsystem"), xml=self.output_xml)
# Add some problematic non-parsable classes.
if self.category_subsystems:
self.subsystems[1].append(Subsystem("FGAISim", base_class=Subsystem("FGInterface", base_class=Subsystem("SGSubsystem")), static_id="aisim", declaration_file="src/FDM/SP/AISim.hpp", root_path=self.root_path("src/FDM/SP/AISim.hpp"), full_path=self.output_full_path, xml=self.output_xml))
# Find all SGSubsystem and SGSubsystemGroup derived classes.
paths = [SIMGEAR_PATH, FLIGHTGEAR_PATH]
if not self.output_flightgear:
paths = [SIMGEAR_PATH]
for path in paths:
if self.category_subsystems:
self.find_primary(path=path, text="classes", primary=self.subsystems[0], base_name="SGSubsystem", base=subsystem_base, skip=["SGSubsystemGroup"])
if self.category_groups:
self.find_primary(path=path, text="groups", primary=self.groups[0], base_name="SGSubsystemGroup", base=group_base)
if self.category_subsystems:
self.find_secondary(path=path, text="classes", primary=self.subsystems[0], secondary=self.subsystems[1])
if self.category_groups:
self.find_secondary(path=path, text="groups", primary=self.groups[0], secondary=self.groups[1])
if self.category_subsystems:
self.find_tertiary(path=path, text="classes", secondary=self.subsystems[1], tertiary=self.subsystems[2])
if self.category_groups:
self.find_tertiary(path=path, text="groups", secondary=self.groups[1], tertiary=self.groups[2])
if self.category_subsystems:
self.find_quaternary(path=path, text="classes", tertiary=self.subsystems[2], quaternary=self.subsystems[3])
if self.category_groups:
self.find_quaternary(path=path, text="groups", tertiary=self.groups[2], quaternary=self.groups[3])
# Find the subsystem and subsystem group implementation files.
self.find_implementations()
# Text search.
if self.search_flag:
self.search()
# Final summary.
if output:
self.summarise()
def count(self, storage_list):
"""Count the number of subsystems and subsystem groups.
@param storage_list: The data structure to count.
@type storage_list: list of Subsystem instances
@return: The number of subsystems and number of groups.
@rtype: int, int
"""
# Init.
subsystems = 0
groups = 0
for element in storage_list:
if element.is_group():
groups += 1
else:
subsystems += 1
# Return the counts.
return subsystems, groups
def find_implementations(self):
"""Find all implementation files for all subsystems and subsystem groups."""
# Loop over all subsystems and groups.
for subsystem in self.subsystems[0] + self.subsystems[1] + self.subsystems[2] + self.subsystems[3] + self.groups[0] + self.groups[1] + self.groups[2] + self.groups[3]:
# The repository location.
if self.is_simgear(subsystem.declaration_file):
path = SIMGEAR_PATH
else:
path = FLIGHTGEAR_PATH
# The grep command for the ctor and dtor implementation.
ctor = "\<%s\>::\<%s\>[ \(]" % (subsystem.name, subsystem.name)
dtor = "\<%s\>::\~\<%s\>[ \(]" % (subsystem.name, subsystem.name)
grep_ctor = 'grep -rI "%s\|%s"' % (ctor, dtor)
# The grep command for any function implementation.
grep_any = 'grep -rI %s "^[A-Za-z ]*\<%s\>::"' % (self.grep_exclude_dir, subsystem.name)
# Search for matching file roots.
if subsystem.declaration_file[-3:] == "hxx":
# The probable implementation file name.
file_name = subsystem.declaration_file[:-3] + "cxx"
full_path = path + sep + file_name
if access(full_path, F_OK):
# The Unix grep commands to run.
cmds = [
'%s %s' % (grep_ctor, full_path),
'%s %s | grep -v "return"' % (grep_any, full_path)
]
# Search.
for cmd in cmds:
pipe = Popen(cmd, shell=True, stdout=PIPE)
lines = pipe.stdout.readlines()
if len(lines):
subsystem.add_implementation_file(file_name)
break
# Search everywhere.
else:
# The Unix grep commands to run.
cmds = [
'cd %s; %s' % (path, grep_ctor),
'cd %s; %s | grep -v "return"' % (path, grep_any)
]
# Search.
for cmd in cmds:
pipe = Popen(cmd, shell=True, stdout=PIPE)
# Read all output.
files = []
for line in pipe.stdout.readlines():
# Convert the byte-array.
line = line.decode()
# Add the file if not already present.
file_name = line.split(":")[0]
if file_name not in files:
files.append(file_name)
# Bad grep.
if len(files) > 1:
sys.stderr.write("Warning: Excessive grep matching, too many implementation files found for:\n")
sys.stderr.write(" %s: %s\n" % (subsystem.name, files))
# Store the implementation file.
elif len(files):
subsystem.add_implementation_file(files[0])
break
def find_primary(self, path=None, text=None, primary=None, base_name=None, base=None, skip=[]):
"""Find all primary subsystems and groups
@keyword path: The path to the repository to search through.
@type path: str
@keyword text: Text identifying subsystems vs. subsystem groups.
@type text: str
@keyword primary: The primary list of subsystems or groups.
@type primary: list of Subsystem instances
@keyword base_name: The name of the base class.
@type base_name: str
@keyword base: The base class object.
@type base: Subsystem instance
@keyword skip: A list of class names to skip.
@type skip: list of str
"""
# Printout.
sys.stderr.write("Finding all primary %s in: %s\n" % (text, path))
# Find all subsystems or groups.
for file_name, class_name in self.grep(path=path, base_name=base_name, simgear=True):
if class_name in skip:
continue
primary.append(Subsystem(class_name, base_class=base, declaration_file=file_name, root_path=self.root_path(file_name), full_path=self.output_full_path, xml=self.output_xml))
# Sort the subsystems by name.
primary.sort(key=operator.attrgetter('name'))
def find_secondary(self, path=None, text=None, primary=None, secondary=None):
"""Find all secondary subsystems and groups
@keyword path: The path to the repository to search through.
@type path: str
@keyword text: Text identifying subsystems vs. subsystem groups.
@type text: str
@keyword primary: The primary list of subsystems or groups.
@type primary: list of Subsystem instances
@keyword secondary: The secondary list of subsystems or groups.
@type secondary: list of Subsystem instances
"""
# Printout.
sys.stderr.write("Finding all secondary %s in: %s\n" % (text, path))
# Loop over all primary subsystems.
for subsystem in primary:
for file_name, derived_class in self.grep(path=path, base_name=subsystem.name, simgear=self.is_simgear(subsystem.declaration_file)):
secondary.append(Subsystem(derived_class, base_class=subsystem, declaration_file=file_name, root_path=self.root_path(file_name), full_path=self.output_full_path, xml=self.output_xml))
# Sort the subsystems by name.
secondary.sort(key=operator.attrgetter('name'))
def find_tertiary(self, path=None, text=None, secondary=None, tertiary=None):
"""Find all tertiary subsystems and groups
@keyword path: The path to the repository to search through.
@type path: str
@keyword text: Text identifying subsystems vs. subsystem groups.
@type text: str
@keyword secondary: The secondary list of subsystems or groups.
@type secondary: list of Subsystem instances
@keyword tertiary: The tertiary list of subsystems or groups.
@type tertiary: list of Subsystem instances
"""
# Printout.
sys.stderr.write("Finding all tertiary %s in: %s\n" % (text, path))
# Loop over all secondary subsystems.
for subsystem in secondary:
for file_name, derived_class in self.grep(path=path, base_name=subsystem.name, simgear=self.is_simgear(subsystem.declaration_file)):
tertiary.append(Subsystem(derived_class, base_class=subsystem, declaration_file=file_name, root_path=self.root_path(file_name), full_path=self.output_full_path, xml=self.output_xml))
# Sort all subsystems by name.
tertiary.sort(key=operator.attrgetter('name'))
def find_quaternary(self, path=None, text=None, tertiary=None, quaternary=None):
"""Find all quaternary subsystems and groups
@keyword path: The path to the repository to search through.
@type path: str
@keyword text: Text identifying subsystems vs. subsystem groups.
@type text: str
@keyword tertiary: The tertiary list of subsystems or groups.
@type tertiary: list of Subsystem instances
@keyword quaternary: The quaternary list of subsystems or groups.
@type quaternary: list of Subsystem instances
"""
# Printout.
sys.stderr.write("Finding all quaternary %s in: %s\n" % (text, path))
# Loop over all tertiary subsystems.
for subsystem in tertiary:
for file_name, derived_class in self.grep(path=path, base_name=subsystem.name, simgear=self.is_simgear(subsystem.declaration_file)):
quaternary.append(Subsystem(derived_class, base_class=subsystem, declaration_file=file_name, root_path=self.root_path(file_name), full_path=self.output_full_path, xml=self.output_xml))
# Sort all subsystems by name.
quaternary.sort(key=operator.attrgetter('name'))
def grep(self, path=None, base_name=None, simgear=False):
"""Generator method for finding all classes derived from the given base name and repository.
@keyword path: The path to the repository to search through.
@type path: str
@keyword base_name: The name of the base class.
@type base_name: str
@keyword simgear: A flag specifying if the base class belongs to Simgear or not.
@type simgear: bool
@return: The source file and the name of the derived class.
@rtype: str, str
"""
# The Unix grep command to run.
if simgear:
cmd = 'cd %s; grep -rI %s "public \<%s\>\|public simgear.*::\<%s\>" | grep -v "%s::"' % (path, self.grep_exclude_dir, base_name, base_name, base_name)
else:
cmd = 'cd %s; grep -rI %s "public \<%s\>" | grep -v "%s::"' % (path, self.grep_exclude_dir, base_name, base_name)
pipe = Popen(cmd, shell=True, stdout=PIPE)
# Read all output.
for line in pipe.stdout.readlines():
# Convert the byte-array.
line = line.decode()
# Skip this script.
if search("grep ", line):
continue
# Cannot handle this line!
if not search("class ", line):
sys.stderr.write("Skipping: %s\n" % repr(line[:-1]))
continue
# Split by single colons.
elements = split("(?<!:):(?!:)", line)
# The file and class name.
file_name = elements[0]
class_name = elements[1]
class_name = class_name.replace("class", "")
class_name = class_name.strip()
# Generator method.
yield file_name, class_name
def is_simgear(self, file_name):
"""Determine if the file is from simgear.
@param file_name: The name of the file.
@type file_name: str
@return: True if the file is from simgear, False otherwise.
@rtype: bool
"""
# Basic path check.
if file_name[:7] == "simgear":
return True
return False
def parse_arguments(self):
"""Parse the command line arguments."""
# The argument parser.
parser = ArgumentParser()
# The output arguments.
group = parser.add_argument_group("output arguments", "Change the output format.")
group.add_argument("-t", "--text", default=False, action="store_true", help="Output in plain text format (the default).")
group.add_argument("-x", "--xml", default=False, action="store_true", help="Output in XML format.")
group.add_argument("-l", "--files", default=False, action="store_true", help="List all declaration and/or implementation files.")
group.add_argument("-d", "--declaration-files", default=False, action="store_true", help="List the files where subsystems and subsystem groups are declared.")
group.add_argument("-i", "--implementation-files", default=False, action="store_true", help="List the files where subsystems and subsystem groups are implemented.")
group.add_argument("--classes", default=False, action="store_true", help="List all class names.")
group.add_argument("-p", "--full-path", default=False, action="store_true", help="For file listings, include the SIMGEAR or FLIGHTGEAR absolute path.")
# The text search arguments.
group = parser.add_argument_group("text search arguments", "Search for certain text in the files.")
group.add_argument("--search", metavar="TEXT", help="Search for the given text in the declaration and implementation files.")
group.add_argument("--get-subsystem", default=False, action="store_true", help="Search for all get_subsystems() function calls.")
group.add_argument("-c", "--includes", default=False, action="store_true", help="Extend the search to include included files.")
# Code base selection.
group = parser.add_argument_group("code base selections", "Choose between simgear and flightgear.")
group.add_argument("-s", "--simgear", default=False, action="store_true", help="Exclusively output simgear subsystems.")
group.add_argument("-f", "--flightgear", default=False, action="store_true", help="Exclusively output flightgear subsystems.")
# Category selection.
group = parser.add_argument_group("category selections", "Choose between subsystems and subsystem groups.")
group.add_argument("-n", "--no-groups", default=False, action="store_true", help="Skip subsystem groups.")
group.add_argument("-g", "--groups", default=False, action="store_true", help="Only process subsystem groups.")
# Parse the arguments.
args = parser.parse_args()
# The output arguments.
self.output_xml = args.xml
self.output_format = "text"
if args.text:
self.output_format = "text"
elif args.xml:
self.output_format = "xml"
elif args.files:
self.output_format = "files"
elif args.classes:
self.output_format = "classes"
elif args.declaration_files:
self.output_format = "declaration files"
elif args.implementation_files:
self.output_format = "implementation files"
self.output_full_path = args.full_path
# The text search arguments.
self.search_flag = False
if args.search or args.get_subsystem:
self.search_flag = True
self.search_text = args.search
self.search_get_subsystem = args.get_subsystem
self.search_includes = args.includes
# The code base arguments.
self.output_simgear = True
self.output_flightgear = True
if args.simgear:
self.output_flightgear = False
if args.flightgear:
self.output_simgear = False
# The category arguments.
self.category_subsystems = True
self.category_groups = True
if args.groups:
self.category_subsystems = False
if args.no_groups:
self.category_groups = False
def root_path(self, file_name):
"""Determine the root for the given file.
@param file_name: The name of the file.
@type file_name: str
@return: The root path.
@rtype: str
"""
# The relative or absolute path.
if self.is_simgear(file_name):
return SIMGEAR_PATH
else:
return FLIGHTGEAR_PATH
def search(self):
"""Search for certain text in the declaration and implementation files (and includes)."""
# The search text.
search_text = self.search_text
if self.search_get_subsystem:
search_text = "get_subsystem"
# Loop over all subsystems and groups.
for subsystem in self.subsystems[0] + self.subsystems[1] + self.subsystems[2] + self.subsystems[3] + self.groups[0] + self.groups[1] + self.groups[2] + self.groups[3]:
# The repository location.
if self.is_simgear(subsystem.declaration_file):
path = SIMGEAR_PATH
else:
path = FLIGHTGEAR_PATH
# The files to search through.
root = ""
if not subsystem.root_path:
root = path + sep
files = [root+subsystem.declaration_file]
if subsystem.implementation_file:
files.append(root+subsystem.implementation_file)
# Loop over each file.
for file_name in files:
# Extract the contents.
file = open(file_name)
lines = file.readlines()
file.close()
# Search.
for line in lines:
if search(search_text, line):
print("%s: %s" % (file_name, line))
def summarise(self):
"""Print out a summary of all found subsystems and subsystem groups."""
# Basic file or class listings.
if self.output_format in ["files", "declaration files", "implementation files", "classes"]:
# Concatenate the lists.
subsystem_list = []
if self.category_subsystems:
subsystem_list += self.subsystems[0] + self.subsystems[1] + self.subsystems[2] + self.subsystems[3]
if self.category_groups:
subsystem_list += self.groups[0] + self.groups[1] + self.groups[2] + self.groups[3]
# Loop over each subsystem, printing out the source files.
for subsystem in subsystem_list:
# Code base selections.
if self.is_simgear(subsystem.declaration_file) and not self.output_simgear:
continue
if not self.is_simgear(subsystem.declaration_file) and not self.output_flightgear:
continue
# Output the source files.
if self.output_format in ["files", "declaration files"]:
if subsystem.full_path:
print("%s%s%s" % (subsystem.root_path, sep, subsystem.declaration_file))
else:
print("%s" % subsystem.declaration_file)
if self.output_format in ["files", "implementation files"]:
if subsystem.implementation_file:
if subsystem.full_path:
print("%s%s%s" % (subsystem.root_path, sep, subsystem.implementation_file))
else:
print("%s" % subsystem.implementation_file)
# Output the class name.
if self.output_format == "classes":
print("%s" % subsystem.name)
# Skip the rest of the function.
return
# XML start.
if self.output_xml:
print("<?xml version=\"1.0\"?>")
print("<subsystems>")
# Subsystem and group printouts.
labels = ["primary", "secondary", "tertiary", "quaternary"]
labels2 = ["Primary", "Secondary", "Tertiary", "Quaternary"]
classes = ["subsystems", "groups"]
for i in range(len(self.subsystems)):
for j in range(len(classes)):
if classes[j] == "subsystems":
subsystem_list = self.subsystems[i]
else:
subsystem_list = self.groups[i]
# Nothing in the list.
if not len(subsystem_list):
continue
# Count all.
counts = self.count(subsystem_list)
# Start.
if self.output_xml:
print(" <%s_%s count=\"%i\">" % (labels[i], classes[j], counts[j]))
else:
print("\n%s %s (%i):" % (labels2[i], classes[j], counts[j]))
# Subsystems.
for subsystem in subsystem_list:
for line in repr(subsystem).split("\n"):
print(" %s" % (line))
# End.
if self.output_xml:
print(" </%s_%s>" % (labels[i], classes[j]))
# Counts.
subsystem_classes = len(self.subsystems[0] + self.subsystems[1] + self.subsystems[2] + self.subsystems[3])
subsystem_groups = len(self.groups[0] + self.groups[1] + self.groups[2] + self.groups[3])
subsystem_total = subsystem_classes + subsystem_groups
# Separate simgear and flightgear subsystems.
subsystem_classes_simgear = 0
subsystem_classes_flightgear = 0
subsystem_groups_simgear = 0
subsystem_groups_flightgear = 0
for subsystem in self.subsystems[0] + self.subsystems[1] + self.subsystems[2] + self.subsystems[3]:
if self.is_simgear(subsystem.declaration_file):
subsystem_classes_simgear += 1
else:
subsystem_classes_flightgear += 1
for group in self.groups[0] + self.groups[1] + self.groups[2] + self.groups[3]:
if self.is_simgear(group.declaration_file):
subsystem_groups_simgear += 1
else:
subsystem_groups_flightgear += 1
# Sums.
simgear_total = subsystem_classes_simgear + subsystem_groups_simgear
flightgear_total = subsystem_classes_flightgear + subsystem_groups_flightgear
if self.output_xml:
print(" <counts>")
print(" <simgear>")
if self.category_subsystems:
print(" <subsystem_classes>%i</subsystem_classes>" % subsystem_classes_simgear)
if self.category_groups:
print(" <subsystem_groups>%i</subsystem_groups>" % subsystem_groups_simgear)
if self.category_subsystems and self.category_groups:
print(" <total>%i</total>" % simgear_total)
print(" </simgear>")
print(" <flightgear>")
if self.category_subsystems:
print(" <subsystem_classes>%i</subsystem_classes>" % subsystem_classes_flightgear)
if self.category_groups:
print(" <subsystem_groups>%i</subsystem_groups>" % subsystem_groups_flightgear)
if self.category_subsystems and self.category_groups:
print(" <total>%i</total>" % flightgear_total)
print(" </flightgear>")
print(" <combined>")
if self.category_subsystems:
print(" <subsystem_classes>%i</subsystem_classes>" % subsystem_classes)
if self.category_groups:
print(" <subsystem_groups>%i</subsystem_groups>" % subsystem_groups)
if self.category_subsystems and self.category_groups:
print(" <total>%i</total>" % subsystem_total)
print(" </combined>")
print(" </counts>")
else:
print("\nCounts: %i subsystem classes (%i flightgear, %i simgear)." % (subsystem_classes, subsystem_classes_flightgear, subsystem_classes_simgear))
print("Counts: %i subsystem groups (%i flightgear, %i simgear)." % (subsystem_groups, subsystem_groups_flightgear, subsystem_groups_simgear))
print("Counts: %i subsystem classes and groups (%i flightgear, %i simgear)." % (subsystem_total, flightgear_total, simgear_total))
# XML end.
if self.output_xml:
print("</subsystems>")
class Subsystem:
"""Object for storing the information for a specific subsystem."""
def __init__(self, name, base_class=None, static_id=None, declaration_file=None, implementation_file=None, root_path=None, full_path=False, xml=False):
"""Set up the object.
@param name: The name of the subsystem.
@type name: str
@keyword base_class: The name of the base class.
@type base_class: str
@keyword static_id: The value returned by staticSubsystemClassId().
@type static_id: str
@keyword declaration_file: The name of the file containing the subsystem declaration.
@type declaration_file: str
@keyword implementation_file: The name of the file containing the subsystem implementation.
@type implementation_file: str or None
@keyword root_path: The root path to the files.
@type root_path: str
@keyword full_path: A flag which if True will cause the full paths to be shown.
@type full_path: bool
@keyword xml: Produce a valid XML representation of the object.
@type xml: bool
"""
# Store the data.
self.name = name
self.base_class = base_class
self.staticSubsystemClassId = static_id
self.implementation_file = implementation_file
self.declaration_file = declaration_file
self.root_path = root_path
self.full_path = full_path
self.xml = xml
# Data extraction.
self.info_extraction()
def __repr__(self):
"""Overwrite the string representation of the object.
@return: The string representation.
@rtype: str
"""
# The inheritance chain.
inheritance = ""
if self.base_class:
inheritance += "%s" % self.base_class.name
if self.base_class.base_class:
inheritance += " : %s" % self.base_class.base_class.name
if self.base_class.base_class.base_class:
inheritance += " : %s" % self.base_class.base_class.base_class.name
if self.base_class.base_class.base_class.base_class:
inheritance += " : %s" % self.base_class.base_class.base_class.base_class.name
if self.base_class.base_class.base_class.base_class.base_class:
inheritance += " : %s" % self.base_class.base_class.base_class.base_class.base_class.name
# XML representation.
if self.xml:
return self.__repr_xml__(inheritance)
# The subsystem name and inheritance chain.
string = "<%s : %s" % (self.name, inheritance)
# Add the static class ID.
if self.staticSubsystemClassId:
string += " staticSubsystemClassId is \"%s\"" % self.staticSubsystemClassId
# Add the declaration file name.
file = self.declaration_file
if self.full_path:
file = self.root_path + sep + self.declaration_file
string += " declared in \"%s\"" % file
# Add the implementation file name.
if self.implementation_file:
file = self.implementation_file
if self.full_path:
file = self.root_path + sep + self.implementation_file
string += ", implemented in \"%s\"" % file
# Closure.
string += ">"
# Return the representation.
return string
def __repr_xml__(self, inheritance=""):
"""Create a XML representation of the object.
@keyword inheritance: The string representation of the inheritance chain.
@type inheritance: str
@return: The XML representation.
@rtype: str
"""
# Start.
string = "<%s>\n" % self.name
# The inheritance chain.
string += " <inheritance>%s</inheritance>\n" % inheritance
# Add the static class ID.
if self.staticSubsystemClassId:
string += " <staticSubsystemClassId>%s</staticSubsystemClassId>\n" % self.staticSubsystemClassId
# Add the declaration file name.
file = self.declaration_file
if self.full_path:
file = self.root_path + sep + self.declaration_file
string += " <declaration>%s</declaration>\n" % file
# Add the implementation file name.
if self.implementation_file:
file = self.implementation_file
if self.full_path:
file = self.root_path + sep + self.implementation_file
string += " <implementation>%s</implementation>\n" % file
# End.
string += "</%s>" % self.name
# Return the string.
return string
def add_implementation_file(self, implementation_file=None):
"""Set up the object.
@keyword implementation_file: The path of the file containing the subsystem implementation.
@type implementation_file: str or None
"""
# Store the file.
self.implementation_file = implementation_file
def info_extraction(self):
"""Extract subsystem information from the source files."""
# No declaration.
if not self.declaration_file:
return
# Open the declaration file.
file = open(self.root_path + sep + self.declaration_file)
lines = file.readlines()
file.close()
# Loop over the file contents.
in_decl = False
for i in range(len(lines)):
# The start of the declaration.
if search("^class %s : " % self.name, lines[i]):
in_decl = True
continue
# Skip the line.
if not in_decl:
continue
# Out of the declaration.
if search("^};", lines[i]):
in_decl = False
continue
# The static subsystem class ID.
if search("static const char\* staticSubsystemClassId()", lines[i]):
id = lines[i].split("return \"")[1]
id = id.split("\"")[0]
self.staticSubsystemClassId = id
def is_group(self):
"""Determine this is a subsystem or subsystem group.
@return: True if this is a subsystem group.
@rtype: bool
"""
# Chase the base name as far as possible.
if self.name == "SGSubsystemGroup":
return True
if self.base_class.name == "SGSubsystemGroup":
return True
if self.base_class.base_class:
if self.base_class.base_class.name == "SGSubsystemGroup":
return True
if self.base_class.base_class.base_class:
if self.base_class.base_class.base_class.name == "SGSubsystemGroup":
return True
if self.base_class.base_class.base_class.base_class:
if self.base_class.base_class.base_class.base_class.name == "SGSubsystemGroup":
return True
if self.base_class.base_class.base_class.base_class.base_class:
if self.base_class.base_class.base_class.base_class.name.base_class.name == "SGSubsystemGroup":
return True
# A normal subsystem.
return False
# Instantiate the class if run as a script.
if __name__ == "__main__":
FindSubsystems()
All subsystems
The result is:
Output from the Python script for finding all subsystems within the flightgear and simgear C++ code bases. The error output from the script was redirected and hence not shown below.
Primary subsystems (91):
<AbstractInstrument : SGSubsystem declared in "src/Instrumentation/AbstractInstrument.hxx", implemented in "src/Instrumentation/AbstractInstrument.cxx">
<AirportDynamicsManager : SGSubsystem staticSubsystemClassId is "airport-dynamics" declared in "src/Airports/airportdynamicsmanager.hxx", implemented in "src/Airports/airportdynamicsmanager.cxx">
<AirspeedIndicator : SGSubsystem staticSubsystemClassId is "airspeed-indicator" declared in "src/Instrumentation/airspeed_indicator.hxx", implemented in "src/Instrumentation/airspeed_indicator.cxx">
<Altimeter : SGSubsystem staticSubsystemClassId is "altimeter" declared in "src/Instrumentation/altimeter.hxx", implemented in "src/Instrumentation/altimeter.cxx">
<AnotherSub : SGSubsystem staticSubsystemClassId is "anothersub" declared in "simgear/structure/subsystem_test.cxx">
<AreaSampler : SGSubsystem staticSubsystemClassId is "area" declared in "src/Environment/terrainsampler.cxx", implemented in "src/Environment/terrainsampler.cxx">
<AttitudeIndicator : SGSubsystem staticSubsystemClassId is "attitude-indicator" declared in "src/Instrumentation/attitude_indicator.hxx", implemented in "src/Instrumentation/attitude_indicator.cxx">
<Clock : SGSubsystem staticSubsystemClassId is "clock" declared in "src/Instrumentation/clock.hxx", implemented in "src/Instrumentation/clock.cxx">
<Component : SGSubsystem declared in "src/Autopilot/component.hxx", implemented in "src/Autopilot/component.cxx">
<DCLGPS : SGSubsystem declared in "src/Instrumentation/dclgps.hxx", implemented in "src/Instrumentation/dclgps.cxx">
<Ephemeris : SGSubsystem staticSubsystemClassId is "ephemeris" declared in "src/Environment/ephemeris.hxx", implemented in "src/Environment/ephemeris.cxx">
<FDMShell : SGSubsystem staticSubsystemClassId is "flight" declared in "src/FDM/fdm_shell.hxx", implemented in "src/FDM/fdm_shell.cxx">
<FGAIManager : SGSubsystem staticSubsystemClassId is "ai-model" declared in "src/AIModel/AIManager.hxx", implemented in "src/AIModel/AIManager.cxx">
<FGATCManager : SGSubsystem staticSubsystemClassId is "ATC" declared in "src/ATC/atc_mgr.hxx", implemented in "src/ATC/atc_mgr.cxx">
<FGAircraftModel : SGSubsystem staticSubsystemClassId is "aircraft-model" declared in "src/Model/acmodel.hxx", implemented in "src/Model/acmodel.cxx">
<FGCom : SGSubsystem staticSubsystemClassId is "fgcom" declared in "src/Network/fgcom.hxx", implemented in "src/Network/fgcom.cxx">
<FGControls : SGSubsystem staticSubsystemClassId is "controls" declared in "src/Aircraft/controls.hxx", implemented in "src/Aircraft/controls.cxx">
<FGDNSClient : SGSubsystem staticSubsystemClassId is "dns" declared in "src/Network/DNSClient.hxx", implemented in "src/Network/DNSClient.cxx">
<FGElectricalSystem : SGSubsystem staticSubsystemClassId is "electrical" declared in "src/Systems/electrical.hxx", implemented in "src/Systems/electrical.cxx">
<FGEventInput : SGSubsystem declared in "src/Input/FGEventInput.hxx", implemented in "src/Input/FGEventInput.cxx">
<FGFlightHistory : SGSubsystem staticSubsystemClassId is "history" declared in "src/Aircraft/FlightHistory.hxx", implemented in "src/Aircraft/FlightHistory.cxx">
<FGHTTPClient : SGSubsystem staticSubsystemClassId is "http" declared in "src/Network/HTTPClient.hxx", implemented in "src/Network/HTTPClient.cxx">
<FGHttpd : SGSubsystem staticSubsystemClassId is "httpd" declared in "src/Network/http/httpd.hxx">
<FGIO : SGSubsystem staticSubsystemClassId is "io" declared in "src/Main/fg_io.hxx", implemented in "src/Main/fg_io.cxx">
<FGInterface : SGSubsystem declared in "src/FDM/flight.hxx", implemented in "src/FDM/flight.cxx">
<FGJoystickInput : SGSubsystem staticSubsystemClassId is "input-joystick" declared in "src/Input/FGJoystickInput.hxx", implemented in "src/Input/FGJoystickInput.cxx">
<FGKR_87 : SGSubsystem staticSubsystemClassId is "KR-87" declared in "src/Instrumentation/kr_87.hxx", implemented in "src/Instrumentation/kr_87.cxx">
<FGKeyboardInput : SGSubsystem staticSubsystemClassId is "input-keyboard" declared in "src/Input/FGKeyboardInput.hxx", implemented in "src/Input/FGKeyboardInput.cxx">
<FGLight : SGSubsystem staticSubsystemClassId is "lighting" declared in "src/Time/light.hxx", implemented in "src/Time/light.cxx">
<FGLogger : SGSubsystem staticSubsystemClassId is "logger" declared in "src/Main/logger.hxx", implemented in "src/Main/logger.cxx">
<FGMagVarManager : SGSubsystem staticSubsystemClassId is "magvar" declared in "src/Environment/magvarmanager.hxx", implemented in "src/Environment/magvarmanager.cxx">
<FGModelMgr : SGSubsystem staticSubsystemClassId is "model-manager" declared in "src/Model/modelmgr.hxx", implemented in "src/Model/modelmgr.cxx">
<FGMouseInput : SGSubsystem staticSubsystemClassId is "input-mouse" declared in "src/Input/FGMouseInput.hxx", implemented in "src/Input/FGMouseInput.cxx">
<FGMultiplayMgr : SGSubsystem staticSubsystemClassId is "mp" declared in "src/MultiPlayer/multiplaymgr.hxx", implemented in "src/MultiPlayer/multiplaymgr.cxx">
<FGNasalSys : SGSubsystem staticSubsystemClassId is "nasal" declared in "src/Scripting/NasalSys.hxx", implemented in "src/Scripting/NasalSys.cxx">
<FGPanel : SGSubsystem staticSubsystemClassId is "panel" declared in "utils/fgpanel/FGPanel.hxx", implemented in "utils/fgpanel/FGPanel.cxx">
<FGPanelProtocol : SGSubsystem staticSubsystemClassId is "panel-protocol" declared in "utils/fgpanel/FGPanelProtocol.hxx", implemented in "utils/fgpanel/FGPanelProtocol.cxx">
<FGPrecipitationMgr : SGSubsystem staticSubsystemClassId is "precipitation" declared in "src/Environment/precipitation_mgr.hxx", implemented in "src/Environment/precipitation_mgr.cxx">
<FGProperties : SGSubsystem staticSubsystemClassId is "properties" declared in "src/Main/fg_props.hxx", implemented in "src/Main/fg_props.cxx">
<FGReplay : SGSubsystem staticSubsystemClassId is "replay" declared in "src/Aircraft/replay.hxx", implemented in "src/Aircraft/replay.cxx">
<FGRidgeLift : SGSubsystem staticSubsystemClassId is "ridgelift" declared in "src/Environment/ridge_lift.hxx", implemented in "src/Environment/ridge_lift.cxx">
<FGRouteMgr : SGSubsystem staticSubsystemClassId is "route-manager" declared in "src/Autopilot/route_mgr.hxx", implemented in "src/Autopilot/route_mgr.cxx">
<FGScenery : SGSubsystem staticSubsystemClassId is "scenery" declared in "src/Scenery/scenery.hxx", implemented in "src/Scenery/scenery.cxx">
<FGSoundManager : SGSubsystem staticSubsystemClassId is "sound" declared in "src/Sound/soundmanager.hxx", implemented in "src/Sound/soundmanager.cxx">
<FGSubmodelMgr : SGSubsystem staticSubsystemClassId is "submodel-mgr" declared in "src/AIModel/submodel.hxx", implemented in "src/AIModel/submodel.cxx">
<FGSubsystemExample : SGSubsystem declared in "docs-mini/README.introduction">
<FGTrafficManager : SGSubsystem staticSubsystemClassId is "traffic-manager" declared in "src/Traffic/TrafficMgr.hxx", implemented in "src/Traffic/TrafficMgr.cxx">
<FGViewMgr : SGSubsystem staticSubsystemClassId is "view-manager" declared in "src/Viewer/viewmgr.hxx", implemented in "src/Viewer/viewmgr.cxx">
<FGVoiceMgr : SGSubsystem staticSubsystemClassId is "voice" declared in "src/Sound/voice.hxx", implemented in "src/Sound/voice.cxx">
<FakeRadioSub : SGSubsystem staticSubsystemClassId is "fake-radio" declared in "simgear/structure/subsystem_test.cxx">
<GPS : SGSubsystem staticSubsystemClassId is "gps" declared in "src/Instrumentation/gps.hxx", implemented in "src/Instrumentation/gps.cxx">
<GSDI : SGSubsystem staticSubsystemClassId is "gsdi" declared in "src/Instrumentation/gsdi.hxx", implemented in "src/Instrumentation/gsdi.cxx">
<GUIMgr : SGSubsystem staticSubsystemClassId is "CanvasGUI" declared in "src/Canvas/gui_mgr.hxx", implemented in "src/Canvas/gui_mgr.cxx">
<GroundRadar : SGSubsystem staticSubsystemClassId is "groundradar" declared in "src/Cockpit/groundradar.hxx", implemented in "src/Cockpit/groundradar.cxx">
<HUD : SGSubsystem staticSubsystemClassId is "hud" declared in "src/Instrumentation/HUD/HUD.hxx", implemented in "src/Instrumentation/HUD/HUD.cxx">
<HeadingIndicator : SGSubsystem staticSubsystemClassId is "heading-indicator" declared in "src/Instrumentation/heading_indicator.hxx", implemented in "src/Instrumentation/heading_indicator.cxx">
<HeadingIndicatorDG : SGSubsystem staticSubsystemClassId is "heading-indicator-dg" declared in "src/Instrumentation/heading_indicator_dg.hxx", implemented in "src/Instrumentation/heading_indicator_dg.cxx">
<HeadingIndicatorFG : SGSubsystem staticSubsystemClassId is "heading-indicator-fg" declared in "src/Instrumentation/heading_indicator_fg.hxx", implemented in "src/Instrumentation/heading_indicator_fg.cxx">
<InstVerticalSpeedIndicator : SGSubsystem staticSubsystemClassId is "inst-vertical-speed-indicator" declared in "src/Instrumentation/inst_vertical_speed_indicator.hxx", implemented in "src/Instrumentation/inst_vertical_speed_indicator.cxx">
<LayerInterpolateController : SGSubsystem declared in "src/Environment/environment_ctrl.hxx">
<MK_VIII : SGSubsystem staticSubsystemClassId is "mk-viii" declared in "src/Instrumentation/mk_viii.hxx", implemented in "src/Instrumentation/mk_viii.cxx">
<MagCompass : SGSubsystem staticSubsystemClassId is "magnetic-compass" declared in "src/Instrumentation/mag_compass.hxx", implemented in "src/Instrumentation/mag_compass.cxx">
<MasterReferenceGyro : SGSubsystem staticSubsystemClassId is "master-reference-gyro" declared in "src/Instrumentation/mrg.hxx", implemented in "src/Instrumentation/mrg.cxx">
<MySub1 : SGSubsystem staticSubsystemClassId is "mysub" declared in "simgear/structure/subsystem_test.cxx">
<NavDisplay : SGSubsystem staticSubsystemClassId is "navigation-display" declared in "src/Cockpit/NavDisplay.hxx", implemented in "src/Cockpit/NavDisplay.cxx">
<NavRadio : SGSubsystem staticSubsystemClassId is "nav-radio" declared in "src/Instrumentation/newnavradio.hxx">
<NewGUI : SGSubsystem staticSubsystemClassId is "gui" declared in "src/GUI/new_gui.hxx", implemented in "src/GUI/new_gui.cxx">
<PerformanceDB : SGSubsystem staticSubsystemClassId is "aircraft-performance-db" declared in "src/AIModel/performancedb.hxx", implemented in "src/AIModel/performancedb.cxx">
<PitotSystem : SGSubsystem staticSubsystemClassId is "pitot" declared in "src/Systems/pitot.hxx", implemented in "src/Systems/pitot.cxx">
<PropertyBasedMgr : SGSubsystem declared in "simgear/props/PropertyBasedMgr.hxx", implemented in "simgear/props/PropertyBasedMgr.cxx">
<PropertyInterpolationMgr : SGSubsystem declared in "simgear/props/PropertyInterpolationMgr.hxx", implemented in "simgear/props/PropertyInterpolationMgr.cxx">
<RadarAltimeter : SGSubsystem staticSubsystemClassId is "radar-altimeter" declared in "src/Instrumentation/rad_alt.hxx", implemented in "src/Instrumentation/rad_alt.cxx">
<RealWxController : SGSubsystem declared in "src/Environment/realwx_ctrl.hxx", implemented in "src/Environment/realwx_ctrl.cxx">
<SGEventMgr : SGSubsystem staticSubsystemClassId is "events" declared in "simgear/structure/event_mgr.hxx", implemented in "simgear/structure/event_mgr.cxx">
<SGInterpolator : SGSubsystem staticSubsystemClassId is "interpolator" declared in "simgear/misc/interpolator.hxx", implemented in "simgear/misc/interpolator.cxx">
<SGPerformanceMonitor : SGSubsystem staticSubsystemClassId is "performance-mon" declared in "simgear/structure/SGPerfMon.hxx", implemented in "simgear/structure/SGPerfMon.cxx">
<SGSoundMgr : SGSubsystem staticSubsystemClassId is "sound" declared in "simgear/sound/soundmgr.hxx">
<SGSubsystemMgr : SGSubsystem staticSubsystemClassId is "subsystem-mgr" declared in "simgear/structure/subsystem_mgr.hxx", implemented in "simgear/structure/subsystem_mgr.cxx">
<SGTerraSync : SGSubsystem staticSubsystemClassId is "terrasync" declared in "simgear/scene/tsync/terrasync.hxx", implemented in "simgear/scene/tsync/terrasync.cxx">
<SlipSkidBall : SGSubsystem staticSubsystemClassId is "slip-skid-ball" declared in "src/Instrumentation/slip_skid_ball.hxx", implemented in "src/Instrumentation/slip_skid_ball.cxx">
<StaticSystem : SGSubsystem staticSubsystemClassId is "static" declared in "src/Systems/static.hxx", implemented in "src/Systems/static.cxx">
<SwiftConnection : SGSubsystem staticSubsystemClassId is "swift" declared in "src/Network/Swift/swift_connection.hxx", implemented in "src/Network/Swift/swift_connection.cxx">
<TACAN : SGSubsystem staticSubsystemClassId is "tacan" declared in "src/Instrumentation/tacan.hxx", implemented in "src/Instrumentation/tacan.cxx">
<TCAS : SGSubsystem staticSubsystemClassId is "tcas" declared in "src/Instrumentation/tcas.hxx", implemented in "src/Instrumentation/tcas.cxx">
<TestPilot : SGSubsystem declared in "test_suite/FGTestApi/TestPilot.hxx", implemented in "test_suite/FGTestApi/TestPilot.cxx">
<TimeManager : SGSubsystem staticSubsystemClassId is "time" declared in "src/Time/TimeManager.hxx", implemented in "src/Time/TimeManager.cxx">
<TurnIndicator : SGSubsystem staticSubsystemClassId is "turn-indicator" declared in "src/Instrumentation/turn_indicator.hxx", implemented in "src/Instrumentation/turn_indicator.cxx">
<VacuumSystem : SGSubsystem staticSubsystemClassId is "vacuum" declared in "src/Systems/vacuum.hxx", implemented in "src/Systems/vacuum.cxx">
<VerticalSpeedIndicator : SGSubsystem staticSubsystemClassId is "vertical-speed-indicator" declared in "src/Instrumentation/vertical_speed_indicator.hxx", implemented in "src/Instrumentation/vertical_speed_indicator.cxx">
<View : SGSubsystem staticSubsystemClassId is "view" declared in "src/Viewer/view.hxx", implemented in "src/Viewer/view.cxx">
<wxRadarBg : SGSubsystem staticSubsystemClassId is "radar" declared in "src/Cockpit/wxradar.hxx", implemented in "src/Cockpit/wxradar.cxx">
Primary groups (9):
<Autopilot : SGSubsystemGroup : SGSubsystem staticSubsystemClassId is "autopilot" declared in "src/Autopilot/autopilot.hxx", implemented in "src/Autopilot/autopilot.cxx">
<CockpitDisplayManager : SGSubsystemGroup : SGSubsystem staticSubsystemClassId is "cockpit-displays" declared in "src/Cockpit/cockpitDisplayManager.hxx", implemented in "src/Cockpit/cockpitDisplayManager.cxx">
<FGEnvironmentMgr : SGSubsystemGroup : SGSubsystem staticSubsystemClassId is "environment" declared in "src/Environment/environment_mgr.hxx", implemented in "src/Environment/environment_mgr.cxx">
<FGInput : SGSubsystemGroup : SGSubsystem staticSubsystemClassId is "input" declared in "src/Input/input.hxx", implemented in "src/Input/input.cxx">
<FGInstrumentMgr : SGSubsystemGroup : SGSubsystem staticSubsystemClassId is "instrumentation" declared in "src/Instrumentation/instrument_mgr.hxx", implemented in "src/Instrumentation/instrument_mgr.cxx">
<FGSystemMgr : SGSubsystemGroup : SGSubsystem staticSubsystemClassId is "systems" declared in "src/Systems/system_mgr.hxx", implemented in "src/Systems/system_mgr.cxx">
<FGXMLAutopilotGroup : SGSubsystemGroup : SGSubsystem staticSubsystemClassId is "xml-rules" declared in "src/Autopilot/autopilotgroup.hxx", implemented in "src/Autopilot/autopilotgroup.cxx">
<InstrumentGroup : SGSubsystemGroup : SGSubsystem staticSubsystemClassId is "instruments" declared in "simgear/structure/subsystem_test.cxx">
<TerrainSampler : SGSubsystemGroup : SGSubsystem declared in "src/Environment/terrainsampler.hxx">
Secondary subsystems (34):
<ADF : AbstractInstrument : SGSubsystem staticSubsystemClassId is "adf" declared in "src/Instrumentation/adf.hxx", implemented in "src/Instrumentation/adf.cxx">
<AnalogComponent : Component : SGSubsystem declared in "src/Autopilot/analogcomponent.hxx", implemented in "src/Autopilot/analogcomponent.cxx">
<BasicRealWxController : RealWxController : SGSubsystem declared in "src/Environment/realwx_ctrl.cxx", implemented in "src/Environment/realwx_ctrl.cxx">
<CanvasMgr : PropertyBasedMgr : SGSubsystem declared in "simgear/canvas/CanvasMgr.hxx", implemented in "simgear/canvas/CanvasMgr.cxx">
<CommRadio : AbstractInstrument : SGSubsystem staticSubsystemClassId is "comm-radio" declared in "src/Instrumentation/commradio.hxx">
<DME : AbstractInstrument : SGSubsystem staticSubsystemClassId is "dme" declared in "src/Instrumentation/dme.hxx", implemented in "src/Instrumentation/dme.cxx">
<DigitalComponent : Component : SGSubsystem declared in "src/Autopilot/digitalcomponent.hxx", implemented in "src/Autopilot/digitalcomponent.cxx">
<FGACMS : FGInterface : SGSubsystem staticSubsystemClassId is "acms" declared in "src/FDM/SP/ACMS.hxx", implemented in "src/FDM/SP/ACMS.cxx">
<FGADA : FGInterface : SGSubsystem staticSubsystemClassId is "ada" declared in "src/FDM/SP/ADA.hxx", implemented in "src/FDM/SP/ADA.cxx">
<FGAISim : FGInterface : SGSubsystem staticSubsystemClassId is "aisim" declared in "src/FDM/SP/AISim.hpp", implemented in "src/FDM/SP/AISim.cpp">
<FGBalloonSim : FGInterface : SGSubsystem staticSubsystemClassId is "balloon" declared in "src/FDM/SP/Balloon.h", implemented in "src/FDM/SP/Balloon.cxx">
<FGExternalNet : FGInterface : SGSubsystem staticSubsystemClassId is "network" declared in "src/FDM/ExternalNet/ExternalNet.hxx", implemented in "src/FDM/ExternalNet/ExternalNet.cxx">
<FGExternalPipe : FGInterface : SGSubsystem staticSubsystemClassId is "pipe" declared in "src/FDM/ExternalPipe/ExternalPipe.hxx", implemented in "src/FDM/ExternalPipe/ExternalPipe.cxx">
<FGHIDEventInput : FGEventInput : SGSubsystem staticSubsystemClassId is "input-event-hid" declared in "src/Input/FGHIDEventInput.hxx", implemented in "src/Input/FGHIDEventInput.cxx">
<FGInterpolator : PropertyInterpolationMgr : SGSubsystem staticSubsystemClassId is "prop-interpolator" declared in "src/Main/FGInterpolator.hxx", implemented in "src/Main/FGInterpolator.cxx">
<FGJSBsim : FGInterface : SGSubsystem staticSubsystemClassId is "jsb" declared in "src/FDM/JSBSim/JSBSim.hxx", implemented in "src/FDM/JSBSim/JSBSim.cxx">
<FGLaRCsim : FGInterface : SGSubsystem staticSubsystemClassId is "larcsim" declared in "src/FDM/LaRCsim/LaRCsim.hxx", implemented in "src/FDM/LaRCsim/LaRCsim.cxx">
<FGLinuxEventInput : FGEventInput : SGSubsystem staticSubsystemClassId is "input-event" declared in "src/Input/FGLinuxEventInput.hxx", implemented in "src/Input/FGLinuxEventInput.cxx">
<FGMacOSXEventInput : FGEventInput : SGSubsystem staticSubsystemClassId is "input-event" declared in "src/Input/FGMacOSXEventInput.hxx", implemented in "src/Input/FGMacOSXEventInput.cxx">
<FGMagicCarpet : FGInterface : SGSubsystem staticSubsystemClassId is "magic" declared in "src/FDM/SP/MagicCarpet.hxx", implemented in "src/FDM/SP/MagicCarpet.cxx">
<FGMarkerBeacon : AbstractInstrument : SGSubsystem staticSubsystemClassId is "marker-beacon" declared in "src/Instrumentation/marker_beacon.hxx", implemented in "src/Instrumentation/marker_beacon.cxx">
<FGNavRadio : AbstractInstrument : SGSubsystem staticSubsystemClassId is "old-navradio" declared in "src/Instrumentation/navradio.hxx", implemented in "src/Instrumentation/navradio.cxx">
<FGNullFDM : FGInterface : SGSubsystem staticSubsystemClassId is "null" declared in "src/FDM/NullFDM.hxx", implemented in "src/FDM/NullFDM.cxx">
<FGReadablePanel : FGPanel : SGSubsystem staticSubsystemClassId is "readable-panel" declared in "utils/fgpanel/panel_io.hxx", implemented in "utils/fgpanel/panel_io.cxx">
<FGSoundManager : SGSoundMgr : SGSubsystem staticSubsystemClassId is "sound" declared in "src/Sound/soundmanager.hxx", implemented in "src/Sound/soundmanager.cxx">
<FGUFO : FGInterface : SGSubsystem staticSubsystemClassId is "ufo" declared in "src/FDM/UFO.hxx", implemented in "src/FDM/UFO.cxx">
<KLN89 : DCLGPS : SGSubsystem staticSubsystemClassId is "KLN89" declared in "src/Instrumentation/KLN89/kln89.hxx", implemented in "src/Instrumentation/KLN89/kln89.cxx">
<LayerInterpolateControllerImplementation : LayerInterpolateController : SGSubsystem staticSubsystemClassId is "layer-interpolate-controller" declared in "src/Environment/environment_ctrl.cxx", implemented in "src/Environment/environment_ctrl.cxx">
<MongooseHttpd : FGHttpd : SGSubsystem staticSubsystemClassId is "mongoose-httpd" declared in "src/Network/http/httpd.cxx", implemented in "src/Network/http/httpd.cxx">
<NavRadioImpl : NavRadio : SGSubsystem declared in "src/Instrumentation/newnavradio.cxx", implemented in "src/Instrumentation/newnavradio.cxx">
<StateMachineComponent : Component : SGSubsystem staticSubsystemClassId is "state-machine" declared in "src/Autopilot/autopilot.cxx">
<Transponder : AbstractInstrument : SGSubsystem staticSubsystemClassId is "transponder" declared in "src/Instrumentation/transponder.hxx", implemented in "src/Instrumentation/transponder.cxx">
<YASim : FGInterface : SGSubsystem staticSubsystemClassId is "yasim" declared in "src/FDM/YASim/YASim.hxx", implemented in "src/FDM/YASim/YASim.cxx">
<agRadar : wxRadarBg : SGSubsystem staticSubsystemClassId is "air-ground-radar" declared in "src/Cockpit/agradar.hxx", implemented in "src/Cockpit/agradar.cxx">
Secondary groups (2):
<FGXMLAutopilotGroupImplementation : FGXMLAutopilotGroup : SGSubsystemGroup : SGSubsystem staticSubsystemClassId is "xml-autopilot-group" declared in "src/Autopilot/autopilotgroup.cxx", implemented in "src/Autopilot/autopilotgroup.cxx">
<TerrainSamplerImplementation : TerrainSampler : SGSubsystemGroup : SGSubsystem staticSubsystemClassId is "terrain-sampler" declared in "src/Environment/terrainsampler.cxx", implemented in "src/Environment/terrainsampler.cxx">
Tertiary subsystems (8):
<CanvasMgr : CanvasMgr : PropertyBasedMgr : SGSubsystem staticSubsystemClassId is "Canvas" declared in "src/Canvas/canvas_mgr.hxx", implemented in "src/Canvas/canvas_mgr.cxx">
<CommRadioImpl : CommRadio : AbstractInstrument : SGSubsystem declared in "src/Instrumentation/commradio.cxx", implemented in "src/Instrumentation/commradio.cxx">
<DigitalFilter : AnalogComponent : Component : SGSubsystem staticSubsystemClassId is "filter" declared in "src/Autopilot/digitalfilter.hxx", implemented in "src/Autopilot/digitalfilter.cxx">
<Logic : DigitalComponent : Component : SGSubsystem staticSubsystemClassId is "logic" declared in "src/Autopilot/logic.hxx", implemented in "src/Autopilot/logic.cxx">
<NoaaMetarRealWxController : BasicRealWxController : RealWxController : SGSubsystem staticSubsystemClassId is "noaa-metar-real-wx-controller" declared in "src/Environment/realwx_ctrl.cxx", implemented in "src/Environment/realwx_ctrl.cxx">
<PIDController : AnalogComponent : Component : SGSubsystem staticSubsystemClassId is "pid-controller" declared in "src/Autopilot/pidcontroller.hxx", implemented in "src/Autopilot/pidcontroller.cxx">
<PISimpleController : AnalogComponent : Component : SGSubsystem staticSubsystemClassId is "pi-simple-controller" declared in "src/Autopilot/pisimplecontroller.hxx", implemented in "src/Autopilot/pisimplecontroller.cxx">
<Predictor : AnalogComponent : Component : SGSubsystem staticSubsystemClassId is "predict-simple" declared in "src/Autopilot/predictor.hxx", implemented in "src/Autopilot/predictor.cxx">
Quaternary subsystems (1):
<FlipFlop : Logic : DigitalComponent : Component : SGSubsystem staticSubsystemClassId is "flipflop" declared in "src/Autopilot/flipflop.hxx", implemented in "src/Autopilot/flipflop.cxx">
Counts: 134 subsystem classes (122 flightgear, 12 simgear).
Counts: 11 subsystem groups (10 flightgear, 1 simgear).
Counts: 145 subsystem classes and groups (132 flightgear, 13 simgear).
XML output from the Python script for finding all subsystems within the flightgear and simgear C++ code bases. The error output from the script was redirected and hence not shown below.
<?xml version="1.0"?>
<subsystems>
<primary_subsystems count="91">
<AbstractInstrument>
<inheritance>SGSubsystem</inheritance>
<declaration>src/Instrumentation/AbstractInstrument.hxx</declaration>
<implementation>src/Instrumentation/AbstractInstrument.cxx</implementation>
</AbstractInstrument>
<AirportDynamicsManager>
<inheritance>SGSubsystem</inheritance>
<staticSubsystemClassId>airport-dynamics</staticSubsystemClassId>
<declaration>src/Airports/airportdynamicsmanager.hxx</declaration>
<implementation>src/Airports/airportdynamicsmanager.cxx</implementation>
</AirportDynamicsManager>
<AirspeedIndicator>
<inheritance>SGSubsystem</inheritance>
<staticSubsystemClassId>airspeed-indicator</staticSubsystemClassId>
<declaration>src/Instrumentation/airspeed_indicator.hxx</declaration>
<implementation>src/Instrumentation/airspeed_indicator.cxx</implementation>
</AirspeedIndicator>
<Altimeter>
<inheritance>SGSubsystem</inheritance>
<staticSubsystemClassId>altimeter</staticSubsystemClassId>
<declaration>src/Instrumentation/altimeter.hxx</declaration>
<implementation>src/Instrumentation/altimeter.cxx</implementation>
</Altimeter>
<AnotherSub>
<inheritance>SGSubsystem</inheritance>
<staticSubsystemClassId>anothersub</staticSubsystemClassId>
<declaration>simgear/structure/subsystem_test.cxx</declaration>
</AnotherSub>
<AreaSampler>
<inheritance>SGSubsystem</inheritance>
<staticSubsystemClassId>area</staticSubsystemClassId>
<declaration>src/Environment/terrainsampler.cxx</declaration>
<implementation>src/Environment/terrainsampler.cxx</implementation>
</AreaSampler>
<AttitudeIndicator>
<inheritance>SGSubsystem</inheritance>
<staticSubsystemClassId>attitude-indicator</staticSubsystemClassId>
<declaration>src/Instrumentation/attitude_indicator.hxx</declaration>
<implementation>src/Instrumentation/attitude_indicator.cxx</implementation>
</AttitudeIndicator>
<Clock>
<inheritance>SGSubsystem</inheritance>
<staticSubsystemClassId>clock</staticSubsystemClassId>
<declaration>src/Instrumentation/clock.hxx</declaration>
<implementation>src/Instrumentation/clock.cxx</implementation>
</Clock>
<Component>
<inheritance>SGSubsystem</inheritance>
<declaration>src/Autopilot/component.hxx</declaration>
<implementation>src/Autopilot/component.cxx</implementation>
</Component>
<DCLGPS>
<inheritance>SGSubsystem</inheritance>
<declaration>src/Instrumentation/dclgps.hxx</declaration>
<implementation>src/Instrumentation/dclgps.cxx</implementation>
</DCLGPS>
<Ephemeris>
<inheritance>SGSubsystem</inheritance>
<staticSubsystemClassId>ephemeris</staticSubsystemClassId>
<declaration>src/Environment/ephemeris.hxx</declaration>
<implementation>src/Environment/ephemeris.cxx</implementation>
</Ephemeris>
<FDMShell>
<inheritance>SGSubsystem</inheritance>
<staticSubsystemClassId>flight</staticSubsystemClassId>
<declaration>src/FDM/fdm_shell.hxx</declaration>
<implementation>src/FDM/fdm_shell.cxx</implementation>
</FDMShell>
<FGAIManager>
<inheritance>SGSubsystem</inheritance>
<staticSubsystemClassId>ai-model</staticSubsystemClassId>
<declaration>src/AIModel/AIManager.hxx</declaration>
<implementation>src/AIModel/AIManager.cxx</implementation>
</FGAIManager>
<FGATCManager>
<inheritance>SGSubsystem</inheritance>
<staticSubsystemClassId>ATC</staticSubsystemClassId>
<declaration>src/ATC/atc_mgr.hxx</declaration>
<implementation>src/ATC/atc_mgr.cxx</implementation>
</FGATCManager>
<FGAircraftModel>
<inheritance>SGSubsystem</inheritance>
<staticSubsystemClassId>aircraft-model</staticSubsystemClassId>
<declaration>src/Model/acmodel.hxx</declaration>
<implementation>src/Model/acmodel.cxx</implementation>
</FGAircraftModel>
<FGCom>
<inheritance>SGSubsystem</inheritance>
<staticSubsystemClassId>fgcom</staticSubsystemClassId>
<declaration>src/Network/fgcom.hxx</declaration>
<implementation>src/Network/fgcom.cxx</implementation>
</FGCom>
<FGControls>
<inheritance>SGSubsystem</inheritance>
<staticSubsystemClassId>controls</staticSubsystemClassId>
<declaration>src/Aircraft/controls.hxx</declaration>
<implementation>src/Aircraft/controls.cxx</implementation>
</FGControls>
<FGDNSClient>
<inheritance>SGSubsystem</inheritance>
<staticSubsystemClassId>dns</staticSubsystemClassId>
<declaration>src/Network/DNSClient.hxx</declaration>
<implementation>src/Network/DNSClient.cxx</implementation>
</FGDNSClient>
<FGElectricalSystem>
<inheritance>SGSubsystem</inheritance>
<staticSubsystemClassId>electrical</staticSubsystemClassId>
<declaration>src/Systems/electrical.hxx</declaration>
<implementation>src/Systems/electrical.cxx</implementation>
</FGElectricalSystem>
<FGEventInput>
<inheritance>SGSubsystem</inheritance>
<declaration>src/Input/FGEventInput.hxx</declaration>
<implementation>src/Input/FGEventInput.cxx</implementation>
</FGEventInput>
<FGFlightHistory>
<inheritance>SGSubsystem</inheritance>
<staticSubsystemClassId>history</staticSubsystemClassId>
<declaration>src/Aircraft/FlightHistory.hxx</declaration>
<implementation>src/Aircraft/FlightHistory.cxx</implementation>
</FGFlightHistory>
<FGHTTPClient>
<inheritance>SGSubsystem</inheritance>
<staticSubsystemClassId>http</staticSubsystemClassId>
<declaration>src/Network/HTTPClient.hxx</declaration>
<implementation>src/Network/HTTPClient.cxx</implementation>
</FGHTTPClient>
<FGHttpd>
<inheritance>SGSubsystem</inheritance>
<staticSubsystemClassId>httpd</staticSubsystemClassId>
<declaration>src/Network/http/httpd.hxx</declaration>
</FGHttpd>
<FGIO>
<inheritance>SGSubsystem</inheritance>
<staticSubsystemClassId>io</staticSubsystemClassId>
<declaration>src/Main/fg_io.hxx</declaration>
<implementation>src/Main/fg_io.cxx</implementation>
</FGIO>
<FGInterface>
<inheritance>SGSubsystem</inheritance>
<declaration>src/FDM/flight.hxx</declaration>
<implementation>src/FDM/flight.cxx</implementation>
</FGInterface>
<FGJoystickInput>
<inheritance>SGSubsystem</inheritance>
<staticSubsystemClassId>input-joystick</staticSubsystemClassId>
<declaration>src/Input/FGJoystickInput.hxx</declaration>
<implementation>src/Input/FGJoystickInput.cxx</implementation>
</FGJoystickInput>
<FGKR_87>
<inheritance>SGSubsystem</inheritance>
<staticSubsystemClassId>KR-87</staticSubsystemClassId>
<declaration>src/Instrumentation/kr_87.hxx</declaration>
<implementation>src/Instrumentation/kr_87.cxx</implementation>
</FGKR_87>
<FGKeyboardInput>
<inheritance>SGSubsystem</inheritance>
<staticSubsystemClassId>input-keyboard</staticSubsystemClassId>
<declaration>src/Input/FGKeyboardInput.hxx</declaration>
<implementation>src/Input/FGKeyboardInput.cxx</implementation>
</FGKeyboardInput>
<FGLight>
<inheritance>SGSubsystem</inheritance>
<staticSubsystemClassId>lighting</staticSubsystemClassId>
<declaration>src/Time/light.hxx</declaration>
<implementation>src/Time/light.cxx</implementation>
</FGLight>
<FGLogger>
<inheritance>SGSubsystem</inheritance>
<staticSubsystemClassId>logger</staticSubsystemClassId>
<declaration>src/Main/logger.hxx</declaration>
<implementation>src/Main/logger.cxx</implementation>
</FGLogger>
<FGMagVarManager>
<inheritance>SGSubsystem</inheritance>
<staticSubsystemClassId>magvar</staticSubsystemClassId>
<declaration>src/Environment/magvarmanager.hxx</declaration>
<implementation>src/Environment/magvarmanager.cxx</implementation>
</FGMagVarManager>
<FGModelMgr>
<inheritance>SGSubsystem</inheritance>
<staticSubsystemClassId>model-manager</staticSubsystemClassId>
<declaration>src/Model/modelmgr.hxx</declaration>
<implementation>src/Model/modelmgr.cxx</implementation>
</FGModelMgr>
<FGMouseInput>
<inheritance>SGSubsystem</inheritance>
<staticSubsystemClassId>input-mouse</staticSubsystemClassId>
<declaration>src/Input/FGMouseInput.hxx</declaration>
<implementation>src/Input/FGMouseInput.cxx</implementation>
</FGMouseInput>
<FGMultiplayMgr>
<inheritance>SGSubsystem</inheritance>
<staticSubsystemClassId>mp</staticSubsystemClassId>
<declaration>src/MultiPlayer/multiplaymgr.hxx</declaration>
<implementation>src/MultiPlayer/multiplaymgr.cxx</implementation>
</FGMultiplayMgr>
<FGNasalSys>
<inheritance>SGSubsystem</inheritance>
<staticSubsystemClassId>nasal</staticSubsystemClassId>
<declaration>src/Scripting/NasalSys.hxx</declaration>
<implementation>src/Scripting/NasalSys.cxx</implementation>
</FGNasalSys>
<FGPanel>
<inheritance>SGSubsystem</inheritance>
<staticSubsystemClassId>panel</staticSubsystemClassId>
<declaration>utils/fgpanel/FGPanel.hxx</declaration>
<implementation>utils/fgpanel/FGPanel.cxx</implementation>
</FGPanel>
<FGPanelProtocol>
<inheritance>SGSubsystem</inheritance>
<staticSubsystemClassId>panel-protocol</staticSubsystemClassId>
<declaration>utils/fgpanel/FGPanelProtocol.hxx</declaration>
<implementation>utils/fgpanel/FGPanelProtocol.cxx</implementation>
</FGPanelProtocol>
<FGPrecipitationMgr>
<inheritance>SGSubsystem</inheritance>
<staticSubsystemClassId>precipitation</staticSubsystemClassId>
<declaration>src/Environment/precipitation_mgr.hxx</declaration>
<implementation>src/Environment/precipitation_mgr.cxx</implementation>
</FGPrecipitationMgr>
<FGProperties>
<inheritance>SGSubsystem</inheritance>
<staticSubsystemClassId>properties</staticSubsystemClassId>
<declaration>src/Main/fg_props.hxx</declaration>
<implementation>src/Main/fg_props.cxx</implementation>
</FGProperties>
<FGReplay>
<inheritance>SGSubsystem</inheritance>
<staticSubsystemClassId>replay</staticSubsystemClassId>
<declaration>src/Aircraft/replay.hxx</declaration>
<implementation>src/Aircraft/replay.cxx</implementation>
</FGReplay>
<FGRidgeLift>
<inheritance>SGSubsystem</inheritance>
<staticSubsystemClassId>ridgelift</staticSubsystemClassId>
<declaration>src/Environment/ridge_lift.hxx</declaration>
<implementation>src/Environment/ridge_lift.cxx</implementation>
</FGRidgeLift>
<FGRouteMgr>
<inheritance>SGSubsystem</inheritance>
<staticSubsystemClassId>route-manager</staticSubsystemClassId>
<declaration>src/Autopilot/route_mgr.hxx</declaration>
<implementation>src/Autopilot/route_mgr.cxx</implementation>
</FGRouteMgr>
<FGScenery>
<inheritance>SGSubsystem</inheritance>
<staticSubsystemClassId>scenery</staticSubsystemClassId>
<declaration>src/Scenery/scenery.hxx</declaration>
<implementation>src/Scenery/scenery.cxx</implementation>
</FGScenery>
<FGSoundManager>
<inheritance>SGSubsystem</inheritance>
<staticSubsystemClassId>sound</staticSubsystemClassId>
<declaration>src/Sound/soundmanager.hxx</declaration>
<implementation>src/Sound/soundmanager.cxx</implementation>
</FGSoundManager>
<FGSubmodelMgr>
<inheritance>SGSubsystem</inheritance>
<staticSubsystemClassId>submodel-mgr</staticSubsystemClassId>
<declaration>src/AIModel/submodel.hxx</declaration>
<implementation>src/AIModel/submodel.cxx</implementation>
</FGSubmodelMgr>
<FGSubsystemExample>
<inheritance>SGSubsystem</inheritance>
<declaration>docs-mini/README.introduction</declaration>
</FGSubsystemExample>
<FGTrafficManager>
<inheritance>SGSubsystem</inheritance>
<staticSubsystemClassId>traffic-manager</staticSubsystemClassId>
<declaration>src/Traffic/TrafficMgr.hxx</declaration>
<implementation>src/Traffic/TrafficMgr.cxx</implementation>
</FGTrafficManager>
<FGViewMgr>
<inheritance>SGSubsystem</inheritance>
<staticSubsystemClassId>view-manager</staticSubsystemClassId>
<declaration>src/Viewer/viewmgr.hxx</declaration>
<implementation>src/Viewer/viewmgr.cxx</implementation>
</FGViewMgr>
<FGVoiceMgr>
<inheritance>SGSubsystem</inheritance>
<staticSubsystemClassId>voice</staticSubsystemClassId>
<declaration>src/Sound/voice.hxx</declaration>
<implementation>src/Sound/voice.cxx</implementation>
</FGVoiceMgr>
<FakeRadioSub>
<inheritance>SGSubsystem</inheritance>
<staticSubsystemClassId>fake-radio</staticSubsystemClassId>
<declaration>simgear/structure/subsystem_test.cxx</declaration>
</FakeRadioSub>
<GPS>
<inheritance>SGSubsystem</inheritance>
<staticSubsystemClassId>gps</staticSubsystemClassId>
<declaration>src/Instrumentation/gps.hxx</declaration>
<implementation>src/Instrumentation/gps.cxx</implementation>
</GPS>
<GSDI>
<inheritance>SGSubsystem</inheritance>
<staticSubsystemClassId>gsdi</staticSubsystemClassId>
<declaration>src/Instrumentation/gsdi.hxx</declaration>
<implementation>src/Instrumentation/gsdi.cxx</implementation>
</GSDI>
<GUIMgr>
<inheritance>SGSubsystem</inheritance>
<staticSubsystemClassId>CanvasGUI</staticSubsystemClassId>
<declaration>src/Canvas/gui_mgr.hxx</declaration>
<implementation>src/Canvas/gui_mgr.cxx</implementation>
</GUIMgr>
<GroundRadar>
<inheritance>SGSubsystem</inheritance>
<staticSubsystemClassId>groundradar</staticSubsystemClassId>
<declaration>src/Cockpit/groundradar.hxx</declaration>
<implementation>src/Cockpit/groundradar.cxx</implementation>
</GroundRadar>
<HUD>
<inheritance>SGSubsystem</inheritance>
<staticSubsystemClassId>hud</staticSubsystemClassId>
<declaration>src/Instrumentation/HUD/HUD.hxx</declaration>
<implementation>src/Instrumentation/HUD/HUD.cxx</implementation>
</HUD>
<HeadingIndicator>
<inheritance>SGSubsystem</inheritance>
<staticSubsystemClassId>heading-indicator</staticSubsystemClassId>
<declaration>src/Instrumentation/heading_indicator.hxx</declaration>
<implementation>src/Instrumentation/heading_indicator.cxx</implementation>
</HeadingIndicator>
<HeadingIndicatorDG>
<inheritance>SGSubsystem</inheritance>
<staticSubsystemClassId>heading-indicator-dg</staticSubsystemClassId>
<declaration>src/Instrumentation/heading_indicator_dg.hxx</declaration>
<implementation>src/Instrumentation/heading_indicator_dg.cxx</implementation>
</HeadingIndicatorDG>
<HeadingIndicatorFG>
<inheritance>SGSubsystem</inheritance>
<staticSubsystemClassId>heading-indicator-fg</staticSubsystemClassId>
<declaration>src/Instrumentation/heading_indicator_fg.hxx</declaration>
<implementation>src/Instrumentation/heading_indicator_fg.cxx</implementation>
</HeadingIndicatorFG>
<InstVerticalSpeedIndicator>
<inheritance>SGSubsystem</inheritance>
<staticSubsystemClassId>inst-vertical-speed-indicator</staticSubsystemClassId>
<declaration>src/Instrumentation/inst_vertical_speed_indicator.hxx</declaration>
<implementation>src/Instrumentation/inst_vertical_speed_indicator.cxx</implementation>
</InstVerticalSpeedIndicator>
<LayerInterpolateController>
<inheritance>SGSubsystem</inheritance>
<declaration>src/Environment/environment_ctrl.hxx</declaration>
</LayerInterpolateController>
<MK_VIII>
<inheritance>SGSubsystem</inheritance>
<staticSubsystemClassId>mk-viii</staticSubsystemClassId>
<declaration>src/Instrumentation/mk_viii.hxx</declaration>
<implementation>src/Instrumentation/mk_viii.cxx</implementation>
</MK_VIII>
<MagCompass>
<inheritance>SGSubsystem</inheritance>
<staticSubsystemClassId>magnetic-compass</staticSubsystemClassId>
<declaration>src/Instrumentation/mag_compass.hxx</declaration>
<implementation>src/Instrumentation/mag_compass.cxx</implementation>
</MagCompass>
<MasterReferenceGyro>
<inheritance>SGSubsystem</inheritance>
<staticSubsystemClassId>master-reference-gyro</staticSubsystemClassId>
<declaration>src/Instrumentation/mrg.hxx</declaration>
<implementation>src/Instrumentation/mrg.cxx</implementation>
</MasterReferenceGyro>
<MySub1>
<inheritance>SGSubsystem</inheritance>
<staticSubsystemClassId>mysub</staticSubsystemClassId>
<declaration>simgear/structure/subsystem_test.cxx</declaration>
</MySub1>
<NavDisplay>
<inheritance>SGSubsystem</inheritance>
<staticSubsystemClassId>navigation-display</staticSubsystemClassId>
<declaration>src/Cockpit/NavDisplay.hxx</declaration>
<implementation>src/Cockpit/NavDisplay.cxx</implementation>
</NavDisplay>
<NavRadio>
<inheritance>SGSubsystem</inheritance>
<staticSubsystemClassId>nav-radio</staticSubsystemClassId>
<declaration>src/Instrumentation/newnavradio.hxx</declaration>
</NavRadio>
<NewGUI>
<inheritance>SGSubsystem</inheritance>
<staticSubsystemClassId>gui</staticSubsystemClassId>
<declaration>src/GUI/new_gui.hxx</declaration>
<implementation>src/GUI/new_gui.cxx</implementation>
</NewGUI>
<PerformanceDB>
<inheritance>SGSubsystem</inheritance>
<staticSubsystemClassId>aircraft-performance-db</staticSubsystemClassId>
<declaration>src/AIModel/performancedb.hxx</declaration>
<implementation>src/AIModel/performancedb.cxx</implementation>
</PerformanceDB>
<PitotSystem>
<inheritance>SGSubsystem</inheritance>
<staticSubsystemClassId>pitot</staticSubsystemClassId>
<declaration>src/Systems/pitot.hxx</declaration>
<implementation>src/Systems/pitot.cxx</implementation>
</PitotSystem>
<PropertyBasedMgr>
<inheritance>SGSubsystem</inheritance>
<declaration>simgear/props/PropertyBasedMgr.hxx</declaration>
<implementation>simgear/props/PropertyBasedMgr.cxx</implementation>
</PropertyBasedMgr>
<PropertyInterpolationMgr>
<inheritance>SGSubsystem</inheritance>
<declaration>simgear/props/PropertyInterpolationMgr.hxx</declaration>
<implementation>simgear/props/PropertyInterpolationMgr.cxx</implementation>
</PropertyInterpolationMgr>
<RadarAltimeter>
<inheritance>SGSubsystem</inheritance>
<staticSubsystemClassId>radar-altimeter</staticSubsystemClassId>
<declaration>src/Instrumentation/rad_alt.hxx</declaration>
<implementation>src/Instrumentation/rad_alt.cxx</implementation>
</RadarAltimeter>
<RealWxController>
<inheritance>SGSubsystem</inheritance>
<declaration>src/Environment/realwx_ctrl.hxx</declaration>
<implementation>src/Environment/realwx_ctrl.cxx</implementation>
</RealWxController>
<SGEventMgr>
<inheritance>SGSubsystem</inheritance>
<staticSubsystemClassId>events</staticSubsystemClassId>
<declaration>simgear/structure/event_mgr.hxx</declaration>
<implementation>simgear/structure/event_mgr.cxx</implementation>
</SGEventMgr>
<SGInterpolator>
<inheritance>SGSubsystem</inheritance>
<staticSubsystemClassId>interpolator</staticSubsystemClassId>
<declaration>simgear/misc/interpolator.hxx</declaration>
<implementation>simgear/misc/interpolator.cxx</implementation>
</SGInterpolator>
<SGPerformanceMonitor>
<inheritance>SGSubsystem</inheritance>
<staticSubsystemClassId>performance-mon</staticSubsystemClassId>
<declaration>simgear/structure/SGPerfMon.hxx</declaration>
<implementation>simgear/structure/SGPerfMon.cxx</implementation>
</SGPerformanceMonitor>
<SGSoundMgr>
<inheritance>SGSubsystem</inheritance>
<staticSubsystemClassId>sound</staticSubsystemClassId>
<declaration>simgear/sound/soundmgr.hxx</declaration>
</SGSoundMgr>
<SGSubsystemMgr>
<inheritance>SGSubsystem</inheritance>
<staticSubsystemClassId>subsystem-mgr</staticSubsystemClassId>
<declaration>simgear/structure/subsystem_mgr.hxx</declaration>
<implementation>simgear/structure/subsystem_mgr.cxx</implementation>
</SGSubsystemMgr>
<SGTerraSync>
<inheritance>SGSubsystem</inheritance>
<staticSubsystemClassId>terrasync</staticSubsystemClassId>
<declaration>simgear/scene/tsync/terrasync.hxx</declaration>
<implementation>simgear/scene/tsync/terrasync.cxx</implementation>
</SGTerraSync>
<SlipSkidBall>
<inheritance>SGSubsystem</inheritance>
<staticSubsystemClassId>slip-skid-ball</staticSubsystemClassId>
<declaration>src/Instrumentation/slip_skid_ball.hxx</declaration>
<implementation>src/Instrumentation/slip_skid_ball.cxx</implementation>
</SlipSkidBall>
<StaticSystem>
<inheritance>SGSubsystem</inheritance>
<staticSubsystemClassId>static</staticSubsystemClassId>
<declaration>src/Systems/static.hxx</declaration>
<implementation>src/Systems/static.cxx</implementation>
</StaticSystem>
<SwiftConnection>
<inheritance>SGSubsystem</inheritance>
<staticSubsystemClassId>swift</staticSubsystemClassId>
<declaration>src/Network/Swift/swift_connection.hxx</declaration>
<implementation>src/Network/Swift/swift_connection.cxx</implementation>
</SwiftConnection>
<TACAN>
<inheritance>SGSubsystem</inheritance>
<staticSubsystemClassId>tacan</staticSubsystemClassId>
<declaration>src/Instrumentation/tacan.hxx</declaration>
<implementation>src/Instrumentation/tacan.cxx</implementation>
</TACAN>
<TCAS>
<inheritance>SGSubsystem</inheritance>
<staticSubsystemClassId>tcas</staticSubsystemClassId>
<declaration>src/Instrumentation/tcas.hxx</declaration>
<implementation>src/Instrumentation/tcas.cxx</implementation>
</TCAS>
<TestPilot>
<inheritance>SGSubsystem</inheritance>
<declaration>test_suite/FGTestApi/TestPilot.hxx</declaration>
<implementation>test_suite/FGTestApi/TestPilot.cxx</implementation>
</TestPilot>
<TimeManager>
<inheritance>SGSubsystem</inheritance>
<staticSubsystemClassId>time</staticSubsystemClassId>
<declaration>src/Time/TimeManager.hxx</declaration>
<implementation>src/Time/TimeManager.cxx</implementation>
</TimeManager>
<TurnIndicator>
<inheritance>SGSubsystem</inheritance>
<staticSubsystemClassId>turn-indicator</staticSubsystemClassId>
<declaration>src/Instrumentation/turn_indicator.hxx</declaration>
<implementation>src/Instrumentation/turn_indicator.cxx</implementation>
</TurnIndicator>
<VacuumSystem>
<inheritance>SGSubsystem</inheritance>
<staticSubsystemClassId>vacuum</staticSubsystemClassId>
<declaration>src/Systems/vacuum.hxx</declaration>
<implementation>src/Systems/vacuum.cxx</implementation>
</VacuumSystem>
<VerticalSpeedIndicator>
<inheritance>SGSubsystem</inheritance>
<staticSubsystemClassId>vertical-speed-indicator</staticSubsystemClassId>
<declaration>src/Instrumentation/vertical_speed_indicator.hxx</declaration>
<implementation>src/Instrumentation/vertical_speed_indicator.cxx</implementation>
</VerticalSpeedIndicator>
<View>
<inheritance>SGSubsystem</inheritance>
<staticSubsystemClassId>view</staticSubsystemClassId>
<declaration>src/Viewer/view.hxx</declaration>
<implementation>src/Viewer/view.cxx</implementation>
</View>
<wxRadarBg>
<inheritance>SGSubsystem</inheritance>
<staticSubsystemClassId>radar</staticSubsystemClassId>
<declaration>src/Cockpit/wxradar.hxx</declaration>
<implementation>src/Cockpit/wxradar.cxx</implementation>
</wxRadarBg>
</primary_subsystems>
<primary_groups count="9">
<Autopilot>
<inheritance>SGSubsystemGroup : SGSubsystem</inheritance>
<staticSubsystemClassId>autopilot</staticSubsystemClassId>
<declaration>src/Autopilot/autopilot.hxx</declaration>
<implementation>src/Autopilot/autopilot.cxx</implementation>
</Autopilot>
<CockpitDisplayManager>
<inheritance>SGSubsystemGroup : SGSubsystem</inheritance>
<staticSubsystemClassId>cockpit-displays</staticSubsystemClassId>
<declaration>src/Cockpit/cockpitDisplayManager.hxx</declaration>
<implementation>src/Cockpit/cockpitDisplayManager.cxx</implementation>
</CockpitDisplayManager>
<FGEnvironmentMgr>
<inheritance>SGSubsystemGroup : SGSubsystem</inheritance>
<staticSubsystemClassId>environment</staticSubsystemClassId>
<declaration>src/Environment/environment_mgr.hxx</declaration>
<implementation>src/Environment/environment_mgr.cxx</implementation>
</FGEnvironmentMgr>
<FGInput>
<inheritance>SGSubsystemGroup : SGSubsystem</inheritance>
<staticSubsystemClassId>input</staticSubsystemClassId>
<declaration>src/Input/input.hxx</declaration>
<implementation>src/Input/input.cxx</implementation>
</FGInput>
<FGInstrumentMgr>
<inheritance>SGSubsystemGroup : SGSubsystem</inheritance>
<staticSubsystemClassId>instrumentation</staticSubsystemClassId>
<declaration>src/Instrumentation/instrument_mgr.hxx</declaration>
<implementation>src/Instrumentation/instrument_mgr.cxx</implementation>
</FGInstrumentMgr>
<FGSystemMgr>
<inheritance>SGSubsystemGroup : SGSubsystem</inheritance>
<staticSubsystemClassId>systems</staticSubsystemClassId>
<declaration>src/Systems/system_mgr.hxx</declaration>
<implementation>src/Systems/system_mgr.cxx</implementation>
</FGSystemMgr>
<FGXMLAutopilotGroup>
<inheritance>SGSubsystemGroup : SGSubsystem</inheritance>
<staticSubsystemClassId>xml-rules</staticSubsystemClassId>
<declaration>src/Autopilot/autopilotgroup.hxx</declaration>
<implementation>src/Autopilot/autopilotgroup.cxx</implementation>
</FGXMLAutopilotGroup>
<InstrumentGroup>
<inheritance>SGSubsystemGroup : SGSubsystem</inheritance>
<staticSubsystemClassId>instruments</staticSubsystemClassId>
<declaration>simgear/structure/subsystem_test.cxx</declaration>
</InstrumentGroup>
<TerrainSampler>
<inheritance>SGSubsystemGroup : SGSubsystem</inheritance>
<declaration>src/Environment/terrainsampler.hxx</declaration>
</TerrainSampler>
</primary_groups>
<secondary_subsystems count="34">
<ADF>
<inheritance>AbstractInstrument : SGSubsystem</inheritance>
<staticSubsystemClassId>adf</staticSubsystemClassId>
<declaration>src/Instrumentation/adf.hxx</declaration>
<implementation>src/Instrumentation/adf.cxx</implementation>
</ADF>
<AnalogComponent>
<inheritance>Component : SGSubsystem</inheritance>
<declaration>src/Autopilot/analogcomponent.hxx</declaration>
<implementation>src/Autopilot/analogcomponent.cxx</implementation>
</AnalogComponent>
<BasicRealWxController>
<inheritance>RealWxController : SGSubsystem</inheritance>
<declaration>src/Environment/realwx_ctrl.cxx</declaration>
<implementation>src/Environment/realwx_ctrl.cxx</implementation>
</BasicRealWxController>
<CanvasMgr>
<inheritance>PropertyBasedMgr : SGSubsystem</inheritance>
<declaration>simgear/canvas/CanvasMgr.hxx</declaration>
<implementation>simgear/canvas/CanvasMgr.cxx</implementation>
</CanvasMgr>
<CommRadio>
<inheritance>AbstractInstrument : SGSubsystem</inheritance>
<staticSubsystemClassId>comm-radio</staticSubsystemClassId>
<declaration>src/Instrumentation/commradio.hxx</declaration>
</CommRadio>
<DME>
<inheritance>AbstractInstrument : SGSubsystem</inheritance>
<staticSubsystemClassId>dme</staticSubsystemClassId>
<declaration>src/Instrumentation/dme.hxx</declaration>
<implementation>src/Instrumentation/dme.cxx</implementation>
</DME>
<DigitalComponent>
<inheritance>Component : SGSubsystem</inheritance>
<declaration>src/Autopilot/digitalcomponent.hxx</declaration>
<implementation>src/Autopilot/digitalcomponent.cxx</implementation>
</DigitalComponent>
<FGACMS>
<inheritance>FGInterface : SGSubsystem</inheritance>
<staticSubsystemClassId>acms</staticSubsystemClassId>
<declaration>src/FDM/SP/ACMS.hxx</declaration>
<implementation>src/FDM/SP/ACMS.cxx</implementation>
</FGACMS>
<FGADA>
<inheritance>FGInterface : SGSubsystem</inheritance>
<staticSubsystemClassId>ada</staticSubsystemClassId>
<declaration>src/FDM/SP/ADA.hxx</declaration>
<implementation>src/FDM/SP/ADA.cxx</implementation>
</FGADA>
<FGAISim>
<inheritance>FGInterface : SGSubsystem</inheritance>
<staticSubsystemClassId>aisim</staticSubsystemClassId>
<declaration>src/FDM/SP/AISim.hpp</declaration>
<implementation>src/FDM/SP/AISim.cpp</implementation>
</FGAISim>
<FGBalloonSim>
<inheritance>FGInterface : SGSubsystem</inheritance>
<staticSubsystemClassId>balloon</staticSubsystemClassId>
<declaration>src/FDM/SP/Balloon.h</declaration>
<implementation>src/FDM/SP/Balloon.cxx</implementation>
</FGBalloonSim>
<FGExternalNet>
<inheritance>FGInterface : SGSubsystem</inheritance>
<staticSubsystemClassId>network</staticSubsystemClassId>
<declaration>src/FDM/ExternalNet/ExternalNet.hxx</declaration>
<implementation>src/FDM/ExternalNet/ExternalNet.cxx</implementation>
</FGExternalNet>
<FGExternalPipe>
<inheritance>FGInterface : SGSubsystem</inheritance>
<staticSubsystemClassId>pipe</staticSubsystemClassId>
<declaration>src/FDM/ExternalPipe/ExternalPipe.hxx</declaration>
<implementation>src/FDM/ExternalPipe/ExternalPipe.cxx</implementation>
</FGExternalPipe>
<FGHIDEventInput>
<inheritance>FGEventInput : SGSubsystem</inheritance>
<staticSubsystemClassId>input-event-hid</staticSubsystemClassId>
<declaration>src/Input/FGHIDEventInput.hxx</declaration>
<implementation>src/Input/FGHIDEventInput.cxx</implementation>
</FGHIDEventInput>
<FGInterpolator>
<inheritance>PropertyInterpolationMgr : SGSubsystem</inheritance>
<staticSubsystemClassId>prop-interpolator</staticSubsystemClassId>
<declaration>src/Main/FGInterpolator.hxx</declaration>
<implementation>src/Main/FGInterpolator.cxx</implementation>
</FGInterpolator>
<FGJSBsim>
<inheritance>FGInterface : SGSubsystem</inheritance>
<staticSubsystemClassId>jsb</staticSubsystemClassId>
<declaration>src/FDM/JSBSim/JSBSim.hxx</declaration>
<implementation>src/FDM/JSBSim/JSBSim.cxx</implementation>
</FGJSBsim>
<FGLaRCsim>
<inheritance>FGInterface : SGSubsystem</inheritance>
<staticSubsystemClassId>larcsim</staticSubsystemClassId>
<declaration>src/FDM/LaRCsim/LaRCsim.hxx</declaration>
<implementation>src/FDM/LaRCsim/LaRCsim.cxx</implementation>
</FGLaRCsim>
<FGLinuxEventInput>
<inheritance>FGEventInput : SGSubsystem</inheritance>
<staticSubsystemClassId>input-event</staticSubsystemClassId>
<declaration>src/Input/FGLinuxEventInput.hxx</declaration>
<implementation>src/Input/FGLinuxEventInput.cxx</implementation>
</FGLinuxEventInput>
<FGMacOSXEventInput>
<inheritance>FGEventInput : SGSubsystem</inheritance>
<staticSubsystemClassId>input-event</staticSubsystemClassId>
<declaration>src/Input/FGMacOSXEventInput.hxx</declaration>
<implementation>src/Input/FGMacOSXEventInput.cxx</implementation>
</FGMacOSXEventInput>
<FGMagicCarpet>
<inheritance>FGInterface : SGSubsystem</inheritance>
<staticSubsystemClassId>magic</staticSubsystemClassId>
<declaration>src/FDM/SP/MagicCarpet.hxx</declaration>
<implementation>src/FDM/SP/MagicCarpet.cxx</implementation>
</FGMagicCarpet>
<FGMarkerBeacon>
<inheritance>AbstractInstrument : SGSubsystem</inheritance>
<staticSubsystemClassId>marker-beacon</staticSubsystemClassId>
<declaration>src/Instrumentation/marker_beacon.hxx</declaration>
<implementation>src/Instrumentation/marker_beacon.cxx</implementation>
</FGMarkerBeacon>
<FGNavRadio>
<inheritance>AbstractInstrument : SGSubsystem</inheritance>
<staticSubsystemClassId>old-navradio</staticSubsystemClassId>
<declaration>src/Instrumentation/navradio.hxx</declaration>
<implementation>src/Instrumentation/navradio.cxx</implementation>
</FGNavRadio>
<FGNullFDM>
<inheritance>FGInterface : SGSubsystem</inheritance>
<staticSubsystemClassId>null</staticSubsystemClassId>
<declaration>src/FDM/NullFDM.hxx</declaration>
<implementation>src/FDM/NullFDM.cxx</implementation>
</FGNullFDM>
<FGReadablePanel>
<inheritance>FGPanel : SGSubsystem</inheritance>
<staticSubsystemClassId>readable-panel</staticSubsystemClassId>
<declaration>utils/fgpanel/panel_io.hxx</declaration>
<implementation>utils/fgpanel/panel_io.cxx</implementation>
</FGReadablePanel>
<FGSoundManager>
<inheritance>SGSoundMgr : SGSubsystem</inheritance>
<staticSubsystemClassId>sound</staticSubsystemClassId>
<declaration>src/Sound/soundmanager.hxx</declaration>
<implementation>src/Sound/soundmanager.cxx</implementation>
</FGSoundManager>
<FGUFO>
<inheritance>FGInterface : SGSubsystem</inheritance>
<staticSubsystemClassId>ufo</staticSubsystemClassId>
<declaration>src/FDM/UFO.hxx</declaration>
<implementation>src/FDM/UFO.cxx</implementation>
</FGUFO>
<KLN89>
<inheritance>DCLGPS : SGSubsystem</inheritance>
<staticSubsystemClassId>KLN89</staticSubsystemClassId>
<declaration>src/Instrumentation/KLN89/kln89.hxx</declaration>
<implementation>src/Instrumentation/KLN89/kln89.cxx</implementation>
</KLN89>
<LayerInterpolateControllerImplementation>
<inheritance>LayerInterpolateController : SGSubsystem</inheritance>
<staticSubsystemClassId>layer-interpolate-controller</staticSubsystemClassId>
<declaration>src/Environment/environment_ctrl.cxx</declaration>
<implementation>src/Environment/environment_ctrl.cxx</implementation>
</LayerInterpolateControllerImplementation>
<MongooseHttpd>
<inheritance>FGHttpd : SGSubsystem</inheritance>
<staticSubsystemClassId>mongoose-httpd</staticSubsystemClassId>
<declaration>src/Network/http/httpd.cxx</declaration>
<implementation>src/Network/http/httpd.cxx</implementation>
</MongooseHttpd>
<NavRadioImpl>
<inheritance>NavRadio : SGSubsystem</inheritance>
<declaration>src/Instrumentation/newnavradio.cxx</declaration>
<implementation>src/Instrumentation/newnavradio.cxx</implementation>
</NavRadioImpl>
<StateMachineComponent>
<inheritance>Component : SGSubsystem</inheritance>
<staticSubsystemClassId>state-machine</staticSubsystemClassId>
<declaration>src/Autopilot/autopilot.cxx</declaration>
</StateMachineComponent>
<Transponder>
<inheritance>AbstractInstrument : SGSubsystem</inheritance>
<staticSubsystemClassId>transponder</staticSubsystemClassId>
<declaration>src/Instrumentation/transponder.hxx</declaration>
<implementation>src/Instrumentation/transponder.cxx</implementation>
</Transponder>
<YASim>
<inheritance>FGInterface : SGSubsystem</inheritance>
<staticSubsystemClassId>yasim</staticSubsystemClassId>
<declaration>src/FDM/YASim/YASim.hxx</declaration>
<implementation>src/FDM/YASim/YASim.cxx</implementation>
</YASim>
<agRadar>
<inheritance>wxRadarBg : SGSubsystem</inheritance>
<staticSubsystemClassId>air-ground-radar</staticSubsystemClassId>
<declaration>src/Cockpit/agradar.hxx</declaration>
<implementation>src/Cockpit/agradar.cxx</implementation>
</agRadar>
</secondary_subsystems>
<secondary_groups count="2">
<FGXMLAutopilotGroupImplementation>
<inheritance>FGXMLAutopilotGroup : SGSubsystemGroup : SGSubsystem</inheritance>
<staticSubsystemClassId>xml-autopilot-group</staticSubsystemClassId>
<declaration>src/Autopilot/autopilotgroup.cxx</declaration>
<implementation>src/Autopilot/autopilotgroup.cxx</implementation>
</FGXMLAutopilotGroupImplementation>
<TerrainSamplerImplementation>
<inheritance>TerrainSampler : SGSubsystemGroup : SGSubsystem</inheritance>
<staticSubsystemClassId>terrain-sampler</staticSubsystemClassId>
<declaration>src/Environment/terrainsampler.cxx</declaration>
<implementation>src/Environment/terrainsampler.cxx</implementation>
</TerrainSamplerImplementation>
</secondary_groups>
<tertiary_subsystems count="8">
<CanvasMgr>
<inheritance>CanvasMgr : PropertyBasedMgr : SGSubsystem</inheritance>
<staticSubsystemClassId>Canvas</staticSubsystemClassId>
<declaration>src/Canvas/canvas_mgr.hxx</declaration>
<implementation>src/Canvas/canvas_mgr.cxx</implementation>
</CanvasMgr>
<CommRadioImpl>
<inheritance>CommRadio : AbstractInstrument : SGSubsystem</inheritance>
<declaration>src/Instrumentation/commradio.cxx</declaration>
<implementation>src/Instrumentation/commradio.cxx</implementation>
</CommRadioImpl>
<DigitalFilter>
<inheritance>AnalogComponent : Component : SGSubsystem</inheritance>
<staticSubsystemClassId>filter</staticSubsystemClassId>
<declaration>src/Autopilot/digitalfilter.hxx</declaration>
<implementation>src/Autopilot/digitalfilter.cxx</implementation>
</DigitalFilter>
<Logic>
<inheritance>DigitalComponent : Component : SGSubsystem</inheritance>
<staticSubsystemClassId>logic</staticSubsystemClassId>
<declaration>src/Autopilot/logic.hxx</declaration>
<implementation>src/Autopilot/logic.cxx</implementation>
</Logic>
<NoaaMetarRealWxController>
<inheritance>BasicRealWxController : RealWxController : SGSubsystem</inheritance>
<staticSubsystemClassId>noaa-metar-real-wx-controller</staticSubsystemClassId>
<declaration>src/Environment/realwx_ctrl.cxx</declaration>
<implementation>src/Environment/realwx_ctrl.cxx</implementation>
</NoaaMetarRealWxController>
<PIDController>
<inheritance>AnalogComponent : Component : SGSubsystem</inheritance>
<staticSubsystemClassId>pid-controller</staticSubsystemClassId>
<declaration>src/Autopilot/pidcontroller.hxx</declaration>
<implementation>src/Autopilot/pidcontroller.cxx</implementation>
</PIDController>
<PISimpleController>
<inheritance>AnalogComponent : Component : SGSubsystem</inheritance>
<staticSubsystemClassId>pi-simple-controller</staticSubsystemClassId>
<declaration>src/Autopilot/pisimplecontroller.hxx</declaration>
<implementation>src/Autopilot/pisimplecontroller.cxx</implementation>
</PISimpleController>
<Predictor>
<inheritance>AnalogComponent : Component : SGSubsystem</inheritance>
<staticSubsystemClassId>predict-simple</staticSubsystemClassId>
<declaration>src/Autopilot/predictor.hxx</declaration>
<implementation>src/Autopilot/predictor.cxx</implementation>
</Predictor>
</tertiary_subsystems>
<quaternary_subsystems count="1">
<FlipFlop>
<inheritance>Logic : DigitalComponent : Component : SGSubsystem</inheritance>
<staticSubsystemClassId>flipflop</staticSubsystemClassId>
<declaration>src/Autopilot/flipflop.hxx</declaration>
<implementation>src/Autopilot/flipflop.cxx</implementation>
</FlipFlop>
</quaternary_subsystems>
<counts>
<simgear>
<subsystem_classes>12</subsystem_classes>
<subsystem_groups>1</subsystem_groups>
<total>13</total>
</simgear>
<flightgear>
<subsystem_classes>122</subsystem_classes>
<subsystem_groups>10</subsystem_groups>
<total>132</total>
</flightgear>
<combined>
<subsystem_classes>134</subsystem_classes>
<subsystem_groups>11</subsystem_groups>
<total>145</total>
</combined>
</counts>
</subsystems>
File listing output from the Python script for finding all subsystems within the flightgear and simgear C++ code bases. The error output from the script was redirected and hence not shown below.
$ ./find_subsystems.py -l 2> /dev/null | sort
docs-mini/README.introduction
simgear/canvas/CanvasMgr.cxx
simgear/canvas/CanvasMgr.hxx
simgear/misc/interpolator.cxx
simgear/misc/interpolator.hxx
simgear/props/PropertyBasedMgr.cxx
simgear/props/PropertyBasedMgr.hxx
simgear/props/PropertyInterpolationMgr.cxx
simgear/props/PropertyInterpolationMgr.hxx
simgear/scene/tsync/terrasync.cxx
simgear/scene/tsync/terrasync.hxx
simgear/sound/soundmgr.hxx
simgear/structure/event_mgr.cxx
simgear/structure/event_mgr.hxx
simgear/structure/SGPerfMon.cxx
simgear/structure/SGPerfMon.hxx
simgear/structure/subsystem_mgr.cxx
simgear/structure/subsystem_mgr.hxx
simgear/structure/subsystem_test.cxx
simgear/structure/subsystem_test.cxx
simgear/structure/subsystem_test.cxx
simgear/structure/subsystem_test.cxx
src/AIModel/AIManager.cxx
src/AIModel/AIManager.hxx
src/AIModel/performancedb.cxx
src/AIModel/performancedb.hxx
src/AIModel/submodel.cxx
src/AIModel/submodel.hxx
src/Aircraft/controls.cxx
src/Aircraft/controls.hxx
src/Aircraft/FlightHistory.cxx
src/Aircraft/FlightHistory.hxx
src/Aircraft/replay.cxx
src/Aircraft/replay.hxx
src/Airports/airportdynamicsmanager.cxx
src/Airports/airportdynamicsmanager.hxx
src/ATC/atc_mgr.cxx
src/ATC/atc_mgr.hxx
src/Autopilot/analogcomponent.cxx
src/Autopilot/analogcomponent.hxx
src/Autopilot/autopilot.cxx
src/Autopilot/autopilot.cxx
src/Autopilot/autopilotgroup.cxx
src/Autopilot/autopilotgroup.cxx
src/Autopilot/autopilotgroup.cxx
src/Autopilot/autopilotgroup.hxx
src/Autopilot/autopilot.hxx
src/Autopilot/component.cxx
src/Autopilot/component.hxx
src/Autopilot/digitalcomponent.cxx
src/Autopilot/digitalcomponent.hxx
src/Autopilot/digitalfilter.cxx
src/Autopilot/digitalfilter.hxx
src/Autopilot/flipflop.cxx
src/Autopilot/flipflop.hxx
src/Autopilot/logic.cxx
src/Autopilot/logic.hxx
src/Autopilot/pidcontroller.cxx
src/Autopilot/pidcontroller.hxx
src/Autopilot/pisimplecontroller.cxx
src/Autopilot/pisimplecontroller.hxx
src/Autopilot/predictor.cxx
src/Autopilot/predictor.hxx
src/Autopilot/route_mgr.cxx
src/Autopilot/route_mgr.hxx
src/Canvas/canvas_mgr.cxx
src/Canvas/canvas_mgr.hxx
src/Canvas/gui_mgr.cxx
src/Canvas/gui_mgr.hxx
src/Cockpit/agradar.cxx
src/Cockpit/agradar.hxx
src/Cockpit/cockpitDisplayManager.cxx
src/Cockpit/cockpitDisplayManager.hxx
src/Cockpit/groundradar.cxx
src/Cockpit/groundradar.hxx
src/Cockpit/NavDisplay.cxx
src/Cockpit/NavDisplay.hxx
src/Cockpit/wxradar.cxx
src/Cockpit/wxradar.hxx
src/Environment/environment_ctrl.cxx
src/Environment/environment_ctrl.cxx
src/Environment/environment_ctrl.hxx
src/Environment/environment_mgr.cxx
src/Environment/environment_mgr.hxx
src/Environment/ephemeris.cxx
src/Environment/ephemeris.hxx
src/Environment/magvarmanager.cxx
src/Environment/magvarmanager.hxx
src/Environment/precipitation_mgr.cxx
src/Environment/precipitation_mgr.hxx
src/Environment/realwx_ctrl.cxx
src/Environment/realwx_ctrl.cxx
src/Environment/realwx_ctrl.cxx
src/Environment/realwx_ctrl.cxx
src/Environment/realwx_ctrl.cxx
src/Environment/realwx_ctrl.hxx
src/Environment/ridge_lift.cxx
src/Environment/ridge_lift.hxx
src/Environment/terrainsampler.cxx
src/Environment/terrainsampler.cxx
src/Environment/terrainsampler.cxx
src/Environment/terrainsampler.cxx
src/Environment/terrainsampler.hxx
src/FDM/ExternalNet/ExternalNet.cxx
src/FDM/ExternalNet/ExternalNet.hxx
src/FDM/ExternalPipe/ExternalPipe.cxx
src/FDM/ExternalPipe/ExternalPipe.hxx
src/FDM/fdm_shell.cxx
src/FDM/fdm_shell.hxx
src/FDM/flight.cxx
src/FDM/flight.hxx
src/FDM/JSBSim/JSBSim.cxx
src/FDM/JSBSim/JSBSim.hxx
src/FDM/LaRCsim/LaRCsim.cxx
src/FDM/LaRCsim/LaRCsim.hxx
src/FDM/NullFDM.cxx
src/FDM/NullFDM.hxx
src/FDM/SP/ACMS.cxx
src/FDM/SP/ACMS.hxx
src/FDM/SP/ADA.cxx
src/FDM/SP/ADA.hxx
src/FDM/SP/AISim.cpp
src/FDM/SP/AISim.hpp
src/FDM/SP/Balloon.cxx
src/FDM/SP/Balloon.h
src/FDM/SP/MagicCarpet.cxx
src/FDM/SP/MagicCarpet.hxx
src/FDM/UFO.cxx
src/FDM/UFO.hxx
src/FDM/YASim/YASim.cxx
src/FDM/YASim/YASim.hxx
src/GUI/new_gui.cxx
src/GUI/new_gui.hxx
src/Input/FGEventInput.cxx
src/Input/FGEventInput.hxx
src/Input/FGHIDEventInput.cxx
src/Input/FGHIDEventInput.hxx
src/Input/FGJoystickInput.cxx
src/Input/FGJoystickInput.hxx
src/Input/FGKeyboardInput.cxx
src/Input/FGKeyboardInput.hxx
src/Input/FGLinuxEventInput.cxx
src/Input/FGLinuxEventInput.hxx
src/Input/FGMacOSXEventInput.cxx
src/Input/FGMacOSXEventInput.hxx
src/Input/FGMouseInput.cxx
src/Input/FGMouseInput.hxx
src/Input/input.cxx
src/Input/input.hxx
src/Instrumentation/AbstractInstrument.cxx
src/Instrumentation/AbstractInstrument.hxx
src/Instrumentation/adf.cxx
src/Instrumentation/adf.hxx
src/Instrumentation/airspeed_indicator.cxx
src/Instrumentation/airspeed_indicator.hxx
src/Instrumentation/altimeter.cxx
src/Instrumentation/altimeter.hxx
src/Instrumentation/attitude_indicator.cxx
src/Instrumentation/attitude_indicator.hxx
src/Instrumentation/clock.cxx
src/Instrumentation/clock.hxx
src/Instrumentation/commradio.cxx
src/Instrumentation/commradio.cxx
src/Instrumentation/commradio.hxx
src/Instrumentation/dclgps.cxx
src/Instrumentation/dclgps.hxx
src/Instrumentation/dme.cxx
src/Instrumentation/dme.hxx
src/Instrumentation/gps.cxx
src/Instrumentation/gps.hxx
src/Instrumentation/gsdi.cxx
src/Instrumentation/gsdi.hxx
src/Instrumentation/heading_indicator.cxx
src/Instrumentation/heading_indicator_dg.cxx
src/Instrumentation/heading_indicator_dg.hxx
src/Instrumentation/heading_indicator_fg.cxx
src/Instrumentation/heading_indicator_fg.hxx
src/Instrumentation/heading_indicator.hxx
src/Instrumentation/HUD/HUD.cxx
src/Instrumentation/HUD/HUD.hxx
src/Instrumentation/instrument_mgr.cxx
src/Instrumentation/instrument_mgr.hxx
src/Instrumentation/inst_vertical_speed_indicator.cxx
src/Instrumentation/inst_vertical_speed_indicator.hxx
src/Instrumentation/KLN89/kln89.cxx
src/Instrumentation/KLN89/kln89.hxx
src/Instrumentation/kr_87.cxx
src/Instrumentation/kr_87.hxx
src/Instrumentation/mag_compass.cxx
src/Instrumentation/mag_compass.hxx
src/Instrumentation/marker_beacon.cxx
src/Instrumentation/marker_beacon.hxx
src/Instrumentation/mk_viii.cxx
src/Instrumentation/mk_viii.hxx
src/Instrumentation/mrg.cxx
src/Instrumentation/mrg.hxx
src/Instrumentation/navradio.cxx
src/Instrumentation/navradio.hxx
src/Instrumentation/newnavradio.cxx
src/Instrumentation/newnavradio.cxx
src/Instrumentation/newnavradio.hxx
src/Instrumentation/rad_alt.cxx
src/Instrumentation/rad_alt.hxx
src/Instrumentation/slip_skid_ball.cxx
src/Instrumentation/slip_skid_ball.hxx
src/Instrumentation/tacan.cxx
src/Instrumentation/tacan.hxx
src/Instrumentation/tcas.cxx
src/Instrumentation/tcas.hxx
src/Instrumentation/transponder.cxx
src/Instrumentation/transponder.hxx
src/Instrumentation/turn_indicator.cxx
src/Instrumentation/turn_indicator.hxx
src/Instrumentation/vertical_speed_indicator.cxx
src/Instrumentation/vertical_speed_indicator.hxx
src/Main/FGInterpolator.cxx
src/Main/FGInterpolator.hxx
src/Main/fg_io.cxx
src/Main/fg_io.hxx
src/Main/fg_props.cxx
src/Main/fg_props.hxx
src/Main/logger.cxx
src/Main/logger.hxx
src/Model/acmodel.cxx
src/Model/acmodel.hxx
src/Model/modelmgr.cxx
src/Model/modelmgr.hxx
src/MultiPlayer/multiplaymgr.cxx
src/MultiPlayer/multiplaymgr.hxx
src/Network/DNSClient.cxx
src/Network/DNSClient.hxx
src/Network/fgcom.cxx
src/Network/fgcom.hxx
src/Network/HTTPClient.cxx
src/Network/HTTPClient.hxx
src/Network/http/httpd.cxx
src/Network/http/httpd.cxx
src/Network/http/httpd.hxx
src/Network/Swift/swift_connection.cxx
src/Network/Swift/swift_connection.hxx
src/Scenery/scenery.cxx
src/Scenery/scenery.hxx
src/Scripting/NasalSys.cxx
src/Scripting/NasalSys.hxx
src/Sound/soundmanager.cxx
src/Sound/soundmanager.cxx
src/Sound/soundmanager.hxx
src/Sound/soundmanager.hxx
src/Sound/voice.cxx
src/Sound/voice.hxx
src/Systems/electrical.cxx
src/Systems/electrical.hxx
src/Systems/pitot.cxx
src/Systems/pitot.hxx
src/Systems/static.cxx
src/Systems/static.hxx
src/Systems/system_mgr.cxx
src/Systems/system_mgr.hxx
src/Systems/vacuum.cxx
src/Systems/vacuum.hxx
src/Time/light.cxx
src/Time/light.hxx
src/Time/TimeManager.cxx
src/Time/TimeManager.hxx
src/Traffic/TrafficMgr.cxx
src/Traffic/TrafficMgr.hxx
src/Viewer/view.cxx
src/Viewer/view.hxx
src/Viewer/viewmgr.cxx
src/Viewer/viewmgr.hxx
test_suite/FGTestApi/TestPilot.cxx
test_suite/FGTestApi/TestPilot.hxx
utils/fgpanel/FGPanel.cxx
utils/fgpanel/FGPanel.hxx
utils/fgpanel/FGPanelProtocol.cxx
utils/fgpanel/FGPanelProtocol.hxx
utils/fgpanel/panel_io.cxx
utils/fgpanel/panel_io.hxx
Declaration file listing output from the Python script for finding all subsystems within the flightgear C++ code base. The error output from the script was redirected and hence not shown below.
$ ./find_subsystems.py -dfnp 2> /dev/null | sort
/flightgear/src/flightgear-flightgear/docs-mini/README.introduction
/flightgear/src/flightgear-flightgear/src/AIModel/AIManager.hxx
/flightgear/src/flightgear-flightgear/src/AIModel/performancedb.hxx
/flightgear/src/flightgear-flightgear/src/AIModel/submodel.hxx
/flightgear/src/flightgear-flightgear/src/Aircraft/controls.hxx
/flightgear/src/flightgear-flightgear/src/Aircraft/FlightHistory.hxx
/flightgear/src/flightgear-flightgear/src/Aircraft/replay.hxx
/flightgear/src/flightgear-flightgear/src/Airports/airportdynamicsmanager.hxx
/flightgear/src/flightgear-flightgear/src/ATC/atc_mgr.hxx
/flightgear/src/flightgear-flightgear/src/Autopilot/analogcomponent.hxx
/flightgear/src/flightgear-flightgear/src/Autopilot/autopilot.cxx
/flightgear/src/flightgear-flightgear/src/Autopilot/component.hxx
/flightgear/src/flightgear-flightgear/src/Autopilot/digitalcomponent.hxx
/flightgear/src/flightgear-flightgear/src/Autopilot/digitalfilter.hxx
/flightgear/src/flightgear-flightgear/src/Autopilot/flipflop.hxx
/flightgear/src/flightgear-flightgear/src/Autopilot/logic.hxx
/flightgear/src/flightgear-flightgear/src/Autopilot/pidcontroller.hxx
/flightgear/src/flightgear-flightgear/src/Autopilot/pisimplecontroller.hxx
/flightgear/src/flightgear-flightgear/src/Autopilot/predictor.hxx
/flightgear/src/flightgear-flightgear/src/Autopilot/route_mgr.hxx
/flightgear/src/flightgear-flightgear/src/Canvas/canvas_mgr.hxx
/flightgear/src/flightgear-flightgear/src/Canvas/gui_mgr.hxx
/flightgear/src/flightgear-flightgear/src/Cockpit/agradar.hxx
/flightgear/src/flightgear-flightgear/src/Cockpit/groundradar.hxx
/flightgear/src/flightgear-flightgear/src/Cockpit/NavDisplay.hxx
/flightgear/src/flightgear-flightgear/src/Cockpit/wxradar.hxx
/flightgear/src/flightgear-flightgear/src/Environment/environment_ctrl.cxx
/flightgear/src/flightgear-flightgear/src/Environment/environment_ctrl.hxx
/flightgear/src/flightgear-flightgear/src/Environment/ephemeris.hxx
/flightgear/src/flightgear-flightgear/src/Environment/magvarmanager.hxx
/flightgear/src/flightgear-flightgear/src/Environment/precipitation_mgr.hxx
/flightgear/src/flightgear-flightgear/src/Environment/realwx_ctrl.cxx
/flightgear/src/flightgear-flightgear/src/Environment/realwx_ctrl.cxx
/flightgear/src/flightgear-flightgear/src/Environment/realwx_ctrl.hxx
/flightgear/src/flightgear-flightgear/src/Environment/ridge_lift.hxx
/flightgear/src/flightgear-flightgear/src/Environment/terrainsampler.cxx
/flightgear/src/flightgear-flightgear/src/FDM/ExternalNet/ExternalNet.hxx
/flightgear/src/flightgear-flightgear/src/FDM/ExternalPipe/ExternalPipe.hxx
/flightgear/src/flightgear-flightgear/src/FDM/fdm_shell.hxx
/flightgear/src/flightgear-flightgear/src/FDM/flight.hxx
/flightgear/src/flightgear-flightgear/src/FDM/JSBSim/JSBSim.hxx
/flightgear/src/flightgear-flightgear/src/FDM/LaRCsim/LaRCsim.hxx
/flightgear/src/flightgear-flightgear/src/FDM/NullFDM.hxx
/flightgear/src/flightgear-flightgear/src/FDM/SP/ACMS.hxx
/flightgear/src/flightgear-flightgear/src/FDM/SP/ADA.hxx
/flightgear/src/flightgear-flightgear/src/FDM/SP/AISim.hpp
/flightgear/src/flightgear-flightgear/src/FDM/SP/Balloon.h
/flightgear/src/flightgear-flightgear/src/FDM/SP/MagicCarpet.hxx
/flightgear/src/flightgear-flightgear/src/FDM/UFO.hxx
/flightgear/src/flightgear-flightgear/src/FDM/YASim/YASim.hxx
/flightgear/src/flightgear-flightgear/src/GUI/new_gui.hxx
/flightgear/src/flightgear-flightgear/src/Input/FGEventInput.hxx
/flightgear/src/flightgear-flightgear/src/Input/FGHIDEventInput.hxx
/flightgear/src/flightgear-flightgear/src/Input/FGJoystickInput.hxx
/flightgear/src/flightgear-flightgear/src/Input/FGKeyboardInput.hxx
/flightgear/src/flightgear-flightgear/src/Input/FGLinuxEventInput.hxx
/flightgear/src/flightgear-flightgear/src/Input/FGMacOSXEventInput.hxx
/flightgear/src/flightgear-flightgear/src/Input/FGMouseInput.hxx
/flightgear/src/flightgear-flightgear/src/Instrumentation/AbstractInstrument.hxx
/flightgear/src/flightgear-flightgear/src/Instrumentation/adf.hxx
/flightgear/src/flightgear-flightgear/src/Instrumentation/airspeed_indicator.hxx
/flightgear/src/flightgear-flightgear/src/Instrumentation/altimeter.hxx
/flightgear/src/flightgear-flightgear/src/Instrumentation/attitude_indicator.hxx
/flightgear/src/flightgear-flightgear/src/Instrumentation/clock.hxx
/flightgear/src/flightgear-flightgear/src/Instrumentation/commradio.cxx
/flightgear/src/flightgear-flightgear/src/Instrumentation/commradio.hxx
/flightgear/src/flightgear-flightgear/src/Instrumentation/dclgps.hxx
/flightgear/src/flightgear-flightgear/src/Instrumentation/dme.hxx
/flightgear/src/flightgear-flightgear/src/Instrumentation/gps.hxx
/flightgear/src/flightgear-flightgear/src/Instrumentation/gsdi.hxx
/flightgear/src/flightgear-flightgear/src/Instrumentation/heading_indicator_dg.hxx
/flightgear/src/flightgear-flightgear/src/Instrumentation/heading_indicator_fg.hxx
/flightgear/src/flightgear-flightgear/src/Instrumentation/heading_indicator.hxx
/flightgear/src/flightgear-flightgear/src/Instrumentation/HUD/HUD.hxx
/flightgear/src/flightgear-flightgear/src/Instrumentation/inst_vertical_speed_indicator.hxx
/flightgear/src/flightgear-flightgear/src/Instrumentation/KLN89/kln89.hxx
/flightgear/src/flightgear-flightgear/src/Instrumentation/kr_87.hxx
/flightgear/src/flightgear-flightgear/src/Instrumentation/mag_compass.hxx
/flightgear/src/flightgear-flightgear/src/Instrumentation/marker_beacon.hxx
/flightgear/src/flightgear-flightgear/src/Instrumentation/mk_viii.hxx
/flightgear/src/flightgear-flightgear/src/Instrumentation/mrg.hxx
/flightgear/src/flightgear-flightgear/src/Instrumentation/navradio.hxx
/flightgear/src/flightgear-flightgear/src/Instrumentation/newnavradio.cxx
/flightgear/src/flightgear-flightgear/src/Instrumentation/newnavradio.hxx
/flightgear/src/flightgear-flightgear/src/Instrumentation/rad_alt.hxx
/flightgear/src/flightgear-flightgear/src/Instrumentation/slip_skid_ball.hxx
/flightgear/src/flightgear-flightgear/src/Instrumentation/tacan.hxx
/flightgear/src/flightgear-flightgear/src/Instrumentation/tcas.hxx
/flightgear/src/flightgear-flightgear/src/Instrumentation/transponder.hxx
/flightgear/src/flightgear-flightgear/src/Instrumentation/turn_indicator.hxx
/flightgear/src/flightgear-flightgear/src/Instrumentation/vertical_speed_indicator.hxx
/flightgear/src/flightgear-flightgear/src/Main/FGInterpolator.hxx
/flightgear/src/flightgear-flightgear/src/Main/fg_io.hxx
/flightgear/src/flightgear-flightgear/src/Main/fg_props.hxx
/flightgear/src/flightgear-flightgear/src/Main/logger.hxx
/flightgear/src/flightgear-flightgear/src/Model/acmodel.hxx
/flightgear/src/flightgear-flightgear/src/Model/modelmgr.hxx
/flightgear/src/flightgear-flightgear/src/MultiPlayer/multiplaymgr.hxx
/flightgear/src/flightgear-flightgear/src/Network/DNSClient.hxx
/flightgear/src/flightgear-flightgear/src/Network/fgcom.hxx
/flightgear/src/flightgear-flightgear/src/Network/HTTPClient.hxx
/flightgear/src/flightgear-flightgear/src/Network/http/httpd.cxx
/flightgear/src/flightgear-flightgear/src/Network/http/httpd.hxx
/flightgear/src/flightgear-flightgear/src/Network/Swift/swift_connection.hxx
/flightgear/src/flightgear-flightgear/src/Scenery/scenery.hxx
/flightgear/src/flightgear-flightgear/src/Scripting/NasalSys.hxx
/flightgear/src/flightgear-flightgear/src/Sound/soundmanager.hxx
/flightgear/src/flightgear-flightgear/src/Sound/soundmanager.hxx
/flightgear/src/flightgear-flightgear/src/Sound/voice.hxx
/flightgear/src/flightgear-flightgear/src/Systems/electrical.hxx
/flightgear/src/flightgear-flightgear/src/Systems/pitot.hxx
/flightgear/src/flightgear-flightgear/src/Systems/static.hxx
/flightgear/src/flightgear-flightgear/src/Systems/vacuum.hxx
/flightgear/src/flightgear-flightgear/src/Time/light.hxx
/flightgear/src/flightgear-flightgear/src/Time/TimeManager.hxx
/flightgear/src/flightgear-flightgear/src/Traffic/TrafficMgr.hxx
/flightgear/src/flightgear-flightgear/src/Viewer/view.hxx
/flightgear/src/flightgear-flightgear/src/Viewer/viewmgr.hxx
/flightgear/src/flightgear-flightgear/test_suite/FGTestApi/TestPilot.hxx
/flightgear/src/flightgear-flightgear/utils/fgpanel/FGPanel.hxx
/flightgear/src/flightgear-flightgear/utils/fgpanel/FGPanelProtocol.hxx
/flightgear/src/flightgear-flightgear/utils/fgpanel/panel_io.hxx
Implementation file listing output from the Python script for finding all subsystems within the flightgear C++ code base. The error output from the script was redirected and hence not shown below.
$ ./find_subsystems.py -ifnp 2> /dev/null | sort
/flightgear/src/flightgear-flightgear/src/Instrumentation/AbstractInstrument.cxx
/flightgear/src/flightgear-flightgear/src/Airports/airportdynamicsmanager.cxx
/flightgear/src/flightgear-flightgear/src/Instrumentation/airspeed_indicator.cxx
/flightgear/src/flightgear-flightgear/src/Instrumentation/altimeter.cxx
/flightgear/src/flightgear-flightgear/src/Environment/terrainsampler.cxx
/flightgear/src/flightgear-flightgear/src/Instrumentation/attitude_indicator.cxx
/flightgear/src/flightgear-flightgear/src/Instrumentation/clock.cxx
/flightgear/src/flightgear-flightgear/src/Autopilot/component.cxx
/flightgear/src/flightgear-flightgear/src/Instrumentation/dclgps.cxx
/flightgear/src/flightgear-flightgear/src/Environment/ephemeris.cxx
/flightgear/src/flightgear-flightgear/src/FDM/fdm_shell.cxx
/flightgear/src/flightgear-flightgear/src/AIModel/AIManager.cxx
/flightgear/src/flightgear-flightgear/src/ATC/atc_mgr.cxx
/flightgear/src/flightgear-flightgear/src/Model/acmodel.cxx
/flightgear/src/flightgear-flightgear/src/Network/fgcom.cxx
/flightgear/src/flightgear-flightgear/src/Aircraft/controls.cxx
/flightgear/src/flightgear-flightgear/src/Network/DNSClient.cxx
/flightgear/src/flightgear-flightgear/src/Systems/electrical.cxx
/flightgear/src/flightgear-flightgear/src/Input/FGEventInput.cxx
/flightgear/src/flightgear-flightgear/src/Aircraft/FlightHistory.cxx
/flightgear/src/flightgear-flightgear/src/Network/HTTPClient.cxx
/flightgear/src/flightgear-flightgear/src/Main/fg_io.cxx
/flightgear/src/flightgear-flightgear/src/FDM/flight.cxx
/flightgear/src/flightgear-flightgear/src/Input/FGJoystickInput.cxx
/flightgear/src/flightgear-flightgear/src/Instrumentation/kr_87.cxx
/flightgear/src/flightgear-flightgear/src/Input/FGKeyboardInput.cxx
/flightgear/src/flightgear-flightgear/src/Time/light.cxx
/flightgear/src/flightgear-flightgear/src/Main/logger.cxx
/flightgear/src/flightgear-flightgear/src/Environment/magvarmanager.cxx
/flightgear/src/flightgear-flightgear/src/Model/modelmgr.cxx
/flightgear/src/flightgear-flightgear/src/Input/FGMouseInput.cxx
/flightgear/src/flightgear-flightgear/src/MultiPlayer/multiplaymgr.cxx
/flightgear/src/flightgear-flightgear/src/Scripting/NasalSys.cxx
/flightgear/src/flightgear-flightgear/utils/fgpanel/FGPanel.cxx
/flightgear/src/flightgear-flightgear/utils/fgpanel/FGPanelProtocol.cxx
/flightgear/src/flightgear-flightgear/src/Environment/precipitation_mgr.cxx
/flightgear/src/flightgear-flightgear/src/Main/fg_props.cxx
/flightgear/src/flightgear-flightgear/src/Aircraft/replay.cxx
/flightgear/src/flightgear-flightgear/src/Environment/ridge_lift.cxx
/flightgear/src/flightgear-flightgear/src/Autopilot/route_mgr.cxx
/flightgear/src/flightgear-flightgear/src/Scenery/scenery.cxx
/flightgear/src/flightgear-flightgear/src/Sound/soundmanager.cxx
/flightgear/src/flightgear-flightgear/src/AIModel/submodel.cxx
/flightgear/src/flightgear-flightgear/src/Traffic/TrafficMgr.cxx
/flightgear/src/flightgear-flightgear/src/Viewer/viewmgr.cxx
/flightgear/src/flightgear-flightgear/src/Sound/voice.cxx
/flightgear/src/flightgear-flightgear/src/Instrumentation/gps.cxx
/flightgear/src/flightgear-flightgear/src/Instrumentation/gsdi.cxx
/flightgear/src/flightgear-flightgear/src/Canvas/gui_mgr.cxx
/flightgear/src/flightgear-flightgear/src/Cockpit/groundradar.cxx
/flightgear/src/flightgear-flightgear/src/Instrumentation/HUD/HUD.cxx
/flightgear/src/flightgear-flightgear/src/Instrumentation/heading_indicator.cxx
/flightgear/src/flightgear-flightgear/src/Instrumentation/heading_indicator_dg.cxx
/flightgear/src/flightgear-flightgear/src/Instrumentation/heading_indicator_fg.cxx
/flightgear/src/flightgear-flightgear/src/Instrumentation/inst_vertical_speed_indicator.cxx
/flightgear/src/flightgear-flightgear/src/Instrumentation/mk_viii.cxx
/flightgear/src/flightgear-flightgear/src/Instrumentation/mag_compass.cxx
/flightgear/src/flightgear-flightgear/src/Instrumentation/mrg.cxx
/flightgear/src/flightgear-flightgear/src/Cockpit/NavDisplay.cxx
/flightgear/src/flightgear-flightgear/src/GUI/new_gui.cxx
/flightgear/src/flightgear-flightgear/src/AIModel/performancedb.cxx
/flightgear/src/flightgear-flightgear/src/Systems/pitot.cxx
/flightgear/src/flightgear-flightgear/src/Instrumentation/rad_alt.cxx
/flightgear/src/flightgear-flightgear/src/Environment/realwx_ctrl.cxx
/flightgear/src/flightgear-flightgear/src/Instrumentation/slip_skid_ball.cxx
/flightgear/src/flightgear-flightgear/src/Systems/static.cxx
/flightgear/src/flightgear-flightgear/src/Network/Swift/swift_connection.cxx
/flightgear/src/flightgear-flightgear/src/Instrumentation/tacan.cxx
/flightgear/src/flightgear-flightgear/src/Instrumentation/tcas.cxx
/flightgear/src/flightgear-flightgear/test_suite/FGTestApi/TestPilot.cxx
/flightgear/src/flightgear-flightgear/src/Time/TimeManager.cxx
/flightgear/src/flightgear-flightgear/src/Instrumentation/turn_indicator.cxx
/flightgear/src/flightgear-flightgear/src/Systems/vacuum.cxx
/flightgear/src/flightgear-flightgear/src/Instrumentation/vertical_speed_indicator.cxx
/flightgear/src/flightgear-flightgear/src/Viewer/view.cxx
/flightgear/src/flightgear-flightgear/src/Cockpit/wxradar.cxx
/flightgear/src/flightgear-flightgear/src/Instrumentation/adf.cxx
/flightgear/src/flightgear-flightgear/src/Autopilot/analogcomponent.cxx
/flightgear/src/flightgear-flightgear/src/Environment/realwx_ctrl.cxx
/flightgear/src/flightgear-flightgear/src/Instrumentation/dme.cxx
/flightgear/src/flightgear-flightgear/src/Autopilot/digitalcomponent.cxx
/flightgear/src/flightgear-flightgear/src/FDM/SP/ACMS.cxx
/flightgear/src/flightgear-flightgear/src/FDM/SP/ADA.cxx
/flightgear/src/flightgear-flightgear/src/FDM/SP/AISim.cpp
/flightgear/src/flightgear-flightgear/src/FDM/SP/Balloon.cxx
/flightgear/src/flightgear-flightgear/src/FDM/ExternalNet/ExternalNet.cxx
/flightgear/src/flightgear-flightgear/src/FDM/ExternalPipe/ExternalPipe.cxx
/flightgear/src/flightgear-flightgear/src/Input/FGHIDEventInput.cxx
/flightgear/src/flightgear-flightgear/src/Main/FGInterpolator.cxx
/flightgear/src/flightgear-flightgear/src/FDM/JSBSim/JSBSim.cxx
/flightgear/src/flightgear-flightgear/src/FDM/LaRCsim/LaRCsim.cxx
/flightgear/src/flightgear-flightgear/src/Input/FGLinuxEventInput.cxx
/flightgear/src/flightgear-flightgear/src/Input/FGMacOSXEventInput.cxx
/flightgear/src/flightgear-flightgear/src/FDM/SP/MagicCarpet.cxx
/flightgear/src/flightgear-flightgear/src/Instrumentation/marker_beacon.cxx
/flightgear/src/flightgear-flightgear/src/Instrumentation/navradio.cxx
/flightgear/src/flightgear-flightgear/src/FDM/NullFDM.cxx
/flightgear/src/flightgear-flightgear/utils/fgpanel/panel_io.cxx
/flightgear/src/flightgear-flightgear/src/Sound/soundmanager.cxx
/flightgear/src/flightgear-flightgear/src/FDM/UFO.cxx
/flightgear/src/flightgear-flightgear/src/Instrumentation/KLN89/kln89.cxx
/flightgear/src/flightgear-flightgear/src/Environment/environment_ctrl.cxx
/flightgear/src/flightgear-flightgear/src/Network/http/httpd.cxx
/flightgear/src/flightgear-flightgear/src/Instrumentation/newnavradio.cxx
/flightgear/src/flightgear-flightgear/src/Instrumentation/transponder.cxx
/flightgear/src/flightgear-flightgear/src/FDM/YASim/YASim.cxx
/flightgear/src/flightgear-flightgear/src/Cockpit/agradar.cxx
/flightgear/src/flightgear-flightgear/src/Canvas/canvas_mgr.cxx
/flightgear/src/flightgear-flightgear/src/Instrumentation/commradio.cxx
/flightgear/src/flightgear-flightgear/src/Autopilot/digitalfilter.cxx
/flightgear/src/flightgear-flightgear/src/Autopilot/logic.cxx
/flightgear/src/flightgear-flightgear/src/Environment/realwx_ctrl.cxx
/flightgear/src/flightgear-flightgear/src/Autopilot/pidcontroller.cxx
/flightgear/src/flightgear-flightgear/src/Autopilot/pisimplecontroller.cxx
/flightgear/src/flightgear-flightgear/src/Autopilot/predictor.cxx
/flightgear/src/flightgear-flightgear/src/Autopilot/flipflop.cxx
This is an example to show how to use the file listing outputs of the script to hunt down subsystem dependencies.
$ ./find_subsystems.py -lp | sort | xargs grep SGSky
/flightgear/src/flightgear-flightgear/src/Environment/environment_mgr.cxx: &SGSky::get_visibility );
/flightgear/src/flightgear-flightgear/src/Environment/environment_mgr.cxx: &SGSky::get_3dCloudDensity,
/flightgear/src/flightgear-flightgear/src/Environment/environment_mgr.cxx: &SGSky::set_3dCloudDensity);
/flightgear/src/flightgear-flightgear/src/Environment/environment_mgr.cxx: &SGSky::get_3dCloudVisRange,
/flightgear/src/flightgear-flightgear/src/Environment/environment_mgr.cxx: &SGSky::set_3dCloudVisRange);
/flightgear/src/flightgear-flightgear/src/Environment/environment_mgr.cxx: &SGSky::get_3dCloudImpostorDistance,
/flightgear/src/flightgear-flightgear/src/Environment/environment_mgr.cxx: &SGSky::set_3dCloudImpostorDistance);
/flightgear/src/flightgear-flightgear/src/Environment/environment_mgr.cxx: &SGSky::get_3dCloudLoD1Range,
/flightgear/src/flightgear-flightgear/src/Environment/environment_mgr.cxx: &SGSky::set_3dCloudLoD1Range);
/flightgear/src/flightgear-flightgear/src/Environment/environment_mgr.cxx: &SGSky::get_3dCloudLoD2Range,
/flightgear/src/flightgear-flightgear/src/Environment/environment_mgr.cxx: &SGSky::set_3dCloudLoD2Range);
/flightgear/src/flightgear-flightgear/src/Environment/environment_mgr.cxx: &SGSky::get_3dCloudWrap,
/flightgear/src/flightgear-flightgear/src/Environment/environment_mgr.cxx: &SGSky::set_3dCloudWrap);
/flightgear/src/flightgear-flightgear/src/Environment/environment_mgr.cxx: &SGSky::get_3dCloudUseImpostors,
/flightgear/src/flightgear-flightgear/src/Environment/environment_mgr.cxx: &SGSky::set_3dCloudUseImpostors);
/flightgear/src/flightgear-flightgear/src/Environment/environment_mgr.hxx:class SGSky;
/flightgear/src/flightgear-flightgear/src/Environment/environment_mgr.hxx: SGSky* _sky;
/flightgear/src/flightgear-flightgear/src/Environment/precipitation_mgr.cxx: SGSky* thesky = globals->get_renderer()->getSky();
/flightgear/src/flightgear-flightgear/src/Environment/precipitation_mgr.cxx: {"SGSky", SGSubsystemMgr::Dependency::NONSUBSYSTEM_HARD
);
/flightgear/src/flightgear-flightgear/src/Scenery/scenery.cxx: {"SGSky", SGSubsystemMgr::Dependency::NONSUBSYSTEM_HARD}}); /flightgear/src/flightgear-flightgear/src/Time/light.cxx: SGSky* thesky = globals->get_renderer()->getSky(); /flightgear/src/flightgear-flightgear/src/Time/light.cxx: SGSky* thesky = globals->get_renderer()->getSky(); }}
$ ./find_subsystems.py --classes 2> /dev/null | xargs -I{} grep -nrI "new.*\<{}\>" src | sort -u
src/Autopilot/autopilot.cxx:134: componentForge["pid-controller"] = new CreateAndConfigureFunctor<PIDController,Component>();
src/Autopilot/autopilot.cxx:135: componentForge["pi-simple-controller"] = new CreateAndConfigureFunctor<PISimpleController,Component>();
src/Autopilot/autopilot.cxx:136: componentForge["predict-simple"] = new CreateAndConfigureFunctor<Predictor,Component>();
src/Autopilot/autopilot.cxx:137: componentForge["filter"] = new CreateAndConfigureFunctor<DigitalFilter,Component>();
src/Autopilot/autopilot.cxx:138: componentForge["logic"] = new CreateAndConfigureFunctor<Logic,Component>();
src/Autopilot/autopilot.cxx:139: componentForge["flipflop"] = new CreateAndConfigureFunctor<FlipFlop,Component>();
src/Autopilot/autopilot.cxx:87: return new StateMachineComponent(cfg, prop_root);
src/Autopilot/autopilotgroup.cxx:229: return new FGXMLAutopilotGroupImplementation(nodeName);
src/Autopilot/autopilotgroup.cxx:82: Autopilot* ap = new Autopilot(apNode, config);
src/Cockpit/cockpitDisplayManager.cxx:100: set_subsystem( id, new wxRadarBg ( node ) );
src/Cockpit/cockpitDisplayManager.cxx:103: set_subsystem( id, new GroundRadar( node ) );
src/Cockpit/cockpitDisplayManager.cxx:106: set_subsystem( id, new agRadar( node ) );
src/Cockpit/cockpitDisplayManager.cxx:109: set_subsystem( id, new NavDisplay( node ) );
src/Cockpit/panel_io.cxx:658: FGPanel * panel = new FGPanel();
src/Cockpit/panel_io.cxx:784: gps = new KLN89(instrument);
src/Environment/environment_ctrl.cxx:349: return new LayerInterpolateControllerImplementation( rootNode );
src/Environment/environment_mgr.cxx:100: set_subsystem("magvar", new FGMagVarManager);
src/Environment/environment_mgr.cxx:95: set_subsystem("precipitation", new FGPrecipitationMgr);
src/Environment/environment_mgr.cxx:98: set_subsystem("ridgelift", new FGRidgeLift);
src/Environment/realwx_ctrl.cxx:514: return new NoaaMetarRealWxController( rootNode );
src/Environment/terrainsampler.cxx:381: set_subsystem( areaSubsystemName(i), new AreaSampler( areaNodes[i] ) );
src/Environment/terrainsampler.cxx:430: return new TerrainSamplerImplementation( rootNode );
src/FDM/fdm_shell.cxx:278: _impl = new FGUFO( dt );
src/FDM/fdm_shell.cxx:282: _impl = new FGNullFDM( dt );
src/FDM/fdm_shell.cxx:315: _impl = new FGExternalNet( dt, host, port1, port2, port3 );
src/FDM/fdm_shell.cxx:318: // /* old */ _impl = new FGExternalPipe( dt, pipe_path );
src/FDM/fdm_shell.cxx:332: _impl = new FGExternalPipe( dt, pipe_path, pipe_protocol );
src/FDM/fdm_shell.cxx:334: _impl = new FGNullFDM( dt );
src/FDM/fdm_shell.cxx:338: _impl = new FGLaRCsim( dt );
src/FDM/fdm_shell.cxx:345: _impl = new FGJSBsim( dt );
src/FDM/fdm_shell.cxx:352: _impl = new FGADA( dt );
src/FDM/fdm_shell.cxx:354: _impl = new FGACMS( dt );
src/FDM/fdm_shell.cxx:356: _impl = new FGBalloonSim( dt );
src/FDM/fdm_shell.cxx:358: _impl = new FGMagicCarpet( dt );
src/FDM/fdm_shell.cxx:360:// _impl = new FGAISim( dt );
src/FDM/fdm_shell.cxx:370: _impl = new YASim( dt );
src/FDM/JSBSim/FGFDMExec.cpp:230: Models[eInput] = new FGInput(this);
src/FDM/JSBSim/models/FGInput.cpp:79: // are not intended to create new properties. For that reason, FGInput
src/FDM/YASim/Airplane.cpp:802: // For new YASim, the solver drag factor is only applied to
src/GUI/QtLauncher.cxx:455: FGHTTPClient* http = globals->add_new_subsystem<FGHTTPClient>();
src/Input/input.cxx:65: set_subsystem( FGMouseInput::staticSubsystemClassId(), new FGMouseInput() );
src/Input/input.cxx:71: set_subsystem( "input-keyboard", new FGKeyboardInput() );
src/Input/input.cxx:78: set_subsystem( "input-joystick", new FGJoystickInput() );
src/Input/input.cxx:94: set_subsystem( "input-event-hid", new FGHIDEventInput() );
src/Instrumentation/commradio.cxx:720: return new CommRadioImpl(rootNode);
src/Instrumentation/dclgps.cxx:4:// up between current FG code and new KLN89-specific code and removed.
src/Instrumentation/dclgps.hxx:4:// up between current FG code and new KLN89-specific code and removed.
src/Instrumentation/instrument_mgr.cxx:118: set_subsystem( id, new ADF( node ), 0.15 );
src/Instrumentation/instrument_mgr.cxx:121: set_subsystem( id, new AirspeedIndicator( node ) );
src/Instrumentation/instrument_mgr.cxx:124: set_subsystem( id, new Altimeter( node, "altimeter" ) );
src/Instrumentation/instrument_mgr.cxx:127: set_subsystem( id, new AttitudeIndicator( node ) );
src/Instrumentation/instrument_mgr.cxx:130: set_subsystem( id, new Clock( node ), 0.25 );
src/Instrumentation/instrument_mgr.cxx:133: set_subsystem( id, new DME( node ), 1.0 );
src/Instrumentation/instrument_mgr.cxx:136: set_subsystem( id, new Altimeter( node, "encoder" ), 0.15 );
src/Instrumentation/instrument_mgr.cxx:143: set_subsystem( id, new GPS( node, true /* default GPS mode */ ) );
src/Instrumentation/instrument_mgr.cxx:146: set_subsystem( id, new GSDI( node ) );
src/Instrumentation/instrument_mgr.cxx:149: set_subsystem( id, new HeadingIndicator( node ) );
src/Instrumentation/instrument_mgr.cxx:152: set_subsystem( id, new HeadingIndicatorFG( node ) );
src/Instrumentation/instrument_mgr.cxx:155: set_subsystem( id, new HeadingIndicatorDG( node ) );
src/Instrumentation/instrument_mgr.cxx:158: set_subsystem( id, new FGKR_87( node ) );
src/Instrumentation/instrument_mgr.cxx:161: set_subsystem( id, new MagCompass( node ) );
src/Instrumentation/instrument_mgr.cxx:164: set_subsystem( id, new FGMarkerBeacon( node ), 0.2 );
src/Instrumentation/instrument_mgr.cxx:173: set_subsystem( id, new SlipSkidBall( node ), 0.03 );
src/Instrumentation/instrument_mgr.cxx:182: set_subsystem( id, new Transponder( node ), 0.2 );
src/Instrumentation/instrument_mgr.cxx:185: set_subsystem( id, new TurnIndicator( node ) );
src/Instrumentation/instrument_mgr.cxx:188: set_subsystem( id, new VerticalSpeedIndicator( node ) );
src/Instrumentation/instrument_mgr.cxx:191: set_subsystem( id, new InstVerticalSpeedIndicator( node ) );
src/Instrumentation/instrument_mgr.cxx:194: set_subsystem( id, new TACAN( node ), 0.2 );
src/Instrumentation/instrument_mgr.cxx:197: set_subsystem( id, new MK_VIII( node ), 0.2);
src/Instrumentation/instrument_mgr.cxx:200: set_subsystem( id, new MasterReferenceGyro( node ) );
src/Instrumentation/instrument_mgr.cxx:212: set_subsystem( id, new RadarAltimeter( node ) );
src/Instrumentation/instrument_mgr.cxx:215: set_subsystem( id, new TCAS( node ), 0.2);
src/Instrumentation/instrument_mgr.cxx:97: set_subsystem("gps[0]", new GPS(nd, true /* default GPS mode */));
src/Instrumentation/newnavradio.cxx:970: return new NavRadioImpl( rootNode );
src/Instrumentation/newnavradio.cxx:972: return new FGNavRadio( rootNode );
src/Main/fg_init.cxx:1003: globals->add_new_subsystem<FGInput>(SGSubsystemMgr::GENERAL);
src/Main/fg_init.cxx:1009: globals->add_new_subsystem<FGReplay>(SGSubsystemMgr::GENERAL);
src/Main/fg_init.cxx:1010: globals->add_subsystem("history", new FGFlightHistory);
src/Main/fg_init.cxx:1016: globals->add_subsystem("voice", new FGVoiceMgr, SGSubsystemMgr::DISPLAY);
src/Main/fg_init.cxx:1023: globals->add_subsystem("fgcom", new FGCom);
src/Main/fg_init.cxx:1038: globals->add_subsystem("lighting", new FGLight, SGSubsystemMgr::DISPLAY);
src/Main/fg_init.cxx:1042: globals->add_new_subsystem<FGAircraftModel>(SGSubsystemMgr::DISPLAY);
src/Main/fg_init.cxx:1043: globals->add_new_subsystem<FGModelMgr>(SGSubsystemMgr::DISPLAY);
src/Main/fg_init.cxx:1045: globals->add_new_subsystem<FGViewMgr>(SGSubsystemMgr::DISPLAY);
src/Main/fg_init.cxx:1057: globals->add_new_subsystem<FGNasalSys>(SGSubsystemMgr::INIT);
src/Main/fg_init.cxx:836: globals->add_new_subsystem<FGSoundManager>(SGSubsystemMgr::SOUND);
src/Main/fg_init.cxx:849: globals->add_subsystem("prop-interpolator", new FGInterpolator, SGSubsystemMgr::INIT);
src/Main/fg_init.cxx:855: globals->add_subsystem("properties", new FGProperties);
src/Main/fg_init.cxx:861: globals->add_new_subsystem<flightgear::AirportDynamicsManager>();
src/Main/fg_init.cxx:867: new SGPerformanceMonitor(globals->get_subsystem_mgr(),
src/Main/fg_init.cxx:883: globals->add_new_subsystem<FGHTTPClient>();
src/Main/fg_init.cxx:885: globals->add_new_subsystem<FGDNSClient>();
src/Main/fg_init.cxx:891: globals->add_subsystem("flight", new FDMShell, SGSubsystemMgr::FDM);
src/Main/fg_init.cxx:898: globals->add_subsystem("environment", new FGEnvironmentMgr);
src/Main/fg_init.cxx:899: globals->add_new_subsystem<Ephemeris>();
src/Main/fg_init.cxx:906: globals->add_subsystem("systems", new FGSystemMgr, SGSubsystemMgr::FDM);
src/Main/fg_init.cxx:907: globals->add_subsystem("instrumentation", new FGInstrumentMgr, SGSubsystemMgr::FDM);
src/Main/fg_init.cxx:908: globals->add_subsystem("hud", new HUD, SGSubsystemMgr::DISPLAY);
src/Main/fg_init.cxx:909: globals->add_subsystem("cockpit-displays", new flightgear::CockpitDisplayManager, SGSubsystemMgr::DISPLAY);
src/Main/fg_init.cxx:917: globals->add_new_subsystem<FGRouteMgr>();
src/Main/fg_init.cxx:922: globals->add_subsystem( "io", new FGIO );
src/Main/fg_init.cxx:928: globals->add_subsystem("logger", new FGLogger);
src/Main/fg_init.cxx:934: globals->add_subsystem("gui", new NewGUI, SGSubsystemMgr::INIT);
src/Main/fg_init.cxx:947: globals->add_subsystem("Canvas", new CanvasMgr, SGSubsystemMgr::DISPLAY);
src/Main/fg_init.cxx:948: globals->add_subsystem("CanvasGUI", new GUIMgr, SGSubsystemMgr::DISPLAY);
src/Main/fg_init.cxx:954: globals->add_new_subsystem<PerformanceDB>(SGSubsystemMgr::POST_FDM);
src/Main/fg_init.cxx:955: globals->add_subsystem("ATC", new FGATCManager, SGSubsystemMgr::POST_FDM);
src/Main/fg_init.cxx:961: globals->add_subsystem("mp", new FGMultiplayMgr, SGSubsystemMgr::POST_FDM);
src/Main/fg_init.cxx:968: globals->add_subsystem("swift", new SwiftConnection, SGSubsystemMgr::POST_FDM);
src/Main/fg_init.cxx:975: globals->add_subsystem("ai-model", new FGAIManager, SGSubsystemMgr::POST_FDM);
src/Main/fg_init.cxx:976: globals->add_subsystem("submodel-mgr", new FGSubmodelMgr, SGSubsystemMgr::POST_FDM);
src/Main/fg_init.cxx:982: globals->add_subsystem("traffic-manager", new FGTrafficManager, SGSubsystemMgr::POST_FDM);
src/Main/fg_init.cxx:997: globals->add_new_subsystem<FGControls>(SGSubsystemMgr::GENERAL);
src/Main/globals.cxx:147: subsystem_mgr( new SGSubsystemMgr ),
src/Main/globals.cxx:148: event_mgr( new SGEventMgr ),
src/Main/globals.hxx:188: T* add_new_subsystem (SGSubsystemMgr::GroupType
src/Main/main.cxx:211: simgear::SGTerraSync* terra_sync = new simgear::SGTerraSync();
src/Main/main.cxx:336: globals->add_new_subsystem<TimeManager>(SGSubsystemMgr::INIT);
src/Main/main.cxx:371: globals->add_new_subsystem<FGScenery>(SGSubsystemMgr::DISPLAY);
src/Network/http/httpd.cxx:642: return new MongooseHttpd(configNode);
src/Systems/system_mgr.cxx:77: new FGElectricalSystem( node ) );
src/Systems/system_mgr.cxx:80: new PitotSystem( node ) );
src/Systems/system_mgr.cxx:83: new StaticSystem( node ) );
src/Systems/system_mgr.cxx:86: new VacuumSystem( node ) );
src/Viewer/fgviewer.cxx:212: FGScenery* scenery = globals->add_new_subsystem<FGScenery>();
src/Viewer/view.cxx:191: v = new View ( FG_LOOKAT, from_model, from_model_index,
src/Viewer/view.cxx:201: v = new View ( FG_LOOKFROM, from_model, from_model_index,
Refactoring
To check that all subsystems on a branch have been updated or refactored:
#! /usr/bin/env python3
# Python module imports.
from subprocess import PIPE, Popen
# Other module imports.
from find_subsystems import FindSubsystems
# Source code repository paths.
SIMGEAR_PATH = "/flightgear/src/flightgear-simgear"
FLIGHTGEAR_PATH = "/flightgear/src/flightgear-flightgear"
class ToUpdate:
"""Class for finding all files yet to be updated."""
def __init__(self):
"""Find all files to be updated."""
# First find all subsystems.
sub = FindSubsystems()
# Generate a list of files to skip.
cmd = "cd %s;" % SIMGEAR_PATH
cmd += "git diff --name-only ..next;"
cmd += "cd %s;" % FLIGHTGEAR_PATH
cmd += "git diff --name-only ..next"
pipe = Popen(cmd, shell=True, stdout=PIPE)
blacklist = []
for line in pipe.stdout.readlines():
file_name = line.decode()
file_name = file_name.strip()
blacklist.append(file_name)
# Loop over all derived class declarations.
print("\nYet to be updated:")
for subsystem in sub.subsystems[0] + sub.subsystems[1] + sub.subsystems[2] + sub.subsystems[3] + sub.groups[0] + sub.groups[1] + sub.groups[2] + sub.groups[3]:
if subsystem.declaration_file not in blacklist:
print(" %s: %s" % (subsystem.declaration_file, subsystem))
# Instantiate the class if run as a script.
if __name__ == "__main__":
ToUpdate()
Automated test suite test creation
This script was used to generate the instanced and non-instanced subsystem system tests:
#! /usr/bin/env python3
# Other module imports.
from find_subsystems import FindSubsystems
class TestSuite:
"""Class for generating the code for the system tests."""
def __init__(self):
"""Auto-generate the C++ code."""
# First find all subsystems.
sub = FindSubsystems(output=False)
# The test name and test code.
name = []
code = []
# Loop over all derived class declarations.
max_width = 0
for subsystem in sub.subsystems[0] + sub.subsystems[1] + sub.subsystems[2] + sub.subsystems[3] + sub.groups[0] + sub.groups[1] + sub.groups[2] + sub.groups[3]:
# Skip non-instantiated base classes.
if not subsystem.staticSubsystemClassId:
continue
# Add the test suite text.
name.append("test%s" % (subsystem.name))
code.append("{ create(\"%s\"); }" % (subsystem.staticSubsystemClassId))
# Formatting.
max_width = max(len(name[-1]), max_width)
# Test setup printout.
print("\n")
print(" CPPUNIT_TEST_SUITE(NonInstancedSubsystemTests);")
for i in range(len(name)):
print(" CPPUNIT_TEST(%s);" % name[i])
print(" CPPUNIT_TEST_SUITE_END();")
# Test declaration printout.
print("\n")
print(" // The subsystem tests.")
for i in range(len(name)):
print(" void %s();" % name[i])
# Test implementation printout.
print("\n")
format_str = "void NonInstancedSubsystemTests::%%-%is() %%-s" % max_width
for i in range(len(name)):
print(format_str % (name[i], code[i]))
# Instantiate the class if run as a script.
if __name__ == "__main__":
TestSuite()