//
// Prefix header for all source files of the 'traceWrite' target in the 'traceWrite' project
//

#ifdef __OBJC__
    #import <Foundation/Foundation.h>
    #import <UIKit/UIKit.h>
#endif

// コンパイル設定
#define TRACEWRITER
//#define	UNDO_SCROLL	// UNDO時にスクロールするかどうか;現在は有効にしてもスクロールが正常動作しない

// ローカライズ識別子
// 本来ローカライズはOSが勝手にしてくれるはずだが、なぜだか上手くいかない時があるので、その強制ローカライズ時に使う識別子
// NSLocalStr(@"LOCAL")で読み取れる
#define	LOCAL_JAPAN		@"J"
#define	LOCAL_ENGLISH	@"E"

// 型名定義
typedef	unsigned	char	UByte;	// 符号無し８ビット
typedef	signed		char	SByte;	// 符号あり８ビット
typedef	unsigned	short	UWord;	// 符号無し16ビット
typedef	signed		short	SWord;	// 符号あり16ビット
typedef	unsigned	long	ULong;	// 符号無し32ビット
typedef	signed		long	SLong;	// 符号あり32ビット

//
#define	Static		// 内部メソッドであることを示す（ソース上の識別子であり、コンパイルされない）

// 型別サイズ
#define	SZ_BYTE		(sizeof(UByte))		// 符号ありも同じ大きさ
#define	SZ_WORD		(sizeof(UWord))
#define	SZ_LONG		(sizeof(ULong))
#define	SZ_LLONG	(sizeof(ULLong))
#define	SZ_VOIDP	(sizeof(void *))	// ポインタサイズ	64bitCPUの場合	4バイトかもしれないので要調査

// 超基本定数定義
#define	BIT0	0x00000001
#define	BIT1	(BIT0<<1)
#define	BIT2	(BIT0<<2)
#define	BIT3	(BIT0<<3)
#define	BIT4	(BIT0<<4)
#define	BIT5	(BIT0<<5)
#define	BIT6	(BIT0<<6)
#define	BIT7	(BIT0<<7)
#define	BIT8	(BIT0<<8)
#define	BIT9	(BIT0<<9)
#define	BIT10	(BIT0<<10)
#define	BIT11	(BIT0<<11)
#define	BIT12	(BIT0<<12)
#define	BIT13	(BIT0<<13)
#define	BIT14	(BIT0<<14)
#define	BIT15	(BIT0<<15)
#define	BIT16	(BIT0<<16)
#define	BIT17	(BIT0<<17)
#define	BIT18	(BIT0<<18)
#define	BIT19	(BIT0<<19)
#define	BIT20	(BIT0<<20)
#define	BIT21	(BIT0<<21)
#define	BIT22	(BIT0<<22)
#define	BIT23	(BIT0<<23)
#define	BIT24	(BIT0<<24)
#define	BIT25	(BIT0<<25)
#define	BIT26	(BIT0<<26)
#define	BIT27	(BIT0<<27)
#define	BIT28	(BIT0<<28)
#define	BIT29	(BIT0<<29)
#define	BIT30	(BIT0<<30)
#define	BIT31	(BIT0<<31)

// 文字定数
#define CRLF	@"\n"
#define	CR		@"\x0d"
#define	LF		@"\x0a"
#define	TAB		@"\t"
#define	SPC		@" "
#define ZSPC	@"　" // 全角スペース

// NSTimeIntervalでのなしの印
#define	None	(0.0)	// なし

#define	NSLocalStr(str)	NSLocalizedString(str,nil)

// エラー通知用辞書キー
#define	DIC_TITLE		@"title"
#define	DIC_MESSAGE		@"message"
#define	DIC_EXCEPTION	@"exception"

//
// ディレクトリ定義
#define	DIR_SYSTEM		@""					// システム内部
#define	DIR_DOCUMENTS	makeDocumentsPath()	// iTunesとのやり取り用;FileControl2.hが必要

// 代表的フォント名
#define	FONT_HIRAGINO_KAKU_GOTHIC_W3	@"HiraKakuProN-W3"
#define	FONT_HIRAGINO_KAKU_GOTHIC_W6	@"HiraKakuProN-W6"
#define	FONT_HITAGINO_MINCHO_W3			@"HiraMinProN-W3"
#define	FONT_HITAGINO_MINCHO_W6			@"HiraMinProN-W6"
#define FONT_HELVETICA					@"Helvetica"
#define	FONT_TIMES_NEW_ROMAN			@"Times New Roman"

#define	NSLocalStr(str)	NSLocalizedString(str,nil)
#define	rgbf(c)	((CGFloat)(c)/255.0)

// DEBUGのときのみnslog()等を有効にする定義
#if COMPILE_MODE==2 // Distributionの時は外す
	#define	printf(...)
	#define	nslog(...)
	#define	NSLog(...)
	#define	nslog2(...)
	#define	printSelfs(a,b)
	#define	printSelf()
	#define printFile()
	#define	printFunc()
	#define	printFuncs(a,b)
	#define printFunc2()
#else // Distribution以外
	// ここは必要に応じて変更しても良い
	#ifdef DEBUG
		#define	nslog		NSLog
		#define	nslog2		NSLog	// 常時表示用
		// 自身のクラス名とメソッド名を表示する関数;メソッド内でしか使えない(関数内では利用不可)
		// 継承されているときは、親クラスの名前が出てしまうので注意
		#define	printSelfs(a,b)	NSLog(@"%@:%@/" a,NSStringFromClass([self class]),NSStringFromSelector(_cmd),b)
		#define	printSelf()		NSLog(@"%@:%@",NSStringFromClass([self class]),NSStringFromSelector(_cmd))
		// なので、明確に実ファイルを表示する関数
		#define	printFile()		NSLog(@"%s(%d):%@",__FILE__,__LINE__,NSStringFromSelector(_cmd))
		#define	printFunc()		NSLog(@"%s",__FUNCTION__)
		#define	printFuncs(a,b)	NSLog(@"%s/" a,__FUNCTION__,b)
		#define printFunc2()	NSLog(@"%s.%s",__file__,__FUNCTION__)
	#else // Release
		#define	printf(...)
		#define	nslog(...)
		#define	nslog2		NSLog	// 常時表示用
		//#define	nslog2(...)
		#define	printSelfs(a,b)
		#define	printSelf()
		#define printFile()
		#define	printFunc()
		#define	printFuncs(a,b)
		#define printFunc2()
	#endif
#endif
