struct osl_object map;
};
+enum pattern_match_flags {
+ PM_REVERSE_LOOP = 1,
+ PM_NO_PATTERN_MATCHES_EVERYTHING = 2,
+ PM_SKIP_EMPTY_NAME = 4,
+};
+
+struct pattern_match_data {
+ struct osl_table *table;
+ unsigned loop_col_num;
+ unsigned match_col_num;
+ unsigned pm_flags;
+ int fnmatch_flags;
+ struct osl_object patterns;
+ void *data;
+ int (*action)(struct osl_table *table, struct osl_row *row, const char *name, void *data);
+};
+
/* afs */
typedef int callback_function(const struct osl_object *, struct osl_object *);
__noreturn int afs_init(uint32_t cookie, int socket_fd);
int para_atol(const char *str, long *result);
int open_next_audio_file(struct audio_file_data *afd);
int close_audio_file(struct audio_file_data *afd);
+int for_each_matching_row(struct pattern_match_data *pmd);
/* score */
int score_init(struct table_info *ti, const char *db);