DataMuseum.dk

Presents historical artifacts from the history of:

DKUUG/EUUG Conference tapes

This is an automatic "excavation" of a thematic subset of
artifacts from Datamuseum.dk's BitArchive.

See our Wiki for more about DKUUG/EUUG Conference tapes

Excavated with: AutoArchaeologist - Free & Open Source Software.


top - metrics - download
Index: T w

⟦bf44b8069⟧ TextFile

    Length: 17022 (0x427e)
    Types: TextFile
    Names: »workops.c«

Derivation

└─⟦2d1937cfd⟧ Bits:30007241 EUUGD22: P.P 5.0
    └─⟦dc59850a2⟧ »EurOpenD22/pp5.0/pp-5.tar.Z« 
        └─⟦e5a54fb17⟧ 
            └─⟦this⟧ »pp-5.0/Src/MTAconsole/workops.c« 

TextFile

/* workops.c: routines that do work */

# ifndef lint
static char Rcsid[] = "@(#)$Header: /cs/research/pp/hubris/pp-beta/Src/MTAconsole/RCS/workops.c,v 5.0 90/09/20 16:20:16 pp Exp Locker: pp $";
# endif

/*
 * $Header: /cs/research/pp/hubris/pp-beta/Src/MTAconsole/RCS/workops.c,v 5.0 90/09/20 16:20:16 pp Exp Locker: pp $
 *
 * $Log:	workops.c,v $
 * Revision 5.0  90/09/20  16:20:16  pp
 * rcsforce : 5.0 public release
 * 
 */



#include	"console.h"

extern CMD_TABLE	chantbl_commands[],
			mtatbl_commands[],
			msgtbl_commands[];
extern char		*strdup(),
			*stripstr(),
			*rcmd_srch();
extern void		ChanToggle(), MtaToggle(), MsgToggle(), ChangeMode();
extern struct recip	*find_recip();

/* ARGUSED */
ChanForce(chan)
struct chan_struct	*chan;
{
	char	*args[3];

	args[0] = chan->channelname;
	args[2] = NULLCP;
	if (chan->status->enabled != TRUE) {
		args[1] = rcmd_srch((int) chanstart, chantbl_commands);
		my_invoke(chanstart, args);
	}
	if (chan->status->cachedUntil != 0) {
		args[1] = rcmd_srch((int) chanclear, chantbl_commands);
		my_invoke(chanclear, args);
	}
}

ChanDownForce (chan)
struct chan_struct	*chan;
{
	add_mta_refresh_list(chan->channelname);
	my_invoke(mtaread, &(chan->channelname));
	ChanForce (chan);
}

/* ARGSUSED */
ChanControl(op, channel, mytime)
Operations op;
char	*channel,
	*mytime;
{
	char	*str,
		*chan,
		**args;
	str = strdup(channel);
	chan = stripstr(str);
	args = (char **) calloc(3, sizeof(char *));
	args[0] = chan;
	args[1] = rcmd_srch((int) op, chantbl_commands);
	args[2] = mytime;
	my_invoke(op, args);
	free((char *) args);
	free(str);
}

/* ARGSUSED */
MtaForce(mta, chan)
struct mta_struct	*mta;
struct chan_struct	*chan;
{
	char	*args[4];
	args[0] = chan->channelname;
	args[1] = mta->mta;
	args[3] = NULLCP;
	
	if (mta->status->enabled != TRUE) {
		args[2] = rcmd_srch((int) mtastart,mtatbl_commands);
		my_invoke(mtastart, args);
	}
	if (mta->status->cachedUntil != 0) {
		args[2] = rcmd_srch((int) mtaclear,mtatbl_commands);
		my_invoke(mtaclear, args);
	}
	ChanForce(chan);
}

extern char	*msginfo_args[];

