extern void mg_bool_query(char *qstr, char *dir, char *file, void **rqd);
extern int mg_get_doc_num(void *qd) ;
extern int mg_goto_next_doc(void *qd) ;
extern int mg_get_num_returned(void *qd) ;
extern int mg_get_raw_doc(void *qd, unsigned long docnum,
			  unsigned char **p_buffer, int *p_buffer_len,
			  int *p_doc_len) ;
extern int mg_doc_contains_str(void *qd, unsigned long docnum, char *s) ;
extern void mg_doc_get_line(unsigned char *docbuf, int *p_offset, char *line) ;
extern void mg_setup_doc_line_producer(void *qd, int docnum, void **rdlp_v) ;
extern void mg_dlp_next_line(void *dlp, char *line) ;
extern int mg_dlp_more_lines(void *dlp) ;
extern void dispose_doc_line_producer(void *dlp) ;

/* standard way of using these:

   char line[LEN] ;
   void *query_results, *line_producer ;

   mg_bool_query(query, file, dir, &query_results) ;

   do {
     docnum = mg_get_doc_num(query_results) ;
     mg_setup_doc_line_producer(query_results, docnum, &line_producer) ;
     while (mg_dlp_more_lines(line_producer) {
       mg_dlp_next_line(line_producer, line) ;
       ...
     }
   } while (mg_goto_next_doc(query_results)) ;
*/

