/*
			V00 RECORD & PLAY

			Hiroshi TODA
			1993 2 8

*/

#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <winb.h>
#include <te.h>
#include <fntb.h>
#include <gui.h>
#include <file_dlg.h>
#include <egb.h>
#include <mos.h>
#include <snd.h>
#include "ugoku.h"

extern char *guiEgbPtr;			/* EGB work */
extern int file_kakuchousi_set( char *, char *, char * );
extern int mouse( int );

/*
	v00 save
*/

extern void v00_trans_128_0();
extern void v00_trans_160_0();
extern void v00_trans_192_0();
extern void v00_trans_256_0();
extern void v00_trans_320_0();

extern void v00_trans_128_2();
extern void v00_trans_160_2();
extern void v00_trans_192_2();
extern void v00_trans_256_2();
extern void v00_trans_320_2();

extern void v00_trans_128_3();
extern void v00_trans_160_3();
extern void v00_trans_192_3();
extern void v00_trans_256_3();
extern void v00_trans_320_3();

extern void v00_snd_trans_128_4( char *, int, char *, int, int, int ) ;
extern void v00_snd_trans_128_5( char *, int, char *, int, int, int ) ;
extern void v00_snd_trans_128_6( char *, int, char *, int, int, int ) ;
extern void v00_snd_trans_128_7( char *, int, char *, int, int, int ) ;

extern void v00_snd_trans_160_4( char *, int, char *, int, int, int ) ;
extern void v00_snd_trans_160_5( char *, int, char *, int, int, int ) ;
extern void v00_snd_trans_160_6( char *, int, char *, int, int, int ) ;
extern void v00_snd_trans_160_7( char *, int, char *, int, int, int ) ;

extern void v00_snd_trans_192_4( char *, int, char *, int, int, int ) ;
extern void v00_snd_trans_192_5( char *, int, char *, int, int, int ) ;
extern void v00_snd_trans_192_6( char *, int, char *, int, int, int ) ;
extern void v00_snd_trans_192_7( char *, int, char *, int, int, int ) ;

extern void v00_snd_trans_256_4( char *, int, char *, int, int, int ) ;
extern void v00_snd_trans_256_5( char *, int, char *, int, int, int ) ;
extern void v00_snd_trans_256_6( char *, int, char *, int, int, int ) ;
extern void v00_snd_trans_256_7( char *, int, char *, int, int, int ) ;

extern void v00_snd_trans_320_4( char *, int, char *, int, int, int ) ;
extern void v00_snd_trans_320_5( char *, int, char *, int, int, int ) ;
extern void v00_snd_trans_320_6( char *, int, char *, int, int, int ) ;
extern void v00_snd_trans_320_7( char *, int, char *, int, int, int ) ;

extern char *v00_digit_buf0;
extern char *v00_digit_buf1;
extern int v00_digit_timing_flag0;
extern int v00_digit_timing_flag1;
extern int v00_digit_timing_flag2;
extern int v00_digit_wait;
extern int v00_digit_counter;

/*	video check */

int video_snd_check()
{
	int s, vol1, vol2 ;

	EGB_resolution(guiEgbPtr,0,11);
	EGB_resolution(guiEgbPtr,1,11);
	EGB_writePage(guiEgbPtr,0);
	EGB_displayStart(guiEgbPtr,2,4,1);
	EGB_writePage(guiEgbPtr,1);
	EGB_displayStart(guiEgbPtr,2,4,1);
	EGB_displayPage(guiEgbPtr,0,3);
	EGB_writePage(guiEgbPtr,0);
	EGB_digitize(guiEgbPtr,1);

	SND_get_elevol_mute( &s ) ;
	SND_elevol_read( 0, &vol1, &vol2 ) ;
	SND_elevol_mute (0x00);			/* mute */
	SND_elevol_set( 0, 127, 127 );

	mouse(0);

	SND_elevol_set( 0, vol1, vol2 ) ;
	SND_elevol_mute( s & 0xfffffff3 ) ;

	EGB_digitize(guiEgbPtr,0);
	EGB_displayPage(guiEgbPtr,0,0);

	return 0;
}

/* SOUND rec */

v00_pcm_snd_save( name, frame, wait )
char *name ;
int frame, wait;
{
	FILE *fp ;
	int freq ;
	int i, j, temp ;
	char *buf ;

	if( frame <= 0 )
		return NOERR ;

	if( (buf = (char *)TL_malloc( frame*800+32 )) == NULL ){
		return 7;			/* out of memory */
	}

	switch( wait ){
		case 4: freq = 12000 ;
			break ;
		case 5: freq = 9600 ;
			break ;
		case 6: freq = 8000 ;
			break ;
		case 7: freq = 6857 ;
			break ;
		default: freq = 8000 ;
			break ;
	}

	EGB_displayPage(guiEgbPtr,0,0);
	EGB_resolution(guiEgbPtr,0,11);
	EGB_resolution(guiEgbPtr,1,11);
	EGB_writePage(guiEgbPtr,0);
	EGB_displayStart(guiEgbPtr,2,4,1);
	EGB_writePage(guiEgbPtr,1);
	EGB_displayStart(guiEgbPtr,2,4,1);
	EGB_displayPage(guiEgbPtr,0,3);
	EGB_writePage(guiEgbPtr,0);
	EGB_digitize(guiEgbPtr,1);

	mouse(1);

	interrupt_disable() ;
	SND_pcm_rec( freq, buf+32, frame*800, 0 );
	interrupt_enable() ;
	EGB_digitize(guiEgbPtr,0);

			/* mute */
	int s ;
	SND_get_elevol_mute( &s ) ;
	SND_elevol_mute( s & 0xfffffff3 ) ;

	EGB_displayPage(guiEgbPtr,0,0);

	for( j=0 ; j<8 ; j++ )buf[j] = (char)0;
	for( i=0 ; i<80 ; i++ ){
		if( (name[i]==(char)0) || (name[i]=='.') )break;
	}
	if( i == 0 )goto vd04;
	for( i=i ; i>=0 ; i-- ){
		if( name[i]=='\\' )break;
	}
	i++;
	for( j=0 ; j<8 ; j++ ){			/* name */
		if( (name[i]==(char)0) || (name[i]=='.') )break;
		buf[j] = name[i++];
	}
vd04:	DWORD( buf+8 ) = 0;		/* id */
	DWORD( buf+12 ) = frame*800 ;		/* data length */
	DWORD( buf+16 ) = 0;			/* loop point */
	DWORD( buf+20 ) = 0;			/* loop length */
	WORD( buf+24 ) = freq * 0x62 / 1000;	/* freq */
	WORD( buf+26 ) = 0;			/* adjust */
	BYTE( buf+28 ) = 60;			/* C */
	BYTE( buf+29 ) = 0;			/* リザーブ */
	WORD( buf+30 ) = 0;			/* リザーブ */
	if( ( fp = fopen( name, "wb" ) ) == NULL ){
		temp = 2;
		goto vd05;
	}
	if( fwrite( buf, frame*800+32, 1, fp ) < 1 )temp = 2;
	else temp = 0;
	fclose(fp);
vd05:	TL_free( buf );

	return temp;
}