MtaDownForce (chan, mta)
struct chan_struct	*chan;
struct mta_struct	*mta;
{
	msginfo_args[0] = chan->channelname;
	msginfo_args[1] = mta->mta;
	if (is_loc_chan(chan) == TRUE)
		msginfo_args[2] = (char *) 1;
	else
		msginfo_args[2] = (char *) 0;
	my_invoke (readchannelmtamessage, msginfo_args);
	/* reset after message down force */
	msginfo_args[0] = chan->channelname;
	msginfo_args[1] = mta->mta;
	if (is_loc_chan(chan) == TRUE)
		msginfo_args[2] = (char *) 1;
	else
		msginfo_args[2] = (char *) 0;
	if (mta->status->enabled != TRUE) {
		msginfo_args[2] = rcmd_srch((int) mtastart,mtatbl_commands);
		my_invoke(mtastart, msginfo_args);
	}
	if (mta->status->cachedUntil != 0) {
		msginfo_args[2] = rcmd_srch((int) mtaclear,mtatbl_commands);
		my_invoke(mtaclear, msginfo_args);
	}
}	

/* ARGSUSED */
MtaControl(op, givenmta, givenchan, time)
Operations	op;
char		*givenmta,
		*givenchan,
		*time;
{
	char	*str1,
		*str2,
		*mta,
		*chan,
		**args;

	/* get selection and all that */
	str1 = strdup(givenmta);
	mta = stripstr(str1);
	
	str2 = strdup(givenchan);
	chan = stripstr(str2);
	
	args = (char **) calloc(4, sizeof(char *));
	args[0] = chan;
	args[1] = mta;
	args[2] = rcmd_srch((int) op, mtatbl_commands);
	args[3] = time;
	my_invoke(op,args);
	free((char *) args);
	free(str1);
	free(str2);
}

/* ARGSUSED */
MsgForce(msg, usrs, mta, chan)
struct msg_struct	*msg;
char			*usrs;
struct mta_struct	*mta;
struct chan_struct	*chan;
{
	char	*usrlist[20],
		buf[LINESIZE],
		**args;
	int	numberUsrs, force;
	int	i = 0, ix, all;
	struct recip	*temp;
	if (msg == NULL
	    || msg->msginfo == NULL) return;

	if (strcmp(usrs, "*") == 0) {
		all = TRUE;
		for (temp = msg->reciplist, numberUsrs = 0; 
		     temp != NULL; temp = temp -> next, numberUsrs++);
	} else {
		all = FALSE;
		numberUsrs = sstr2arg(usrs, 20, usrlist, ",");
	}
	
	args = (char **) calloc((unsigned)(4+numberUsrs), sizeof(char *));
	args[0] = msg->msginfo->queueid;
	args[1] = NULL;

	ix = 3;
	force = FALSE;

	if (all == TRUE) {
		for (temp = msg->reciplist; temp != NULL; temp = temp -> next)
			if (temp->status
			    && temp->status->enabled != TRUE) {
				(void) sprintf(buf, "%s", temp->id);
				args[ix++] = strdup(buf);
				force = TRUE;
			}
	} else {
		while (i < numberUsrs && ix < (3+numberUsrs)) {
			if ((temp = find_recip(msg, atoi(usrlist[i]))) != NULL
			    && temp->status
			    && temp->status->enabled != TRUE) {
				args[ix++] = usrlist[i];
				force = TRUE;
			}
			i++;
		}
	}
	if (force == TRUE) {
		args[ix] = NULLCP;
		args[2] = rcmd_srch((int) msgstart, msgtbl_commands);
		my_invoke(msgstart, args);
	}

	ix = 3;
	i = 0;
	force = FALSE;

