/*
**	mbbid.c 
**
**	Copyright (C) 1988
**	Akira Yamada(JA3JWI)
**	401, 1-18 UchiHiranomachi
**	Higashi-ku   Osaka   City
**
**	Any part of this program may be  reproduced,  transmitted,
**	transcribed, stored in a retrieval system,  or translated
**	into any language or computer language, in any form or by
**	any  means,   electonic,  mecahnical,  magnetic,  optical,
**	chemical, manual or otherwise,  without  the prior witten
**	permission of the author.
*/

#define  PROGNAME  "grep"

#include "mb.h"
#include "mbexp.h"

extern int errno;

char bidfile[cmdlen];
char  bidname[BIDSIZ + 1];
MSG_BID *msgbid;

setupbid()
{
	register FILE *bidfp;

	sprintf(bidfile, "%s%s", msgdir, "bid.dat");
	bidfp = fopen(bidfile, "a+");
	if (bidfp == 0)
	{
		nofile(bidfile);
#if	(XENIX|UNIX|BSD)
		die(errno);
#else
		exit(1);
#endif
	}
	fclose(bidfp);	/* AY-880515 */
}

/* #if USEGREP					/* use grep */
#if 0
bidserch(patern)			/* AY-871227 */
char *patern;
{
	int pfdout[2], pfdin[2], nread, result;
	char buf[512], searchkey[20];


	result = 0;
	sprintf(searchkey, "^%s$", patern);

	if (pipe(pfdout) == -1 || pipe(pfdin) == -1)
		syserr("pipe", errno);
	switch (fork()) {
	case -1:
		syserr("fork", errno);
	case 0:
		if (close(0) == -1)
			syserr("close", errno);
		if (dup(pfdout[0]) != 0)
			syserr("dup", errno);
		if (close(1) == -1)
			syserr("close", errno);
		if (dup(pfdin[1]) != 1)
			syserr("dup", errno);
		if (close(pfdout[0]) == -1 || close(pfdout[1]) == -1 ||
		    close(pfdin[0]) == -1 || close(pfdin[1]) == -1)
			syserr("close", errno);
		execlp(PROGNAME, PROGNAME, searchkey, bidfile, NULL);
		syserr("execl", errno);
	}
	if (close(pfdout[0]) == -1 || close(pfdin[1]) == -1)
		syserr("close", errno);
	if (close(pfdout[1]) == -1)
		syserr("close", errno);
	while ((nread = read(pfdin[0], buf, sizeof(buf))) != 0)
	{
		if (nread == -1)
			syserr("read", errno);
		if (strncmp(buf, patern, strlen(patern)) == 0) result = 1;
	}
	if (close(pfdin[0]) == -1)
		syserr("close", errno);
	wait(nread);
	return(result);
}
#else	/* For PC-DOS AY-880515 */
bidserch(pattern)
char *pattern;
{
	if (pattern[0] == '\0')
		return (0);
	return(search_file(pattern, bidfile));
}
#endif

/*
**	putting BID inoto the MSGS/bid.dat
**	This code is not best way.
**	Any case put it at the bottom of MSGS/bid.dat, so bidserch() will
**	find latest BID near of EOF.
**	I hope bidput() put it a top of MSGS/bid.dat.
**	I'll rewrite this when I have a chance.
**
**	akira@ja3jwi
*/

bidput(name)  /* put bid */
char *name;
{
	register FILE *fdp;
	char buf[BIDSIZ+5];

	fdp = fopen(bidfile, "a+");
	fseek(fdp, (long)0, 2);
	unbl(buf, name, BIDSIZ);
	remnl(buf);
	fprintf(fdp, "%s\n", buf);
	fclose(fdp);
}

#if	!TYPEBID_NO
#if	(XENIX|UNIX|BSD)
typebid()      /* print bid */
{
	int pfd[2];
	console_mode(0);

	if (pipe(pfd) == -1)
		syserr("pipe", errno);
	switch (fork()) {
	case -1:
		syserr("fork", errno);
	case 0:
		if (close(1) == -1)
			syserr("close", errno);
		if (dup(pfd[1]) != 1)
			syserr("dup", errno);
		if (close(pfd[0]) == -1 || close(pfd[1]) == -1)
			syserr("close2", errno);
		execlp("sort", "sort", bidfile, NULL);
		syserr("execl", errno);
	}
	switch (fork()) {
	case -1:
		syserr("fork", errno);
	case 0:
		if (close(0) == -1)
			syserr("close3");
		if (dup(pfd[0]) != 0)
			syserr("dup2", errno);
		if (close(pfd[0]) == -1 || close(pfd[1]) == -1)
			syserr("close4", errno);
		execlp("less", "less", NULL);
		syserr("execl2");
	}
	if (close(pfd[0]) == -1 || close(pfd[1]) == -1)
		syserr("close5", errno);
	while (wait(NULL) != -1)
		;
	console_mode(1);
}
#else
typebid()
{
	outstr("\"M$\" command is only for XENIX version, Sorry\n\r");
	outstr("If you want to see the bid.dat, use dos gateway command\n\r");
}
#endif
#endif
