Shinya Kitaoka 810553
#pragma once
Toshihiro Shimizu 890ddd
Toshihiro Shimizu 890ddd
#ifndef __TSOUND_H__
Toshihiro Shimizu 890ddd
#define __TSOUND_H__
Toshihiro Shimizu 890ddd
Toshihiro Shimizu 890ddd
#include "tmacro.h"
Toshihiro Shimizu 890ddd
Toshihiro Shimizu 890ddd
#undef TNZAPI
Toshihiro Shimizu 890ddd
#ifdef TNZ_IS_AUDIOLIB
Toshihiro Shimizu 890ddd
#define TNZAPI TNZ_EXPORT_API
Toshihiro Shimizu 890ddd
#else
Toshihiro Shimizu 890ddd
#define TNZAPI TNZ_IMPORT_API
Toshihiro Shimizu 890ddd
#endif
Toshihiro Shimizu 890ddd
Toshihiro Shimizu 890ddd
/*----------------------------------------------------------------------- */
Toshihiro Shimizu 890ddd
Toshihiro Shimizu 890ddd
#ifndef TSAPI
Toshihiro Shimizu 890ddd
#define TSAPI extern
Toshihiro Shimizu 890ddd
#endif
Toshihiro Shimizu 890ddd
Toshihiro Shimizu 890ddd
typedef int TS_RESULT;
Toshihiro Shimizu 890ddd
Toshihiro Shimizu 890ddd
enum {
Shinya Kitaoka 120a6e
  TS_NOERROR = 0,
Shinya Kitaoka 120a6e
  TS_BADFILE,
Shinya Kitaoka 120a6e
  TS_BADFORMAT,
Shinya Kitaoka 120a6e
  TS_ENV,
Shinya Kitaoka 120a6e
  TS_NOT_ALLOCATED,
Shinya Kitaoka 120a6e
  TS_BADDEVICE,
Shinya Kitaoka 120a6e
  TS_DEVICEBUSY,
Shinya Kitaoka 120a6e
  TS_NODRIVER,
Shinya Kitaoka 120a6e
  TS_PLAYERROR,
Shinya Kitaoka 120a6e
  TS_RECERROR,
Shinya Kitaoka 120a6e
  TS_NODATA,
Shinya Kitaoka 120a6e
  TS_OK_PLAYSTOPPED,
Shinya Kitaoka 120a6e
  TS_OK_RECSTOPPED
Toshihiro Shimizu 890ddd
Toshihiro Shimizu 890ddd
};
Toshihiro Shimizu 890ddd
Toshihiro Shimizu 890ddd
typedef unsigned long DWORD;
Toshihiro Shimizu 890ddd
/*
Shinya Kitaoka 120a6e
        typedef unsigned char	BYTE;
Shinya Kitaoka 120a6e
        typedef int		BOOL;
Toshihiro Shimizu 890ddd
*/
Toshihiro Shimizu 890ddd
typedef unsigned char *PBYTE;
Toshihiro Shimizu 890ddd
Toshihiro Shimizu 890ddd
typedef const char *TS_STRING;
Toshihiro Shimizu 890ddd
Shinya Kitaoka 120a6e
/*-----------------------------------------------------------------------------
Shinya Kitaoka 120a6e
 */
Toshihiro Shimizu 890ddd
/* Sound data type */
Toshihiro Shimizu 890ddd
/* MEGACAMBIO!!!! AUDIOFRAME intero */
Toshihiro Shimizu 890ddd
Toshihiro Shimizu 890ddd
typedef int AUDIOFRAME; /* -inf , +inf */
Shinya Kitaoka 120a6e
typedef float TIME;     /* -inf , +inf */
Toshihiro Shimizu 890ddd
typedef DWORD SAMPLE;   /* 0    , +inf */
Toshihiro Shimizu 890ddd
typedef DWORD TS_SIZE;
Shinya Kitaoka 120a6e
typedef float HERTZ;    /* 0    , +inf */
Toshihiro Shimizu 890ddd
typedef float PRESSURE; /* -1.0 , +1.0 */
Toshihiro Shimizu 890ddd
typedef float AMPLIFICATION;
Toshihiro Shimizu 890ddd
typedef unsigned int VOLUME; /* 0    , 255  */
Toshihiro Shimizu 890ddd
Toshihiro Shimizu 890ddd
/* conversione: tempo -> frame */
Toshihiro Shimizu 890ddd
#define TS_CINEMA_FRAMEDURATION ((double)1 / 24)
Toshihiro Shimizu 890ddd
#define TS_PAL_FRAMEDURATION ((double)1 / 25)
Toshihiro Shimizu 890ddd
#define TS_NTSC_FRAMEDURATION ((double)1 / 30)
Toshihiro Shimizu 890ddd
Toshihiro Shimizu 890ddd
/*------------------- DIGITAL AUDIO --------------------*/
Toshihiro Shimizu 890ddd
Toshihiro Shimizu 890ddd
/* channels number */
Shinya Kitaoka 120a6e
typedef enum { TS_MONO = 1, TS_STEREO = 2 } TS_DIGITAL_CHANNELS;
Toshihiro Shimizu 890ddd
Toshihiro Shimizu 890ddd
/*
Toshihiro Shimizu 890ddd
 audio quality (sampling rate)
Toshihiro Shimizu 890ddd
 mu: HERTZ
Toshihiro Shimizu 890ddd
 */