	if (all == TRUE) {
		for (temp = msg->reciplist; temp != NULL; temp = temp -> next)
			if (temp->status
			    && temp->status->cachedUntil != 0) {
				(void) sprintf(buf, "%d", temp->id);
				args[ix++] = strdup(buf);
				force = TRUE;
			}
	} else {
		while (i < numberUsrs && ix < (3+numberUsrs)) {
			if ((temp = find_recip(msg, atoi(usrlist[i]))) != NULL
			    && temp->status
			    && temp->status->cachedUntil != 0) {
				args[ix++] = usrlist[i];
				force = TRUE;
			}
			i++;
		}
	}
	if (force == TRUE) {
		args[ix] = NULLCP;
		args[2] = rcmd_srch((int) msgclear, msgtbl_commands);
		my_invoke(msgstart, args);
	}
	free((char *) args);
	MtaForce(mta, chan);
}

MsgDownForce (msg)
struct msg_struct	*msg;
{
	struct recip	*ix;
	int		recip_count = 0, i, j, force;
	char		buf[LINESIZE];
	char		**args;

	if (msg == NULL
	    || msg->msginfo == NULL) return;
	
	for (ix = msg -> reciplist; ix != NULL; 
	     recip_count++, ix = ix -> next);
	
	args = (char **) calloc((unsigned)(4+recip_count),
				sizeof(char *));
	args[0] = msg->msginfo->queueid;
	args[1] = NULL;
	i = 3;
	ix = msg -> reciplist;
	force = FALSE;
	while (ix != NULL) {
		if (ix -> status
		    && ix -> status -> enabled != TRUE) {
			(void) sprintf(buf, "%d", ix -> id);
			args[i++] = strdup(buf);

			force = TRUE;
		}
		ix = ix -> next;
	}
	if (force == TRUE) {
		args[i] = NULLCP;
		args[2] = rcmd_srch((int) msgstart, msgtbl_commands);
		my_invoke(msgstart, args);
	}
	for (j = 3; j < i; j++)
		if (args[j] != NULLCP) {
			free(args[j]);
			args[j] = NULLCP;
		}
	i = 3;
	ix = msg -> reciplist;
	force = FALSE;
	while (ix != NULL) {
		if (ix -> status
		    && ix -> status -> cachedUntil != 0) {
			(void) sprintf(buf, "%d", ix -> id);
			args[i++] = strdup(buf);

			force = TRUE;
		}
		ix = ix -> next;
	}
	if (force == TRUE) {
		args[i] = NULLCP;
		args[2] = rcmd_srch((int) msgclear, msgtbl_commands);
		my_invoke(msgstart, args);
	}
	for (j = 3; j < i; j++)
		if (args[j] != NULLCP) {
			free(args[j]);
			args[j] = NULLCP;
		}
	free ((char *) args);
}

MsgControl(op, msg, usrs, time)
Operations	op;
char		*msg;
char		*usrs;
char		*time;
{
	char	*str0,
		*str1,
		*qid,
		*usrlist[20],
		**args;
	int	numberUsrs,
		i = 0,
		ix;

	/* arg1 = QID arg2 = time arg3 = control arg4.. = userlist */
	
	/* get selection and all that */
	str0 = strdup(msg);
	qid = stripstr(str0);

	str1 = strdup(usrs);
	numberUsrs = sstr2arg(str1, 20, usrlist, ",");
	
	args = (char **) calloc((unsigned)(4+numberUsrs), sizeof(char *));
	args[0] = qid;
	args[1] = time;
	args[2] = rcmd_srch((int) op, msgtbl_commands);
	ix = 3;
	while(i < numberUsrs && ix < (3+numberUsrs)) 
		args[ix++] = usrlist[i++];
	my_invoke(op, args);
	free((char *) args);
	free(str0);
	free(str1);
}

/* \f

 */

extern struct chan_struct	*find_channel();

/* ARGSUSED */
ChanInfo(channel)
char	*channel;
{
	struct chan_struct	*chan;
	char	*channame,
		*str;

	str = strdup(channel);
	channame = stripstr(str);

	if ((chan = find_channel(channame)) != NULL) {
		chan_display_info(chan);
	} else {
		/* put out error message */
	}
	free(str);
}

extern struct mta_struct	*find_mta();

