err.c 4.07 KB

/*---------------------------------------------------------------------*
        Copyright (C) 1998 Nintendo.
        
        $RCSfile: err.c,v $
        $Revision: 1.1.1.1 $
        $Date: 2002/05/02 03:27:33 $
 *---------------------------------------------------------------------*/

#include "hmenu.h"
#include "herr.h"


u8 err_str[60];
static s32 err_show=0;

#define LABEL_NUM 7
#define BTILE_NUM 1

static TStringBar  _label[LABEL_NUM];
static TBackTile   _btile[BTILE_NUM];
static void _print(void);
static s32 _init(void);

static s32 _mode ;

void
_print(void)
{
  s32 i,j,mes_num=0,max_width=1;
  TDDStatus *p;

  p = dd_getStatus();

  _mode = p->errmes;
  FORI(LABEL_NUM) _label[i].visible = false;
  if( p->mode & ( DDSTAT_DEAD | DDSTAT_DIALOGUE) )
	{
	  switch( _mode & 0xFF) 
		{
/*  必須メッセ−ジ(領域1)   */

		case ERRMES__DDROMCART_NOT_CONNECTED:
		  sprintf( _label[mes_num++].str ,"#error No %d",p->errno) ;
		  sprintf( _label[mes_num++].str ,"#No IPL ROM cart.") ;
		  sprintf( _label[mes_num++].str ,"#Please set.") ;
		  break;

		case ERRMES__RAMPACK_NOT_CONNECTED:
		  sprintf( _label[mes_num++].str ,"エラー番号 %d",p->errno) ;
		  sprintf( _label[mes_num++].str ,"メモリー拡張パックが") ;
		  sprintf( _label[mes_num++].str ,"正しく差し込んでありますか?") ;
		  sprintf( _label[mes_num++].str ,"詳しくは取扱説明書をお読みください") ;
		  break;

		case ERRMES__TORISETSU_YOME:
		  sprintf( _label[mes_num++].str ,"エラー番号 %d",p->errno) ;
		  sprintf( _label[mes_num++].str ,"取扱説明書をお読みください") ;
		  break;

		case ERRMES__NOW_IN_RESTORE:  
		  sprintf( _label[mes_num++].str ,"前回データが最後まできちんと");
		  sprintf( _label[mes_num++].str ,"セーブできませんでした");
		  sprintf( _label[mes_num++].str ,"このデータを消します");
		  sprintf( _label[mes_num++].str ,"Aボタンを押してください。");
		  break;

		case ERRMES__ACCESSLAMP:
		  sprintf( _label[mes_num++].str ,"エラー番号 %d",p->errno) ;
		  sprintf( _label[mes_num++].str ,"アクセスランプ点滅中に") ;
		  sprintf( _label[mes_num++].str ,"ディスクを抜かないで下さい") ;
		  sprintf( _label[mes_num++].str ,"詳しくは取扱説明書をお読み下さい") ;
		  break;

		case ERRMES__WRONG_DISK:
		  sprintf( _label[mes_num++].str ,"間違ったディスクが差し込まれている") ;
		  sprintf( _label[mes_num++].str ,"可能性があります。") ;
		  sprintf( _label[mes_num++].str ,"正しいディスクに交換してください") ;
		  break;

/*  アプリケーションごとのメッセ−ジ */

		case ERRMES__DRIVE_NOT_FOUND:
		  sprintf( _label[mes_num++].str ,"#64DD not connected") ;

		default:
		  break;
		}

	  switch( _mode & 0xFF00 ) 
		{
/*  必須メッセ−ジ(領域2)		   */
		case ERRMES__DISK_WO_NUKE:
		  sprintf( _label[mes_num++].str ,"ディスクを取り出してください") ;
		  break;

		case ERRMES__DISK_WO_IRERO:
		  sprintf( _label[mes_num++].str ,"ディスクを差し込んでください") ;
		  break;

		case ERRMES__INSERT_AGAIN:
		  if( mes_num==0 ) sprintf( _label[mes_num++].str ,"エラー番号 %d",p->errno) ;
		  sprintf( _label[mes_num++].str ,"ディスクを差し込み直してください") ;
		  break;

		}


	}
  else
	{
	  if( err_show )
		{
		  err_show--;
		  mes_num = 1;
		}
	}

	  /*  表示位置の調整 */
	  FORI(mes_num)
	    {
	      j = sbar_getWidth(&_label[i]);
	      max_width = (j>max_width) ? j : max_width;
	    }
	  _btile[0].w = max_width + 10;
	  FORI(mes_num) _label[i].visible = true;
	  j = ( SCREEN_WD - max_width ) / 2 ;
	  FORI(mes_num) _label[i].x = j;
          _btile[0].x = j - 5;
	  _btile[0].h = mes_num * 16;

	  /*  表示 */
	  btile_show(&_btile[0]);
	  FORI(LABEL_NUM) sbar_show(&_label[i]);
}

void
err_setString(u8 * message)
{
  err_show = 180;
  sprintf(_label[0].str,"%s",message);
}

void
scr_error(void)
{
  static s32 _first = 1;

  if(_first)
	{
	  --_first;
	  _init();
	}

  _print();

  if( _trig == A_BUTTON )
	{
	  switch ( _mode & 0xFF )
		{
		case ERRMES__NOW_IN_RESTORE:
		  dd_thaw(ERRMES__NOW_IN_RESTORE);
		  break;
		}
	}
	
}

static s32
_init(void)
{
  s32 xpos,ypos,i;
  
  xpos = 0;
  ypos = 100;

  FORI(LABEL_NUM) sbar_create(&_label[i],"*" ,45 ,50 + i * 16 );
  
  btile_create(&_btile[0] ,40 ,50 ,240 ,100 ,RGBA_VIOLET );

  return -1;
}