v00_digit_save_0( name, frame, md, wt )
char name[];
int frame, md, wt;
{
	FILE *fp;
	int v00xd = 128, v00yd = 96;
	int i, size;
	char head[256];
	char *buf;		/* buffer */

	if( frame <= 0 )
		return NOERR ;

	switch( md ){
		case 1: v00xd = 128; v00yd = 96;
			break;
		case 2: v00xd = 160; v00yd = 120;
			break;
		case 3: v00xd = 192; v00yd = 144;
			break;
		case 4: v00xd = 256; v00yd = 192;
			break;
		case 5: v00xd = 320; v00yd = 240;
			break;
		default: return 58 ;
	}
	if( ( buf = (char *)TL_malloc(v00xd*v00yd*2+1000) ) == NULL )return 7;
	if( ( fp = fopen( name, "wb" ) ) == NULL ){
		TL_free( buf );
		return 2;
	}

	v00_digit_buf0 = buf;
	v00_digit_wait = wt;

	for( i=0 ; i<64 ; i++ )DWORD( head + i*4 ) = 0;
	DWORD( head ) = 0x30304456;		/* ID = VD00 */
	DWORD( head + 4 ) = frame * v00xd * v00yd * 2; /* total length */
	DWORD( head + 8 ) = frame;		/* total frame	 */
	DWORD( head + 12 ) = 0x80008000;	/* dataの種類番号 */
	DWORD( head + 16 ) = v00xd;		/* 横 */
	DWORD( head + 20 ) = v00yd;		/* 縦 */
	DWORD( head + 24 ) = wt;		/* wait */
	if( fwrite( head, 256, 1, fp ) < 1 ){	/* ヘッダー */
		fclose(fp);
		TL_free( buf );
		return 2;			/* 2 = error num. */
	}

	switch( md ){
		case 1: EGB_displayPage(guiEgbPtr,0,1);
			EGB_resolution(guiEgbPtr,0,16);
			EGB_writePage(guiEgbPtr,0);
			EGB_displayStart(guiEgbPtr,2,8,1);
			EGB_digitize(guiEgbPtr,1);
			size = v00xd*v00yd*2;		/* frame size */
			v00_digit_timing_flag0 = 0;
			mouse(1);

			SND_fm_timer_b_set( 0, 0 ) ;
			VSYNC_init();
			VSYNC_setEvent( v00_trans_128_0 );
			for( i=0; i<frame; i++ ){
				while( v00_digit_timing_flag0 == 0 );
				if( fwrite( buf, size, 1, fp ) < 1 ) break;
				v00_digit_timing_flag0 = 0;
			}
			VSYNC_end();
			SND_fm_timer_b_start() ;
			break;

		case 2: EGB_displayPage(guiEgbPtr,0,1);
			EGB_resolution(guiEgbPtr,0,16);
			EGB_writePage(guiEgbPtr,0);
			EGB_displayStart(guiEgbPtr,2,8,1);
			EGB_digitize(guiEgbPtr,1);
			size = v00xd*v00yd*2;		/* frame size */
			v00_digit_timing_flag0 = 0;
			mouse(1);

			SND_fm_timer_b_set( 0, 0 ) ;
			VSYNC_init();
			VSYNC_setEvent( v00_trans_160_0 );
			for( i=0; i<frame; i++ ){
				while( v00_digit_timing_flag0 == 0 );
				if( fwrite( buf, size, 1, fp ) < 1 ) break;
				v00_digit_timing_flag0 = 0;
			}
			VSYNC_end();
			SND_fm_timer_b_start() ;
			break;

		case 3: EGB_displayPage(guiEgbPtr,0,1);
			EGB_resolution(guiEgbPtr,0,16);
			EGB_writePage(guiEgbPtr,0);
			EGB_displayStart(guiEgbPtr,2,4,1);
			EGB_digitize(guiEgbPtr,1);
			size = v00xd*v00yd*2;		/* frame size */
			v00_digit_timing_flag0 = 0;
			mouse(1);

			SND_fm_timer_b_set( 0, 0 ) ;
			VSYNC_init();
			VSYNC_setEvent( v00_trans_192_0 );
			for( i=0; i<frame; i++ ){
				while( v00_digit_timing_flag0 == 0 );
				if( fwrite( buf, size, 1, fp ) < 1 ) break;
				v00_digit_timing_flag0 = 0;
			}
			VSYNC_end();
			SND_fm_timer_b_start() ;
			break;

		case 4: EGB_displayPage(guiEgbPtr,0,1);
			EGB_resolution(guiEgbPtr,0,16);
			EGB_writePage(guiEgbPtr,0);
			EGB_displayStart(guiEgbPtr,2,4,1);
			EGB_digitize(guiEgbPtr,1);
			size = v00xd*v00yd*2;		/* frame size */
			v00_digit_timing_flag0 = 0;
			mouse(1);

			SND_fm_timer_b_set( 0, 0 ) ;
			VSYNC_init();
			VSYNC_setEvent( v00_trans_256_0 );
			for( i=0; i<frame; i++ ){
				while( v00_digit_timing_flag0 == 0 );
				if( fwrite( buf, size, 1, fp ) < 1 ) break;
				v00_digit_timing_flag0 = 0;
			}
			VSYNC_end();
			SND_fm_timer_b_start() ;
			break;

		case 5: EGB_displayPage(guiEgbPtr,0,1);
			EGB_resolution(guiEgbPtr,0,16);
			EGB_writePage(guiEgbPtr,0);
			EGB_displayStart(guiEgbPtr,2,4,1);
			EGB_digitize(guiEgbPtr,1);
			size = v00xd*v00yd*2;		/* frame size */
			v00_digit_timing_flag0 = 0;
			mouse(1);

			SND_fm_timer_b_set( 0, 0 ) ;
			VSYNC_init();
			VSYNC_setEvent( v00_trans_320_0 );
			for( i=0; i<frame; i++ ){
				while( v00_digit_timing_flag0 == 0 );
				if( fwrite( buf, size, 1, fp ) < 1 ) break;
				v00_digit_timing_flag0 = 0;
			}
			VSYNC_end();
			SND_fm_timer_b_start() ;
			break;
	}	

	EGB_writePage(guiEgbPtr,0);
	EGB_digitize(guiEgbPtr,0);

			/* mute */
	int s ;
	SND_get_elevol_mute( &s ) ;
	SND_elevol_mute( s & 0xfffffff3 ) ;

	EGB_displayPage(guiEgbPtr,0,0);

		/* total data size 修正 */
	fseek( fp, 0, SEEK_SET );
	DWORD( head + 4 ) = i * v00xd * v00yd * 2; /* total length */
	DWORD( head + 8 ) = i;			/* total frame	 */
	if( fwrite( head, 256, 1, fp ) < 1 ){	/* ヘッダー */
		fclose(fp);
		TL_free( buf );
		return 2;			/* 2 = error num. */
	}

	fclose(fp);
	TL_free( buf );
	if( i < frame )return 2;
	else return 0;
}

