User:Bugman/subsystems: Difference between revisions
Jump to navigation
Jump to search
(→Script: Yet another script update.) |
(→Script: Another version.) |
||
Line 58: | Line 58: | ||
# Add some problematic non-parsable classes. | # Add some problematic non-parsable classes. | ||
self.subsystems[1].append(Subsystem("FGAISim", base_class=Subsystem("FGInterface", base_class=Subsystem("SGSubsystem")), declaration_file="src/FDM/SP/AISim.hpp", xml=self.xml)) | self.subsystems[1].append(Subsystem("FGAISim", base_class=Subsystem("FGInterface", base_class=Subsystem("SGSubsystem")), declaration_file="src/FDM/SP/AISim.hpp", xml=self.xml)) | ||
# Find all SGSubsystem and SGSubsystemGroup derived classes. | # Find all SGSubsystem and SGSubsystemGroup derived classes. | ||
paths = [SIMGEAR_PATH, FLIGHTGEAR_PATH] | paths = [SIMGEAR_PATH, FLIGHTGEAR_PATH] | ||
for path in paths: | |||
for | self.find_primary(path=path, text="classes", primary=self.subsystems[0], base_name="SGSubsystem", base=subsystem_base, skip=["SGSubsystemGroup"]) | ||
self.find_primary(path= | self.find_primary(path=path, text="groups", primary=self.groups[0], base_name="SGSubsystemGroup", base=group_base) | ||
self.find_primary(path= | |||
self.find_secondary(path= | self.find_secondary(path=path, text="classes", primary=self.subsystems[0], secondary=self.subsystems[1]) | ||
self.find_secondary(path= | self.find_secondary(path=path, text="groups", primary=self.groups[0], secondary=self.groups[1]) | ||
self.find_tertiary(path= | self.find_tertiary(path=path, text="classes", secondary=self.subsystems[1], tertiary=self.subsystems[2]) | ||
self.find_tertiary(path= | self.find_tertiary(path=path, text="groups", secondary=self.groups[1], tertiary=self.groups[2]) | ||
self.find_quaternary(path= | self.find_quaternary(path=path, text="classes", tertiary=self.subsystems[2], quaternary=self.subsystems[3]) | ||
self.find_quaternary(path= | self.find_quaternary(path=path, text="groups", tertiary=self.groups[2], quaternary=self.groups[3]) | ||
# Find the subsystem and subsystem group implementation files. | # Find the subsystem and subsystem group implementation files. | ||
Line 84: | Line 79: | ||
# Final summary. | # Final summary. | ||
self.summarise() | self.summarise() | ||
Line 145: | Line 136: | ||
# Search. | # Search. | ||
for cmd in cmds: | for cmd in cmds: | ||
pipe = Popen(cmd, shell=True, stdout=PIPE) | pipe = Popen(cmd, shell=True, stdout=PIPE) | ||
lines = pipe.stdout.readlines() | lines = pipe.stdout.readlines() | ||
Line 162: | Line 152: | ||
# Search. | # Search. | ||
for cmd in cmds: | for cmd in cmds: | ||
pipe = Popen(cmd, shell=True, stdout=PIPE) | pipe = Popen(cmd, shell=True, stdout=PIPE) | ||
Line 187: | Line 176: | ||
def find_primary(self, path=None, text=None, primary=None, base_name=None, base=None, skip=[] | def find_primary(self, path=None, text=None, primary=None, base_name=None, base=None, skip=[]): | ||
"""Find all primary subsystems and groups | """Find all primary subsystems and groups | ||
Line 202: | Line 191: | ||
@keyword skip: A list of class names to skip. | @keyword skip: A list of class names to skip. | ||
@type skip: list of str | @type skip: list of str | ||
""" | """ | ||
# Printout. | # Printout. | ||
sys.stderr.write("Finding all primary %s in: %s\n" % (text, path)) | |||
# Find all subsystems or groups. | # Find all subsystems or groups. | ||
for file_name, class_name in self.grep(path=path, base_name=base_name): | for file_name, class_name in self.grep(path=path, base_name=base_name): | ||
Line 215: | Line 204: | ||
# Sort the subsystems by name. | # Sort the subsystems by name. | ||
primary.sort(key=operator.attrgetter('name')) | primary.sort(key=operator.attrgetter('name')) | ||
def find_secondary(self, path=None, text=None, primary=None, secondary=None | def find_secondary(self, path=None, text=None, primary=None, secondary=None): | ||
"""Find all secondary subsystems and groups | """Find all secondary subsystems and groups | ||
Line 240: | Line 217: | ||
@keyword secondary: The secondary list of subsystems or groups. | @keyword secondary: The secondary list of subsystems or groups. | ||
@type secondary: list of Subsystem instances | @type secondary: list of Subsystem instances | ||
""" | """ | ||
# Printout. | |||
sys.stderr.write("Finding all secondary %s in: %s\n" % (text, path)) | |||
# Loop over all primary subsystems. | # Loop over all primary subsystems. | ||
Line 252: | Line 230: | ||
secondary.sort(key=operator.attrgetter('name')) | secondary.sort(key=operator.attrgetter('name')) | ||
def find_tertiary(self, path=None, text=None, secondary=None, tertiary=None): | |||
def find_tertiary(self, path=None, text=None, secondary=None, tertiary=None | |||
"""Find all tertiary subsystems and groups | """Find all tertiary subsystems and groups | ||
Line 276: | Line 242: | ||
@keyword tertiary: The tertiary list of subsystems or groups. | @keyword tertiary: The tertiary list of subsystems or groups. | ||
@type tertiary: list of Subsystem instances | @type tertiary: list of Subsystem instances | ||
""" | """ | ||
# Printout. | |||
sys.stderr.write("Finding all tertiary %s in: %s\n" % (text, path)) | |||
# Loop over all secondary subsystems. | # Loop over all secondary subsystems. | ||
Line 287: | Line 254: | ||
# Sort all subsystems by name. | # Sort all subsystems by name. | ||
tertiary.sort(key=operator.attrgetter('name')) | tertiary.sort(key=operator.attrgetter('name')) | ||
def find_quaternary(self, path=None, text=None, tertiary=None, quaternary=None | def find_quaternary(self, path=None, text=None, tertiary=None, quaternary=None): | ||
"""Find all | """Find all quaternary subsystems and groups | ||
@keyword path: The path to the repository to search through. | @keyword path: The path to the repository to search through. | ||
Line 312: | Line 267: | ||
@keyword quaternary: The quaternary list of subsystems or groups. | @keyword quaternary: The quaternary list of subsystems or groups. | ||
@type quaternary: list of Subsystem instances | @type quaternary: list of Subsystem instances | ||
""" | """ | ||
# Printout. | |||
sys.stderr.write("Finding all quaternary %s in: %s\n" % (text, path)) | |||
# Loop over all tertiary subsystems. | # Loop over all tertiary subsystems. | ||
Line 323: | Line 279: | ||
# Sort all subsystems by name. | # Sort all subsystems by name. | ||
quaternary.sort(key=operator.attrgetter('name')) | quaternary.sort(key=operator.attrgetter('name')) | ||
Line 363: | Line 307: | ||
# Cannot handle this line! | # Cannot handle this line! | ||
if not search("class ", line): | if not search("class ", line): | ||
sys.stderr.write(" | sys.stderr.write("Skipping: %s\n" % repr(line[:-1])) | ||
continue | continue | ||
Line 381: | Line 325: | ||
def summarise(self): | def summarise(self): | ||
"""Print out a summary of all found subsystems and subsystem groups.""" | """Print out a summary of all found subsystems and subsystem groups.""" | ||
# XML start. | |||
if self.xml: | |||
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.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: | |||
print(" %s" % (subsystem)) | |||
# End. | |||
if self.xml: | |||
print(" </%s_%s>" % (labels[i], classes[j])) | |||
# Counts. | # Counts. | ||
Line 406: | Line 386: | ||
simgear_total = subsystem_classes_simgear + subsystem_groups_simgear | simgear_total = subsystem_classes_simgear + subsystem_groups_simgear | ||
flightgear_total = subsystem_classes_flightgear + subsystem_groups_flightgear | flightgear_total = subsystem_classes_flightgear + subsystem_groups_flightgear | ||
if self.xml: | if self.xml: | ||
print(" <counts>") | print(" <counts>") | ||
Line 430: | Line 408: | ||
print("Counts: %i subsystem groups (%i flightgear, %i simgear)." % (subsystem_groups, subsystem_groups_flightgear, subsystem_groups_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)) | print("Counts: %i subsystem classes and groups (%i flightgear, %i simgear)." % (subsystem_total, flightgear_total, simgear_total)) | ||
# XML end. | |||
if self.xml: | |||
print("</subsystems>") | |||
Revision as of 18:58, 19 April 2018
Tracking down subsystems
Script
The following script is for finding all FlightGear dependencies:
Python script: Python script for finding all subsystems within the flightgear and simgear C++ code bases.
All subsystems
The result is:
XML output: A listing of all flightgear and simgear subsystems and subsystem groups.
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.
<subsystems>
<primary_classes subsystems="91" groups="0">
<ADF from="SGSubsystem" in="src/Instrumentation/adf.hxx"/>
<AirportDynamicsManager from="SGSubsystem" in="src/Airports/airportdynamicsmanager.hxx"/>
<AirspeedIndicator from="SGSubsystem" in="src/Instrumentation/airspeed_indicator.hxx"/>
<Altimeter from="SGSubsystem" in="src/Instrumentation/altimeter.hxx"/>
<AreaSampler from="SGSubsystem" in="src/Environment/terrainsampler.cxx"/>
<AttitudeIndicator from="SGSubsystem" in="src/Instrumentation/attitude_indicator.hxx"/>
<Clock from="SGSubsystem" in="src/Instrumentation/clock.hxx"/>
<CommRadio from="SGSubsystem" in="src/Instrumentation/commradio.hxx"/>
<Component from="SGSubsystem" in="src/Autopilot/component.hxx"/>
<DCLGPS from="SGSubsystem" in="src/Instrumentation/dclgps.hxx"/>
<DME from="SGSubsystem" in="src/Instrumentation/dme.hxx"/>
<Ephemeris from="SGSubsystem" in="src/Environment/ephemeris.hxx"/>
<FDMShell from="SGSubsystem" in="src/FDM/fdm_shell.hxx"/>
<FGAIManager from="SGSubsystem" in="src/AIModel/AIManager.hxx"/>
<FGATCManager from="SGSubsystem" in="src/ATC/atc_mgr.hxx"/>
<FGAircraftModel from="SGSubsystem" in="src/Model/acmodel.hxx"/>
<FGCom from="SGSubsystem" in="src/Network/fgcom.hxx"/>
<FGControls from="SGSubsystem" in="src/Aircraft/controls.hxx"/>
<FGDNSClient from="SGSubsystem" in="src/Network/DNSClient.hxx"/>
<FGElectricalSystem from="SGSubsystem" in="src/Systems/electrical.hxx"/>
<FGEventInput from="SGSubsystem" in="src/Input/FGEventInput.hxx"/>
<FGFX from="SGSubsystem" in="docs-mini/README.introduction"/>
<FGFlightHistory from="SGSubsystem" in="src/Aircraft/FlightHistory.hxx"/>
<FGHTTPClient from="SGSubsystem" in="src/Network/HTTPClient.hxx"/>
<FGHttpd from="SGSubsystem" in="src/Network/http/httpd.hxx"/>
<FGIO from="SGSubsystem" in="src/Main/fg_io.hxx"/>
<FGInterface from="SGSubsystem" in="src/FDM/flight.hxx"/>
<FGJoystickInput from="SGSubsystem" in="src/Input/FGJoystickInput.hxx"/>
<FGKR_87 from="SGSubsystem" in="src/Instrumentation/kr_87.hxx"/>
<FGKeyboardInput from="SGSubsystem" in="src/Input/FGKeyboardInput.hxx"/>
<FGLight from="SGSubsystem" in="src/Time/light.hxx"/>
<FGLogger from="SGSubsystem" in="src/Main/logger.hxx"/>
<FGMagVarManager from="SGSubsystem" in="src/Environment/magvarmanager.hxx"/>
<FGMarkerBeacon from="SGSubsystem" in="src/Instrumentation/marker_beacon.hxx"/>
<FGModelMgr from="SGSubsystem" in="src/Model/modelmgr.hxx"/>
<FGMouseInput from="SGSubsystem" in="src/Input/FGMouseInput.hxx"/>
<FGMultiplayMgr from="SGSubsystem" in="src/MultiPlayer/multiplaymgr.hxx"/>
<FGNasalSys from="SGSubsystem" in="src/Scripting/NasalSys.hxx"/>
<FGNavRadio from="SGSubsystem" in="src/Instrumentation/navradio.hxx"/>
<FGPanel from="SGSubsystem" in="utils/fgpanel/FGPanel.hxx"/>
<FGPanelProtocol from="SGSubsystem" in="utils/fgpanel/FGPanelProtocol.hxx"/>
<FGPrecipitationMgr from="SGSubsystem" in="src/Environment/precipitation_mgr.hxx"/>
<FGProperties from="SGSubsystem" in="src/Main/fg_props.hxx"/>
<FGReplay from="SGSubsystem" in="src/Aircraft/replay.hxx"/>
<FGRidgeLift from="SGSubsystem" in="src/Environment/ridge_lift.hxx"/>
<FGRouteMgr from="SGSubsystem" in="src/Autopilot/route_mgr.hxx"/>
<FGScenery from="SGSubsystem" in="src/Scenery/scenery.hxx"/>
<FGSoundManager from="SGSubsystem" in="src/Sound/soundmanager.hxx"/>
<FGSubmodelMgr from="SGSubsystem" in="src/AIModel/submodel.hxx"/>
<FGTrafficManager from="SGSubsystem" in="src/Traffic/TrafficMgr.hxx"/>
<FGViewMgr from="SGSubsystem" in="src/Viewer/viewmgr.hxx"/>
<FGVoiceMgr from="SGSubsystem" in="src/Sound/voice.hxx"/>
<GPS from="SGSubsystem" in="src/Instrumentation/gps.hxx"/>
<GSDI from="SGSubsystem" in="src/Instrumentation/gsdi.hxx"/>
<GUIMgr from="SGSubsystem" in="src/Canvas/gui_mgr.hxx"/>
<GroundRadar from="SGSubsystem" in="src/Cockpit/groundradar.hxx"/>
<HUD from="SGSubsystem" in="src/Instrumentation/HUD/HUD.hxx"/>
<HeadingIndicator from="SGSubsystem" in="src/Instrumentation/heading_indicator.hxx"/>
<HeadingIndicatorDG from="SGSubsystem" in="src/Instrumentation/heading_indicator_dg.hxx"/>
<HeadingIndicatorFG from="SGSubsystem" in="src/Instrumentation/heading_indicator_fg.hxx"/>
<InstVerticalSpeedIndicator from="SGSubsystem" in="src/Instrumentation/inst_vertical_speed_indicator.hxx"/>
<LayerInterpolateController from="SGSubsystem" in="src/Environment/environment_ctrl.hxx"/>
<MK_VIII from="SGSubsystem" in="src/Instrumentation/mk_viii.hxx"/>
<MagCompass from="SGSubsystem" in="src/Instrumentation/mag_compass.hxx"/>
<MasterReferenceGyro from="SGSubsystem" in="src/Instrumentation/mrg.hxx"/>
<NavDisplay from="SGSubsystem" in="src/Cockpit/NavDisplay.hxx"/>
<NavRadio from="SGSubsystem" in="src/Instrumentation/newnavradio.hxx"/>
<NewGUI from="SGSubsystem" in="src/GUI/new_gui.hxx"/>
<PerformanceDB from="SGSubsystem" in="src/AIModel/performancedb.hxx"/>
<PitotSystem from="SGSubsystem" in="src/Systems/pitot.hxx"/>
<PropertyBasedMgr from="SGSubsystem" in="simgear/props/PropertyBasedMgr.hxx"/>
<PropertyInterpolationMgr from="SGSubsystem" in="simgear/props/PropertyInterpolationMgr.hxx"/>
<RadarAltimeter from="SGSubsystem" in="src/Instrumentation/rad_alt.hxx"/>
<RealWxController from="SGSubsystem" in="src/Environment/realwx_ctrl.hxx"/>
<SGEventMgr from="SGSubsystem" in="simgear/structure/event_mgr.hxx"/>
<SGInterpolator from="SGSubsystem" in="simgear/misc/interpolator.hxx"/>
<SGPerformanceMonitor from="SGSubsystem" in="simgear/structure/SGPerfMon.hxx"/>
<SGSoundMgr from="SGSubsystem" in="simgear/sound/soundmgr.hxx"/>
<SGSubsystemMgr from="SGSubsystem" in="simgear/structure/subsystem_mgr.hxx"/>
<SGTerraSync from="SGSubsystem" in="simgear/scene/tsync/terrasync.hxx"/>
<SlipSkidBall from="SGSubsystem" in="src/Instrumentation/slip_skid_ball.hxx"/>
<StaticSystem from="SGSubsystem" in="src/Systems/static.hxx"/>
<TACAN from="SGSubsystem" in="src/Instrumentation/tacan.hxx"/>
<TCAS from="SGSubsystem" in="src/Instrumentation/tcas.hxx"/>
<TimeManager from="SGSubsystem" in="src/Time/TimeManager.hxx"/>
<Transponder from="SGSubsystem" in="src/Instrumentation/transponder.hxx"/>
<TurnIndicator from="SGSubsystem" in="src/Instrumentation/turn_indicator.hxx"/>
<VacuumSystem from="SGSubsystem" in="src/Systems/vacuum.hxx"/>
<VerticalSpeedIndicator from="SGSubsystem" in="src/Instrumentation/vertical_speed_indicator.hxx"/>
<View from="SGSubsystem" in="src/Viewer/view.hxx"/>
<wxRadarBg from="SGSubsystem" in="src/Cockpit/wxradar.hxx"/>
</primary_classes>
<primary_groups subsystems="0" groups="8">
<Autopilot from="SGSubsystemGroup : SGSubsystem" in="src/Autopilot/autopilot.hxx"/>
<CockpitDisplayManager from="SGSubsystemGroup : SGSubsystem" in="src/Cockpit/cockpitDisplayManager.hxx"/>
<FGEnvironmentMgr from="SGSubsystemGroup : SGSubsystem" in="src/Environment/environment_mgr.hxx"/>
<FGInput from="SGSubsystemGroup : SGSubsystem" in="src/Input/input.hxx"/>
<FGInstrumentMgr from="SGSubsystemGroup : SGSubsystem" in="src/Instrumentation/instrument_mgr.hxx"/>
<FGSystemMgr from="SGSubsystemGroup : SGSubsystem" in="src/Systems/system_mgr.hxx"/>
<FGXMLAutopilotGroup from="SGSubsystemGroup : SGSubsystem" in="src/Autopilot/autopilotgroup.hxx"/>
<TerrainSampler from="SGSubsystemGroup : SGSubsystem" in="src/Environment/terrainsampler.hxx"/>
</primary_groups>
<secondary_classes subsystems="28" groups="0">
<AnalogComponent from="Component : SGSubsystem" in="src/Autopilot/analogcomponent.hxx"/>
<BasicRealWxController from="RealWxController : SGSubsystem" in="src/Environment/realwx_ctrl.cxx"/>
<CanvasMgr from="PropertyBasedMgr : SGSubsystem" in="simgear/canvas/CanvasMgr.hxx"/>
<CommRadioImpl from="CommRadio : SGSubsystem" in="src/Instrumentation/commradio.cxx"/>
<DigitalComponent from="Component : SGSubsystem" in="src/Autopilot/digitalcomponent.hxx"/>
<FGACMS from="FGInterface : SGSubsystem" in="src/FDM/SP/ACMS.hxx"/>
<FGADA from="FGInterface : SGSubsystem" in="src/FDM/SP/ADA.hxx"/>
<FGAISim from="FGInterface : SGSubsystem" in="src/FDM/SP/AISim.hpp"/>
<FGBalloonSim from="FGInterface : SGSubsystem" in="src/FDM/SP/Balloon.h"/>
<FGExternalNet from="FGInterface : SGSubsystem" in="src/FDM/ExternalNet/ExternalNet.hxx"/>
<FGExternalPipe from="FGInterface : SGSubsystem" in="src/FDM/ExternalPipe/ExternalPipe.hxx"/>
<FGHIDEventInput from="FGEventInput : SGSubsystem" in="src/Input/FGHIDEventInput.hxx"/>
<FGJSBsim from="FGInterface : SGSubsystem" in="src/FDM/JSBSim/JSBSim.hxx"/>
<FGLaRCsim from="FGInterface : SGSubsystem" in="src/FDM/LaRCsim/LaRCsim.hxx"/>
<FGLinuxEventInput from="FGEventInput : SGSubsystem" in="src/Input/FGLinuxEventInput.hxx"/>
<FGMacOSXEventInput from="FGEventInput : SGSubsystem" in="src/Input/FGMacOSXEventInput.hxx"/>
<FGMagicCarpet from="FGInterface : SGSubsystem" in="src/FDM/SP/MagicCarpet.hxx"/>
<FGNullFDM from="FGInterface : SGSubsystem" in="src/FDM/NullFDM.hxx"/>
<FGReadablePanel from="FGPanel : SGSubsystem" in="utils/fgpanel/panel_io.hxx"/>
<FGSoundManager from="SGSoundMgr : SGSubsystem" in="src/Sound/soundmanager.hxx"/>
<FGUFO from="FGInterface : SGSubsystem" in="src/FDM/UFO.hxx"/>
<KLN89 from="DCLGPS : SGSubsystem" in="src/Instrumentation/KLN89/kln89.hxx"/>
<LayerInterpolateControllerImplementation from="LayerInterpolateController : SGSubsystem" in="src/Environment/environment_ctrl.cxx"/>
<MongooseHttpd from="FGHttpd : SGSubsystem" in="src/Network/http/httpd.cxx"/>
<NavRadioImpl from="NavRadio : SGSubsystem" in="src/Instrumentation/newnavradio.cxx"/>
<StateMachineComponent from="Component : SGSubsystem" in="src/Autopilot/autopilot.cxx"/>
<YASim from="FGInterface : SGSubsystem" in="src/FDM/YASim/YASim.hxx"/>
<agRadar from="wxRadarBg : SGSubsystem" in="src/Cockpit/agradar.hxx"/>
</secondary_classes>
<secondary_groups subsystems="0" groups="2">
<FGXMLAutopilotGroupImplementation from="FGXMLAutopilotGroup : SGSubsystemGroup : SGSubsystem" in="src/Autopilot/autopilotgroup.cxx"/>
<TerrainSamplerImplementation from="TerrainSampler : SGSubsystemGroup : SGSubsystem" in="src/Environment/terrainsampler.cxx"/>
</secondary_groups>
<tertiary_classes subsystems="6" groups="0">
<DigitalFilter from="AnalogComponent : Component : SGSubsystem" in="src/Autopilot/digitalfilter.hxx"/>
<Logic from="DigitalComponent : Component : SGSubsystem" in="src/Autopilot/logic.hxx"/>
<NoaaMetarRealWxController from="BasicRealWxController : RealWxController : SGSubsystem" in="src/Environment/realwx_ctrl.cxx"/>
<PIDController from="AnalogComponent : Component : SGSubsystem" in="src/Autopilot/pidcontroller.hxx"/>
<PISimpleController from="AnalogComponent : Component : SGSubsystem" in="src/Autopilot/pisimplecontroller.hxx"/>
<Predictor from="AnalogComponent : Component : SGSubsystem" in="src/Autopilot/predictor.hxx"/>
</tertiary_classes>
<quaternary_classes subsystems="1" groups="0">
<FlipFlop from="Logic : DigitalComponent : Component : SGSubsystem" in="src/Autopilot/flipflop.hxx"/>
</quaternary_classes>
<total subsystem_classes="126" subsystem_groups="10" total="136"/>
<simgear subsystem_classes="9" subsystem_groups="0" total="9"/>
<flightgear subsystem_classes="117" subsystem_groups="10" total="127"/>
</subsystems>
Text output: A listing of all flightgear and simgear subsystems and subsystem groups.
Refactoring
To check that all subsystems on a branch have been updated or refactored:
Python script: Python script verifying if all subsystems have been updated.