/* ARGSUSED */
MtaInfo(mtain, channel)
char	*mtain,
	*channel;
{
	struct chan_struct	*chan;
	struct mta_struct	*mta;
	char	*mtaname,
		*channame,
		*str1,
		*str2;

	str1 = strdup(channel);
	channame = stripstr(str1);
	str2 = strdup(mtain);
	mtaname = stripstr(str2);

	if (((chan = find_channel(channame)) != NULL)
	    && ((mta = find_mta(chan, mtaname)) != NULL)) {
		mta_display_info(chan, mta);
	} else {
		/* put out error message */
	}
	free(str1);
	free(str2);

}

extern struct msg_struct	*find_msg();
/* ARGSUSED */
MsgInfo(msgin)
char	*msgin;
{
	struct msg_struct	*msg;
	char	*qid,
		*str;
	str = strdup(msgin);
	qid = stripstr(str);

	if ((msg = find_msg(qid)) != NULL)
		msg_display_info(msg);
	free(str);

}

/* \f

 */
extern State	connectState;
extern int	userConnected,
		autoReconnect;
extern Widget	header, error;
extern char	*hostname;

/* ARGSUSED */
Disconnect()
{
	/* put out required message */
	WidgetSet(header,
		  XtNlabel, NO_CONNECTION,
		  NULL);
	XtSetMappedWhenManaged(error, False);
	userConnected = FALSE;
	TermRefreshTimeOut();
	TermConnectRetry();
	TermConnectTimeOut();
	ResetForDisconnect();
	my_invoke(disconnect, &hostname);
	SensitizeButtons(False);
}

/* ARGSUSED */
Connect(host)
char	*host;
{
	char	*str,
		*convertedstr;

	str = strdup(host);

	convertedstr = stripstr(host);

	if (strcmp(hostname, convertedstr) != 0) {
		free(hostname);
		hostname = strdup(convertedstr);
	}
	free(str);

	if (autoReconnect = TRUE) userConnected = TRUE;

	my_invoke(connect, &hostname);
}
		
/* ARGSUSED */
Quit()
{
	my_invoke(quit,(char **) NULL);
}

/* \f

 */

extern struct chan_struct	*currentchan,
				**globallist;
extern struct mta_struct	*currentmta;
extern struct monitor_item	**display_list;
extern int			read_currentchan;
extern int			read_currentmta;
extern Widget			*channel_array;
extern int			num_channels;
extern Widget			channel_label;
extern Widget			mta_label;
extern Mode			mode;
extern struct msg_struct	*currentmsg;
extern Widget			msg_label;

/* ARGSUSED */
void curChan (w, event, params, num_params)
Widget	w;
XEvent	*event;
char	**params;
int	num_params;
{
	int	i = 0;
	ResetInactiveTimeout();
	while (i < num_channels
	       && channel_array[i] != w) i++;

	if (i < num_channels) {
		if (mode == monitor)
			ChangeMode((Widget)NULL, (caddr_t) NULL, 
				   (caddr_t) NULL);

		if (currentchan != globallist[i]) {
			read_currentmta = 0;
			currentmta = NULL;
			currentmsg = NULL;
			currentchan = globallist[i];
		}
	}
	reset_label(channel_label);
	reset_label(mta_label);
	reset_label(msg_label);
}

/* ARGSUSED */
void excl_curChan (w, event, params, num_params)
Widget	w;
XEvent	*event;
char	**params;
int	num_params;
{
	int	i = 0;
	ResetInactiveTimeout();
	while (i < num_channels
	       && channel_array[i] != w) i++;

	read_currentchan = 0;
	if (i < num_channels) {
		if (mode == monitor)
			ChangeMode((Widget)NULL, 
				   (caddr_t) NULL, (caddr_t) NULL);

		if (currentchan != NULL) 
			display_empty_mta_list(currentchan);
		display_empty_msg_list();

		if (currentchan == globallist[i]) 
			/* deselect it */
			currentchan = NULL;
		else 
			currentchan = globallist[i];

		currentmta = NULL;
		currentmsg = NULL;
		read_currentmta = 0;
		MtaToggle();
		MsgToggle();
	}
	reset_label(channel_label);
	reset_label(mta_label);
	reset_label(msg_label);
}

