+/**
+ * Events caused by changes to an afs table.
+ *
+ * Whenever an afs table changes, an event is generated which causes afs to
+ * call the event handlers of all other tables. For example, if an audio file
+ * is added, the event handler of the mood table checks the new file for
+ * admissibility.
+ */
+enum afs_events {
+ /** An attribute was added. */
+ ATTRIBUTE_ADD,
+ /** An attribute was renamed. */
+ ATTRIBUTE_RENAME,
+ /** An attribute was removed. */
+ ATTRIBUTE_REMOVE,
+ /** The afs info struct of an audio file changed. */
+ AFSI_CHANGE,
+ /** The afh info struct of an audio file changed. */
+ AFHI_CHANGE,
+ /** An audio file was renamed. */
+ AUDIO_FILE_RENAME,
+ /** An audio file was added. */
+ AUDIO_FILE_ADD,
+ /** An audio file is about to be removed. */
+ AUDIO_FILE_REMOVE,
+ /** A new blob was added. */
+ BLOB_ADD,
+ /** A blob was renamed. */
+ BLOB_RENAME,
+ /** A blob is about to be removed. */
+ BLOB_REMOVE,
+};
+
+/**
+ * Used as data for \ref afs_event() for events of type \p ATTRIBUTE_ADD.
+ */
+struct rmatt_event_data {
+ /** The name of the attribute being added. */
+ const char *name;
+ /** Its bit number. */
+ unsigned char bitnum;
+};
+
+/**
+ * Used as data for \ref afs_event() for events of type \p ATTRIBUTE_AFSI_CHANGE.
+ */
+struct afsi_change_event_data {
+ /** Pointer to the row that has changed. */
+ struct osl_row *aft_row;
+ /** Afs info before the change. */
+ struct afs_info *old_afsi;
+};