Toshihiro Shimizu 890ddd
Toshihiro Shimizu 890ddd
typedef enum {
Shinya Kitaoka 120a6e
  TS_RATE_8000  = 8000,
Shinya Kitaoka 120a6e
  TS_RATE_11025 = 11025,
Shinya Kitaoka 120a6e
  TS_RATE_16000 = 16000,
Shinya Kitaoka 120a6e
  TS_RATE_22050 = 22050,
Shinya Kitaoka 120a6e
  TS_RATE_32000 = 32000,
Shinya Kitaoka 120a6e
  TS_RATE_44100 = 44100,
Shinya Kitaoka 120a6e
  TS_RATE_48000 = 48000
Toshihiro Shimizu 890ddd
} TS_DIGITAL_QUALITY;
Toshihiro Shimizu 890ddd
Toshihiro Shimizu 890ddd
#define TS_VOICE_QUALITY TS_RATE_8000
Toshihiro Shimizu 890ddd
#define TS_PHONE_QUALITY TS_RATE_11025
Toshihiro Shimizu 890ddd
#define TS_RADIO_QUALITY TS_RATE_22050
Toshihiro Shimizu 890ddd
#define TS_CD_QUALITY TS_RATE_44100
Toshihiro Shimizu 890ddd
Shinya Kitaoka 120a6e
/*
Toshihiro Shimizu 890ddd
 sample dimension
Toshihiro Shimizu 890ddd
 mu: BIT
Toshihiro Shimizu 890ddd
 */
Toshihiro Shimizu 890ddd
Toshihiro Shimizu 890ddd
typedef enum {
Shinya Kitaoka 120a6e
  TS_8BIT_SAMPLES  = 8,
Shinya Kitaoka 120a6e
  TS_16BIT_SAMPLES = 16,
Toshihiro Shimizu 890ddd
#ifndef WIN32
Shinya Kitaoka 120a6e
  TS_24BIT_SAMPLES = 24
Toshihiro Shimizu 890ddd
#else
Shinya Kitaoka 120a6e
  TS_24BIT_SAMPLES = 24
Toshihiro Shimizu 890ddd
#endif
Toshihiro Shimizu 890ddd
} TS_DIGITAL_SAMPLES;
Toshihiro Shimizu 890ddd
Toshihiro Shimizu 890ddd
/*
Toshihiro Shimizu 890ddd
 bit masks for dwMask
Toshihiro Shimizu 890ddd
*/
Toshihiro Shimizu 890ddd
enum {
Shinya Kitaoka 120a6e
  TS_MASK_DEFAULT  = 0, /* per usare param. di default */
Shinya Kitaoka 120a6e
  TS_MASK_ORIGIN   = (1 << 0),
Shinya Kitaoka 120a6e
  TS_MASK_DURATION = (1 << 1),
Shinya Kitaoka 120a6e
  TS_MASK_QUALITY  = (1 << 2),
Shinya Kitaoka 120a6e
  TS_MASK_CHANNEL  = (1 << 3),
Shinya Kitaoka 120a6e
  TS_MASK_SAMPLE   = (1 << 4),
Shinya Kitaoka 120a6e
  TS_MASK_FILENAME = (1 << 5),
Shinya Kitaoka 120a6e
  TS_MASK_ALL      = TS_MASK_ORIGIN | TS_MASK_DURATION | TS_MASK_QUALITY |
Shinya Kitaoka 120a6e
                TS_MASK_CHANNEL | TS_MASK_SAMPLE | TS_MASK_FILENAME,
Shinya Kitaoka 120a6e
  TS_MASK_CREATE = TS_MASK_QUALITY | TS_MASK_CHANNEL | TS_MASK_SAMPLE
Toshihiro Shimizu 890ddd
};
Toshihiro Shimizu 890ddd
Toshihiro Shimizu 890ddd
/*
Toshihiro Shimizu 890ddd
 internal time unit = SAMPLE
Toshihiro Shimizu 890ddd
 */