/* ARGSUSED */
void chanRefresh (w, event, params, num_params)
Widget	w;
XEvent	*event;
char	**params;
int	num_params;
{
	int	i = 0;
	struct chan_struct	*chan;

	while (i < num_channels && display_list[i]->chan != w)
		i++;
	
	if (i < num_channels) {
		chan = *(display_list[i]->channel);
		add_mta_refresh_list (chan->channelname);
		construct_event(mtaread);
	}
}
		
/* ARGSUSED */
void chanModeRead (w, event, params, num_params)
Widget	w;
XEvent	*event;
char	**params;
int	num_params;
{
	int	i = 0;

	while (i < num_channels && display_list[i]->chan != w)
		i++;
	
	if (i < num_channels) {
		read_currentchan = 1;
		currentchan = *(display_list[i]->channel);
		reset_label(channel_label);
		ChangeMode(w, (caddr_t) NULL, (caddr_t) NULL);
	}
}

/* ARGSUSED */
void chanMode (w, event, params, num_params)
Widget	w;
XEvent	*event;
char	**params;
int	num_params;
{
	int	i = 0;

	while (i < num_channels && display_list[i]->chan != w)
		i++;
	
	if (i < num_channels) {
		read_currentchan = 0;
		currentchan = *(display_list[i]->channel);
		reset_label(channel_label);
		ChangeMode(w, (caddr_t) NULL, (caddr_t) NULL);
	}
}

/* ARGSUSED */
void readChan (w, event, params, num_params)
Widget	w;
XEvent	*event;
char	**params;
int	num_params;
{
	ResetInactiveTimeout();
	if (currentchan != NULL) {
		ChanToggle();
		MtaToggle();
		MsgToggle();
		read_currentchan = 1;
		if (mode == control) {
			clear_mta_refresh_list();
			add_mta_refresh_list(currentchan->channelname);
			construct_event(mtaread);
		}
	}
}
		
char				*msginfo_args[3];
extern struct mta_disp_struct	*mta_array;
int				actual_nmtas_present;

/* ARGSUSED */
void curMta (w, event, params, num_params)
Widget	w;
XEvent	*event;
char	**params;
int	num_params;
{
	int	i = 0;
	ResetInactiveTimeout();
	while (i < actual_nmtas_present
	       && mta_array[i].widget != w) i++;

	if (i < actual_nmtas_present && currentmta != mta_array[i].mta) {
		currentmta = mta_array[i].mta;
		currentmsg = NULL;
	}
	reset_label(mta_label);
	reset_label(msg_label);
}
/* ARGSUSED */
void excl_curMta (w, event, params, num_params)
Widget	w;
XEvent	*event;
char	**params;
int	num_params;
{
	int	i = 0;
	ResetInactiveTimeout();
	while (i < actual_nmtas_present
	       && mta_array[i].widget != w) i++;
	read_currentmta = 0;
	
	if (i < actual_nmtas_present) {

		display_empty_msg_list();

		if (currentmta == mta_array[i].mta)   
			/* deselect it */
			currentmta = NULL;
		else
			currentmta = mta_array[i].mta;

		currentmsg = NULL;
		MsgToggle();
	}
	reset_label(mta_label);
	reset_label(msg_label);
}

/* ARGSUSED */
void mtaRefresh (w, event, params, num_params)
Widget	w;
XEvent	*event;
char	**params;
int	num_params;
{
	int	i = 0,j = 0, found = 0;
	struct chan_struct	*chan;

	while (i < num_channels 
	       && found == 0) {
		j = 0;
		while (j < display_list[i]->num_mtas
		       && found == 0) {
			if (display_list[i]->mtas[j]->widget == w)
				found = 1;
			else
				j++;
		}
		if (found == 0) 
			i++;
	}
	if (found == 1) {
		chan = *(display_list[i]->channel);
		add_mta_refresh_list (chan->channelname);
		construct_event(mtaread);
	}
}