v00_digit_save_2( name, frame, md, wt )
char name[];
int frame, md, wt;
{
	FILE *fp;
	int v00xd = 128, v00yd = 96;
	int i, size, flag;
	char head[256];
	char *buf;		/* buffer */

	frame &= 0xfffffffe;

	if( frame <= 0 )
		return NOERR ;

	switch( md ){
		case 1: v00xd = 128; v00yd = 96;
			break;
		case 2: v00xd = 160; v00yd = 120;
			break;
		case 3: v00xd = 192; v00yd = 144;
			break;
		case 4: v00xd = 256; v00yd = 192;
			break;
		case 5: v00xd = 320; v00yd = 240;
			break;
		default: return 58 ;
	}
	if( ( buf = (char *)TL_malloc( v00xd*v00yd*2*((frame+1)/2+1)) ) == NULL )
		return 7;
	if( ( fp = fopen( name, "wb" ) ) == NULL ){
		TL_free( buf );
		return 2;
	}

	v00_digit_buf0 = buf;
	v00_digit_wait = wt;

	for( i=0 ; i<64 ; i++ )DWORD( head + i*4 ) = 0;
	DWORD( head ) = 0x30304456;		/* ID = VD00 */
	DWORD( head + 4 ) = frame * v00xd * v00yd * 2; /* total length */
	DWORD( head + 8 ) = frame;		/* total frame	 */
	DWORD( head + 12 ) = 0x80008000;	/* dataの種類番号 */
	DWORD( head + 16 ) = v00xd;		/* 横 */
	DWORD( head + 20 ) = v00yd;		/* 縦 */
	DWORD( head + 24 ) = wt;		/* wait */
	if( fwrite( head, 256, 1, fp ) < 1 ){	/* ヘッダー */
		fclose(fp);
		TL_free( buf );
		return 2;			/* 2 = error num. */
	}

	switch( md ){
		case 1: EGB_displayPage(guiEgbPtr,0,1);
			EGB_resolution(guiEgbPtr,0,16);
			EGB_writePage(guiEgbPtr,0);
			EGB_displayStart(guiEgbPtr,2,8,1);
			EGB_digitize(guiEgbPtr,1);
			size = v00xd*v00yd*2;		/* frame size */
			v00_digit_buf1 = buf + size;
			v00_digit_timing_flag0 = 0;
			v00_digit_timing_flag1 = 0;
			v00_digit_timing_flag2 = 0;
			flag = 0;
			mouse(1);

			SND_fm_timer_b_set( 0, 0 ) ;
			VSYNC_init();
			VSYNC_setEvent( v00_trans_128_2 );
			for( i=0; i<frame; i++ )
			{
			    if( flag == 0 )
			    {
				while( v00_digit_timing_flag0 == 0 );
				if( fwrite( buf, size >> 1, 1, fp ) < 1 )
				    break;
			    }
			    else
			    {
				while( v00_digit_timing_flag2 == 0 );
					/* やりのこしをfwrite */
				if( fwrite( buf+(size >> 1), size >> 1, 1, fp )
				 < 1 )
				    break;
				v00_digit_timing_flag0 = 0;
				if( fseek( fp, size, SEEK_CUR ) )
				    break;
				v00_digit_timing_flag2 = 0;
			    }
			    flag ^= 1;
			}
			VSYNC_end();
			SND_fm_timer_b_start() ;

			EGB_digitize(guiEgbPtr,0);

				/* mute */
			int s ;
			SND_get_elevol_mute( &s ) ;
			SND_elevol_mute( s & 0xfffffff3 ) ;

			EGB_displayPage(guiEgbPtr,0,0);

			v00_digit_buf1 = buf + size;
			flag = 0;
			fseek( fp, 256, SEEK_SET );
			for( i=0; i<frame; i++ )
			{
			    if( flag == 0 )
			    {
				if( fseek( fp, size, SEEK_CUR ) )
				    break;
			    }
			    else
			    {
				if( fwrite( v00_digit_buf1, size, 1, fp ) < 1 )
				    break;
				v00_digit_buf1 = v00_digit_buf1 + size;
			    }
			    flag ^= 1;
			}
			break;

		case 2: EGB_displayPage(guiEgbPtr,0,1);
			EGB_resolution(guiEgbPtr,0,16);
			EGB_writePage(guiEgbPtr,0);
			EGB_displayStart(guiEgbPtr,2,8,1);
			EGB_digitize(guiEgbPtr,1);
			size = v00xd*v00yd*2;		/* frame size */
			v00_digit_buf1 = buf + size;
			v00_digit_timing_flag0 = 0;
			v00_digit_timing_flag1 = 0;
			v00_digit_timing_flag2 = 0;
			flag = 0;
			mouse(1);

			SND_fm_timer_b_set( 0, 0 ) ;
			VSYNC_init();
			VSYNC_setEvent( v00_trans_160_2 );
			for( i=0; i<frame; i++ )
			{
			    if( flag == 0 )
			    {
				while( v00_digit_timing_flag0 == 0 );
				if( fwrite( buf, size >> 1, 1, fp ) < 1 )
				    break;
			    }
			    else
			    {
				while( v00_digit_timing_flag2 == 0 );
					/* やりのこしをfwrite */
				if( fwrite( buf+(size >> 1), size >> 1, 1, fp )
				 < 1 )
				    break;
				v00_digit_timing_flag0 = 0;
				if( fseek( fp, size, SEEK_CUR ) )
				    break;
				v00_digit_timing_flag2 = 0;
			    }
			    flag ^= 1;
			}
			VSYNC_end();
			SND_fm_timer_b_start() ;

			EGB_digitize(guiEgbPtr,0);

				/* mute */
//			int s ;
			SND_get_elevol_mute( &s ) ;
			SND_elevol_mute( s & 0xfffffff3 ) ;

			EGB_displayPage(guiEgbPtr,0,0);

			v00_digit_buf1 = buf + size;
			flag = 0;
			fseek( fp, 256, SEEK_SET );
			for( i=0; i<frame; i++ )
			{
			    if( flag == 0 )
			    {
				if( fseek( fp, size, SEEK_CUR ) )
				    break;
			    }
			    else
			    {
				if( fwrite( v00_digit_buf1, size, 1, fp ) < 1 )
				    break;
				v00_digit_buf1 = v00_digit_buf1 + size;
			    }
			    flag ^= 1;
			}
			break;

		case 3: EGB_displayPage(guiEgbPtr,0,1);
			EGB_resolution(guiEgbPtr,0,16);
			EGB_writePage(guiEgbPtr,0);
			EGB_displayStart(guiEgbPtr,2,4,1);
			EGB_digitize(guiEgbPtr,1);
			size = v00xd*v00yd*2;		/* frame size */
			v00_digit_buf1 = buf + size;
			v00_digit_timing_flag0 = 0;
			v00_digit_timing_flag1 = 0;
			v00_digit_timing_flag2 = 0;
			flag = 0;
			mouse(1);

			SND_fm_timer_b_set( 0, 0 ) ;
			VSYNC_init();
			VSYNC_setEvent( v00_trans_192_2 );
			for( i=0; i<frame; i++ )
			{
			    if( flag == 0 )
			    {
				while( v00_digit_timing_flag0 == 0 );
				if( fwrite( buf, size >> 1, 1, fp ) < 1 )
				    break;
			    }
			    else
			    {
				while( v00_digit_timing_flag2 == 0 );
					/* やりのこしをfwrite */
				if( fwrite( buf+(size >> 1), size >> 1, 1, fp )
				 < 1 )
				    break;
				v00_digit_timing_flag0 = 0;
				if( fseek( fp, size, SEEK_CUR ) )
				    break;
				v00_digit_timing_flag2 = 0;
			    }
			    flag ^= 1;
			}
			VSYNC_end();
			SND_fm_timer_b_start() ;

			EGB_digitize(guiEgbPtr,0);

				/* mute */
//			int s ;
			SND_get_elevol_mute( &s ) ;
			SND_elevol_mute( s & 0xfffffff3 ) ;

			EGB_displayPage(guiEgbPtr,0,0);

			v00_digit_buf1 = buf + size;
			flag = 0;
			fseek( fp, 256, SEEK_SET );
			for( i=0; i<frame; i++ )
			{
			    if( flag == 0 )
			    {
				if( fseek( fp, size, SEEK_CUR ) )
				    break;
			    }
			    else
			    {
				if( fwrite( v00_digit_buf1, size, 1, fp ) < 1 )
				    break;
				v00_digit_buf1 = v00_digit_buf1 + size;
			    }
			    flag ^= 1;
			}
			break;

		case 4: EGB_displayPage(guiEgbPtr,0,1);
			EGB_resolution(guiEgbPtr,0,16);
			EGB_writePage(guiEgbPtr,0);
			EGB_displayStart(guiEgbPtr,2,4,1);
			EGB_digitize(guiEgbPtr,1);
			size = v00xd*v00yd*2;		/* frame size */
			v00_digit_buf1 = buf + size;
			v00_digit_timing_flag0 = 0;
			v00_digit_timing_flag1 = 0;
			v00_digit_timing_flag2 = 0;
			flag = 0;
			mouse(1);

			SND_fm_timer_b_set( 0, 0 ) ;
			VSYNC_init();
			VSYNC_setEvent( v00_trans_256_2 );
			for( i=0; i<frame; i++ )
			{
			    if( flag == 0 )
			    {
				while( v00_digit_timing_flag0 == 0 );
				if( fwrite( buf, size >> 1, 1, fp ) < 1 )
				    break;
			    }
			    else
			    {
				while( v00_digit_timing_flag2 == 0 );
					/* やりのこしをfwrite */
				if( fwrite( buf+(size >> 1), size >> 1, 1, fp )
				 < 1 )
				    break;
				v00_digit_timing_flag0 = 0;
				if( fseek( fp, size, SEEK_CUR ) )
				    break;
				v00_digit_timing_flag2 = 0;
			    }
			    flag ^= 1;
			}
			VSYNC_end();
			SND_fm_timer_b_start() ;

			EGB_digitize(guiEgbPtr,0);

				/* mute */
//			int s ;
			SND_get_elevol_mute( &s ) ;
			SND_elevol_mute( s & 0xfffffff3 ) ;

			EGB_displayPage(guiEgbPtr,0,0);

			v00_digit_buf1 = buf + size;
			flag = 0;
			fseek( fp, 256, SEEK_SET );
			for( i=0; i<frame; i++ )
			{
			    if( flag == 0 )
			    {
				if( fseek( fp, size, SEEK_CUR ) )
				    break;
			    }
			    else
			    {
				if( fwrite( v00_digit_buf1, size, 1, fp ) < 1 )
				    break;
				v00_digit_buf1 = v00_digit_buf1 + size;
			    }
			    flag ^= 1;
			}
			break;

		case 5: EGB_displayPage(guiEgbPtr,0,1);
			EGB_resolution(guiEgbPtr,0,16);
			EGB_writePage(guiEgbPtr,0);
			EGB_displayStart(guiEgbPtr,2,4,1);
			EGB_digitize(guiEgbPtr,1);
			size = v00xd*v00yd*2;		/* frame size */
			v00_digit_buf1 = buf + size;
			v00_digit_timing_flag0 = 0;
			v00_digit_timing_flag1 = 0;
			v00_digit_timing_flag2 = 0;
			flag = 0;
			mouse(1);

			SND_fm_timer_b_set( 0, 0 ) ;
			VSYNC_init();
			VSYNC_setEvent( v00_trans_320_2 );
			for( i=0; i<frame; i++ )
			{
			    if( flag == 0 )
			    {
				while( v00_digit_timing_flag0 == 0 );
				if( fwrite( buf, size >> 1, 1, fp ) < 1 )
				    break;
			    }
			    else
			    {
				while( v00_digit_timing_flag2 == 0 );
					/* やりのこしをfwrite */
				if( fwrite( buf+(size >> 1), size >> 1, 1, fp )
				 < 1 )
				    break;
				v00_digit_timing_flag0 = 0;
				if( fseek( fp, size, SEEK_CUR ) )
				    break;
				v00_digit_timing_flag2 = 0;
			    }
			    flag ^= 1;
			}
			VSYNC_end();
			SND_fm_timer_b_start() ;

			EGB_digitize(guiEgbPtr,0);

				/* mute */
//			int s ;
			SND_get_elevol_mute( &s ) ;
			SND_elevol_mute( s & 0xfffffff3 ) ;

			EGB_displayPage(guiEgbPtr,0,0);

			v00_digit_buf1 = buf + size;
			flag = 0;
			fseek( fp, 256, SEEK_SET );
			for( i=0; i<frame; i++ )
			{
			    if( flag == 0 )
			    {
				if( fseek( fp, size, SEEK_CUR ) )
				    break;
			    }
			    else
			    {
				if( fwrite( v00_digit_buf1, size, 1, fp ) < 1 )
				    break;
				v00_digit_buf1 = v00_digit_buf1 + size;
			    }
			    flag ^= 1;
			}
			break;
	}	

		/* total data size 修正 */
	fseek( fp, 0, SEEK_SET );
	DWORD( head + 4 ) = i * v00xd * v00yd * 2; /* total length */
	DWORD( head + 8 ) = i;			/* total frame	 */
	if( fwrite( head, 256, 1, fp ) < 1 ){	/* ヘッダー */
		fclose(fp);
		TL_free( buf );
		return 2;			/* 2 = error num. */
	}

	fclose(fp);
	TL_free( buf );
	if( i < frame )return 2;
	else return 0;
}

