#ifndef lint
static char	*sccsid = "@(#)group.c	1.12	(Berkeley) 5/11/89";
#endif

#include "common.h"

#ifdef	XTHREAD
extern char *thread_name();
#endif

/*
 * GROUP newsgroup
 *
 * Change the current group to the specified newsgroup.
 * We also change our current directory to that newsgroup if
 * a spool directory for it exists.
 * If the newsgroup specified is invalid, the old newsgroup
 * remains selected.
 */

group(argc, argv)
	int	argc;
	char	*argv[];
{
	char	temp_dir[256];
	int	high_msg, low_msg;
	char	*cp;
	char	*reqlist[2];

	if (argc != 2) {
		printf("%d Usage: GROUP newsgroup.\r\n", ERR_CMDSYN);
		(void) fflush(stdout);
		return;
	}

	if (!canread) {
		printf("%d You only have permission to transfer, sorry.\r\n",
			ERR_ACCESS);
		(void) fflush(stdout);
		return;
	}

	if (index(argv[1], '/') != (char *) NULL) {
		printf("%d Invalid group name (bad format).\r\n", ERR_NOGROUP);
		(void) fflush(stdout);
		return;
	}

	if (find_group(argv[1], num_groups, &low_msg, &high_msg) < 0) {
		printf("%d Invalid group name (not in active).\r\n",
			ERR_NOGROUP);
		(void) fflush(stdout);
		return;
	}

	reqlist[0] = argv[1];
	reqlist[1] = NULL;

	if (ngpermcount) {
		if (ngmatch(s1strneql, ALLBUT,
		    ngpermlist, ngpermcount, reqlist, 1) == 0) {
			printf("%d You're not allowed to read %s, sorry.\r\n",
				ERR_ACCESS, argv[1]);
			(void) fflush(stdout);
			return;
		}
	} else if (ALLBUT == 0) {
		printf("%d You're not allowed to read %s, sorry.\r\n",
			ERR_ACCESS, argv[1]);
		(void) fflush(stdout);
		return;
	}

	close_crnt();
	(void) chdir(spooldir);

#ifdef LOG
	syslog(LOG_INFO, "%s group %s", hostname, argv[1]);
#endif

	while ((cp = index(argv[1], '.')) != (char *) NULL)
		*cp = '/';

	(void) strcpy(temp_dir, spooldir);
	(void) strcat(temp_dir, "/");
	(void) strcat(temp_dir, argv[1]);

	/*
	 * (void) because a group can be in the active file
	 * but not have a spool directory.  Just leave us
	 * chdired to base spool directory if this fails.
	 */
	(void) chdir(temp_dir);

#ifdef LOG
	++grps_acsd;
#endif

	num_arts = scan_dir(low_msg, high_msg);
	art_ptr = 0;

	ingroup = 1;

#ifdef	XTHREAD
	threadfile = thread_name(argv[1]);
#endif

	while ((cp = index(argv[1], '/')) != (char *) NULL)
		*cp = '.';

	printf("%d %d %d %d %s\r\n",
		OK_GROUP,
		num_arts,
		(num_arts > 0 ? art_array[0] : 0),
		(num_arts > 0 ? art_array[num_arts-1] : 0),
		argv[1]);
	(void) fflush(stdout);
}
