/*
 *	dirent.h
 *
 *	POSIX準拠のディレクトリ制御ルーチン
 *
 *	CLiP - Common Library for P/ECE
 *	Copyright (C) 2001-2014 Naoyuki Sawa
 *
 *	* Wed Jan 26 00:13:38 JST 2011 Naoyuki Sawa
 *	- 1st リリース。
 *	- P/ECE開発環境、および、EPSONのS1C33開発環境には、POSIX準拠のdirent.hヘッダファイルが含まれていません。
 *	  P/ECE APIのpceFileFindOpen(),pceFileFindNext(),pceFileFindClose()を直接使えば充分なので、無くても困らないのですが、
 *	  Webや書籍のサンプルプログラム等をコンパイルする時に必要になる場合に備えて、用意しておくことにしました。
 *	  具体的には、「プログラミング言語Lua公式解説書」のサンプルプログラムをコンパイルするために用意しました。
 *	- P/ECEファイルシステムには、サブディレクトリが有りません。
 *	  opendir()関数の引数 dirname は無視し、常にルートディレクトリを開く実装としました。
 *	* Thu Jan 27 00:39:00 JST 2011 Naoyuki Sawa
 *	- rewinddir(),telldir(),seekdir()を追加しました。
 *	- scandir(),alphasort(),versionsort()の宣言だけを追加しました。未実装です。今後、必要になった際に、実装する予定です。
 *	* Sat Feb 05 01:53:09 JST 2011 Naoyuki Sawa
 *	- scandir(),alphasort()を実装しました。
 *	* Wed May 21 15:29:53 JST 2014 Naoyuki Sawa
 *	- Windows版のopendir(),readdir(),closedir()を実装しました。
 *	* Mon Aug 11 19:48:16 JST 2014 Naoyuki Sawa
 *	- versionsort(),strverscmp()を実装しました。
 */
#ifndef _DIRENT_H
#define _DIRENT_H

typedef struct __dirstream DIR;
struct dirent {
/* P/ECE版 */
#ifdef  PIECE
//	char d_name[FIELD_SIZEOF(FILEINFO,filename)];								//─┐2014/5/21現在は、clip.h,clipstd.hで、dirent.hをpiece.h,clipmisc.hより先にインクルードしている。
	char d_name[26/*MAXFILENAME*/+1];	/* P/ECE APIのFILEINFO構造体のfilenameフィールドを指す */	//←┘ここではまだ、FILEINFO,MAXFILENAME,FIELD_SIZEOFが使えないので、サイズを直接指定することにした。
#endif/*PIECE*/
/* Windows版 */
#ifdef  WIN32
//	char d_name[FIELD_SIZEOF(struct _finddata_t,name)];							//─┐2014/5/21現在は、clip.h,clipstd.hで、dirent.hをio.h,clipmisc.hより先にインクルードしている。
	char d_name[260/*_MAX_PATH*/];		/* _finddata_t構造体のnameフィールドを指す */			//←┘ここではまだ、_finddata_t,_MAX_PATH,FIELD_SIZEOFが使えないので、サイズを直接指定することにした。
#endif/*WIN32*/
};

/* P/ECE版,Windows版共に実装済み(個別) */
DIR* opendir(const char* dirname);
struct dirent* readdir(DIR* dirp);
int closedir(DIR* dirp);

/* P/ECE版は実装済み,Windows版は未実装 */
void rewinddir(DIR* dirp);
long telldir(DIR* dirp);
void seekdir(DIR* dirp, long offset);

/* P/ECE版,Windows版共に実装済み(共通) */
int scandir(const char* dirname, struct dirent*** namelist, int (*filter)(const struct dirent*), int (*compar)(const void* /* struct dirent** */, const void* /* struct dirent** */));
int alphasort(const void* /* const struct dirent** */ a, const void* /* const struct dirent** */ b);
int versionsort(const void* /* const struct dirent** */ a, const void* /* const struct dirent** */ b);

#endif/*_DIRENT_H*/