v00_digit_save_3( name, frame, md, wt )
char name[];
int frame, md, wt;
{
	FILE *fp;
	int v00xd = 128, v00yd = 96;
	int i, size, error;
	char head[256];
	char *buf ;		/* buffer */

	if( frame <= 0 )
		return NOERR ;

	error = 0;
	switch( md ){
		case 1: v00xd = 128; v00yd = 96;
			break;
		case 2: v00xd = 160; v00yd = 120;
			break;
		case 3: v00xd = 192; v00yd = 144;
			break;
		case 4: v00xd = 256; v00yd = 192;
			break;
		case 5: v00xd = 320; v00yd = 240;
			break;
		default: return 58 ;
	}
	size = v00xd*v00yd*2;		/* frame size */
	if( ( buf = (char *)TL_malloc(size*frame) ) == NULL )
	{
		error = 7;
		goto vd11;
	}
	v00_digit_buf0 = buf;
	v00_digit_wait = wt;
	switch( md ){
		case 1: EGB_displayPage(guiEgbPtr,0,1);
			EGB_resolution(guiEgbPtr,0,16);
			EGB_writePage(guiEgbPtr,0);
			EGB_displayStart(guiEgbPtr,2,8,1);
			EGB_digitize(guiEgbPtr,1);
			v00_digit_buf1 = buf;
			v00_digit_counter = frame;
			mouse(1);

			SND_fm_timer_b_set( 0, 0 ) ;
			VSYNC_init();
			VSYNC_setEvent( v00_trans_128_3 );
			while( v00_digit_counter > 0 );
			VSYNC_end();
			SND_fm_timer_b_start() ;
			break;

		case 2: EGB_displayPage(guiEgbPtr,0,1);
			EGB_resolution(guiEgbPtr,0,16);
			EGB_writePage(guiEgbPtr,0);
			EGB_displayStart(guiEgbPtr,2,8,1);
			EGB_digitize(guiEgbPtr,1);
			v00_digit_buf1 = buf;
			v00_digit_counter = frame;
			mouse(1);

			SND_fm_timer_b_set( 0, 0 ) ;
			VSYNC_init();
			VSYNC_setEvent( v00_trans_160_3 );
			while( v00_digit_counter > 0 );
			VSYNC_end();
			SND_fm_timer_b_start() ;
			break;

		case 3: EGB_displayPage(guiEgbPtr,0,1);
			EGB_resolution(guiEgbPtr,0,16);
			EGB_writePage(guiEgbPtr,0);
			EGB_displayStart(guiEgbPtr,2,4,1);
			EGB_digitize(guiEgbPtr,1);
			v00_digit_buf1 = buf;
			v00_digit_counter = frame;
			mouse(1);

			SND_fm_timer_b_set( 0, 0 ) ;
			VSYNC_init();
			VSYNC_setEvent( v00_trans_192_3 );
			while( v00_digit_counter > 0 );
			VSYNC_end();
			SND_fm_timer_b_start() ;
			break;

		case 4: EGB_displayPage(guiEgbPtr,0,1);
			EGB_resolution(guiEgbPtr,0,16);
			EGB_writePage(guiEgbPtr,0);
			EGB_displayStart(guiEgbPtr,2,4,1);
			EGB_digitize(guiEgbPtr,1);
			v00_digit_buf1 = buf;
			v00_digit_counter = frame;
			mouse(1);

			SND_fm_timer_b_set( 0, 0 ) ;
			VSYNC_init();
			VSYNC_setEvent( v00_trans_256_3 );
			while( v00_digit_counter > 0 );
			VSYNC_end();
			SND_fm_timer_b_start() ;
			break;

		case 5: EGB_displayPage(guiEgbPtr,0,1);
			EGB_resolution(guiEgbPtr,0,16);
			EGB_writePage(guiEgbPtr,0);
			EGB_displayStart(guiEgbPtr,2,4,1);
			EGB_digitize(guiEgbPtr,1);
			v00_digit_buf1 = buf;
			v00_digit_counter = frame;
			mouse(1);

			SND_fm_timer_b_set( 0, 0 ) ;
			VSYNC_init();
			VSYNC_setEvent( v00_trans_320_3 );
			while( v00_digit_counter > 0 );
			VSYNC_end();
			SND_fm_timer_b_start() ;
			break;
	}

	EGB_digitize(guiEgbPtr,0);

		/* mute */
	int s ;
	SND_get_elevol_mute( &s ) ;
	SND_elevol_mute( s & 0xfffffff3 ) ;

	EGB_displayPage(guiEgbPtr,0,0);

	if( ( fp = fopen( name, "wb" ) ) == NULL ){
		error = 2;
		goto vd10;
	}
	for( i=0 ; i<64 ; i++ )DWORD( head + i*4 ) = 0;
	DWORD( head ) = 0x30304456;		/* ID = VD00 */
	DWORD( head + 4 ) = frame * v00xd * v00yd * 2; /* total length */
	DWORD( head + 8 ) = frame;		/* total frame	 */
	DWORD( head + 12 ) = 0x80008000;	/* dataの種類番号 */
	DWORD( head + 16 ) = v00xd;		/* 横 */
	DWORD( head + 20 ) = v00yd;		/* 縦 */
	DWORD( head + 24 ) = wt;		/* wait */
	if( fwrite( head, 256, 1, fp ) < 1 ){	/* ヘッダー */
		error = 2;
		goto vd09;
	}
	i = fwrite( buf, size, frame, fp ) ;
	if( i < frame ){
		error = 2;
	}
	fseek( fp, 0, SEEK_SET );
	DWORD( head + 4 ) = i * v00xd * v00yd * 2; /* total length */
	DWORD( head + 8 ) = i;			/* total frame	 */
	if( fwrite( head, 256, 1, fp ) < 1 ){	/* ヘッダー */
		error = 2;
	}

vd09:	fclose(fp);
vd10:	TL_free( buf );
vd11:

	return error;
}

