+m4_define(`BLOB_COMMANDS', `
+[subcommand rm`$2']
+ purpose = remove `$1' blob(s)
+ non-opts-name = pattern...
+ aux_info = AFS_READ | AFS_WRITE
+ [description]
+ Remove all `$1' blobs which match any of the given patterns.
+ [/description]
+
+[subcommand mv`$2']
+ purpose = rename `$1' blob(s)
+ non-opts-name = source dest
+ aux_info = AFS_READ | AFS_WRITE
+ [description]
+ Rename `$1' source to dest. The command fails if the source `$1'
+ does not exist or if the destination `$1' already exists.
+ [/description]
+
+[subcommand add`$2']
+ purpose = add a blob to the `$1' table
+ non-opts-name = `$1'_name
+ aux_info = AFS_READ | AFS_WRITE
+ [description]
+ Read from stdin and ask the audio file selector to create a blob in
+ the `$1' table. If the named blob already exists, it gets replaced
+ with the new data.
+ [/description]
+
+[subcommand cat`$2']
+ purpose = dump a `$1' blob to stdout
+ non-opts-name = `$1'_name
+ aux_info = AFS_READ
+
+[subcommand ls`$2']
+ purpose = list blobs of type `$1' which match a pattern
+ non-opts-name = [pattern...]
+ aux_info = AFS_READ
+ [description]
+ Print the list of all blobs which match the given pattern. If no
+ pattern is given, the full list is printed.
+ [/description]
+ [option id-sort]
+ short_opt = i
+ summary = sort by identifier
+ [help]
+ The default is to sort alphabetically by name.
+ [/help]
+ [option long]
+ short_opt = l
+ summary = long listing
+ [help]
+ Print identifier and name. The default is to print only the name.
+ [/help]
+ [option reverse]
+ short_opt = r
+ summary = reverse sort order
+')
+
+BLOB_COMMANDS(`moods', `mood')
+BLOB_COMMANDS(`playlist', `pl')
+BLOB_COMMANDS(`image', `img')
+BLOB_COMMANDS(`lyrics', `lyr')