/*
 *	getopt.h
 *
 *	オプション解析
 *
 *	* Sun Mar 10 19:53:04 JST 2013 Naoyuki Sawa
 *	- 1st リリース。
 *	- POSIX標準のgetopt()互換関数を実装しました。
 *	- GNU拡張のgetopt_long()とgetopt_long_only()は、宣言のみ行いました。
 *	  今回は、未実装です。今後、必要に応じて実装する予定です。
 *	- UNIXでは、getopt()は<unistd.h>,getopt_long()とgetopt_long_only()は<getopt.h>で宣言されています。
 *	  しかし、P/ECEとWindowsには<unistd.h>が無いので、今回はすべて<getopt.h>で宣言することにしました。
 *	- getopt()を、P/ECEのアプリケーションで使用することは、ほぼ無いと思います。
 *	  主に、Windows側のツールプログラムから使用する目的で、用意しました。
 *	* Wed Nov 18 21:37:53 JST 2015 Naoyuki Sawa
 *	- 'extern "C" {'〜'}'で囲みました。.cppを含むWin32プロジェクトからもインクルード出来るようにするためです。
 *	* Fri Nov 20 21:44:18 JST 2015 Naoyuki Sawa
 *	- GNU拡張の'オプション引数を取っても取らなくても良いオプション文字'に対応しました。
 *	* Tue Apr 11 21:34:28 JST 2017 Naoyuki Sawa
 *	- getopt_long()を実装しました。
 *	- getopt_long_only()は、今回も未実装のままです。
 */
#ifndef __GETOPT_H__
#define __GETOPT_H__

#ifdef  __cplusplus
extern "C" {
#endif//__cplusplus

/****************************************************************************
 *	グローバル変数
 ****************************************************************************/

extern char* optarg;
extern int   optind;
extern int   optopt;
extern int   opterr;
extern int   optreset;

/****************************************************************************
 *	グローバル関数
 ****************************************************************************/

int getopt(int argc, char* const argv[], const char* optstring);

struct option {
	const char* name;
	int         has_arg;
	int*        flag;
	int         val;
};
#define no_argument       0
#define required_argument 1
#define optional_argument 2
int getopt_long(int argc, char* const argv[], const char* optstring, const struct option* longopts, int* longindex);
int getopt_long_only(int argc, char* const argv[], const char* optstring, const struct option* longopts, int* longindex); /* 未実装 */

#ifdef  __cplusplus
}//extern "C"
#endif//__cplusplus

#endif/*__GETOPT_H__*/