v00_digit_snd_save( name, frame, md, wt )
char *name;
int frame, md, wt;
{
	FILE *fp;
	int freq ;
	int v00xd = 128, v00yd = 96;
	int i, j, size, error;
	char names[100];
	char head[256];
	char *buf, *snd;		/* buffer */

	if( frame <= 0 )
		return NOERR ;

	error = 0;
	switch( wt ){
		case 4: freq = 12000 ;
			break;
		case 5: freq = 9600 ;
			break;
		case 6: freq = 8000 ;
			break;
		case 7: freq = 6857 ;
			break;
		default: return 58 ;
	}
	switch( md ){
		case 1: v00xd = 128; v00yd = 96;
			break;
		case 2: v00xd = 160; v00yd = 120;
			break;
		case 3: v00xd = 192; v00yd = 144;
			break;
		case 4: v00xd = 256; v00yd = 192;
			break;
		case 5: v00xd = 320; v00yd = 240;
			break;
		default: return 58 ;
	}
	size = v00xd*v00yd*2;		/* frame size */
	if( ( buf = (char *)TL_malloc(size*frame) ) == NULL )
	{
		error = 7;
		goto vd11;
	}
	if( ( snd = (char *)TL_malloc( frame*800+32 ) ) == NULL )
	{
		error = 7;
		goto vd10;
	}

	switch( md ){
		case 1: EGB_displayPage(guiEgbPtr,0,1);
			EGB_resolution(guiEgbPtr,0,16);
			EGB_writePage(guiEgbPtr,0);
			EGB_displayStart(guiEgbPtr,2,8,1);
			EGB_digitize(guiEgbPtr,1);
			mouse(1);

			SND_fm_timer_b_set( 0, 0 ) ;

			switch( wt ){
				case 4: v00_snd_trans_128_4( snd+32, frame*800,
					buf, frame, wt*320, wt*320 - 320/2
					) ;
					break;
				case 5: v00_snd_trans_128_5( snd+32, frame*800,
					buf, frame, wt*320, wt*320 - 320/2
					) ;
					break;
				case 6: v00_snd_trans_128_6( snd+32, frame*800,
					buf, frame, wt*320, wt*320 - 320/2
					) ;
					break;
				case 7: v00_snd_trans_128_7( snd+32, frame*800,
					buf, frame, wt*320, wt*320 - 320/2
					) ;
					break;
			}

			SND_fm_timer_b_start() ;
			break;

		case 2: EGB_displayPage(guiEgbPtr,0,1);
			EGB_resolution(guiEgbPtr,0,16);
			EGB_writePage(guiEgbPtr,0);
			EGB_displayStart(guiEgbPtr,2,8,1);
			EGB_digitize(guiEgbPtr,1);
			mouse(1);

			SND_fm_timer_b_set( 0, 0 ) ;

			switch( wt ){
				case 4: v00_snd_trans_160_4( snd+32, frame*800,
					buf, frame, wt*320, wt*320 - 320/2
					) ;
					break;
				case 5: v00_snd_trans_160_5( snd+32, frame*800,
					buf, frame, wt*320, wt*320 - 320/2
					) ;
					break;
				case 6: v00_snd_trans_160_6( snd+32, frame*800,
					buf, frame, wt*320, wt*320 - 320/2
					) ;
					break;
				case 7: v00_snd_trans_160_7( snd+32, frame*800,
					buf, frame, wt*320, wt*320 - 320/2
					) ;
					break;
			}

			SND_fm_timer_b_start() ;
			break;

		case 3: EGB_displayPage(guiEgbPtr,0,1);
			EGB_resolution(guiEgbPtr,0,16);
			EGB_writePage(guiEgbPtr,0);
			EGB_displayStart(guiEgbPtr,2,4,1);
			EGB_digitize(guiEgbPtr,1);
			mouse(1);

			SND_fm_timer_b_set( 0, 0 ) ;

			switch( wt ){
				case 4: v00_snd_trans_192_4( snd+32, frame*800,
					buf, frame, wt*320, wt*320 - 320/2
					) ;
					break;
				case 5: v00_snd_trans_192_5( snd+32, frame*800,
					buf, frame, wt*320, wt*320 - 320/2
					) ;
					break;
				case 6: v00_snd_trans_192_6( snd+32, frame*800,
					buf, frame, wt*320, wt*320 - 320/2
					) ;
					break;
				case 7: v00_snd_trans_192_7( snd+32, frame*800,
					buf, frame, wt*320, wt*320 - 320/2
					) ;
					break;
			}

			SND_fm_timer_b_start() ;
			break;

		case 4: EGB_displayPage(guiEgbPtr,0,1);
			EGB_resolution(guiEgbPtr,0,16);
			EGB_writePage(guiEgbPtr,0);
			EGB_displayStart(guiEgbPtr,2,4,1);
			EGB_digitize(guiEgbPtr,1);
			mouse(1);

			SND_fm_timer_b_set( 0, 0 ) ;

			switch( wt ){
				case 4: v00_snd_trans_256_4( snd+32, frame*800,
					buf, frame, wt*320, wt*320 - 320/2
					) ;
					break;
				case 5: v00_snd_trans_256_5( snd+32, frame*800,
					buf, frame, wt*320, wt*320 - 320/2
					) ;
					break;
				case 6: v00_snd_trans_256_6( snd+32, frame*800,
					buf, frame, wt*320, wt*320 - 320/2
					) ;
					break;
				case 7: v00_snd_trans_256_7( snd+32, frame*800,
					buf, frame, wt*320, wt*320 - 320/2
					) ;
					break;
			}

			SND_fm_timer_b_start() ;
			break;

		case 5: EGB_displayPage(guiEgbPtr,0,1);
			EGB_resolution(guiEgbPtr,0,16);
			EGB_writePage(guiEgbPtr,0);
			EGB_displayStart(guiEgbPtr,2,4,1);
			EGB_digitize(guiEgbPtr,1);
			mouse(1);

			SND_fm_timer_b_set( 0, 0 ) ;

			switch( wt ){
				case 4: v00_snd_trans_320_4( snd+32, frame*800,
					buf, frame, wt*320, wt*320 - 320/2
					) ;
					break;
				case 5: v00_snd_trans_320_5( snd+32, frame*800,
					buf, frame, wt*320, wt*320 - 320/2
					) ;
					break;
				case 6: v00_snd_trans_320_6( snd+32, frame*800,
					buf, frame, wt*320, wt*320 - 320/2
					) ;
					break;
				case 7: v00_snd_trans_320_7( snd+32, frame*800,
					buf, frame, wt*320, wt*320 - 320/2
					) ;
					break;
			}

			SND_fm_timer_b_start() ;
			break;
	}

	EGB_digitize(guiEgbPtr,0);

		/* mute */
	int s ;
	SND_get_elevol_mute( &s ) ;
	SND_elevol_mute( s & 0xfffffff3 ) ;

	EGB_displayPage(guiEgbPtr,0,0);

	for( j=0 ; j<8 ; j++ )snd[j] = (char)0;
	for( i=0 ; i<80 ; i++ ){
		if( (name[i]==(char)0) || (name[i]=='.') )break;
	}
	if( i == 0 )goto vd04;
	for( i=i ; i>=0 ; i-- ){
		if( name[i]=='\\' )break;
	}
	i++;
	for( j=0 ; j<8 ; j++ ){			/* name */
		if( (name[i]==(char)0) || (name[i]=='.') )break;
		snd[j] = name[i++];
	}
vd04:	DWORD( snd+8 ) = DWORD( snd+0 );		/* id */
	DWORD( snd+12 ) =  frame*800 ;		/* data length */
	DWORD( snd+16 ) = 0;			/* loop point */
	DWORD( snd+20 ) = 0;			/* loop length */
	WORD( snd+24 ) = freq * 0x62 / 1000;	/* freq */
	WORD( snd+26 ) = 0;			/* adjust */
	BYTE( snd+28 ) = 60;			/* C */
	BYTE( snd+29 ) = 0;			/* リザーブ */
	WORD( snd+30 ) = 0;			/* リザーブ */

	for( i=0 ; i<frame*800 ; i++ )
	{
		if( BYTE( snd+32+i ) == 0 )
			BYTE( snd+32+i ) = 1 ;
		if( BYTE( snd+32+i ) == 255 )
			BYTE( snd+32+i ) = 254 ;

		if( BYTE( snd+32+i ) < 128 )
			BYTE( snd+32+i ) = 128 - BYTE( snd+32+i ) ;
	}

	if( file_kakuchousi_set( names, name, ".SND" ) )
		goto vd06;
	if( ( fp = fopen( names, "wb" ) ) == NULL )
	{
		error = 2;
		goto vd06;
	}
	if( fwrite( snd, frame*800+32, 1, fp ) < 1 )
		error = 2;
	fclose(fp);
vd06:	TL_free( snd );

	if( ( fp = fopen( name, "wb" ) ) == NULL ){
		error = 2;
		goto vd10;
	}
	for( i=0 ; i<64 ; i++ )DWORD( head + i*4 ) = 0;
	DWORD( head ) = 0x30304456;		/* ID = VD00 */
	DWORD( head + 4 ) = frame * v00xd * v00yd * 2; /* total length */
	DWORD( head + 8 ) = frame;		/* total frame	 */
	DWORD( head + 12 ) = 0x80008000;	/* dataの種類番号 */
	DWORD( head + 16 ) = v00xd;		/* 横 */
	DWORD( head + 20 ) = v00yd;		/* 縦 */
	DWORD( head + 24 ) = wt;		/* wait */
	if( fwrite( head, 256, 1, fp ) < 1 ){	/* ヘッダー */
		error = 2;
		goto vd09;
	}
	i = fwrite( buf, size, frame, fp ) ;
	if( i < frame ){
		error = 2;
	}
	fseek( fp, 0, SEEK_SET );
	DWORD( head + 4 ) = i * v00xd * v00yd * 2; /* total length */
	DWORD( head + 8 ) = i;			/* total frame	 */
	if( fwrite( head, 256, 1, fp ) < 1 ){	/* ヘッダー */
		error = 2;
	}

vd09:	fclose(fp);
vd10:	TL_free( buf );
vd11:

	return error;
}

/*
	v00 play 
*/

int v00_play_check()
{
	int sw;	/*	注意:sw 押されているとbit off 押されてないとbit on 	*/

	SND_joy_in_1( 0xff, &sw );		/* end check */
	sw = (sw ^ 0xff) & 0x30;
	if( sw == 0 )return 0;
c01:	SND_joy_in_1( 0xff, &sw );
	sw = (sw ^ 0xff) & 0x30;
	if( sw & 0x10 ){
		while( sw == 0x30 ){
			SND_joy_in_1( 0xff, &sw );
			sw = (sw ^ 0xff) & 0x30;
		}
		if( sw == 0x20 )goto c02;
		while( sw ){
			SND_joy_in_1( 0xff, &sw );
			sw = (sw ^ 0xff) & 0x30;
			if( sw == 0x30 )break;
		}
		return 1;
	}
c02:	if( sw )goto c01;
	return -1;
}

v00_play( name, point, f, w )
char name[] ;
int point, *f, w ;
{
	FILE *fp, *fps;
	int wait, orgWait, n ;
	int v00xd = 128, v00yd = 96;
	int temp, size, sbflg, note;
	char head[256];
	char para[64], names[100];
	char *sbuf, *buf;		/* buffer */

	if( (buf = (char *)TL_malloc( 320*240*2 )) == NULL ){
		return 7;
	}

		/* mute */
	int s ;
	SND_get_elevol_mute( &s ) ;
	SND_elevol_mute( s | 0x01 ) ;

	sbflg = 0;
	if( file_kakuchousi_set( names, name, ".SND" ) )goto vd02;
	if( ( fps = fopen( names, "rb" ) ) == NULL )goto vd02;
	if( fread( buf, 32, 1, fps ) < 1 )goto vd01;
	size = DWORD( buf+12 ) ;
	note = BYTE( buf+28 );
	if( (sbuf = (char *)TL_malloc( size + 32 )) == NULL )goto vd01;
	sbflg = -1;			/* buffer open */
	fseek( fps, 0, SEEK_SET );

	if( fread( sbuf, 32, 1, fps ) < 1 )goto vd01;
	if( ( point > 0 ) && ( point <= size ) )
	{
		size = size - point ;
		fseek( fps, point, SEEK_CUR );
		DWORD( sbuf+12 ) = size ;
	}
	if( fread( sbuf + 32, size, 1, fps ) < 1 )goto vd01;

	sbflg = 1;			/* pcm play ok */
	SND_pcm_sound_delete( -1 );
	SND_pcm_mode_set( 1 );
vd01:	fclose( fps );

vd02:	if( ( fp = fopen( name, "rb" ) ) == NULL )
	{
		if( sbflg )TL_free( sbuf );
		TL_free( buf );
		return 1;
	}

	if( fread( head, 256, 1, fp ) < 1 ){	/* ヘッダー */
		fclose(fp);
		if( sbflg )TL_free( sbuf );
		TL_free( buf );
		return 1;
	}
	if
	(
	    (DWORD( head +  0 ) == 0x30304456)	/* VD00 */
	 && (DWORD( head + 12 ) == 0x80008000)	/* dataの種類番号 */
	)
	{
		v00xd = DWORD( head + 16 );	/* 横 */
		v00yd = DWORD( head + 20 );	/* 縦 */
		orgWait = DWORD( head + 24 );	/* オリジナルwait */
	}
	else
	{
		v00xd = 128;			/* 横 */
		v00yd = 96;			/* 縦 */
		orgWait = 6;
		fseek( fp, 0, SEEK_SET );
	}
	if( v00xd * v00yd > 320*240 ){	/* 規格オーバー */
		fclose(fp);
		if( sbflg )TL_free( sbuf );
		TL_free( buf );
		return 58;
	}

	wait = orgWait + w ;	/* ウエイト加算 */
	if( sbflg )
	{
		WORD( sbuf+24 ) = WORD( sbuf+24 ) * wait / orgWait;
								/* freq */
		DWORD( sbuf+16 ) = 0 ;	/* loop point */
		DWORD( sbuf+20 ) = 0 ;	/* loop length */
	}

	EGB_writePage(guiEgbPtr,1);
	EGB_displayStart(guiEgbPtr,1,0,0);
	EGB_displayStart(guiEgbPtr,2,2,2);
	EGB_displayStart(guiEgbPtr,3,v00xd,v00yd);
	EGB_displayStart(guiEgbPtr,0,(320-v00xd)/2,(240-v00yd)/2);
	EGB_displayPage(guiEgbPtr,0,3);

	DWORD(para+0) = (int)buf;
	WORD(para+4) = 0x14;
	WORD(para+6) = 0;
	WORD(para+8) = 0;
	WORD(para+10) = 0 + v00xd - 1;
	WORD(para+12) = 0 + v00yd - 1;
	size = v00xd*v00yd*2;

	temp = 1 ;
	SND_fm_timer_b_set( 0, 0 ) ;
	VSYNC_init();
	for( n=0 ; n<=0x7fffffff ; n++ )
	{
		int ret ;

		if( VSYNC_counter < (wait << 1) ) /* かなり寛大 */
		{
			if( fread( buf, size, 1, fp ) < 1 )break ;
			while( VSYNC_counter < wait );
			VSYNC_counter -= wait ;
			EGB_putBlock( guiEgbPtr, 0, para );

			ret = v00_play_check() ;
			if( ret )
			{
				if( ret == 1 ){			/* 一時停止の後再開する */
					VSYNC_counter = 0;
				}
				if( ret == -1 ){		/* 終了 */
					break ;
				}
			}

		}
		else
		{
			if( fseek( fp, size, SEEK_CUR ) )break;
			VSYNC_counter -= wait ;
		}

		if( temp )
		{
			if( sbflg ){
				SND_pcm_play( 71, note, 127, sbuf );
			}
			temp = 0;
		}
	}
	if( n == 0 )n = -1 ;
	VSYNC_end();
	SND_pcm_sound_delete( -1 );
	SND_fm_timer_b_start() ;

	*f = n ;	/* フレーム数をバック */

	SND_pcm_sound_delete( -1 );
	fclose(fp);
	if( sbflg )TL_free( sbuf );
	TL_free( buf );

	EGB_writePage(guiEgbPtr,0);			/* mode3に書き込み */

	return 0;
}