Toshihiro Shimizu 890ddd
typedef struct _TS_STRACK_INFO {
Shinya Kitaoka 120a6e
  TIME tmOrigin;
Shinya Kitaoka 120a6e
  TIME tmDuration;
Shinya Kitaoka 120a6e
  char *tmFilename;
Shinya Kitaoka 120a6e
  /* DIGITAL audio dependent part - low level*/
Shinya Kitaoka 120a6e
  TS_DIGITAL_CHANNELS dChannels;
Shinya Kitaoka 120a6e
  TS_DIGITAL_QUALITY dSamplingRate;
Shinya Kitaoka 120a6e
  TS_DIGITAL_SAMPLES dBitsPerSample;
Shinya Kitaoka 120a6e
  /* --- */
Shinya Kitaoka 120a6e
  DWORD dwMask;
Toshihiro Shimizu 890ddd
} * TS_STRACK_INFO;
Toshihiro Shimizu 890ddd
Toshihiro Shimizu 890ddd
typedef struct _TS_STRACK *TS_STRACK;
Toshihiro Shimizu 890ddd
Shinya Kitaoka 120a6e
/*
Shinya Kitaoka 120a6e
 I/O devices
Toshihiro Shimizu 890ddd
 */
Toshihiro Shimizu 890ddd
Toshihiro Shimizu 890ddd
typedef enum {
Shinya Kitaoka 120a6e
  TS_INPUT_LINE,
Shinya Kitaoka 120a6e
  TS_INPUT_MIC,
Shinya Kitaoka 120a6e
  TS_INPUT_DIGITAL,
Shinya Kitaoka 120a6e
  TS_INPUT_DUMMY /* per aprire in output */
Toshihiro Shimizu 890ddd
} TS_DEVTYPE;
Toshihiro Shimizu 890ddd
Shinya Kitaoka 120a6e
typedef enum { TS_UNIQUE = 0, TS_RIGHT, TS_LEFT } TS_CHAN;
Toshihiro Shimizu 890ddd
Toshihiro Shimizu 890ddd
/*
Toshihiro Shimizu 890ddd
typedef struct _TS_DEVICE_INFO {
Shinya Kitaoka 120a6e
        TS_DEVTYPE 	input_source;
Shinya Kitaoka 120a6e
        VOLUME 		input_volume;
Shinya Kitaoka 120a6e
        VOLUME 		output_volume;
Toshihiro Shimizu 890ddd
}*TS_DEVICE_INFO;
Toshihiro Shimizu 890ddd
*/
Toshihiro Shimizu 890ddd
Toshihiro Shimizu 890ddd
typedef struct _TS_DEVICE *TS_DEVICE;
Toshihiro Shimizu 890ddd
Toshihiro Shimizu 890ddd
/* ------------------------ FUNCTIONS ------------------------------*/
Toshihiro Shimizu 890ddd
/* N.B. Tutte le funzioni con from, to (src_from, src_to)
Toshihiro Shimizu 890ddd
 *	 prendono TUTTA la track se from==TS_BEGIN && to==TS_END
Toshihiro Shimizu 890ddd
 */
