+ string dir = fgGetString("/sim/paths/screenshot-dir");
+ if (dir.empty())
+ dir = fgGetString("/sim/fg-current");
+
+ SGPath path(dir + '/');
+ if (path.create_dir( 0755 )) {
+ SG_LOG(SG_GENERAL, SG_ALERT, "Cannot create screenshot directory '"
+ << dir << "'. Trying home directory.");
+ dir = fgGetString("/sim/fg-home");
+ }
+
+ char filename[24];
+ static int count = 1;
+ while (count < 1000) {
+ snprintf(filename, 24, "fgfs-screen-%03d.png", count++);
+
+ SGPath p(dir);
+ p.append(filename);
+ if (!p.exists()) {
+ path.set(p.str());
+ break;
+ }
+ }
+
+ int result = sg_glDumpWindow(path.c_str(),
+ fgGetInt("/sim/startup/xsize"),
+ fgGetInt("/sim/startup/ysize"));
+
+ fgSetString("/sim/paths/screenshot-last", path.c_str());
+ fgSetBool("/sim/signals/screenshot", false);
+
+ fgSetMouseCursor(mouse);
+
+ if ( !freeze ) {
+ fgSetBool("/sim/freeze/master", false);
+ }
+ return result != 0;
+}
+
+// do an entire scenegraph dump
+void fgDumpSceneGraph()
+{
+ char *filename = new char [24];
+ string message;
+ static int count = 1;
+
+ static const SGPropertyNode *master_freeze
+ = fgGetNode("/sim/freeze/master");
+
+ bool freeze = master_freeze->getBoolValue();
+ if ( !freeze ) {
+ fgSetBool("/sim/freeze/master", true);
+ }
+