/*
	v00 play 2 フレームの途中から再生可能
*/

v00_play2( name, p1, p2, f, w )
char name[] ;
int p1, p2, *f, w ;
{
	FILE *fp, *fps;
	int wait, orgWait, n, point ;
	int v00xd = 128, v00yd = 96;
	int temp, size, sbflg, note;
	char head[256];
	char para[64], names[100];
	char *sbuf, *buf;		/* buffer */

	*f = -1 ;
	if( p2 < p1 )p2 = p1 ;
	if( (buf = (char *)TL_malloc( 320*240*2 )) == NULL ){
		return 7;
	}

		/* mute */
	int s ;
	SND_get_elevol_mute( &s ) ;
	SND_elevol_mute( s | 0x01 ) ;

	sbflg = 0;
	if( file_kakuchousi_set( names, name, ".SND" ) )goto vd02;
	if( ( fps = fopen( names, "rb" ) ) == NULL )goto vd02;
	if( fread( buf, 32, 1, fps ) < 1 )goto vd01;
	size = DWORD( buf+12 ) ;
	point = DWORD( buf+16 ) + p1 * 800 ;
	note = BYTE( buf+28 );
	if( (sbuf = (char *)TL_malloc( size + 32 )) == NULL )goto vd01;
	sbflg = -1;			/* buffer open */
	fseek( fps, 0, SEEK_SET );

	if( fread( sbuf, 32, 1, fps ) < 1 )goto vd01;
	if( ( point > 0 ) && ( point <= size ) )
	{
		size = size - point ;
		fseek( fps, point, SEEK_CUR );
		DWORD( sbuf+12 ) = size ;
	}
	if( fread( sbuf + 32, size, 1, fps ) < 1 )goto vd01;

	sbflg = 1;			/* pcm play ok */
	SND_pcm_sound_delete( -1 );
	SND_pcm_mode_set( 1 );
vd01:	fclose( fps );

vd02:	if( ( fp = fopen( name, "rb" ) ) == NULL )
	{
		if( sbflg )TL_free( sbuf );
		TL_free( buf );
		return 1;
	}

	if( fread( head, 256, 1, fp ) < 1 ){	/* ヘッダー */
		fclose(fp);
		if( sbflg )TL_free( sbuf );
		TL_free( buf );
		return 1;
	}
	if
	(
	    (DWORD( head +  0 ) == 0x30304456)	/* VD00 */
	 && (DWORD( head + 12 ) == 0x80008000)	/* dataの種類番号 */
	)
	{
		v00xd = DWORD( head + 16 );	/* 横 */
		v00yd = DWORD( head + 20 );	/* 縦 */
		orgWait = DWORD( head + 24 );	/* オリジナルwait */
	}
	else
	{
		v00xd = 128;			/* 横 */
		v00yd = 96;			/* 縦 */
		orgWait = 6;			/* 縦 */
		fseek( fp, 0, SEEK_SET );
	}
	if( v00xd * v00yd > 320*240 ){	/* 規格オーバー */
		fclose(fp);
		if( sbflg )TL_free( sbuf );
		TL_free( buf );
		return 58;
	}

	wait = orgWait + w ;	/* ウエイト加算 */

	size = v00xd*v00yd*2;		/* 先送り */
	n = -1 ;
	if( fseek( fp, p1*size, SEEK_CUR ) == 0 )
	{
		n = p1 ;
	}
	else
	{
		fclose(fp);
		if( sbflg )TL_free( sbuf );
		TL_free( buf );
		return 1;
	}

	if( sbflg )
	{
		WORD( sbuf+24 ) = WORD( sbuf+24 ) * wait / orgWait;
		DWORD( sbuf+16 ) = 0 ;	/* loop point */
		DWORD( sbuf+20 ) = 0 ;	/* loop length */
	}

	EGB_writePage(guiEgbPtr,1);
	EGB_displayStart(guiEgbPtr,1,0,0);
	EGB_displayStart(guiEgbPtr,2,2,2);
	EGB_displayStart(guiEgbPtr,3,v00xd,v00yd);
	EGB_displayStart(guiEgbPtr,0,(320-v00xd)/2,(240-v00yd)/2);
	EGB_displayPage(guiEgbPtr,0,3);

	DWORD(para+0) = (int)buf;
	WORD(para+4) = 0x14;
	WORD(para+6) = 0;
	WORD(para+8) = 0;
	WORD(para+10) = 0 + v00xd - 1;
	WORD(para+12) = 0 + v00yd - 1;

	temp = 1 ;
	SND_fm_timer_b_set( 0, 0 ) ;
	VSYNC_init();
	if( n >= 0 )
	{
	  for( n=p1 ; n<=p2 ; n++ )
	  {
		int ret ;

		if( VSYNC_counter < (wait << 1) ) /* かなり寛大 */
		{
			if( fread( buf, size, 1, fp ) < 1 )break ;
			while( VSYNC_counter < wait );
			VSYNC_counter -= wait ;
			EGB_putBlock( guiEgbPtr, 0, para );

			ret = v00_play_check() ;
			if( ret )
			{
				if( ret == 1 ){			/* 一時停止の後再開する */
					VSYNC_counter = 0;
				}
				if( ret == -1 ){		/* 終了 */
					break ;
				}
			}

		}
		else
		{
			if( fseek( fp, size, SEEK_CUR ) )break;
			VSYNC_counter -= wait ;
		}

		if( temp )
		{
			if( sbflg ){
				SND_pcm_play( 71, note, 127, sbuf );
			}
			temp = 0;
		}
	  }
	}
	VSYNC_end();
	SND_pcm_sound_delete( -1 );
	SND_fm_timer_b_start() ;

	*f = n ;	/* 再生フレーム数をバック */

	fclose(fp);
	if( sbflg )TL_free( sbuf );
	TL_free( buf );

	EGB_writePage(guiEgbPtr,0);			/* mode3に書き込み */

	return 0;
}

/*
	v00 編集 name3 = name1(p1〜p2) + name2(p3〜p4)
*/

