play: Convert com_ls() to lopsub.
[paraslash.git] / afs.h
diff --git a/afs.h b/afs.h
index 78bc50aeaadf124165aa3d7e50440b59dea3b9ee..879331ec85b244a31fb56287ce15e2192701d911 100644 (file)
--- a/afs.h
+++ b/afs.h
@@ -6,8 +6,6 @@
 
 /** \file afs.h Exported symbols of the audio file selector. */
 
 
 /** \file afs.h Exported symbols of the audio file selector. */
 
-#include <regex.h>
-
 /** Audio file selector data stored in the audio file table. */
 struct afs_info {
        /** Seconds since the epoch. */
 /** Audio file selector data stored in the audio file table. */
 struct afs_info {
        /** Seconds since the epoch. */
@@ -147,8 +145,10 @@ struct pattern_match_data {
        unsigned pm_flags;
        /** This value is passed verbatim to fnmatch(). */
        int fnmatch_flags;
        unsigned pm_flags;
        /** This value is passed verbatim to fnmatch(). */
        int fnmatch_flags;
-       /** Null-terminated array of patterns. */
-       struct osl_object patterns;
+       /** Obtained by deserializing the query buffer in the callback. */
+       struct lls_parse_result *lpr;
+       /** Do not try to match the first inputs of lpr */
+       unsigned input_skip;
        /** Data pointer passed to the action function. */
        void *data;
        /** Gets increased by one for each match. */
        /** Data pointer passed to the action function. */
        void *data;
        /** Gets increased by one for each match. */
@@ -157,6 +157,16 @@ struct pattern_match_data {
        int (*action)(struct osl_table *table, struct osl_row *row, const char *name, void *data);
 };
 
        int (*action)(struct osl_table *table, struct osl_row *row, const char *name, void *data);
 };
 
+/** Arguments passed to each afs callback. */
+struct afs_callback_arg {
+       /** The local socket connecting afs and the command handler. */
+       int fd;
+       /** Callback-specific data. */
+       struct osl_object query;
+       /** Will be written on band SBD_OUTPUT, fully buffered. */
+       struct para_buffer pbout;
+       struct lls_parse_result *lpr;
+};
 
 /**
  * Afs command handlers run as a process which is not related to the afs
 
 /**
  * Afs command handlers run as a process which is not related to the afs
@@ -166,7 +176,7 @@ struct pattern_match_data {
  *
  * \sa send_callback_request().
  */
  *
  * \sa send_callback_request().
  */
-typedef int callback_function(int fd, const struct osl_object *);
+typedef int afs_callback(struct afs_callback_arg *aca);
 
 /**
  * Callbacks send chunks to data back to the command handler. Pointers to
 
 /**
  * Callbacks send chunks to data back to the command handler. Pointers to
@@ -211,19 +221,14 @@ _static_inline_ int afs_max_size_handler(char *buf, size_t size, void *private)
 __noreturn void afs_init(uint32_t cookie, int socket_fd);
 __must_check int afs_event(enum afs_events event, struct para_buffer *pb,
        void *data);
 __noreturn void afs_init(uint32_t cookie, int socket_fd);
 __must_check int afs_event(enum afs_events event, struct para_buffer *pb,
        void *data);
-int send_callback_request(callback_function *f, struct osl_object *query,
+int send_callback_request(afs_callback *f, struct osl_object *query,
                callback_result_handler *result_handler,
                void *private_result_data);
                callback_result_handler *result_handler,
                void *private_result_data);
-int send_option_arg_callback_request(struct osl_object *options,
-               int argc,  char * const * const argv, callback_function *f,
-               callback_result_handler *result_handler,
-               void *private_result_data);
-int send_standard_callback_request(int argc,  char * const * const argv,
-               callback_function *f, callback_result_handler *result_handler,
-               void *private_result_data);
+int send_lls_callback_request(afs_callback *f,
+               const struct lls_command * const cmd,
+               struct lls_parse_result *lpr, void *private_result_data);
 int string_compare(const struct osl_object *obj1, const struct osl_object *obj2);
 int for_each_matching_row(struct pattern_match_data *pmd);
 int string_compare(const struct osl_object *obj1, const struct osl_object *obj2);
 int for_each_matching_row(struct pattern_match_data *pmd);
-void flush_and_free_pb(struct para_buffer *pb);
 
 /* score */
 void score_init(struct afs_table *t);
 
 /* score */
 void score_init(struct afs_table *t);
@@ -242,7 +247,7 @@ void attribute_init(struct afs_table *t);
 void get_attribute_bitmap(const uint64_t *atts, char *buf); /* needed by com_ls() */
 int get_attribute_bitnum_by_name(const char *att_name, unsigned char *bitnum);
 int get_attribute_text(uint64_t *atts, const char *delim, char **text);
 void get_attribute_bitmap(const uint64_t *atts, char *buf); /* needed by com_ls() */
 int get_attribute_bitnum_by_name(const char *att_name, unsigned char *bitnum);
 int get_attribute_text(uint64_t *atts, const char *delim, char **text);
-int attribute_check_callback(int fd, __a_unused const struct osl_object *query);
+int attribute_check_callback(struct afs_callback_arg *aca);
 
 /* aft */
 void aft_init(struct afs_table *t);
 
 /* aft */
 void aft_init(struct afs_table *t);
@@ -254,12 +259,12 @@ int get_afsi_of_row(const struct osl_row *row, struct afs_info *afsi);
 int get_afhi_of_row(const struct osl_row *row, struct afh_info *afhi);
 int get_audio_file_path_of_row(const struct osl_row *row, char **path);
 int audio_file_loop(void *private_data, osl_rbtree_loop_func *func);
 int get_afhi_of_row(const struct osl_row *row, struct afh_info *afhi);
 int get_audio_file_path_of_row(const struct osl_row *row, char **path);
 int audio_file_loop(void *private_data, osl_rbtree_loop_func *func);
-int aft_check_callback(int fd, __a_unused const struct osl_object *query);
+int aft_check_callback(struct afs_callback_arg *aca);
 
 /* playlist */
 
 /* playlist */
-int playlist_open(char *name);
+int playlist_open(const char *name);
 void playlist_close(void);
 void playlist_close(void);
-int playlist_check_callback(int fd, __a_unused const struct osl_object *query);
+int playlist_check_callback(struct afs_callback_arg *aca);
 
 /** evaluates to 1 if x < y, to -1 if x > y and to 0 if x == y */
 #define NUM_COMPARE(x, y) ((int)((x) < (y)) - (int)((x) > (y)))
 
 /** evaluates to 1 if x < y, to -1 if x > y and to 0 if x == y */
 #define NUM_COMPARE(x, y) ((int)((x) < (y)) - (int)((x) > (y)))