Toshihiro Shimizu 890ddd
Toshihiro Shimizu 890ddd
#define ALL -1 /* PROVVISORIO!!!!!*/
Toshihiro Shimizu 890ddd
#define TS_BEGIN MININT
Toshihiro Shimizu 890ddd
#define TS_END MAXINT
Toshihiro Shimizu 890ddd
Toshihiro Shimizu 890ddd
/*---------------------- Creation/Destruction ----------------------------*/
Toshihiro Shimizu 890ddd
Toshihiro Shimizu 890ddd
/* usa i campi di info dichiarati in dwFlagsi, per gli altri usa default */
Toshihiro Shimizu 890ddd
TNZAPI TSAPI TS_STRACK tsCreateStrack(TS_STRACK_INFO info);
Toshihiro Shimizu 890ddd
TNZAPI TSAPI TS_RESULT tsDestroyStrack(TS_STRACK strack);
Toshihiro Shimizu 890ddd
Toshihiro Shimizu 890ddd
/*---------------------- Conversion Functions -----------------------------*/
Shinya Kitaoka 120a6e
/*
Shinya Kitaoka 120a6e
        secs * tsFrameRate() => num.frames
Shinya Kitaoka 120a6e
        N.B.:Nessun controllo sui parametri passati (conv.indiscriminata)
Toshihiro Shimizu 890ddd
*/
Toshihiro Shimizu 890ddd
Toshihiro Shimizu 890ddd
TNZAPI TSAPI AUDIOFRAME tsTimeToFrame(TIME time);
Toshihiro Shimizu 890ddd
TNZAPI TSAPI TIME tsFrameToTime(AUDIOFRAME frames);
Toshihiro Shimizu 890ddd
TNZAPI TSAPI TIME tsFracFrameToTime(float frac_frames);
Toshihiro Shimizu 890ddd
TNZAPI TSAPI SAMPLE tsFrameToSample(AUDIOFRAME frames, TS_STRACK strack);
Toshihiro Shimizu 890ddd
TNZAPI TSAPI AUDIOFRAME tsSampleToFrame(SAMPLE samples, TS_STRACK strack);
Toshihiro Shimizu 890ddd
TNZAPI TSAPI AUDIOFRAME tsByteToFrame(TS_SIZE bytes, TS_STRACK strack);
Toshihiro Shimizu 890ddd
TNZAPI TSAPI TS_SIZE tsFrameToByte(AUDIOFRAME frames, TS_STRACK strack);
Toshihiro Shimizu 890ddd
TNZAPI TSAPI SAMPLE tsTimeToSample(TIME time, TS_STRACK strack);
Toshihiro Shimizu 890ddd
TNZAPI TSAPI TIME tsSampleToTime(SAMPLE samples, TS_STRACK strack);
Toshihiro Shimizu 890ddd
Toshihiro Shimizu 890ddd
TNZAPI TSAPI void tsAreyousure_to_quit(void);
Toshihiro Shimizu 890ddd
Toshihiro Shimizu 890ddd
/*--------------------------- File Functions ----------------------------*/
Toshihiro Shimizu 890ddd
Toshihiro Shimizu 890ddd
/* riempie tutti i campi della info */
Toshihiro Shimizu 890ddd
TNZAPI TSAPI TS_RESULT tsFileInfo(TS_STRING szFileName, TS_STRACK_INFO info);
Toshihiro Shimizu 890ddd
Toshihiro Shimizu 890ddd
TNZAPI TSAPI TS_STRACK tsLoad(TS_STRING szFileName, AUDIOFRAME from,
Shinya Kitaoka 120a6e
                              AUDIOFRAME to);
Toshihiro Shimizu 890ddd
Toshihiro Shimizu 890ddd
TNZAPI TSAPI TS_STRACK tsLoadSubsampled(TS_STRING szFileName,
Shinya Kitaoka 120a6e
                                        TS_STRACK_INFO desired_info,
Shinya Kitaoka 120a6e
                                        AUDIOFRAME from, AUDIOFRAME to);