v00_merge( name3, name1, p1, p2, name2, p3, p4 )
char *name1, *name2, *name3 ;
int p1, p2, p3, p4 ;
{
	FILE *fp, *fps;
	int i, n, point, temp, a, b ;
	int v00xd, v00yd, frame, wait ;
	int v00xd2, v00yd2 ;
	int size, freq, error;
	char head[256];
	char names[100];
	char *sbuf, *buf;		/* buffer */

	temp = 0 ;
	for( i=0 ; i<100 ; i++ )
	{
		a = (unsigned int)name3[i] ; b = (unsigned int)name1[i] ;
		if( ( a > 0x60 ) && ( a < 0x7b ) )
			a &= 0xdf ;
		if( ( b > 0x60 ) && ( b < 0x7b ) )
			b &= 0xdf ;
		if( ( a == 0 ) && ( b == 0 ) )
			break ;
		if( a != b )
		{
			temp = 1 ;
			break ;
		}
	}
	if( (temp == 0) && (i > 0) )
		return 52 ;		/* ファイルの重複 */

	temp = 0 ;
	for( i=0 ; i<100 ; i++ )
	{
		a = (unsigned int)name3[i] ; b = (unsigned int)name2[i] ;
		if( ( a > 0x60 ) && ( a < 0x7b ) )
			a &= 0xdf ;
		if( ( b > 0x60 ) && ( b < 0x7b ) )
			b &= 0xdf ;
		if( ( a == 0 ) && ( b == 0 ) )
			break ;
		if( a != b )
		{
			temp = 1 ;
			break ;
		}
	}
	if( (temp == 0) && (i > 0) )
		return 52 ;		/* ファイルの重複 */

	error = 0 ;
	if( p2 < p1 )p2 = p1 ;
	if( p4 < p3 )p4 = p3 ;
	n = 0 ;				/* frame counter */

			/* name1を読むのが主, frame sizeが違うときはエラー */
	if( v00_head_read_only( name2, &frame, &v00xd2, &v00yd2, &wait ) )
	{
		if( v00_head_read_only( name1, &frame, &v00xd, &v00yd, &wait ) )
			return 1 ;
	}
	else
	{
		if( v00_head_read_only( name1, &frame, &v00xd, &v00yd, &wait ) )
			return 1 ;
		if( (v00xd != v00xd2) || (v00yd != v00yd2) )
			return 1000 ;
	}

	if( (buf = (char *)TL_malloc( v00xd*v00yd*2*8 )) == NULL )
		return 7;
	if( ( fp = fopen( name1, "rb" ) ) == NULL )
	{
		TL_free( buf );
		return 1;
	}

	if( frame >= 0 )			/* head付き */
		fseek( fp, 256, SEEK_SET );

	size = v00xd*v00yd*2;
	for( i=0 ; i<64 ; i++ )DWORD( head + i*4 ) = 0;
	DWORD( head ) = 0x30304456;		/* ID = VD00 */
//	DWORD( head + 4 ) = ( p2 - p1 + 1 + p4 - p3 + 1 ) * size;
		 					/* total length */
//	DWORD( head + 8 ) = ( p2 - p1 + 1 + p4 - p3 + 1 );
							/* total frame	 */
	DWORD( head + 12 ) = 0x80008000;	/* dataの種類番号 */
	DWORD( head + 16 ) = v00xd;		/* 横 */
	DWORD( head + 20 ) = v00yd;		/* 縦 */
	DWORD( head + 24 ) = wait;		/* wait */
	if( fseek( fp, p1*size, SEEK_CUR ) )	/* 先送り */
	{
		fclose(fp);
		TL_free( buf );
		return 1;
	}
	if( ( fps = fopen( name3, "wb" ) ) == NULL )
	{
		fclose(fp);
		TL_free( buf );
		return 2;
	}
	if( fwrite( head, 256, 1, fps ) < 1 )
	{
		fclose(fp);
		fclose(fps);
		TL_free( buf );
		return 2;
	}

	for( i=p1 ; i<=p2 ; i += 8 )
	{
		if( p2 - i + 1 >= 8 )
		{
			if( fread( buf, size*8, 1, fp ) < 1 )
			{
				error = 1 ;
				break ;
			}
			if( fwrite( buf, size*8, 1, fps ) < 1 )
			{
				error = 2 ;
				break ;
			}
			n += 8 ;
		}
		else
		{
			if( fread( buf, size*(p2-i+1), 1, fp ) < 1 )
			{
				error = 1 ;
				break ;
			}
			if( fwrite( buf, size*(p2-i+1), 1, fps ) < 1 )
			{
				error = 2 ;
				break ;
			}
			n += (p2-i+1) ;
		}
	}
/*
	for( i=p1 ; i<=p2 ; i++ )
	{
		if( fread( buf, size, 1, fp ) < 1 )
		{
			error = 1 ;
			break ;
		}
		if( fwrite( buf, size, 1, fps ) < 1 )
		{
			error = 2 ;
			break ;
		}
		n++ ;
	}
*/
	if( i <= p2 )
	{
		p2 = i - 1 ;	/* 終了補正 */
		if( p2 < p1 )
		{
			fclose(fp);
			TL_free( buf );
			p4 = p3 - 1 ;
			goto vd00;	/* 書き損じ(fpsわざと閉めない) */
		}
	}
	fclose(fp);

		/* ここでwaitを変更するわけにはいかないのでdummyを使用 */
	int dummy ;
	if( v00_head_read( name2, &frame, &v00xd2, &v00yd2, &dummy ) )
	{
		TL_free( buf ) ;
		p4 = p3 - 1 ;
		error = 1 ;
		goto vd00;	/* 書き損じ(fpsわざと閉めない) */
	}
	if( (v00xd != v00xd2) || (v00yd != v00yd2) )
	{
		TL_free( buf ) ;
		p4 = p3 - 1 ;
		error = 1000 ;	/* 絵の大きさが合っていない */
		goto vd00;	/* 書き損じ(fpsわざと閉めない) */
	}
	if( ( fp = fopen( name2, "rb" ) ) == NULL )
	{
		TL_free( buf );
		p4 = p3 - 1 ;
		error = 1;
		goto vd00;	/* 書き損じ(fpsわざと閉めない) */
	}
	if( frame >= 0 )			/* head付き */
		fseek( fp, 256, SEEK_SET );
	if( fseek( fp, p3*size, SEEK_CUR ) )	/* 先送り */
	{
		fclose(fp);
		TL_free( buf );
		p4 = p3 - 1 ;
		error = 1;
		goto vd00;	/* 書き損じ(fpsわざと閉めない) */
	}

	for( i=p3 ; i<=p4 ; i += 8 )
	{
		if( p4 - i + 1 >= 8 )
		{
			if( fread( buf, size*8, 1, fp ) < 1 )
			{
				error = 1 ;
				break ;
			}
			if( fwrite( buf, size*8, 1, fps ) < 1 )
			{
				error = 2 ;
				break ;
			}
			n += 8 ;
		}
		else
		{
			if( fread( buf, size*(p4-i+1), 1, fp ) < 1 )
			{
				error = 1 ;
				break ;
			}
			if( fwrite( buf, size*(p4-i+1), 1, fps ) < 1 )
			{
				error = 2 ;
				break ;
			}
			n += (p4-i+1) ;
		}
	}
/*
	for( i=p3 ; i<=p4 ; i++ )
	{
		if( fread( buf, size, 1, fp ) < 1 )
		{
			error = 1 ;
			break ;
		}
		if( fwrite( buf, size, 1, fps ) < 1 )
		{
			error = 2 ;
			break ;
		}
		n++ ;
	}
*/
	if( i <= p4 )
	{
		p4 = i - 1 ;	/* 終了補正 */
		if( p4 < p3 )
		{
			fclose(fp);
			TL_free( buf );
			goto vd00;	/* 書き損じ(fpsわざと閉めない) */
		}
	}
	fclose(fp);
	TL_free( buf );

vd00:	fseek( fps, 0, SEEK_SET );
	DWORD( head + 4 ) = n * size ; /* total length */
	DWORD( head + 8 ) = n;			/* total frame	 */
	if( fwrite( head, 256, 1, fps ) < 1 ){	/* ヘッダー */
		error = 2;
	}
	fclose(fps);

		/* サウンド */
	switch( wait ){
		case 4: freq = 12000 ;
			break;
		case 5: freq = 9600 ;
			break;
		case 6: freq = 8000 ;
			break;
		case 7: freq = 6857 ;
			break;
		default: freq = 8000 ;
	}

	n = 0 ;
	size = ( p2 - p1 + 1 ) * 800 ;
	if( (sbuf = (char *)TL_malloc( size + 32 )) == NULL )
		return 7 ;
	DWORD( sbuf+0 ) = 0 ;			/* name */
	DWORD( sbuf+4 ) = 0 ;
	DWORD( sbuf+8 ) = 0 ;			/* id */

	DWORD( sbuf+12 ) = 0 ;			 /* length */

	DWORD( sbuf+16 ) = 0;			/* loop point */
	DWORD( sbuf+20 ) = 0;			/* loop length */
	WORD( sbuf+24 ) = freq * 0x62 / 1000;	/* freq */
	WORD( sbuf+26 ) = 0;			/* adjust */
	BYTE( sbuf+28 ) = 60;			/* C */
	BYTE( sbuf+29 ) = 0;			/* リザーブ */
	WORD( sbuf+30 ) = 0;			/* リザーブ */
	for( i=32 ; i<size+32 ; i += 4 )
	{
		DWORD( sbuf + i ) = 0x80808080 ;
	}

	point = p1 * 800 ;

	if( file_kakuchousi_set( names, name1, ".SND" ) )
		goto vd02;
	if( ( fp = fopen( names, "rb" ) ) == NULL )
		goto vd02;
	if( fread( head, 32, 1, fp ) < 1 )
		goto vd01;
	point += DWORD( head+16 ) ;
	fseek( fp, point, SEEK_CUR );
	if( fread( sbuf + 32, size, 1, fp ) < 1 )
		goto vd01;
vd01:	fclose( fp );

vd02:	if( file_kakuchousi_set( names, name3, ".SND" ) )
	{
		TL_free( sbuf ) ;
		return 2;
	}
	if( ( fps = fopen( names, "wb" ) ) == NULL )
	{
		TL_free( sbuf ) ;
		return 2;
	}
	if( fwrite( sbuf, size+32, 1, fps ) < 1 )
	{
		fclose( fps ) ;
		TL_free( sbuf ) ;
		return 2;
	}
	n += size ;

	TL_free( sbuf ) ;

	point = p3 * 800 ;

	size = ( p4 - p3 + 1 ) * 800 ;
	if( (sbuf = (char *)TL_malloc( size )) == NULL )
	{
		error = 7 ;
		goto vd06 ;	/* fps don't close */
	}
	for( i=0 ; i<size ; i += 4 )
	{
		DWORD( sbuf + i ) = 0x80808080 ;
	}
	if( file_kakuchousi_set( names, name2, ".SND" ) )
		goto vd06;	/* 2つめのファイルがない場合 */
	if( ( fp = fopen( names, "rb" ) ) == NULL )
		goto vd05;
	if( fread( head, 32, 1, fp ) < 1 )
		goto vd04;
	point += DWORD( head+16 ) ;
	fseek( fp, point, SEEK_CUR );
	if( fread( sbuf, size, 1, fp ) < 1 )
		goto vd04;
vd04:	fclose( fp );

vd05:	if( fwrite( sbuf, size, 1, fps ) < 1 )
	{
		TL_free( sbuf ) ;
		error =  2;
		goto vd06 ;	/* fps don't close */
	}
	n += size ;
	TL_free( sbuf ) ;

vd06:	fseek( fps, 12, SEEK_SET );
	DWORD( head ) = n ; /* total length */
	if( fwrite( head, 4, 1, fps ) < 1 ){	/* ヘッダー */
		error = 2;
	}
	fclose(fps);
	return error;
}


