*exwindow
numalias EXWINDOW_FONTSIZE_TINY,14   ; tiny指定時のフォントサイズ
numalias EXWINDOW_FONTSIZE_SMALL,20  ; small指定時のフォントサイズ
numalias EXWINDOW_FONTSIZE_MEDIUM,26 ; medium指定時のフォントサイズ
numalias EXWINDOW_FONTSIZE_LARGE,32  ; large指定時のフォントサイズ
numalias EXWINDOW_FONTSIZE_HUGE,38   ; huge指定時のフォントサイズ

numalias exwindow_arg_begin,100 ; 使用する変数の開始番号。終了はexwindow_arg_end

defsub textspeed
defsub exwindowdefault
defsub setexwindow
defsub registerwindowrect
defsub registerlocation
defsub registertextinfo
defsub registerwindowfile
defsub fontsize
defsub fontsize2
defsub getmaxlength

numalias tiny,-1
numalias small,-2
numalias medium,-3
numalias large,-4
numalias huge,-5

mov %0,exwindow_arg_begin ; 変数番号
numalias exwindow_locate_x,%0:inc %0
numalias exwindow_locate_y,%0:inc %0
numalias exwindow_length_x,%0:inc %0
numalias exwindow_length_y,%0:inc %0
numalias exwindow_fontsize,%0:inc %0
numalias exwindow_span_x,%0:inc %0
numalias exwindow_span_y,%0:inc %0
numalias exwindow_textspeed,%0:inc %0
numalias exwindow_bold,%0:inc %0
numalias exwindow_shadow,%0:inc %0
numalias exwindow_image,%0:inc %0
numalias exwindow_window_x,%0:inc %0
numalias exwindow_window_y,%0:inc %0
numalias exwindow_window_w,%0:inc %0
numalias exwindow_window_h,%0:inc %0
numalias exwindow_result_x,%0:inc %0
numalias exwindow_result_y,%0:inc %0
numalias exwindow_text_w,%0:inc %0
numalias exwindow_text_h,%0:inc %0
numalias exwindow_arg_end,%0-1 ; 最後の番号
return


; USAGE: textspeed テキスト速度
; FUNC:  textspeed上書き命令。
; NOTE:  追随用。setwindow、textspeeddefault、!sを呼ぶと追随できない。
*textspeed
getparam %exwindow_textspeed
_textspeed %exwindow_textspeed
return


; USAGE: exwindowdefault
; FUNC:  デフォルト値の登録。
; NOTE:  setwindowをカスタマイズする場合は呼び出し不要。
*exwindowdefault
; setwindow 8,16,23,16,26,26,0,2,20,1,1,#999999,0,0,639,479 
registerlocation 8,16
registertextinfo 20,1,1
registerwindowfile ""
registerwindowrect 0,0,639+1,479+1
return


; USAGE: setexwindow <setwindowの画像指定時と同一>
; FUNC:  テキストウィンドウの指定。
; NOTE:  画像指定でsetwindowを呼ぶ。こちらを呼ぶならregisterwindowrectだけでよい。
*setexwindow
getparam %exwindow_locate_x,%exwindow_locate_y,%exwindow_length_x,%exwindow_length_y,%exwindow_fontsize,%exwindow_fontsize,%exwindow_span_x,%exwindow_span_y,%exwindow_textspeed,%exwindow_bold,%exwindow_shadow,$exwindow_image,%exwindow_window_x,%exwindow_window_y
_setwindow %exwindow_locate_x,%exwindow_locate_y,%exwindow_length_x,%exwindow_length_y,%exwindow_fontsize,%exwindow_fontsize,%exwindow_span_x,%exwindow_span_y,%exwindow_textspeed,%exwindow_bold,%exwindow_shadow,$exwindow_image,%exwindow_window_x,%exwindow_window_y
return


; USAGE: registerwindowrect ウィンドウX,Y,W,H
; FUNC:  ウィンドウ領域の登録。
; NOTE:  ウィンドウサイズがデフォルトと異なる場合は、fontsize実行前に呼ぶこと。
*registerwindowrect
getparam %exwindow_window_x,%exwindow_window_y,%exwindow_window_w,%exwindow_window_h
return


; USAGE: registerlocation テキスト表示位置X,Y
; FUNC:  テキスト表示位置の登録。
; NOTE:  テキスト表示位置がデフォルトと異なる場合は、fontsize実行前に呼ぶこと。
*registerlocation
getparam %exwindow_locate_x,%exwindow_locate_y
return


; USAGE: registertextinfo テキスト速度,太字,影
; FUNC:  テキスト情報の登録。
; NOTE:  テキスト情報がデフォルトと異なる場合は、fontsize実行前に呼ぶこと。
*registertextinfo
getparam %exwindow_textspeed,%exwindow_bold,%exwindow_shadow
return


; USAGE: registerwindowfile ウィンドウファイル
; FUNC:  テキストウィンドウファイルの登録。
; NOTE:  テキストウィンドウファイルがデフォルトと異なる場合は、fontsize実行前に呼ぶこと。
*registerwindowfile
getparam $exwindow_image
return


