//----------------------------------------------------------------------------------------------
//
//  tConsole.h : テキスト描画用コンソール
//  X-BASIC'
//
//  Created by AIG-Soft(iMac) on 2012/09/11.
//  Copyright (c) 2012-15年 AIG-Soft. All rights reserved.
//

#import <UIKit/UIKit.h>
#import <QuartzCore/QuartzCore.h>
#import "libs.h"
#import "Console.h"
#import "soundPlay.h"

//----------------------------------------------------------------------------------------------

@interface tConsole : Console
{
	CGRect			area;
	// 表示制御（外部指定）
	int				atrb;			// ATRB_*
	// 内部制御
	SoundPlay 		*beepPlay;		// beep用
}

@property (nonatomic,strong) NSString *fontName;	// 現在のフォント名
@property (nonatomic,strong) UIFont	 *font;			// 現在のフォント	↑名前を変更したときはOBSERVE_*も変更すること
@property (nonatomic) rgba_color rgbaColor;			// 表示色
//@property (nonatomic) int	frotate;		// Consoleにもあるので削除;v3.00
@property (nonatomic) CGFloat tx;			// 現在カーソル座標x
@property (nonatomic) CGFloat ty;			// 現在カーソル座標y
@property (nonatomic) CGFloat fontWx;		// 1文字のx幅（グラフィック幅）；テキストモードでのみ有効		↓名前を変更したときはOBSERVE_*も変更すること
@property (nonatomic) CGFloat fontWy;		// 1文字のy幅（グラフィック幅）；テキストモードでのみ有効		〃
@property (nonatomic) CGFloat widthx;		// 0=グラフィックモード,MIN_WIDTH以上で２単位＝テキスト文字数	〃
@property (nonatomic) CGFloat widthy;		// 0=グラフィックモード,1単位								〃
@property (nonatomic) CGFloat pointSize;	// 現在のフォント大きさ
@property (nonatomic) CGFloat pointSize0;	// widthで計算フォント大きさ(pointSize<=0でも設定)
@property (nonatomic) BOOL	fzenhan;		// YES=全角=半角*2桁 , NO=全角／半角とも1桁
@property (nonatomic) BOOL	fUpScroll;		// YES=スクロールアップ有効 , NO=スクロールアップ禁止 (V2.0)
// V3.00
@property (nonatomic) CGFloat bfontWx;		// 直前のwidth()で設定された1文字のx幅
@property (nonatomic) CGFloat bfontWy;		// 直前のwidth()で設定された1文字のy幅
@property (nonatomic) BOOL fOlder;			// 旧互換表示
@property (nonatomic) BOOL fdescender;		// フォントのfdescenderを有効にするかどうか；旧互換表示ではOFF
// v3.20
@property (nonatomic,strong) NSString *baseCharacter;	// 幅計算基本文字


// 変更通知用プロトコル名
#define OBSERVE_FONT	@"font"
#define OBSERVE_FONTWX	@"fontWx"
#define OBSERVE_FONTWY	@"fontWy"
#define OBSERVE_WIDTHX	@"widthx"
#define OBSERVE_WIDTHY	@"widthy"

-(BOOL)isTextMode;
//
-(BOOL)print:(NSString *)str;
-(BOOL)locate:(CGFloat)x y:(CGFloat)y;
-(void)home;
-(void)cls;
-(void)atrb:(NSInteger)atrb_;
-(int)color:(int)r g:(int)g b:(int)b alpha:(int)alpha;
-(void)font:(NSString *)fontName_ pointSize:(CGFloat)pointSize2;
-(NSInteger)width:(NSInteger)wx wy:(NSInteger)wy;
-(void)tab:(int)cnt;
-(void)cursorMove:(NSInteger)direc cnt:(int)cnt;
-(BOOL)printCtrlCode:(unichar)code;
-(CGFloat)textX2Gx:(CGFloat)x;
-(CGFloat)textY2Gy:(CGFloat)y;
-(CGFloat)fontSize:(NSString *)message fontName:(NSString *)fontName1 pointSize:(CGFloat)pointSize1 fontWy:(CGFloat *)fontWy;

@end

//----------------------------------------------------------------------------------------------

#define MIN_WIDTH		8	// widthの最小値>=TABS
#define TDRAW_TAB_TABS	8	// TDRAW_TABのタブ桁数

enum { // <16bit : V2.1ではBIT対応による同時指定も可能にした
	ATRB_NORMAL		=0,
	ATRB_UNDERLINE	=BIT0,	// 下線
	ATRB_CANCEL		=BIT1,	// 取り消し線（1本）
	ATRB_CANCEL2	=BIT2,	// 取り消し線（2本）
	ATRB_REVERSE	=BIT3,	// 反転
	// これ以上は文字表示側で処理するのでBITが離れる
	ATRB_BOLD		=BIT8,	// 太字		V2.1
	ATRB_CENTERING	=BIT9,	// 中央寄せ 	V3.20	(テキスト座標モードのみ)
	// 斜字体はフォントの指定で設定すること
};
#define ATRB_CLEAR	BIT15	// 下クリア(グラフィック座標モードでのみ有効);getAtrb()で通るようにすること
#define getAtrb(at)							((at)&0x0000ffff)
#define getAtrbExceptBoldAndCentering(at)	((at)&0x000000ff)	// 太字/中央寄せ以外、と言うか通常の属性で処理される部分のみ取り出す
#define getGatrb(at)						((at)&0xffff0000)	// 現在未使用

enum {
	CURSOR_DIREC_UP		=0,
	CURSOR_DIREC_DOWN,
	CURSOR_DIREC_LEFT,
	CURSOR_DIREC_RIGHT,
	CURSOR_DIREC_UP_WITH_SCROLL,
	CURSOR_DIREC_DOWN_WITH_SCROLL,
};

enum { // 制御可能なコントロールコード
	// 0x00 = EOS
	DISP_CTRL_CLEARLINE		=0x05,	// v2.1 : 行末までクリア
	DISP_CTRL_BEEP			=0x07,
#if 0
	DISP_CTRL_BS			=0x08,	// BackSpace(予約)
	// BSは当面実装しない
	// (1)文字サイズは可変である
	// (2)テキスト画面上だけでは、1つ前の文字が全角かどうかが判断不能
#endif
	DISP_CTRL_TAB			=0x09,
	DISP_CTRL_LF			=0x0a,
	DISP_CTRL_HOME			=0x0b,
	DISP_CTRL_CLS			=0x0c,
	DISP_CTRL_CR			=0x0d,
	DISP_CTRL_RCR			=0x0e,	// v2.0 : 逆改行(スクロールダウン)
	DISP_CTRL_CLEAR_EOS		=0x1a,	// v2.2 : 画面終わりまで消す
	// 0x1b = ESCで予約
	DISP_CTRL_CURSOR_RIGHT	=0x1c,
	DISP_CTRL_CURSOR_LEFT,
	DISP_CTRL_CURSOR_UP,
	DISP_CTRL_CURSOR_DOWN,
};

//----------------------------------------------------------------------------------------------