Toshihiro Shimizu 890ddd
/* if from==ALL && to==ALL the whole track is loaded */
Toshihiro Shimizu 890ddd
/*
Shinya Kitaoka 120a6e
TNZAPI TSAPI TS_RESULT tsSave	( TS_STRACK strack, TS_STRING szFileName,
Toshihiro Shimizu 890ddd
                           AUDIOFRAME from, AUDIOFRAME to );
Toshihiro Shimizu 890ddd
*/
Toshihiro Shimizu 890ddd
TNZAPI TSAPI TS_RESULT tsSave(TS_STRACK strack, TS_STRING szFileName);
Toshihiro Shimizu 890ddd
Toshihiro Shimizu 890ddd
/*------------------------- Edit Functions --------------------------------*/
Toshihiro Shimizu 890ddd
Toshihiro Shimizu 890ddd
TNZAPI TSAPI void tsDelete(TS_STRACK strack, AUDIOFRAME from, AUDIOFRAME to);
Toshihiro Shimizu 890ddd
/* cuts a piece of DATA */
Toshihiro Shimizu 890ddd
TNZAPI TSAPI void tsClear(TS_STRACK strack, AUDIOFRAME from, AUDIOFRAME to);
Toshihiro Shimizu 890ddd
/* zeroes a piece of DATA */
Toshihiro Shimizu 890ddd
TNZAPI TSAPI void tsBlank(TS_STRACK strack, AUDIOFRAME point, AUDIOFRAME range);
Toshihiro Shimizu 890ddd
/* insert zeros into a track */
Toshihiro Shimizu 890ddd
Shinya Kitaoka 120a6e
TNZAPI TSAPI TS_RESULT tsCopy(TS_STRACK src_strack, AUDIOFRAME src_from,
Shinya Kitaoka 120a6e
                              AUDIOFRAME src_to, TS_STRACK dest_strack,
Shinya Kitaoka 120a6e
                              AUDIOFRAME dest_from);
Shinya Kitaoka 120a6e
TNZAPI TSAPI TS_RESULT tsInsert(TS_STRACK src_strack, AUDIOFRAME src_from,
Shinya Kitaoka 120a6e
                                AUDIOFRAME src_to, TS_STRACK dest_strack,
Shinya Kitaoka 120a6e
                                AUDIOFRAME dest_from);
Toshihiro Shimizu 890ddd
/* Insertion of data in an empty track : dest_strack->buffer = NULL */
Toshihiro Shimizu 890ddd
Toshihiro Shimizu 890ddd
/* ------------------------Manipolator Functions -------------------------*/
Toshihiro Shimizu 890ddd
Shinya Kitaoka 120a6e
TNZAPI TSAPI TS_RESULT tsConvert(TS_STRACK src_strack,
Shinya Kitaoka 120a6e
                                 TS_STRACK_INFO dest_info);
Toshihiro Shimizu 890ddd
TNZAPI TSAPI TS_RESULT tsAmplify(TS_STRACK strack, AMPLIFICATION amp);
Toshihiro Shimizu 890ddd
Toshihiro Shimizu 890ddd
/*----------------------- Miscellanea Functions ---------------------------*/
Toshihiro Shimizu 890ddd
Toshihiro Shimizu 890ddd
TNZAPI TSAPI AUDIOFRAME tsGetFrames(TS_STRACK strack);
Toshihiro Shimizu 890ddd
TNZAPI TSAPI PBYTE tsBuffer(TS_STRACK strack);
Toshihiro Shimizu 890ddd
/* riempie i campi di info richiesti in dwFlags */
Toshihiro Shimizu 890ddd
TNZAPI TSAPI TS_RESULT tsInfo(TS_STRACK strack, TS_STRACK_INFO info);
Toshihiro Shimizu 890ddd
TNZAPI TSAPI PRESSURE tsGetPressure(TS_STRACK strack, TIME time, TS_CHAN chan);
Toshihiro Shimizu 890ddd
TNZAPI TSAPI PRESSURE tsGetMaxPressure(TS_STRACK strack, TS_CHAN chan);
Toshihiro Shimizu 890ddd
TNZAPI TSAPI TS_STRING tsAudioFileExtension(void);
Toshihiro Shimizu 890ddd
Toshihiro Shimizu 890ddd
#ifndef WIN32
Toshihiro Shimizu 890ddd
TNZAPI TSAPI int tsSupportDigitalIn(void);
Toshihiro Shimizu 890ddd
#endif
Toshihiro Shimizu 890ddd
Toshihiro Shimizu 890ddd
/* only for tsNewPlay etc. */
Toshihiro Shimizu 890ddd
TNZAPI TSAPI TBOOL tsNeedsRefill(void);
Shinya Kitaoka 120a6e
TNZAPI TSAPI TBOOL
Shinya Kitaoka 120a6e
tsRefill(void); /* call at least 4 times per sec while playing, */
Shinya Kitaoka 120a6e
                /* TRUE means needs to be called again */
