/*
 *
 *	Copyright (C) 1988, 1989 by the Massachusetts Institute of Technology
 *    	Developed by the MIT Student Information Processing Board (SIPB).
 *    	For copying information, see the file mit-copyright.h in this release.
 *
 */
/*
 *	Declarations of global variables for discuss.
 */

#ifndef DISCUSS_GLOBALS_H
#define DISCUSS_GLOBALS_H 1

#include <discuss/discuss.h>
#include "discuss_err.h"

/* Typedefs */

typedef struct _sle {
	int low;
	int high;
	int flags;
	struct _sle *next;
} selection_list;

/* selection flags */
#define flag_AREF		8

/* filtering flags */
#define filter_INCLUDE_DELETED 1
#define filter_ONLY_DELETED    2
#define filter_ONLY_INITIAL    4
#define filter_ONLY_TERMINAL   16
#define filter_FLAG_SET        32
#define filter_FLAG_RESET      64

struct _dsc_pub {
     trn_nums current;
     trn_nums highest_seen;
     bool attending;
     char *host;
     char *path;
     char *mtg_name;				/* meeting name (user) */
     name_blk nb;
     mtg_info m_info;
};

/* Variables */

extern struct _dsc_pub dsc_public;
extern char	dsc_version[];
extern char	*buffer;
extern int	*chosen_trn_map; /* which trns we want to see */
extern int	map_size;	/* size of chosen_trn_map */
extern char	*temp_file;	/* generic temporary file... */
extern int	sci_idx;

extern int	interrupt;

extern int	errno;		/* lusing UNIX method to pass error values */

extern bool 	use_editor;	/* Should we snarf input from stdin, or 
				 * use an editor instead? */
extern char	*editor_path;	/* Pathname of editor to use */

extern char	*user_id;	/* user.instance@realm identifier for user */

extern char	*pgm;

/* addmtg.c */
int add_mtg (int, char **);
int parse_mtg_info (name_blk *, int, name_blk *, int *);
int hostpath_to_nb (const char *, char *, name_blk *, int *);
int add_the_mtg (name_blk *, int *);
int del_mtg (int, char **);
int command_query (char *);

/* anm.c */
int announce_mtg (int, char **);

/* catchup.c */
int catchup (int, char **);
int set_seen (int, char **);

/* ckm.c */
int check_meetings (int, char **);
int next_meeting (int, char **);

/* discuss.c */
int getyn (char *, int );

/* edit.c */
int dsc_edit (char *, char *);

/* goto.c */
int goto_mtg (int, char **);
int switch_to_mtg (char *);
int switch_to_mtg_nb (name_blk *);
void leave_mtg (void);

/* interrupt.c */
void flag_interrupts (void);
void dont_flag_interrupts (void);

/* list.c */
int list (int, char **, int );
int del_trans (int, char **);
int ret_trans (int, char **);
void map_trns (int, char **, char *, int (*proc )(), int);
int switch_cmd (int, char **);

/* list_acl.c */
int list_acl (int, char **);
int print_acl (dsc_acl *);
int set_acl (int, char **);
int del_acl (int, char **);

/* lsm.c */
int do_line (name_blk *, int, int );
int list_meetings (int, char **);

/* new_trans.c */
int new_trans (int, char **);

/* nls.c */
int nlist (int, char **);

/* output.c */
int output_trans (trn_info3 *, tfile, int *);

/* pager.c */
int pager_create (void);

/* print.c */
int prt_trans (int, char **);
int write_trans (int, char **);

/* randrp.c */
int randrp (int, char **, int);

/* reply.c */
int repl (int, char **);

/* rn.c */
int rn (int, char **, int);
int more_break (char *, char *);

/* set.c */
int set_cmd (int, char **);

/* status.c */
int status (int, char **);

/* trn_expr.y */
int trnexpr_parse(mtg_info *, trn_info *, char *, int *, int *, int *);

/* trn_select.c */
selection_list *sl_insert_range (int, int , int, selection_list *, int *);
selection_list *sl_insert_num (int, int, selection_list *, int *);
void sl_free (selection_list *);
int filter_call_func (int (*func )(), trn_info3 *, int *, int);
int sl_map (int (*func )(), selection_list *, int);
selection_list *trn_select (trn_info *, char *, selection_list *, int *);

#include "stime.h"

#endif