v00_head_read( name, frame, v00xd, v00yd, wait )
char *name;
int *frame, *v00xd, *v00yd, *wait ;
{
	FILE *fp;

	char head[256] ;

		/* データチェック */
	*frame = -1 ;
	if( ( fp = fopen( name, "rb" ) ) == NULL )
	{

		EGB_displayPage(guiEgbPtr,0,3);
		EGB_writePage(guiEgbPtr,0);			/* mode3に書き込み */

		return 1;
	}
	if( fread( head, 256, 1, fp ) < 1 ){	/* ヘッダー */
		fclose(fp);

		EGB_displayPage(guiEgbPtr,0,3);
		EGB_writePage(guiEgbPtr,0);			/* mode3に書き込み */

		return 1;
	}
	if
	(
	    (DWORD( head +  0 ) == 0x30304456)	/* VD00 */
	 && (DWORD( head + 12 ) == 0x80008000)	/* dataの種類番号 */
	)
	{
		*frame = DWORD( head + 8 );	/* frame */
		*v00xd = DWORD( head + 16 );	/* 横 */
		*v00yd = DWORD( head + 20 );	/* 縦 */
		*wait = DWORD( head + 24 );	/* wait */
	}
	else
	{
		*v00xd = 128;			/* 横 */
		*v00yd = 96;			/* 縦 */
		*wait = 6;			/* 縦 */
		fseek( fp, 0, SEEK_SET );
	}

		/* 最初のフレームを表示 */

	int size ;
	char *buf, para[64] ;

	if( (buf = (char *)TL_malloc( 320*240*2 )) == NULL )
	{
		fclose(fp);

		EGB_displayPage(guiEgbPtr,0,3);
		EGB_writePage(guiEgbPtr,0);			/* mode3に書き込み */

		return 7;
	}
	if( (*v00xd) * (*v00yd) > 320*240 ){	/* 規格オーバー */
		fclose(fp);
		TL_free( buf );

		EGB_displayPage(guiEgbPtr,0,3);
		EGB_writePage(guiEgbPtr,0);			/* mode3に書き込み */

		return 58;
	}

	EGB_writePage(guiEgbPtr,1);
	EGB_displayStart(guiEgbPtr,1,0,0);
	EGB_displayStart(guiEgbPtr,2,2,2);
	EGB_displayStart(guiEgbPtr,3,0,0);
	EGB_displayStart(guiEgbPtr,0,(320 - (*v00xd))/2,(240 - (*v00yd))/2);
	EGB_displayStart(guiEgbPtr,3,*v00xd,*v00yd);

	DWORD(para+0) = (int)buf;
	WORD(para+4) = 0x14;
	WORD(para+6) = 0;
	WORD(para+8) = 0;
	WORD(para+10) = 0 + (*v00xd) - 1;
	WORD(para+12) = 0 + (*v00yd) - 1;
	size = (*v00xd) * (*v00yd) * 2;

	if( fread( buf, size, 1, fp ) < 1 )
	{
		fclose(fp);
		TL_free( buf );

		EGB_displayPage(guiEgbPtr,0,3);
		EGB_writePage(guiEgbPtr,0);			/* mode3に書き込み */

		return 0;		/* frame 0枚ということもあり得る */
	}
	EGB_putBlock( guiEgbPtr, 0, para );

	EGB_displayPage(guiEgbPtr,0,3);
	EGB_writePage(guiEgbPtr,0);			/* mode3に書き込み */

	fclose(fp);
	TL_free( buf );
	return 0 ;
}

/* ヘッダを読んでskip分のフレームを飛ばして1枚表示 */

v00_head_read_skip( name, frame, v00xd, v00yd, wait, skip )
char *name;
int *frame, *v00xd, *v00yd, *wait ;
int skip ;
{
	FILE *fp;

	char head[256] ;

		/* データチェック */
	*frame = -1 ;
	if( ( fp = fopen( name, "rb" ) ) == NULL )
	{

		EGB_displayPage(guiEgbPtr,0,3);
		EGB_writePage(guiEgbPtr,0);			/* mode3に書き込み */

		return 1;
	}
	if( fread( head, 256, 1, fp ) < 1 ){	/* ヘッダー */
		fclose(fp);

		EGB_displayPage(guiEgbPtr,0,3);
		EGB_writePage(guiEgbPtr,0);			/* mode3に書き込み */

		return 1;
	}
	if
	(
	    (DWORD( head +  0 ) == 0x30304456)	/* VD00 */
	 && (DWORD( head + 12 ) == 0x80008000)	/* dataの種類番号 */
	)
	{
		*frame = DWORD( head + 8 );	/* frame */
		*v00xd = DWORD( head + 16 );	/* 横 */
		*v00yd = DWORD( head + 20 );	/* 縦 */
		*wait = DWORD( head + 24 );	/* wait */
	}
	else
	{
		*v00xd = 128;			/* 横 */
		*v00yd = 96;			/* 縦 */
		*wait = 6;			/* 縦 */
		fseek( fp, 0, SEEK_SET );
	}

		/* フレームを表示 */

	int size ;
	char *buf, para[64] ;

	if( (buf = (char *)TL_malloc( 320*240*2 )) == NULL )
	{
		fclose(fp);

		EGB_displayPage(guiEgbPtr,0,3);
		EGB_writePage(guiEgbPtr,0);			/* mode3に書き込み */

		return 7;
	}
	if( (*v00xd) * (*v00yd) > 320*240 ){	/* 規格オーバー */
		fclose(fp);
		TL_free( buf );

		EGB_displayPage(guiEgbPtr,0,3);
		EGB_writePage(guiEgbPtr,0);			/* mode3に書き込み */

		return 58;
	}

	EGB_writePage(guiEgbPtr,1);
	EGB_displayStart(guiEgbPtr,1,0,0);
	EGB_displayStart(guiEgbPtr,2,2,2);
	EGB_displayStart(guiEgbPtr,3,0,0);
	EGB_displayStart(guiEgbPtr,0,(320 - (*v00xd))/2,(240 - (*v00yd))/2);
	EGB_displayStart(guiEgbPtr,3,*v00xd,*v00yd);

	DWORD(para+0) = (int)buf;
	WORD(para+4) = 0x14;
	WORD(para+6) = 0;
	WORD(para+8) = 0;
	WORD(para+10) = 0 + (*v00xd) - 1;
	WORD(para+12) = 0 + (*v00yd) - 1;
	size = (*v00xd) * (*v00yd) * 2;

	fseek( fp, size * skip, SEEK_CUR );

	if( fread( buf, size, 1, fp ) < 1 )
	{
		fclose(fp);
		TL_free( buf );

		EGB_displayPage(guiEgbPtr,0,3);
		EGB_writePage(guiEgbPtr,0);			/* mode3に書き込み */

		return 0;		/* frame 0枚ということもあり得る */
	}
	EGB_putBlock( guiEgbPtr, 0, para );

	EGB_displayPage(guiEgbPtr,0,3);
	EGB_writePage(guiEgbPtr,0);			/* mode3に書き込み */

	fclose(fp);
	TL_free( buf );
	return 0 ;
}

v00_head_read_only( name, frame, v00xd, v00yd, wait )
char *name;
int *frame, *v00xd, *v00yd, *wait ;
{
	FILE *fp;

	char head[256] ;

		/* データチェック */
	*frame = -1 ;
	if( ( fp = fopen( name, "rb" ) ) == NULL )
	{
		return 1;
	}
	if( fread( head, 256, 1, fp ) < 1 ){	/* ヘッダー */
		fclose(fp);
		return 1;
	}
	if
	(
	    (DWORD( head +  0 ) == 0x30304456)	/* VD00 */
	 && (DWORD( head + 12 ) == 0x80008000)	/* dataの種類番号 */
	)
	{
		*frame = DWORD( head + 8 );	/* frame */
		*v00xd = DWORD( head + 16 );	/* 横 */
		*v00yd = DWORD( head + 20 );	/* 縦 */
		*wait = DWORD( head + 24 );	/* wait */
	}
	else
	{
		*v00xd = 128;			/* 横 */
		*v00yd = 96;			/* 縦 */
		*wait = 6;			/* 縦 */
		fseek( fp, 0, SEEK_SET );
	}
	fclose(fp);
	return 0 ;
}