Toshihiro Shimizu 890ddd
Toshihiro Shimizu 890ddd
/*------------------------ Play/Rec Functions -----------------------------*/
Toshihiro Shimizu 890ddd
/* default asynch */
Shinya Kitaoka 120a6e
TNZAPI TSAPI TS_RESULT tsPlay(TS_STRACK strack, TS_DEVICE dev, AUDIOFRAME from,
Shinya Kitaoka 120a6e
                              AUDIOFRAME to);
Toshihiro Shimizu 890ddd
TNZAPI TSAPI TS_RESULT tsNewPlay(TS_STRACK strack, TS_DEVICE dev,
Shinya Kitaoka 120a6e
                                 AUDIOFRAME from, AUDIOFRAME to);
Toshihiro Shimizu 890ddd
TNZAPI TSAPI TS_RESULT tsPlayLoop(TS_STRACK strack, TS_DEVICE dev,
Shinya Kitaoka 120a6e
                                  AUDIOFRAME from, AUDIOFRAME to);
Toshihiro Shimizu 890ddd
TNZAPI TSAPI TBOOL tsIsPlaying(TS_STRACK strack, TS_DEVICE dev);
Toshihiro Shimizu 890ddd
TNZAPI TSAPI TBOOL tsIsNewPlaying(TS_STRACK strack, TS_DEVICE dev);
Toshihiro Shimizu 890ddd
TNZAPI TSAPI TS_RESULT tsSyncPlay(TS_STRACK strack, TS_DEVICE dev,
Shinya Kitaoka 120a6e
                                  AUDIOFRAME from, AUDIOFRAME to);
Toshihiro Shimizu 890ddd
TNZAPI TSAPI TS_RESULT tsStopPlaying(TS_STRACK strack, TS_DEVICE dev);
Toshihiro Shimizu 890ddd
TNZAPI TSAPI TS_RESULT tsStopNewPlaying(TS_STRACK strack, TS_DEVICE dev);
Toshihiro Shimizu 890ddd
Toshihiro Shimizu 890ddd
TNZAPI TSAPI TS_RESULT tsRecord(TS_STRACK strack, TS_DEVICE dev,
Shinya Kitaoka 120a6e
                                AUDIOFRAME from, AUDIOFRAME to);
Toshihiro Shimizu 890ddd
TNZAPI TSAPI TBOOL tsIsRecording(TS_STRACK strack, TS_DEVICE dev);
Toshihiro Shimizu 890ddd
TNZAPI TSAPI TS_RESULT tsSyncRecord(TS_STRACK strack, TS_DEVICE dev,
Shinya Kitaoka 120a6e
                                    AUDIOFRAME from, AUDIOFRAME to);
Toshihiro Shimizu 890ddd
TNZAPI TSAPI TS_RESULT tsStopRecording(TS_STRACK strack, TS_DEVICE dev);
Toshihiro Shimizu 890ddd
/* TSAPI void      tsSetEndPlayCb  (void(*end_play_cb)(void));*/
Toshihiro Shimizu 890ddd
Toshihiro Shimizu 890ddd
/*------------------------- Device Functions ------------------------------*/
Toshihiro Shimizu 890ddd
Toshihiro Shimizu 890ddd
/* dinfo==NIL => usato vol. di default e microfono per input */
Toshihiro Shimizu 890ddd
/* mode = "w" per Play; "r" per Record */
Toshihiro Shimizu 890ddd
Shinya Kitaoka 120a6e
TNZAPI TSAPI TS_DEVICE tsInitDevice(TS_DEVTYPE type, TS_STRACK_INFO info,
Shinya Kitaoka 120a6e
                                    char *mode);
Toshihiro Shimizu 890ddd
TNZAPI TSAPI TS_RESULT tsCloseDevice(TS_DEVICE dev);
Toshihiro Shimizu 890ddd
TNZAPI TSAPI TBOOL tsCheckOutput(void);
Toshihiro Shimizu 890ddd
TNZAPI TSAPI void tsSetVolume(TS_DEVICE dev, VOLUME vol);
Toshihiro Shimizu 890ddd
TNZAPI TSAPI void tsSetInVolume(TS_DEVICE dev, VOLUME vol);
Toshihiro Shimizu 890ddd
TNZAPI TSAPI VOLUME tsGetVolume(TS_DEVICE dev);
Toshihiro Shimizu 890ddd
Toshihiro Shimizu 890ddd
/*------------------------------------------------------------------------ */
Toshihiro Shimizu 890ddd
Toshihiro Shimizu 890ddd
#endif