/****************************************************************************/
/* TEXT WINDOW SYSTEM V1.50 Copyright (C) 1991-94 by AIG-SOFT */
/****************************************************************************/

#include <stdio.h>
#include "defines.h"
#include "menu.h"
#include "win.h"
#include "aigtext.h"

/****************************************************************************/
/* ウインドウ内部データ */

extern char _win_use[WINMAX]; /* ウインドウ利用状況 */
extern char _win_no;	 /* 現在開いているウインドウ数 */
extern char _win_active; /* 現在アクティブなウインドウ番号 */
extern _WIN_DATA *_awinp[WINMAX]; /* ウインドウ構造体アドレスバッファー */

/****************************************************************************/

void win_close(int no,int mode)
/* ウインドウクローズ */
{
int i,ex,ey;
_WIN_DATA *win;
	/* クローズするウインドウをアクティブにする */
	win_active(no);
	
	/* ウインドウクローズ */
	win=_awinp[no];
	if (win->mdata->popdown) {
		ex=win->x+win->wx-1;
		ey=win->y+win->wy-1;
		popdown3s(win->x,win->y,ex,ey,win->colors->waku
				,win->mdata->pwait,win->mdata->udmode);
	}
	
	/* データ削除 */
	free(win->wget);
	free(win);
	
	_win_use[no]=0; /* 自分のウインドウを廃棄 */
	for (i=0;i<WINMAX;i++) { /* 他のウインドウの優先順位を１つづつ上げる */
		if (_win_use[i]) {
			if ((--_win_use[i])==1) _win_active=i;
		}
	}
	_win_no--; /* 使われているウインドウ数を−１する */
	
	if (mode>=0) { /* テキスト画面を消してから再描画 */
		if (_win_no==0 && mode==0) {
			win_back(-1);
		}
		else
		if (_win_no>0) { /* 他のウインドウが残っている時は再描画 */
			win_rewrite(-1);
			
			/* 次にプライオリティーが高いものをアクティブにする */
			win_cursor(_win_active,-1);
		}
	} /* 他のウインドウの再描画無し：ウインドウの重なり無し */
}

/*****************************************************************************/