/* ARGSUSED */
void mtaModeRead (w, event, params, num_params)
Widget	w;
XEvent	*event;
char	**params;
int	num_params;
{
	int	i = 0,j = 0, found = 0;

	while (i < num_channels 
	       && found == 0) {
		j = 0;
		while (j < display_list[i]->num_mtas
		       && found == 0) {
			if (display_list[i]->mtas[j]->widget == w)
				found = 1;
			else
				j++;
		}
		if (found == 0) 
			i++;
	}
	if (found == 1) {
		read_currentchan = 1;
		currentchan = *(display_list[i]->channel);
		read_currentmta = 1;
		currentmta = display_list[i]->mtas[j]->mta;
		ChangeMode(w, (caddr_t) NULL, (caddr_t) NULL);
	}
}

/* ARGSUSED */
void mtaMode (w, event, params, num_params)
Widget	w;
XEvent	*event;
char	**params;
int	num_params;
{
	int	i = 0,j = 0, found = 0;

	while (i < num_channels 
	       && found == 0) {
		j = 0;
		while (j < display_list[i]->num_mtas
		       && found == 0) {
			if (display_list[i]->mtas[j]->widget == w)
				found = 1;
			else
				j++;
		}
		if (found == 0) 
			i++;
	}
	if (found == 1) {
		read_currentchan = 1;
		currentchan = *(display_list[i]->channel);
		read_currentmta = 0;
		currentmta = display_list[i]->mtas[j]->mta;
		ChangeMode(w, (caddr_t) NULL, (caddr_t) NULL);
	}
}

/* ARGSUSED */
void readMta (w, event, params, num_params)
Widget	w;
XEvent	*event;
char	**params;
int	num_params;
{
	ResetInactiveTimeout();
	MtaToggle();
	MsgToggle();
	if (currentchan != NULL && currentmta != NULL) {
		msginfo_args[0] = currentchan->channelname;
		read_currentmta = 1;
		msginfo_args[1] = currentmta->mta;
		if (currentchan->chantype == int_Qmgr_chantype_mts
		    && currentchan->outbound > 0)
			msginfo_args[2] = (char *) 1;
		else
			msginfo_args[2] = (char *) 0;
		my_invoke(readchannelmtamessage, msginfo_args);
	}
}

extern struct msg_disp_struct	*msg_array;
extern int			actual_nmsgs_present;

/* ARGSUSED */
void curMsg (w, event, params, num_params)
Widget	w;
XEvent	*event;
char	**params;
int	num_params;
{
	int	i = 0;
	ResetInactiveTimeout();
	while (i < actual_nmsgs_present
	       && msg_array[i].widget != w) i++;

	if (i < actual_nmsgs_present) {
		currentmsg = msg_array[i].msg;
	}
	reset_label(msg_label);
}

/* ARGSUSED */
void excl_curMsg (w, event, params, num_params)
Widget	w;
XEvent	*event;
char	**params;
int	num_params;
{
	int	i = 0;
	ResetInactiveTimeout();
	while (i < actual_nmsgs_present
	       && msg_array[i].widget != w) i++;

	if (i < actual_nmsgs_present) {
		if (currentmsg == msg_array[i].msg) {   
			/* deselect it */
			MsgToggle();
			currentmsg = NULL;
		} else 
			currentmsg = msg_array[i].msg;
	}
	reset_label(msg_label);
}

/* ARGSUSED */
void readMsg (w, event, params, num_params)
Widget	w;
XEvent	*event;
char	**params;
int	num_params;
{
	if (currentmsg != NULL)
		msg_display_info(currentmsg);
}