+
+\f
+////////////////////////////////////////////////////////////////////////
+// Convenience functions for setting property attributes.
+////////////////////////////////////////////////////////////////////////
+
+
+/**
+ * Set the state of the archive attribute for a property.
+ *
+ * If the archive attribute is true, the property will be written
+ * when a flight is saved; if it is false, the property will be
+ * skipped.
+ *
+ * A warning message will be printed if the property does not exist.
+ *
+ * @param name The property name.
+ * @param state The state of the archive attribute (defaults to true).
+ */
+extern void fgSetArchivable (const char * name, bool state = true);
+
+
+/**
+ * Set the state of the read attribute for a property.
+ *
+ * If the read attribute is true, the property value will be readable;
+ * if it is false, the property value will always be the default value
+ * for its type.
+ *
+ * A warning message will be printed if the property does not exist.
+ *
+ * @param name The property name.
+ * @param state The state of the read attribute (defaults to true).
+ */
+extern void fgSetReadable (const char * name, bool state = true);
+
+
+/**
+ * Set the state of the write attribute for a property.
+ *
+ * If the write attribute is true, the property value may be modified
+ * (depending on how it is tied); if the write attribute is false, the
+ * property value may not be modified.
+ *
+ * A warning message will be printed if the property does not exist.
+ *
+ * @param name The property name.
+ * @param state The state of the write attribute (defaults to true).
+ */
+extern void fgSetWritable (const char * name, bool state = true);
+
+
+\f
+////////////////////////////////////////////////////////////////////////
+// Convenience functions for tying properties, with logging.
+////////////////////////////////////////////////////////////////////////
+
+
+/**
+ * Untie a property from an external data source.
+ *
+ * Classes should use this function to release control of any
+ * properties they are managing.
+ */
+extern void fgUntie (const char * name);
+
+
+/**
+ * Tie a property to a pair of simple functions.
+ *
+ * Every time the property value is queried, the getter (if any) will
+ * be invoked; every time the property value is modified, the setter
+ * (if any) will be invoked. The getter can be 0 to make the property
+ * unreadable, and the setter can be 0 to make the property
+ * unmodifiable.
+ *
+ * @param name The property name to tie (full path).
+ * @param getter The getter function, or 0 if the value is unreadable.
+ * @param setter The setter function, or 0 if the value is unmodifiable.
+ * @param useDefault true if the setter should be invoked with any existing
+ * property value should be; false if the old value should be
+ * discarded; defaults to true.
+ */