/*

MercuryInstaller for MS-DOS

DIET常駐ルーチン制御

*/

#include<stdlib.h>
#include<dos.h>
#include"mercury.h"

/*---------------------------------変数--------------------------------------*/
static	int	Diet_mode;	/* Dietの初期状態のフラグ */
				/* -1...常駐していない    */
				/*  0...常駐機能無効      */
				/*  1...常駐機能有効      */
/*-------------------------------モード設定----------------------------------*/
extern	void	diet_setmode(bool mode)
{
	union	REGS	regs;

	if	(Diet_mode==-1)
		return;

	regs.x.ax = 0x37d3;
	regs.x.bx = 0x899d;
	regs.x.dx = !mode;
	intdos(&regs,&regs);
}
/*-------------------------------終了時の処理--------------------------------*/
static	void	diet_end(void)
{
	diet_setmode(Diet_mode);
}
/*-------------------------------初期設定------------------------------------*/
extern	void	diet_init(void)
{
	union	REGS	regs;

	regs.x.ax = 0x37d0;
	regs.x.bx = 0x899d;
	intdos(&regs,&regs);

	if	((signed char)regs.h.al==-1)
	{
		Diet_mode = -1;
		return;
	}

	regs.x.ax = 0x37d2;
	regs.x.bx = 0x899d;
	intdos(&regs,&regs);

	Diet_mode = !regs.h.dl;		/* DL==0が常駐機能有効を表すが */
					/* C言語の慣習に合わせる       */

	diet_setmode(1);		/* 常駐機能ON */

	atexit(diet_end);
}
/*-----------------------------End of DIETTSR.C------------------------------*/
