'自由に字詰め変更 / Ver. 0.83 / by Kabuneko 2000/02/12

proc main

if @hwnd = 0 then exit proc
dim i, j, k, l, m, n, o, p, r, f$, s$, jizume$[15]

'一時的にIMEをオフ・あとでもどす
i = imestatus
if i <> 2 then imemode 2

'現在のカーソル位置を保存
dim pos, line, top
pos = @BytePosCr
line = @ScrLineToCrLine(@Line)
top = @Line - @TopLine

'ここからダイアログの設定 ==============
'次行でダイアログの文字などのサイズを指定。フォント名のあとの数字で。
'100 は10ポイント、-10 なら10ドット、など。

dialog "字詰め・表示設定", 150, 100, 120, 120, 0, "MS Pゴシック", 100
control "◆ 全角文字数 × 頁行数", -1, "STATIC", SS_LEFT, 10, 6, 95, 8
control "×", -1, "STATIC", SS_LEFT, 55, 23, 20, 14
control "",100,"EDIT",ES_LEFT|ES_AUTOHSCROLL|ES_NUMBER|WS_BORDER|WS_TABSTOP, 20, 20, 30, 14
control "",101,"EDIT",ES_LEFT|ES_AUTOHSCROLL|ES_NUMBER|WS_BORDER|WS_TABSTOP, 70, 20, 30, 14
control "行番号を表示", 102, "BUTTON", BS_AUTOCHECKBOX | WS_GROUP | WS_TABSTOP, 15, 40, 95, 14
control "ページ区切りあり", 103, "BUTTON", BS_AUTOCHECKBOX | WS_GROUP | WS_TABSTOP, 15, 52, 95, 14
control "履歴", -1, "STATIC", SS_LEFT, 10, 75, 86, 8
control "", 104, "COMBOBOX", CBS_DROPDOWNLIST | WS_TABSTOP | WS_VSCROLL, 35, 72, 70, 70
control "OK",IDOK,"BUTTON",BS_DEFPUSHBUTTON|WS_TABSTOP,15,95,40,14
control "キャンセル",IDCANCEL,"BUTTON",BS_PUSHBUTTON|WS_TABSTOP,65,95,40,14

'現在の設定を取込んで表示 ==============

m = @Width / 2 + (@Width mod 2)
l = @PageLine
n = @PrintNumber
p = @PrintPage
dlgtext$ 100, cformat$("%d", m)
dlgtext$ 101, cformat$("%d", l)
dlgvalue 102, n
dlgvalue 103, p

'履歴ファイルの読込み ==================
'履歴は15まで保存し、古くなったものから捨てます。

f$ = @@QxDirectory$ + "\" + "l_jizume.txt"
if dir$(f$) <> "" then
    j = 1
    open f$ for input as #1
    do until eof(1)
        lineinput #1, s$
        jizume$[j++] = s$
        if j > 15 then exit do
    loop
    close #1
    dlglistboxarray 104, jizume$
end if

'ダイアログを表示 ======================

do while 1
    r = dialog(1 | DLGN_SELCHANGE)

    'OKボタンを押したときの動作
    if r = IDOK then

    '数値が適当なときだけ実行
    if val(dlgtext$(100)) > 9 and val(dlgtext$(100)) < 127 then
    if val(dlgtext$(101)) > 0 and val(dlgtext$(101)) < 999 then

        '設定を反映させる
        @Width = val(dlgtext$(100)) * 2
        @PageLine = val(dlgtext$(101))
        @PrintNumber = dlgvalue(102)
        @PrintPage = dlgvalue(103)

        'OKしたときの設定を保存
        s$ = dlgtext$(100) + "," + dlgtext$(101) + "," + \
            ltrim$(str$(dlgvalue(102))) + "," + ltrim$(str$(dlgvalue(103)))
        jizume$[0] = s$
        for j = 1 to 15
            if s$ = jizume$[j] then jizume$[j] = ""
        next
        open f$ for output as #1
        for j = 0 to 15
            s$ = jizume$[j]
            if s$ <> "" then print #1, s$
        next
        close #1
        exit do

    else
        call msgbox("1ページは999行までです。")
    end if
    else
        call msgbox("1行は全角10文字から127文字までです。")
    end if

    'キャンセルボタンを押したときの動作
    elseif r = IDCANCEL then
        exit do

    '履歴を選択したときの動作
    else
        s$ = dlgtext$(r)
        j = 1
        k = instr(j, s$, ",")
        dlgtext$ 100, mid$(s$, j, k-j)
        j = k+1: k = instr(j, s$, ",")
        dlgtext$ 101, mid$(s$, j, k-j)
        j = k+1: k = instr(j, s$, ",")
        dlgvalue 102, val(mid$(s$, j, k-j))
        j = k+1: k = len(s$)+1
        dlgvalue 103, val(mid$(s$, j, k-j))
    end if
loop
call dialog(0)  'ダイアログ表示を終了

'カーソル位置と IME 状態の復元
@Line = @CrLineToScrLine(line)
@ByteposCr = pos
@TopLine = @Line - top
imemode i
end proc