//------------------------------------------------------------
// $Id: mpi2dataToken.h,v 1.2.2.1 2000/06/14 15:00:11 yamauchi Exp $
//------------------------------------------------------------
// 	mpi2dataToken.h
//	MGF intermediate file 
//	MGF like な中間ファイルの token 等の定義
//	1996/3/26
//	(C) Copyright Hitoshi YAMAUCHI
//	refer readfile.doc
//------------------------------------------------------------
#ifndef _mpi2dataToken_h
#define _mpi2dataToken_h 1

// 最大の token 数
#define MAX_MPI2_ARGNUM 17

enum first_token_e {
    // geometries
    TRIANGLE_POLY_tkn, // f object_num v1 v2 v3 s1 s2 s3
    TRIANGLE_POLY_WITH_RADIO_tkn, // F object_num v1 v2 v3 s1 s2 s3 col
    SPHERE_tkn,			  // sph object_num 中心 半径
    CYLINDER_tkn,		  // cyl object_num 中心1 中心2 半径
    CONE_tkn,		// cone object_num 中心1 半径1 中心2 半径2
    RING_tkn,		// ring object_num 中心 法線ベクトル 内半径 外半径
    TORUS_tkn,		// torus object_num 中心 法線ベクトル 内半径 外半径

    // colors
    MATERIAL_NAME_tkn,  // m name		   # material name
    DIFF_REF_tkn,	// rd name r g b           # diffuse refrectance
    DIFF_TRANS_tkn,	// td name r g b           # diffuse transmittance
    DIFF_EMIT_tkn,	// ed name r g b           # diffuse emmitance 
    SPEC_REF_tkn,	// rs name n r g b         # specular reflectance 
    SPEC_TRANS_tkn,	// ts name n r g b         # specular transmittance
    INDEX_REF_tkn,	// ir name val             # index of refraction 
    IES_tkn,		// ies name ???
    FRUSTUM_HALFTOPRAD_tkn,
    // comment
    COMMENT_tkn,	   // #

    // misc
    EOF_tkn,			// 
    FIRST_TOKEN_ELSE_tkn, 	// 
    ERROR_tkn			// エラー :xlC のおかげで ,を外さなくてはならん
};

struct first_token_table_st {
    const char 		*name;
    enum  first_token_e	 tokenID;
    int   numberOfToken;	// いくつの token から成る行か (-1 == any)
};


//------------------------------------------------------------
// この配列は前から検索されるので前の方に頻度の高い物を置いた
//   token の table
//------------------------------------------------------------
const struct first_token_table_st FirstToken[] = {
// 物体情報 
{ "f",		TRIANGLE_POLY_tkn, 	 	14,	},
{ "F",		TRIANGLE_POLY_WITH_RADIO_tkn, 	17,	},
{ "sph",	SPHERE_tkn,	  		 9,	},
{ "cyl",	CYLINDER_tkn,	  	  	 9,	},
{ "cone",	CONE_tkn,		 	10,	},
{ "ring",	RING_tkn,		 	10,	},
{ "torus",	TORUS_tkn,		 	10,	},
// material 情報
{ "m",		MATERIAL_NAME_tkn,	  	 2,	},
{ "rd",		DIFF_REF_tkn,	  	  	 5,	},
{ "td",		DIFF_TRANS_tkn,	  	  	 5,	},
{ "ed",		DIFF_EMIT_tkn,	  	  	 5,	},
{ "rs", 	SPEC_REF_tkn,	  	  	 6,	},
{ "ts", 	SPEC_TRANS_tkn,	  	  	 6,	},
{ "ir", 	INDEX_REF_tkn,	  	  	 3,	},
{ "ies",	IES_tkn,		 	-1,	}, // 詳細不明
{ "fhtr",	FRUSTUM_HALFTOPRAD_tkn,		 3,	},
// コメント
{ "#",		COMMENT_tkn,	 	 	-1,	},
{ NULL,		FIRST_TOKEN_ELSE_tkn,	 	-1,	},
};


#endif				// #ifndef _mpi2dataToken_h