; USAGE: fontsize フォントサイズ|tiny|small|medium|large|huge
; FUNC:  フォントサイズを変更する。
; NOTE:  縦、横の文字数は自動で算出される。画像指定、縦横等幅文字のみ対応。
*fontsize
getparam %exwindow_fontsize
if %exwindow_fontsize=tiny mov %exwindow_fontsize,EXWINDOW_FONTSIZE_TINY
if %exwindow_fontsize=small mov %exwindow_fontsize,EXWINDOW_FONTSIZE_SMALL
if %exwindow_fontsize=medium mov %exwindow_fontsize,EXWINDOW_FONTSIZE_MEDIUM
if %exwindow_fontsize=large mov %exwindow_fontsize,EXWINDOW_FONTSIZE_LARGE
if %exwindow_fontsize=huge mov %exwindow_fontsize,EXWINDOW_FONTSIZE_HUGE
if %exwindow_fontsize<=0 return ; 不正なフォントサイズ指定
mov %exwindow_text_w,%exwindow_window_w - 2*(%exwindow_locate_x - %exwindow_window_x)
mov %exwindow_text_h,%exwindow_window_h - 2*(%exwindow_locate_y - %exwindow_window_y)
mov %exwindow_length_x,%exwindow_text_w / %exwindow_fontsize
mov %exwindow_length_y,%exwindow_text_h / %exwindow_fontsize
if %exwindow_length_x<=0 return ; 不正な領域指定
if %exwindow_length_y<=0 return ; 不正な領域指定
; 文字間隔=(テキスト表示幅-(文字数*文字幅))/(文字数-1)
mov %exwindow_span_x,0
mov %exwindow_span_y,0
if %exwindow_length_x>1 mov %exwindow_span_x,(%exwindow_text_w - (%exwindow_length_x * %exwindow_fontsize)) / (%exwindow_length_x - 1)
if %exwindow_length_y>1 mov %exwindow_span_y,(%exwindow_text_h - (%exwindow_length_y * %exwindow_fontsize)) / (%exwindow_length_y - 1)
if $exwindow_image="" setwindow3 %exwindow_locate_x,%exwindow_locate_y,%exwindow_length_x,%exwindow_length_y,%exwindow_fontsize,%exwindow_fontsize,%exwindow_span_x,%exwindow_span_y,%exwindow_textspeed,%exwindow_bold,%exwindow_shadow,#999999,%exwindow_window_x,%exwindow_window_y,%exwindow_window_x+%exwindow_window_w-1,%exwindow_window_y+%exwindow_window_h-1:return
setwindow3 %exwindow_locate_x,%exwindow_locate_y,%exwindow_length_x,%exwindow_length_y,%exwindow_fontsize,%exwindow_fontsize,%exwindow_span_x,%exwindow_span_y,%exwindow_textspeed,%exwindow_bold,%exwindow_shadow,$exwindow_image,%exwindow_window_x,%exwindow_window_y
return


; USAGE: fontsize2 フォントサイズ|tiny|small|medium|large|huge,文字間隔X,Y
; FUNC:  文字間隔固定でフォントサイズを変更する。
; NOTE:  縦、横の文字数は自動で算出される。画像指定、縦横等幅文字のみ対応。
*fontsize2
getparam %exwindow_fontsize,%exwindow_span_x,%exwindow_span_y
if %exwindow_fontsize=tiny mov %exwindow_fontsize,EXWINDOW_FONTSIZE_TINY
if %exwindow_fontsize=small mov %exwindow_fontsize,EXWINDOW_FONTSIZE_SMALL
if %exwindow_fontsize=medium mov %exwindow_fontsize,EXWINDOW_FONTSIZE_MEDIUM
if %exwindow_fontsize=large mov %exwindow_fontsize,EXWINDOW_FONTSIZE_LARGE
if %exwindow_fontsize=huge mov %exwindow_fontsize,EXWINDOW_FONTSIZE_HUGE
if %exwindow_fontsize<=0 return ; 不正なフォントサイズ指定
mov %exwindow_text_w,%exwindow_window_w - 2*(%exwindow_locate_x - %exwindow_window_x)
mov %exwindow_text_h,%exwindow_window_h - 2*(%exwindow_locate_y - %exwindow_window_y)
; 文字数=(テキスト表示幅+文字間隔)/(文字数+文字間隔)
mov %exwindow_length_x,(%exwindow_text_w + %exwindow_span_x) / (%exwindow_fontsize + %exwindow_span_x)
mov %exwindow_length_y,(%exwindow_text_h + %exwindow_span_y) / (%exwindow_fontsize + %exwindow_span_y)
if %exwindow_length_x<=0 return ; 不正な領域指定
if %exwindow_length_y<=0 return ; 不正な領域指定
if $exwindow_image="" setwindow3 %exwindow_locate_x,%exwindow_locate_y,%exwindow_length_x,%exwindow_length_y,%exwindow_fontsize,%exwindow_fontsize,%exwindow_span_x,%exwindow_span_y,%exwindow_textspeed,%exwindow_bold,%exwindow_shadow,#999999,%exwindow_window_x,%exwindow_window_y,%exwindow_window_x+%exwindow_window_w-1,%exwindow_window_y+%exwindow_window_h-1:return
setwindow3 %exwindow_locate_x,%exwindow_locate_y,%exwindow_length_x,%exwindow_length_y,%exwindow_fontsize,%exwindow_fontsize,%exwindow_span_x,%exwindow_span_y,%exwindow_textspeed,%exwindow_bold,%exwindow_shadow,$exwindow_image,%exwindow_window_x,%exwindow_window_y
return


; USAGE: getmaxlength %文字数X,%文字数Y
; FUNC:  自動調整後の文字数を取得する。
; NOTE:  setwindowと同様、全角換算。
*getmaxlength
getparam i%exwindow_result_x,i%exwindow_result_y
mov %%exwindow_result_x,%exwindow_length_x
mov %%exwindow_result_y,%exwindow_length_y
return