15000 '<<<<<<<<<<<<<<<<<<<<  Visual Interface Library  >>>>>>>>>>>>>>>>>>>>
15002 '<<<<<<<<<<<<<<<<<<<<       　Ｖ　Ｉ　Ｌ　       >>>>>>>>>>>>>>>>>>>>
15004 '<<<<<<<<<<<< ウィンドウマネージャ・パッケージ・ファイル >>>>>>>>>>>>
15006 '
15008 '--------------------  バージョンチェック　--------------------
15010 '
15012 *VIL_VWM_VER
15014 VIL_VER%=310                                  'ＶＩＬ VER3.10
15016 RETURN
15018 '
15020 '--------------------  ウィンドウマネージャ・パッケージ　-----------
15022 '必要パッケージ : ウィンドウ、メニュー選択、スクロールバー
15024 '・ウィンドウ・オープン / クローズ処理代替
15026 '・外枠付属のスクロールバー管理
15028 '・ウィンドウ外枠・スイッチ等の描画
15030 '・ウィンドウ移動・サイズ変更・スタック順序変更（現在未サポート）
15032 '・マウスカーソル資源の定義
15034 '
15036 *VIL_VWM_INITM
15038 '　ウィンドウマネージャ・パッケージ初期化
15040 '
15042 '入力変数         : W0%           : 最大ウィンドウ通し番号
15044 '                   W1%           : ウィンドウ背景色用パレット番号
15046 '                   W2%           : ウィンドウ枠幅パターン数
15048 '                                   （0でシステム予約分だけ確保）
15050 '破壊変数         : I%            : ループ用
15052 '出力変数         : なし
15054 '呼出しモジュール : VWM_MCR
15056 '使用環境 :・ページ０が１６色グラフィック画面
15058 '　　　　　・マウス表示ページ０
15060 '　　　　　・マウス移動範囲　(0,0)-(639,479)
15062 '          ・ウィンドウ・サイズ : 最小60x8 / 最大624x456
15064 IF VIL_E%=0 THEN
15066 'パッケージ変数
15068 '   アクティブウィンドウ属性
15070 '                                (有効な属性の和を指定)
15072 '             1 : MENU        メニュースイッチ表示
15074 '             2 : CLOSE       クローズ可能（スイッチ表示）
15076 '             4 : HIDE        一時消去可能（スイッチ表示）
15078 '             8 : MOVE        移動可能
15080 '            16 : RESIZE      サイズ変更可能（スイッチ表示）
15082 '            32 : LOWER       そのウィンドウを他のウィンドウの下に
15084 '                             することを許す?
15086 '                             （現バージョンでは未サポート）
15088 '       64-2048 : RESERVE     現バージョンでは未使用
15090 '          4096 : XSCRLBAR    横方向スクロールバー
15092 '          8192 : YSCRLBAR    縦方向スクロールバー
15094 '         16384 : NOFRAME     ウィンドウ枠無
15096 '   アクティブウィンドウ・タイトル
15098   VIL_VWM_AT%=  0:VIL_VWM_T$=""
15100 '   VWM_AT%,WIN_PM% 保存
15102   VIL_VWM_ATB%= 0:VIL_VWM_PMB%= 0
15104 '   座標ワーク
15106 '   移動/リサイズ時左上隅座標最小値・右下隅座標最大値
15108 '   (枠の端が到達しうる座標))
15110   VIL_VWM_WX%=  0:VIL_VWM_WY% = 0
15112   VIL_VWM_XM%=  0:VIL_VWM_YM%=  0:VIL_VWM_WM%=639:VIL_VWM_ZM%=479
15114 '   リサイズ時のＸ・Ｙ方向長さ最小値・最大値
15116 '   (枠幅は長さに含まない)
15118 '  VIL_VWM_XL%= 32:VIL_VWM_YL%=  8:VIL_VWM_WL%=624:VIL_VWM_ZL%=458
15120   VIL_VWM_XL%= 60:VIL_VWM_YL%=  8:VIL_VWM_WL%=624:VIL_VWM_ZL%=456
15122 '   移動時の単位ドット数,リサイズ時の単位ドット数
15124   VIL_VWM_XD%=  1:VIL_VWM_YD%=  1:VIL_VWM_WD%=  1:VIL_VWM_ZD%=  1
15126 '   スクロールバー論理長,インジケータ論理長,インジケータ論理位置
15128   VIL_VWM_XLBL%=0:VIL_VWM_XLIL%=0:VIL_VWM_XLIP%=0
15130   VIL_VWM_YLBL%=0:VIL_VWM_YLIL%=0:VIL_VWM_YLIP%=0
15132 '   ウィンドウ通し番号 (０のとき無効),ウィンドウマネージャ処理結果
15134   VIL_VWM_N%=0:VIL_VWM_R%=0
15136 '   最大ウィンドウ通し番号,ウィンドウ背景色用パレット番号
15138   VIL_VWM_NMAX%=VIL_W0%:VIL_VWM_CB%=VIL_W1%
15140 '   通し番号でのウィンドウ位置保存
15142   DIM VIL_VWM_X%(VIL_W0%),VIL_VWM_Y%(VIL_W0%),                                     VIL_VWM_W%(VIL_W0%),VIL_VWM_Z%(VIL_W0%)
15144 '   ウィンドウ属性,ウィンドウタイトル
15146 '   ウィンドウ通し番号保存,ウィンドウ枠幅パターン番号
15148   DIM VIL_VWM_AT%(VIL_WIN_ANMAX%),VIL_VWM_T$(VIL_WIN_ANMAX%),                      VIL_VWM_N%(VIL_WIN_ANMAX%) ,VIL_VWM_FW%(VIL_WIN_ANMAX%)
15150 '     枠・背景色の（G,R,B）輝度
15152   DIM VIL_VWM_CF%(2),VIL_VWM_CB%(2)
15154   IF VIL_W2%=0 THEN VIL_W2%=5
15156   DIM VIL_VWM_UB%(VIL_W2%),VIL_VWM_DB%(VIL_W2%),                                   VIL_VWM_RB%(VIL_W2%),VIL_VWM_LB%(VIL_W2%)
15158   RESTORE *VIL_VWM_INITM_D0
15160   FOR VIL_I%=1 TO 5:READ VIL_VWM_UB%(VIL_I%),VIL_VWM_DB%(VIL_I%),                                     VIL_VWM_RB%(VIL_I%),VIL_VWM_LB%(VIL_I%):            NEXT
15162 *VIL_VWM_INITM_D0
15164   DATA  0, 0, 0, 0  ' 1 枠無
15166   DATA 16, 8, 8, 8  ' 2 通常枠
15168   DATA 16,16, 8, 8  ' 3 Ｘスクロールバー
15170   DATA 16, 8,16, 8  ' 4 Ｙスクロールバー
15172   DATA 16,16,16, 8  ' 5 ＸＹスクロールバー
15174 '
15176 '   CNF読み込み
15178   VIL_W0$="":WHILE VIL_W0$<>"#VWM":GOSUB *VIL_LNR:WEND
15180 '       標準マウスカーソル
15182   GOSUB *VIL_VWM_MCR:                                                          VIL_VWM_MCX0%=VIL_VWM_MCX%:VIL_VWM_MCY0%=VIL_VWM_MCY%:                       VIL_VWM_MCA0$=VIL_VWM_MCA$:VIL_VWM_MCD0$=VIL_VWM_MCD$
15184 '       ウィンドウ移動用マウスカーソル
15186   GOSUB *VIL_VWM_MCR:                                                          VIL_VWM_MCX1%=VIL_VWM_MCX%:VIL_VWM_MCY1%=VIL_VWM_MCY%:                       VIL_VWM_MCA1$=VIL_VWM_MCA$:VIL_VWM_MCD1$=VIL_VWM_MCD$
15188 '       ウィンドウサイズ変更用マウスカーソル
15190   GOSUB *VIL_VWM_MCR:                                                          VIL_VWM_MCX2%=VIL_VWM_MCX%:VIL_VWM_MCY2%=VIL_VWM_MCY%:                       VIL_VWM_MCA2$=VIL_VWM_MCA$:VIL_VWM_MCD2$=VIL_VWM_MCD$
15192 '
15194   MOUSE 2,VIL_VWM_MCA0$,VIL_VWM_MCD0$,VIL_VWM_MCX0%,VIL_VWM_MCY0%
15196 ENDIF
15198 RETURN
15200 '
15202 *VIL_VWM_ENVR
15204 '　アプリ環境ファイル読み込み
15206 '
15208 '入力変数         : なし
15210 '破壊変数         : I%            : ループ用
15212 '出力変数         : VWM_CF%()     : 枠の（G,R,B）輝度
15214 '                   VWM_CB%()     : 背景色の（G,R,B）輝度
15216 '                   VWM_X%(),     : ウィンドウ位置保存
15218 '                   VWM_Y%(),
15220 '                   VWM_W%(),
15222 '                   VWM_Z%()
15224 '呼出しモジュール : LNR
15226 '
15228 VIL_W0$="":WHILE VIL_W0$<>"#VWM":GOSUB *VIL_LNR:WEND
15230 '     枠の（G,R,B）輝度読み込み
15232 GOSUB *VIL_LNR
15234 FOR VIL_I%=0 TO 2
15236   VIL_VWM_CF%(VIL_I%)=VAL(VIL_W0$):                                            VIL_W0$=MID$(VIL_W0$,INSTR(VIL_W0$,",")+1)
15238 NEXT
15240 '     背景色の（G,R,B）輝度読み込み
15242 GOSUB *VIL_LNR
15244 FOR VIL_I%=0 TO 2
15246   VIL_VWM_CB%(VIL_I%)=VAL(VIL_W0$):                                            VIL_W0$=MID$(VIL_W0$,INSTR(VIL_W0$,",")+1)
15248 NEXT
15250 '     ウィンドウ位置読み込み
15252 FOR VIL_I%=1 TO VIL_VWM_NMAX%
15254   GOSUB *VIL_LNR
15256   VIL_VWM_X%(VIL_I%)=VAL(VIL_W0$):                                             VIL_W0$=MID$(VIL_W0$,INSTR(VIL_W0$,",")+1)
15258   VIL_VWM_Y%(VIL_I%)=VAL(VIL_W0$):                                             VIL_W0$=MID$(VIL_W0$,INSTR(VIL_W0$,",")+1)
15260   VIL_VWM_W%(VIL_I%)=VAL(VIL_W0$):                                             VIL_W0$=MID$(VIL_W0$,INSTR(VIL_W0$,",")+1)
15262   VIL_VWM_Z%(VIL_I%)=VAL(VIL_W0$)
15264 NEXT
15266 GOSUB *VIL_VWM_PALSET
15268 RETURN
15270 '
15272 *VIL_VWM_ENVW
15274 '　アプリ環境ファイル書き込み
15276 '
15278 '入力変数         : なし
15280 '破壊変数         : なし
15282 '出力変数         : なし
15284 '呼出しモジュール : なし
15286 '
15288 PRINT #1,"#VWM"
15290 '     枠の（G,R,B）輝度書き込み
15292 PRINT #1,USING "###,###,###";                                                VIL_VWM_CF%(0),VIL_VWM_CF%(1),VIL_VWM_CF%(2)
15294 '     背景色の（G,R,B）輝度書き込み
15296 PRINT #1,USING "###,###,###";                                                VIL_VWM_CB%(0),VIL_VWM_CB%(1),VIL_VWM_CB%(2)
15298 '     ウィンドウ位置書き込み
15300 FOR VIL_I%=1 TO VIL_VWM_NMAX%
15302 PRINT #1,USING "###,###,###,###";                                            VIL_VWM_X%(0),VIL_VWM_Y%(0),VIL_VWM_W%(0),VIL_VWM_Z%(0)
15304 NEXT
15306 RETURN
15308 '
15310 *VIL_VWM_MCR
15312 '　マウスカーソル資源読み込み
15314 '
15316 '入力変数         : なし
15318 '破壊変数         : I%            : ループ用
15320 '                   W0$           : ファイル読込用
15322 '出力変数         : VWM_MCX%,     : 水平読み取り位置
15324 '                   VWM_MCY%      : 垂直読み取り位置
15326 '                   VWM_MCA$      : ａｎｄパターン
15328 '                   VWM_MCD$      : ドットパターン
15330 '呼出しモジュール : LNR
15332 '
15334 GOSUB *VIL_LNR:VIL_VWM_MCX%=VAL(VIL_W0$):                                                   VIL_VWM_MCY%=VAL(MID$(VIL_W0$,INSTR(VIL_W0$,",")+1))
15336 GOSUB *VIL_LNR
15338 VIL_VWM_MCA$="":VIL_VWM_MCD$=""
15340 FOR VIL_I%=1 TO 63 STEP 2:                                                     VIL_VWM_MCA$=VIL_VWM_MCA$+CHR$(VAL("&H"+MID$(VIL_W0$,VIL_I%,2))):          NEXT
15342 GOSUB *VIL_LNR
15344 FOR VIL_I%=1 TO 63 STEP 2:                                                     VIL_VWM_MCD$=VIL_VWM_MCD$+CHR$(VAL("&H"+MID$(VIL_W0$,VIL_I%,2))):          NEXT
15346 RETURN
15348 '
15350 *VIL_VWM_PALSET
15352 '　ウィンドウ枠・背景色パレット設定
15354 '
15356 '入力変数         : VWM_CF%()     : 枠の（G,R,B）輝度
15358 '                   VWM_CB%()     : 背景色の（G,R,B）輝度
15360 '                   VWM_CB%       : ウィンドウ背景色用パレット番号
15362 '破壊変数         : W0%,W1%,W2%   : 輝度ワーク
15364 '出力変数         : なし
15366 '呼出しモジュール : なし
15368 '
15370 VIL_W0%=VIL_VWM_CF%(0):VIL_W1%=VIL_VWM_CF%(1):VIL_W2%=VIL_VWM_CF%(2)
15372 PALETTE 1,[VIL_W0%-80+(VIL_W0%<80)*(VIL_W0%-80)                                        ,VIL_W1%-80+(VIL_W1%<80)*(VIL_W1%-80)                                        ,VIL_W2%-80+(VIL_W2%<80)*(VIL_W2%-80)],1
15374 PALETTE 2,[VIL_W0%,VIL_W1%,VIL_W2%],1
15376 PALETTE 3,[VIL_W0%+80+(255<VIL_W0%)*(VIL_W0%-255)                                      ,VIL_W1%+80+(255<VIL_W1%)*(VIL_W1%-255)                                      ,VIL_W2%+80+(255<VIL_W2%)*(VIL_W2%-255)],1
15378 PALETTE VIL_VWM_CB%,[VIL_VWM_CB%(0),VIL_VWM_CB%(1),VIL_VWM_CB%(2)],1
15380 RETURN
15382 '
15384 *VIL_VWM_OP
15386 '　ウィンドウ・オープン
15388 '
15390 '入力変数         : VWM_N%        : ウィンドウ通し番号
15392 '                     VWM_N%=0のとき
15394 '                       WIN_X%,WIN_Y%         : ウィンドウ左上隅座標
15396 '                       WIN_W%,WIN_Z%         : ウィンドウ右下隅座標
15398 '                     VWM_N%<>0のとき
15400 '                       VWM_X%(VWM_N%),       : ウィンドウ左上隅座標
15402 '                       VWM_Y%(VWM_N%)
15404 '                       VWM_W%(VWM_N%),       : ウィンドウ右下隅座標
15406 '                       VWM_Z%(VWM_N%)
15408 '                   VWM_AT%       : アクティブウィンドウ属性
15410 '                   VWM_T$        : アクティブウィンドウ・タイトル
15412 '                   VWM_AT%のXSCRLBAR属性ONのとき
15414 '                       VWM_XLBL%     : スクロールバー論理長
15416 '                       VWM_XLIL%     : インジケータ論理長
15418 '                       VWM_XLIP%     : インジケータ論理位置
15420 '                   VWM_AT%のYSCRLBAR属性ONのとき
15422 '                       VWM_YLBL%     : スクロールバー論理長
15424 '                       VWM_YLIL%     : インジケータ論理長
15426 '                       VWM_YLIP%     : インジケータ論理位置
15428 '破壊変数         : W0%           : ウィンドウ・タイトル表示処理
15430 '出力変数         : E%            : 0 : 正常終了
15432 '                                   5 : オープン失敗（退避領域不足）
15434 '                   WIN_X%,WIN_Y%,
15436 '                   WIN_W%,WIN_Z% : オープン失敗時のみ、
15438 '           　　　　　　            現在のアクティブ・ウィンドウの
15440 '                                   値を設定
15442 '                   WIN_UB%,      : アクティブウィンドウの
15444 '                   WIN_DB%,        枠幅パターンに応じた値をセット
15446 '                   WIN_LB%,
15448 '                   WIN_RB%
15450 '                   WIN_PM%       : -1 (相対座標モード)
15452 '呼出しモジュール : WIN_PMA,WIN_PMR,WIN_OP
15454 '
15456 GOSUB *VIL_WIN_PMA
15458 IF VIL_WIN_AN% THEN
15460   LINE(VIL_WIN_X%(VIL_WIN_AN%)+28,VIL_WIN_Y%(VIL_WIN_AN%)-12)                     -(VIL_WIN_W%(VIL_WIN_AN%)-28,VIL_WIN_Y%(VIL_WIN_AN%)- 4)                     ,XOR,%3,BF                   '旧ＡＷのハイライトバー消去
15462 ENDIF
15464 IF VIL_VWM_N% THEN                '通しウィンドウ番号での座標復元
15466   VIL_WIN_X%=VIL_VWM_X%(VIL_VWM_N%):VIL_WIN_Y%=VIL_VWM_Y%(VIL_VWM_N%)
15468   VIL_WIN_W%=VIL_VWM_W%(VIL_VWM_N%):VIL_WIN_Z%=VIL_VWM_Z%(VIL_VWM_N%)
15470 ENDIF
15472 '                                  ウィンドウ枠幅作成
15474 IF VIL_VWM_AT% AND 16384 THEN VIL_VWM_FW%(VIL_WIN_AN%+1)=1                     ELSE VIL_VWM_FW%(VIL_WIN_AN%+1)=2-((VIL_VWM_AT% AND 4096)=4096)                                               -((VIL_VWM_AT% AND 8192)=8192)*2
15476 VIL_WIN_UB%=VIL_VWM_UB%(VIL_VWM_FW%(VIL_WIN_AN%+1)):                         VIL_WIN_DB%=VIL_VWM_DB%(VIL_VWM_FW%(VIL_WIN_AN%+1))
15478 VIL_WIN_LB%=VIL_VWM_LB%(VIL_VWM_FW%(VIL_WIN_AN%+1)):                         VIL_WIN_RB%=VIL_VWM_RB%(VIL_VWM_FW%(VIL_WIN_AN%+1))
15480 '
15482 GOSUB *VIL_WIN_OP
15484 IF VIL_E% THEN            '退避領域不足なら旧ＡＷのハイライトバー復元
15486   LINE(VIL_WIN_X%(VIL_WIN_AN%)+28,VIL_WIN_Y%(VIL_WIN_AN%)-12)                     -(VIL_WIN_W%(VIL_WIN_AN%)-28,VIL_WIN_Y%(VIL_WIN_AN%)- 4)                     ,XOR,%3,BF
15488 ELSE
15490   VIL_VWM_AT%(VIL_WIN_AN%)=VIL_VWM_AT%
15492   VIL_VWM_T$(VIL_WIN_AN%) =VIL_VWM_T$
15494   VIL_VWM_N%(VIL_WIN_AN%) =VIL_VWM_N%
15496 '----- 外枠描画 -----
15498   IF VIL_VWM_FW%(VIL_WIN_AN%)=1 THEN
15500     LINE(VIL_WIN_X%,VIL_WIN_Y%)-(VIL_WIN_W%,VIL_WIN_Z%),                              PSET,%VIL_VWM_CB%,BF
15502   ELSE
15504     LINE(VIL_WIN_X%-VIL_WIN_LB%,VIL_WIN_Y%-VIL_WIN_UB%)                             -(VIL_WIN_W%+VIL_WIN_RB%,VIL_WIN_Z%+VIL_WIN_DB%),                              PSET,%VIL_VWM_CB%,BF
15506 '
15508     LINE(VIL_WIN_X%            - 2,VIL_WIN_Y%            -13)                       -(VIL_WIN_W%            + 2,VIL_WIN_Y%            - 3),                        PSET,%2,BF                                            '上部枠
15510 '
15512     LINE(VIL_WIN_X%            - 5,VIL_WIN_Y%            -13)                       -(VIL_WIN_X%            - 3,VIL_WIN_Z%            + 2),                        PSET,%2,BF                                            '左部枠
15514     LINE(VIL_WIN_W%            + 3,VIL_WIN_Y%            -13)                       -(VIL_WIN_W%+VIL_WIN_RB%- 3,VIL_WIN_Z%            + 2),                        PSET,%2,BF                                            '右部枠
15516     LINE(VIL_WIN_X%            - 5,VIL_WIN_Z%            + 3)                       -(VIL_WIN_W%+VIL_WIN_RB%- 3,VIL_WIN_Z%+VIL_WIN_DB%- 3),                        PSET,%2,BF                                            '下部枠
15518 '
15520     CONNECT(VIL_WIN_W%+VIL_WIN_RB%- 1,VIL_WIN_Y%            -15)                       -(VIL_WIN_X%            - 7,VIL_WIN_Y%            -15)                       -(VIL_WIN_X%            - 7,VIL_WIN_Z%+VIL_WIN_DB%- 1),%3
15522     CONNECT(VIL_WIN_W%+VIL_WIN_RB%- 2,VIL_WIN_Y%            -14)                       -(VIL_WIN_X%            - 6,VIL_WIN_Y%            -14)                       -(VIL_WIN_X%            - 6,VIL_WIN_Z%+VIL_WIN_DB%- 2),%3
15524     CONNECT(VIL_WIN_X%            - 6,VIL_WIN_Z%+VIL_WIN_DB%- 1)                       -(VIL_WIN_W%+VIL_WIN_RB%- 1,VIL_WIN_Z%+VIL_WIN_DB%- 1)                       -(VIL_WIN_W%+VIL_WIN_RB%- 1,VIL_WIN_Y%            -14),%1
15526     CONNECT(VIL_WIN_X%            - 5,VIL_WIN_Z%+VIL_WIN_DB%- 2)                       -(VIL_WIN_W%+VIL_WIN_RB%- 2,VIL_WIN_Z%+VIL_WIN_DB%- 2)                       -(VIL_WIN_W%+VIL_WIN_RB%- 2,VIL_WIN_Y%            -14),%1
15528 '
15530     CONNECT(VIL_WIN_W%            + 1,VIL_WIN_Y%            - 2)                       -(VIL_WIN_X%            - 2,VIL_WIN_Y%            - 2)                       -(VIL_WIN_X%            - 2,VIL_WIN_Z%            + 1),%1
15532     CONNECT(VIL_WIN_W%               ,VIL_WIN_Y%            - 1)                       -(VIL_WIN_X%            - 1,VIL_WIN_Y%            - 1)                       -(VIL_WIN_X%            - 1,VIL_WIN_Z%               ),%1
15534     CONNECT(VIL_WIN_X%            - 2,VIL_WIN_Z%            + 2)                       -(VIL_WIN_W%            + 2,VIL_WIN_Z%            + 2)                       -(VIL_WIN_W%            + 2,VIL_WIN_Y%            - 2),%3
15536     CONNECT(VIL_WIN_X%            - 1,VIL_WIN_Z%            + 1)                       -(VIL_WIN_W%            + 1,VIL_WIN_Z%            + 1)                       -(VIL_WIN_W%            + 1,VIL_WIN_Y%            - 1),%3
15538 '
15540     IF VIL_VWM_AT% AND 6 THEN
15542       LINE(VIL_WIN_X%+11,VIL_WIN_Y%-13)-(VIL_WIN_X%+11,VIL_WIN_Y%- 3),                  PSET,%1
15544       LINE(VIL_WIN_X%+12,VIL_WIN_Y%-13)-(VIL_WIN_X%+12,VIL_WIN_Y%- 3),                  PSET,%3
15546     ENDIF
15548     IF VIL_VWM_AT% AND 17 THEN
15550       LINE(VIL_WIN_W%-11,VIL_WIN_Y%-13)-(VIL_WIN_W%-11,VIL_WIN_Y%- 3),                  PSET,%3
15552       LINE(VIL_WIN_W%-12,VIL_WIN_Y%-13)-(VIL_WIN_W%-12,VIL_WIN_Y%- 3),                  PSET,%1
15554     ENDIF
15556 '----- CLOSE SWITCH -----
15558     IF VIL_VWM_AT% AND 2 THEN
15560       LINE(VIL_WIN_X%- 2,VIL_WIN_Y%-13)-(VIL_WIN_X%- 2,VIL_WIN_Y%- 3),                  PSET,%1
15562       LINE(VIL_WIN_X%- 1,VIL_WIN_Y%-13)-(VIL_WIN_X%- 1,VIL_WIN_Y%- 3),                  PSET,%3
15564       LINE(VIL_WIN_X%   ,VIL_WIN_Y%-13)-(VIL_WIN_X%+10,VIL_WIN_Y%- 3),                  PSET,%3
15566       LINE(VIL_WIN_X%   ,VIL_WIN_Y%-12)-(VIL_WIN_X%+ 9,VIL_WIN_Y%- 3),                  PSET,%1
15568       LINE(VIL_WIN_X%   ,VIL_WIN_Y%- 3)-(VIL_WIN_X%+10,VIL_WIN_Y%-13),                  PSET,%3
15570       LINE(VIL_WIN_X%   ,VIL_WIN_Y%- 4)-(VIL_WIN_X%+ 9,VIL_WIN_Y%-13),                  PSET,%1
15572     ENDIF
15574 '----- HIDE SWITCH -----
15576     IF VIL_VWM_AT% AND 4 THEN
15578       LINE(VIL_WIN_X%+24,VIL_WIN_Y%-13)-(VIL_WIN_X%+24,VIL_WIN_Y%-3 ),                  PSET,%1
15580       LINE(VIL_WIN_X%+25,VIL_WIN_Y%-13)-(VIL_WIN_X%+25,VIL_WIN_Y%-3 ),                  PSET,%3
15582       LINE(VIL_WIN_X%+13,VIL_WIN_Y%- 3)-(VIL_WIN_X%+23,VIL_WIN_Y%-13),                  PSET,%3
15584       LINE(VIL_WIN_X%+13,VIL_WIN_Y%- 4)-(VIL_WIN_X%+22,VIL_WIN_Y%-13),                  PSET,%1
15586     ENDIF
15588 '----- MENU SWITCH -----
15590     IF VIL_VWM_AT% AND 1 THEN
15592       LINE(VIL_WIN_W%-24,VIL_WIN_Y%-13)-(VIL_WIN_W%-24,VIL_WIN_Y%- 3),                   PSET,%3
15594       LINE(VIL_WIN_W%-25,VIL_WIN_Y%-13)-(VIL_WIN_W%-25,VIL_WIN_Y%- 3),                  PSET,%1
15596       LINE(VIL_WIN_W%-15,VIL_WIN_Y%- 9)-(VIL_WIN_W%-21,VIL_WIN_Y%- 9),                  PSET,%1
15598       LINE(VIL_WIN_W%-15,VIL_WIN_Y%- 8)-(VIL_WIN_W%-21,VIL_WIN_Y%- 8),                  PSET,%3
15600 '      LINE(VIL_WIN_W%-13,VIL_WIN_Y%-10)-(VIL_WIN_W%-23,VIL_WIN_Y%-10),                  PSET,%1
15602 '      LINE(VIL_WIN_W%-13,VIL_WIN_Y%- 9)-(VIL_WIN_W%-23,VIL_WIN_Y%- 9),                  PSET,%3
15604     ENDIF
15606 '----- RESIZE SWITCH -----
15608     IF VIL_VWM_AT% AND 16 THEN
15610       LINE(VIL_WIN_W%+ 2,VIL_WIN_Y%-13)-(VIL_WIN_W%+ 2,VIL_WIN_Y%-3),                     PSET,%3
15612       LINE(VIL_WIN_W%+ 1,VIL_WIN_Y%-13)-(VIL_WIN_W%+ 1,VIL_WIN_Y%-3),                     PSET,%1
15614       LINE(VIL_WIN_W%-10,VIL_WIN_Y%- 9)-(VIL_WIN_W%- 4,VIL_WIN_Y%- 9),                  PSET,%3
15616       LINE(VIL_WIN_W%-10,VIL_WIN_Y%-10)-(VIL_WIN_W%- 3,VIL_WIN_Y%-10),                  PSET,%1
15618       LINE(VIL_WIN_W%- 3,VIL_WIN_Y%-10)-(VIL_WIN_W%- 3,VIL_WIN_Y%- 3),                  PSET,%3
15620       LINE(VIL_WIN_W%- 4,VIL_WIN_Y%- 9)-(VIL_WIN_W%- 4,VIL_WIN_Y%- 3),                  PSET,%1
15622     ENDIF
15624 '----- X-SCROLL BAR -----
15626     IF VIL_VWM_AT% AND 4096 THEN
15628       LINE(VIL_WIN_X%- 2,VIL_WIN_Z%+ 2)-(VIL_WIN_X%- 2,VIL_WIN_Z%+13),                  PSET,%1
15630       LINE(VIL_WIN_X%- 1,VIL_WIN_Z%+ 3)-(VIL_WIN_X%- 1,VIL_WIN_Z%+13),                  PSET,%3
15632       LINE(VIL_WIN_W%+ 2,VIL_WIN_Z%+ 3)-(VIL_WIN_W%+ 2,VIL_WIN_Z%+13),                  PSET,%3
15634       LINE(VIL_WIN_W%+ 1,VIL_WIN_Z%+ 3)-(VIL_WIN_W%+ 1,VIL_WIN_Z%+13),                  PSET,%1
15636       VIL_SBAR_X%=VIL_WIN_X%:VIL_SBAR_W%=VIL_WIN_W%:                               VIL_SBAR_Y%=VIL_WIN_Z%+3
15638       VIL_SBAR_LBL%=VIL_VWM_XLBL%:VIL_SBAR_LIL%=VIL_VWM_XLIL%:                     VIL_SBAR_LIP%=VIL_VWM_XLIP%
15640       GOSUB *VIL_SBAR_XDRAW
15642     ENDIF
15644 '----- Y-SCROLL BAR -----
15646     IF VIL_VWM_AT% AND 8192 THEN
15648       LINE(VIL_WIN_W%+ 2,VIL_WIN_Y%- 2)-(VIL_WIN_W%+13,VIL_WIN_Y%- 2),                  PSET,%1
15650       LINE(VIL_WIN_W%+ 3,VIL_WIN_Y%- 1)-(VIL_WIN_W%+13,VIL_WIN_Y%- 1),                  PSET,%3
15652       LINE(VIL_WIN_W%+ 3,VIL_WIN_Z%+ 2)-(VIL_WIN_W%+13,VIL_WIN_Z%+ 2),                  PSET,%3
15654       LINE(VIL_WIN_W%+ 3,VIL_WIN_Z%+ 1)-(VIL_WIN_W%+13,VIL_WIN_Z%+ 1),                  PSET,%1
15656       VIL_SBAR_Y%=VIL_WIN_Y%:VIL_SBAR_Z%=VIL_WIN_Z%:                               VIL_SBAR_X%=VIL_WIN_W%+3
15658       VIL_SBAR_LBL%=VIL_VWM_YLBL%:VIL_SBAR_LIL%=VIL_VWM_YLIL%:                     VIL_SBAR_LIP%=VIL_VWM_YLIP%
15660       GOSUB *VIL_SBAR_YDRAW
15662     ENDIF
15664 '----- TITLE -----
15666     VIL_W0%=INT(VIL_WIN_W%-VIL_WIN_X%-60)/5
15668     IF VIL_W0%>0 THEN
15670       SYMBOL(VIL_WIN_X%+30,VIL_WIN_Y%-11),LEFT$(VIL_VWM_T$,VIL_W0%)                      ,.5!,.5!,%1,,,,1
15672     ENDIF
15674     LINE(VIL_WIN_X%(VIL_WIN_AN%)+28,VIL_WIN_Y%(VIL_WIN_AN%)-12)                     -(VIL_WIN_W%(VIL_WIN_AN%)-28,VIL_WIN_Y%(VIL_WIN_AN%)- 4)                     ,XOR,%3,BF                   'ハイライトバー
15676 '
15678   ENDIF
15680 ENDIF
15682 '
15684 GOSUB *VIL_WIN_PMR
15686 RETURN
15688 '
15690 *VIL_VWM_CL
15692 '　ウィンドウ・クロ－ズ
15694 '
15696 '入力変数         : なし
15698 '破壊変数         : なし
15700 '出力変数         : WIN_X%,WIN_Y% : 新アクティブウィンドウ左上隅座標
15702 '                   WIN_W%,WIN_Z% : 新アクティブウィンドウ右下隅座標
15704 '                   VWM_AT%       : 新アクティブウィンドウ属性
15706 '                   VWM_T$        : 新アクティブウィンドウ・タイトル
15708 '                   VWM_N%        : 新アクティブウィンドウ通し番号
15710 '                     クローズ前のウィンドウのVWM_N%<>0のとき
15712 '                       VWM_X%(VWM_N%),   : ウィンドウ左上隅座標
15714 '                       VWM_Y%(VWM_N%)
15716 '                       VWM_W%(VWM_N%),   : ウィンドウ右下隅座標
15718 '                       VWM_Z%(VWM_N%)
15720 '                     　（クローズ前に現在位置・サイズを保存）
15722 '                   WIN_UB%,      : アクティブウィンドウの
15724 '                   WIN_DB%,        枠幅パターンに応じた値をセット
15726 '                   WIN_LB%,
15728 '                   WIN_RB%
15730 '                   WIN_PM%       :  -1 (相対座標モード)
15732 '呼出しモジュール : WIN_PMA,WIN_PMR,WIN_CL
15734 '
15736 IF VIL_VWM_N% THEN                                                             VIL_VWM_X%(VIL_VWM_N%)=VIL_WIN_X%:VIL_VWM_Y%(VIL_VWM_N%)=VIL_WIN_Y%:         VIL_VWM_W%(VIL_VWM_N%)=VIL_WIN_W%:VIL_VWM_Z%(VIL_VWM_N%)=VIL_WIN_Z%
15738 GOSUB *VIL_WIN_PMA
15740 GOSUB *VIL_WIN_CL
15742 VIL_VWM_AT%=VIL_VWM_AT%(VIL_WIN_AN%)
15744 VIL_VWM_T$ =VIL_VWM_T$(VIL_WIN_AN%)
15746 VIL_VWM_N% =VIL_VWM_N%(VIL_WIN_AN%)
15748 VIL_WIN_UB%=VIL_VWM_UB%(VIL_VWM_FW%(VIL_WIN_AN%)):                           VIL_WIN_DB%=VIL_VWM_DB%(VIL_VWM_FW%(VIL_WIN_AN%))
15750 VIL_WIN_LB%=VIL_VWM_LB%(VIL_VWM_FW%(VIL_WIN_AN%)):                           VIL_WIN_RB%=VIL_VWM_RB%(VIL_VWM_FW%(VIL_WIN_AN%))
15752 IF VIL_WIN_AN% THEN                                                            LINE(VIL_WIN_X%+28,VIL_WIN_Y%-12)-(VIL_WIN_W%-28,VIL_WIN_Y%-4),                   XOR,%3,BF
15754 GOSUB *VIL_WIN_PMR
15756 RETURN
15758 '
15760 *VIL_VWM_CLDMY
15762 '　ウィンドウ・ダミークロ－ズ
15764 '
15766 '入力変数         : なし
15768 '破壊変数         : なし
15770 '出力変数         : WIN_X%,WIN_Y% : 新アクティブウィンドウ左上隅座標
15772 '                   WIN_W%,WIN_Z% : 新アクティブウィンドウ右下隅座標
15774 '                   VWM_AT%       : 新アクティブウィンドウ属性
15776 '                   VWM_T$        : 新アクティブウィンドウ・タイトル
15778 '                   VWM_N%        : 新アクティブウィンドウ通し番号
15780 '                     クローズ前のウィンドウのVWM_N%<>0のとき
15782 '                       VWM_X%(VWM_N%),   : ウィンドウ左上隅座標
15784 '                       VWM_Y%(VWM_N%)
15786 '                       VWM_W%(VWM_N%),   : ウィンドウ右下隅座標
15788 '                       VWM_Z%(VWM_N%)
15790 '                     　（クローズ前に現在位置・サイズを保存）
15792 '                   WIN_UB%,      : アクティブウィンドウの
15794 '                   WIN_DB%,        枠幅パターンに応じた値をセット
15796 '                   WIN_LB%,
15798 '                   WIN_RB%
15800 '                   WIN_PM%       :  -1 (相対座標モード)
15802 '                   WIN_PM%       :  -1 (相対座標モード)
15804 '呼出しモジュール : WIN_PMA,WIN_PMR,WIN_CLDMY
15806 '
15808 IF VIL_VWM_N% THEN                                                             VIL_VWM_X%(VIL_VWM_N%)=VIL_WIN_X%:VIL_VWM_Y%(VIL_VWM_N%)=VIL_WIN_Y%:         VIL_VWM_W%(VIL_VWM_N%)=VIL_WIN_W%:VIL_VWM_Z%(VIL_VWM_N%)=VIL_WIN_Z%
15810 GOSUB *VIL_WIN_PMA
15812 GOSUB *VIL_WIN_CLDMY
15814 LINE(VIL_WIN_X%(VIL_WIN_AN%+1)+28,VIL_WIN_Y%(VIL_WIN_AN%+1)-12)                 -(VIL_WIN_W%(VIL_WIN_AN%+1)-28,VIL_WIN_Y%(VIL_WIN_AN%+1)- 4)                 ,XOR,%3,BF
15816 VIL_VWM_AT%=VIL_VWM_AT%(VIL_WIN_AN%)
15818 VIL_VWM_T$ =VIL_VWM_T$(VIL_WIN_AN%)
15820 VIL_VWM_N% =VIL_VWM_N%(VIL_WIN_AN%)
15822 VIL_WIN_UB%=VIL_VWM_UB%(VIL_VWM_FW%(VIL_WIN_AN%)):                           VIL_WIN_DB%=VIL_VWM_DB%(VIL_VWM_FW%(VIL_WIN_AN%))
15824 VIL_WIN_LB%=VIL_VWM_LB%(VIL_VWM_FW%(VIL_WIN_AN%)):                           VIL_WIN_RB%=VIL_VWM_RB%(VIL_VWM_FW%(VIL_WIN_AN%))
15826 IF VIL_WIN_AN% THEN                                                            LINE(VIL_WIN_X%+28,VIL_WIN_Y%-12)-(VIL_WIN_W%-28,VIL_WIN_Y%-4)                   ,XOR,%3,BF
15828 GOSUB *VIL_WIN_PMR
15830 RETURN
15832 '
15834 *VIL_VWM_CLALL
15836 '　ウィンドウ全クローズ
15838 '
15840 '入力変数         : なし
15842 '破壊変数         : なし
15844 '出力変数         : なし
15846 '呼出しモジュール : WIN_CL
15848 '
15850 WHILE VIL_WIN_AN%
15852   GOSUB *VIL_VWM_CL
15854 WEND
15856 RETURN
15858 '
15860 *VIL_VWM_CLS
15862 '　アクティブウィンドウ内クリア
15864 '入力変数         : なし
15866 '破壊変数         : なし
15868 '出力変数         : なし
15870 '呼出しモジュール : なし
15872 '
15874 LINE(0,0)-(VIL_WIN_W%-VIL_WIN_X%,VIL_WIN_Z%-VIL_WIN_Y%)                          ,PSET,%VIL_VWM_CB%,BF
15876 RETURN
15878 ' 
15880 *VIL_VWM_CHECK
15882 '　ウィンドウマネージャ呼出しチェック
15884 '    MSEL_M/MSEL_IN/INP_STRの呼出し直後に呼び出すことにより、
15886 '      ・ウィンドウ枠の各スイッチを左クリック : VWM_WIN  を呼出
15888 '      ・ウィンドウマネージャ起動キーを入力   : VWM_MENU を呼出
15890 '入力変数         : MX%,MY%       : マウスクリック位置
15892 '                 : KN%           : 入力番号
15894 '                 : KY%           : 入力キー
15896 '破壊変数         : なし
15898 '出力変数         : VWM_R%        : マネージャ処理結果
15900 '                                     0:処理なし
15902 '                                     2:CLOSE
15904 '                                     4:HIDE
15906 '                                     8:MOVE
15908 '                                    16:RESIZE
15910 '                                  4096:XSCRLBAR
15912 '                                  8192:YSCRLBAR
15914 '呼出しモジュール : VWM_WIN,VWM_MENU
15916 '
15918 VIL_VWM_R%=0
15920 IF VIL_KN%=-2 THEN                'ボックス外クリック
15922   GOSUB *VIL_VWM_WIN
15924 ELSE IF VIL_VKEY_KY%=-13 THEN
15926   VIL_WIN_X%=VIL_WIN_W%   +(VIL_WIN_W%-582)*(VIL_WIN_W%>582) '49+8-639
15928   VIL_WIN_Y%=VIL_WIN_Y%-32+(VIL_WIN_Y%- 46)*(VIL_WIN_Y%< 46)                                           +(VIL_WIN_Y%-406)*(VIL_WIN_Y%>406)
15930 '                                             -32-14 , -32+98+7-479
15932   GOSUB *VIL_VWM_MENU
15934 ENDIF
15936 RETURN
15938 '
15940 *VIL_VWM_WIN
15942 '　ウィンドウスイッチ版ウィンドウマネージャ
15944 '入力変数         : MX%,MY%       : マウスクリック位置
15946 '破壊変数         : なし
15948 '出力変数         : VWM_R%        : マネージャ処理結果
15950 '                                     0:処理なし
15952 '                                     2:CLOSE
15954 '                                     4:HIDE
15956 '                                     8:MOVE
15958 '                                    16:RESIZE
15960 '                                  4096:XSCRLBAR
15962 '                                  8192:YSCRLBAR
15964 '呼出しモジュール : VWM_CLOSE,VWM_HIDE,VWM_MOVE,VWM_RESIZE,
15966 '                   VWM_XSCRLBAR,VWM_YSCRLBAR,VWM_MENU
15968 '
15970 VIL_VWM_R%=0
15972 IF      (VIL_VWM_AT% AND    2)=    2                                              AND VIL_WIN_X%-2 <VIL_MX% AND VIL_MX%<VIL_WIN_X%+12                          AND VIL_WIN_Y%-16<VIL_MY% AND VIL_MY%<VIL_WIN_Y%    THEN
15974   GOSUB *VIL_VWM_CLOSE
15976 ELSE IF (VIL_VWM_AT% AND    4)=    4                                              AND VIL_WIN_X%+11<VIL_MX% AND VIL_MX%<VIL_WIN_X%+25                          AND VIL_WIN_Y%-16<VIL_MY% AND VIL_MY%<VIL_WIN_Y%    THEN
15978   GOSUB *VIL_VWM_HIDE
15980 ELSE IF (VIL_VWM_AT% AND    1)=    1                                              AND VIL_WIN_W%-25<VIL_MX% AND VIL_MX%<VIL_WIN_W%-11                          AND VIL_WIN_Y%-16<VIL_MY% AND VIL_MY%<VIL_WIN_Y%    THEN
15982   VIL_WIN_X%=VIL_WIN_W%   +(VIL_WIN_W%-582)*(VIL_WIN_W%>582) '49+8-639
15984   VIL_WIN_Y%=VIL_WIN_Y%-32+(VIL_WIN_Y%- 46)*(VIL_WIN_Y%< 46)                                           +(VIL_WIN_Y%-406)*(VIL_WIN_Y%>406)
15986 '                                              -32-14 , -32+98+7-479
15988   GOSUB *VIL_VWM_MENU
15990 ELSE IF (VIL_VWM_AT% AND   16)=   16                                              AND VIL_WIN_W%-12<VIL_MX% AND VIL_MX%<VIL_WIN_W%+ 2                          AND VIL_WIN_Y%-16<VIL_MY% AND VIL_MY%<VIL_WIN_Y%    THEN
15992   GOSUB *VIL_VWM_RESIZE
15994 ELSE IF (VIL_VWM_AT% AND    8)=    8                                              AND VIL_WIN_X%- 6<VIL_MX% AND VIL_MX%<VIL_WIN_W%+ 6                          AND VIL_WIN_Y%-16<VIL_MY% AND VIL_MY%<VIL_WIN_Y%    THEN
15996   GOSUB *VIL_VWM_MOVE
15998 ELSE IF (VIL_VWM_AT% AND 4096)= 4096                                              AND VIL_WIN_X%- 2<VIL_MX% AND VIL_MX%<VIL_WIN_W%+ 2                          AND VIL_WIN_Z%   <VIL_MY% AND VIL_MY%<VIL_WIN_Z%+16 THEN
16000   GOSUB *VIL_VWM_XSCRLBAR
16002 ELSE IF (VIL_VWM_AT% AND 8192)= 8192                                              AND VIL_WIN_W%+ 2<VIL_MX% AND VIL_MX%<VIL_WIN_W%+14                          AND VIL_WIN_Y%- 1<VIL_MY% AND VIL_MY%<VIL_WIN_Z%+ 1 THEN
16004   GOSUB *VIL_VWM_YSCRLBAR
16006 ENDIF
16008 RETURN
16010 '
16012 *VIL_VWM_MENU
16014 '　メニュー版ウィンドウマネージャ
16016 '
16018 '入力変数         : WIN_X%,WIN_Y% : マネージャウィンドウ左上隅座標
16020 '破壊変数         : なし
16022 '出力変数         : VWM_R%        : マネージャ処理結果
16024 '                                     0:処理なし
16026 '                                     2:CLOSE
16028 '                                     4:HIDE
16030 '                                     8:MOVE
16032 '                                    16:RESIZE
16034 '                                  4096:XSCRLBAR
16036 '                                  8192:YSCRLBAR
16038 '呼出しモジュール :   WIN_PMA,WIN_PMR,VWM_OP,VWM_CL,MSEL_M,
16040 '                     VWM_CLOSE,VWM_HIDE,VWM_MOVE,VWM_RESIZE,
16042 '                     VWM_XSCRLBAR,VWM_YSCRLBAR
16044 '                     VWM_KHIDE,VWM_KMOVE,VWM_KRESIZE,
16046 '                     VWM_INF
16048 '
16050 GOSUB *VIL_WIN_PMA
16052 LINE(VIL_WIN_X%(VIL_WIN_AN%)+28,VIL_WIN_Y%(VIL_WIN_AN%)-12)                     -(VIL_WIN_W%(VIL_WIN_AN%)-28,VIL_WIN_Y%(VIL_WIN_AN%)- 4),XOR,%3,BF
16054 VIL_VWM_ATB%=VIL_VWM_AT%
16056 VIL_WIN_W%=VIL_WIN_X%+49:VIL_WIN_Z%=VIL_WIN_Y%+97
16058 VIL_VWM_T$="VWM":VIL_VWM_AT%=0:VIL_VWM_N%=0
16060 GOSUB *VIL_VWM_OP
16062 SYMBOL(5,  0),"<VWM>", 1,1,6
16064 SYMBOL(1, 20),"CLOSE", 1,1,%1-((VIL_VWM_ATB% AND  2)= 2)*2
16066 SYMBOL(1, 36),"HIDE",  1,1,%1-((VIL_VWM_ATB% AND  4)= 4)*2
16068 SYMBOL(1, 52),"MOVE",  1,1,%1-((VIL_VWM_ATB% AND  8)= 8)*2
16070 SYMBOL(1, 68),"RESIZE",1,1,%1-((VIL_VWM_ATB% AND 16)=16)*2
16072 SYMBOL(1, 84),"<INFO>",1,1,%3
16074 '
16076 VIL_X%=1:VIL_Y%=20:VIL_W%=VIL_X%+47:VIL_Z%=VIL_Y%+14
16078 VIL_YL%=16:VIL_XN%=1:VIL_YN%=5:VIL_MSEL_BD%=0:VIL_C%=15
16080 VIL_MSEL_BC%=0:VIL_MSEL_MN%=0:VIL_MSEL_BN%=1
16082 VIL_MSEL_BB%=1:VIL_MSEL_BE%=5
16084 *VIL_VWM_MENU_W0
16086 GOSUB *VIL_MSEL_M
16088 IF VIL_KN%=-3 OR (0<VIL_KN% AND VIL_KN%<5                                                                AND (VIL_VWM_ATB% AND 2^VIL_KN%)=0)                THEN *VIL_VWM_MENU_W0
16090 GOSUB *VIL_VWM_CL
16092 GOSUB *VIL_WIN_PMA
16094 LINE(VIL_WIN_X%(VIL_WIN_AN%)+28,VIL_WIN_Y%(VIL_WIN_AN%)-12)                     -(VIL_WIN_W%(VIL_WIN_AN%)-28,VIL_WIN_Y%(VIL_WIN_AN%)- 4),XOR,%3,BF
16096 GOSUB *VIL_WIN_PMR
16098 IF VIL_KN%<1 THEN RETURN
16100 '
16102 ON VIL_KN% GOTO *VIL_VWM_MENU_W1,*VIL_VWM_MENU_W2,*VIL_VWM_MENU_W3,                          *VIL_VWM_MENU_W4,*VIL_VWM_MENU_W5
16104 '
16106 *VIL_VWM_MENU_W1
16108 GOSUB *VIL_VWM_CLOSE
16110 RETURN
16112 '
16114 *VIL_VWM_MENU_W2
16116 IF VIL_VKEY_KY%=-4 THEN GOSUB *VIL_VWM_HIDE ELSE GOSUB *VIL_VWM_KHIDE
16118 RETURN
16120 '
16122 *VIL_VWM_MENU_W3
16124 IF VIL_VKEY_KY%=-4 THEN
16126   VIL_MX%=(VIL_WIN_X%+VIL_WIN_W%)\2:VIL_MY%=VIL_WIN_Y%-4
16128   MOUSE 1,VIL_MX%,VIL_MY%
16130   GOSUB *VIL_VWM_MOVE
16132 ELSE
16134   GOSUB *VIL_VWM_KMOVE
16136 ENDIF
16138 RETURN
16140 '
16142 *VIL_VWM_MENU_W4
16144 IF VIL_VKEY_KY%=-4 THEN
16146   VIL_MX%=VIL_WIN_W%:VIL_MY%=VIL_WIN_Y%-6
16148   MOUSE 1,VIL_MX%,VIL_MY%
16150   GOSUB *VIL_VWM_RESIZE
16152 ELSE
16154   GOSUB *VIL_VWM_KRESIZE
16156 ENDIF
16158 RETURN
16160 '
16162 *VIL_VWM_MENU_W5
16164 VIL_WIN_X%=VIL_WIN_X%+(VIL_WIN_X%-448)*(VIL_WIN_X%>448)   '183+8-639
16166 VIL_WIN_Y%=VIL_WIN_Y%+(VIL_WIN_Y%-380)*(VIL_WIN_Y%>380)   ' 91+8-479
16168 GOSUB *VIL_VWM_INF
16170 RETURN
16172 '
16174 *VIL_VWM_INF
16176 '　ウィンドウ情報表示
16178 '入力変数         : WIN_X%,WIN_Y% : 情報ウィンドウ左上隅座標
16180 '破壊変数         : なし
16182 '出力変数         : E%            : 0 : 正常終了
16184 '                                   5 : オープン失敗（退避領域不足）
16186 '呼出しモジュール :   VWM_OP,VWM_CL,INP_MVWAIT
16188 '
16190 VIL_WIN_W%=VIL_WIN_X%+183:VIL_WIN_Z%=VIL_WIN_Y%+91
16192 VIL_VWM_T$="VWM INFORMATION":VIL_VWM_AT%=0:VIL_VWM_N%=0
16194 VIL_E%=0
16196 GOSUB *VIL_VWM_OP
16198 IF VIL_E%=0 THEN
16200   SYMBOL(8, 8),"POSITION:("                                                                +FNVIL_P2S0$(VIL_WIN_X%(VIL_WIN_AN%-1),3)+","                                +FNVIL_P2S0$(VIL_WIN_Y%(VIL_WIN_AN%-1),3)+")",1,1,4
16202   SYMBOL(8,28),"SIZE    : "+FNVIL_P2S0$(VIL_WIN_W%(VIL_WIN_AN%-1)              -VIL_WIN_X%(VIL_WIN_AN%-1)+1,3)+"×"+FNVIL_P2S0$(VIL_WIN_Z%(                 VIL_WIN_AN%-1)-VIL_WIN_Y%(VIL_WIN_AN%-1)+1,3),1,1,4
16204   SYMBOL(8,48),"WINDOW  : "+FNVIL_P2S0$(VIL_WIN_AN%-1,3)+"/"                                            +FNVIL_P2S0$(VIL_WIN_ANMAX%,3),1,1,4
16206   SYMBOL(8,68),"FREE    : "                                                    +FNVIL_P2S0$((VIL_WIN_BFMAX&-VIL_WIN_BFO&(VIL_WIN_AN%-1))\512,4)+"K/"        +FNVIL_P2S0$( VIL_WIN_BFMAX&\512,4)+"K",1,1,4
16208   GOSUB *VIL_INP_MVWAIT
16210   GOSUB *VIL_VWM_CL
16212 ENDIF
16214 RETURN
16216 '
16218 *VIL_VWM_MOVE
16220 '　ウィンドウ移動（ユーザ・インタフェース部）
16222 '
16224 '入力変数         : なし
16226 '破壊変数         : W0,W1       : 移動量
16228 '                   W2,W3       : W0,W1 → VWM_XD%,VWM_YD% の定数倍
16230 '                   MX,MY       : マウス位置
16232 '出力変数         : E%          : 0 : 移動正常終了
16234 '                                 5 : 移動失敗（退避領域不足）
16236 '                   VWM_R%      : 8 : 移動実行
16238 '                                 0 : 移動中止（中止操作/移動失敗）
16240 '呼出しモジュール : WIN_PMA,WIN_PMR,VWM_MV
16242 '
16244 MOUSE 2,VIL_VWM_MCA1$,VIL_VWM_MCD1$,VIL_VWM_MCX1%,VIL_VWM_MCY1%
16246 MOUSE 1,VIL_MX%,VIL_MY%,1
16248 VIL_VWM_PMB%=VIL_WIN_PM%:GOSUB *VIL_WIN_PMA
16250 VIL_WIN_X%=VIL_WIN_X%-VIL_WIN_LB%:VIL_WIN_Y%=VIL_WIN_Y%-VIL_WIN_UB%
16252 VIL_WIN_W%=VIL_WIN_W%+VIL_WIN_RB%:VIL_WIN_Z%=VIL_WIN_Z%+VIL_WIN_DB%
16254 MOUSE 4,                                                                           VIL_VWM_XM%+VIL_MX%-VIL_WIN_X%,VIL_VWM_YM%+VIL_MY%-VIL_WIN_Y%,               VIL_VWM_WM%+VIL_MX%-VIL_WIN_W%,VIL_VWM_ZM%+VIL_MY%-VIL_WIN_Z%
16256 VIL_W0%=0:VIL_W1%=0:VIL_W2%=0:VIL_W3%=0
16258 VIL_WIN_W%=VIL_WIN_W%-VIL_WIN_X%:VIL_WIN_Z%=VIL_WIN_Z%-VIL_WIN_Y%
16260 LINE(VIL_WIN_X%,VIL_WIN_Y%)-STEP(VIL_WIN_W%,VIL_WIN_Z%),XOR,7,B
16262 WHILE MOUSE(2,0)
16264   VIL_MX%=MOUSE(9):VIL_MY%=MOUSE(10)
16266   IF VIL_MX% OR VIL_MY% THEN
16268     LINE(VIL_WIN_X%+VIL_W2%,VIL_WIN_Y%+VIL_W3%)                                 -STEP(VIL_WIN_W%        ,VIL_WIN_Z%),XOR,7,B
16270     VIL_W0%=VIL_W0%+VIL_MX%:VIL_W1%=VIL_W1%+VIL_MY%
16272     VIL_W2%=VIL_W0%-VIL_W0% MOD VIL_VWM_XD%
16274     VIL_W3%=VIL_W1%-VIL_W1% MOD VIL_VWM_YD%
16276     LINE(VIL_WIN_X%+VIL_W2%,VIL_WIN_Y%+VIL_W3%)                                 -STEP(VIL_WIN_W%        ,VIL_WIN_Z%),XOR,7,B
16278   ENDIF
16280 WEND
16282 VIL_WIN_X%=VIL_WIN_X%+VIL_W2%:VIL_WIN_Y%=VIL_WIN_Y%+VIL_W3%
16284 LINE(VIL_WIN_X%,VIL_WIN_Y%)-STEP(VIL_WIN_W%,VIL_WIN_Z%),XOR,7,B
16286 '
16288 IF MOUSE(2,1) THEN                               '移動中止
16290   VIL_WIN_X%=VIL_WIN_X%(VIL_WIN_AN%):                                          VIL_WIN_Y%=VIL_WIN_Y%(VIL_WIN_AN%)
16292   VIL_WIN_W%=VIL_WIN_W%(VIL_WIN_AN%):                                          VIL_WIN_Z%=VIL_WIN_Z%(VIL_WIN_AN%)
16294 ELSE                                             '移動実行
16296   VIL_WIN_X%=VIL_WIN_X%+VIL_WIN_LB%:VIL_WIN_Y%=VIL_WIN_Y%+VIL_WIN_UB%
16298   GOSUB *VIL_VWM_MV
16300 ENDIF
16302 MOUSE 2,VIL_VWM_MCA0$,VIL_VWM_MCD0$,VIL_VWM_MCX0%,VIL_VWM_MCY0%
16304 MOUSE 4,0,0,639,479
16306 IF VIL_VWM_PMB% THEN GOSUB *VIL_WIN_PMR
16308 RETURN
16310 '
16312 *VIL_VWM_KMOVE
16314 '　ウィンドウ移動（キー操作版ユーザ・インタフェース部）
16316 '
16318 '入力変数         : なし
16320 '破壊変数         : K$,KY%        : 入力キーとそのアスキーコード
16322 '出力変数         : E%            : 0 : 移動正常終了
16324 '                                   5 : 移動失敗（退避領域不足）
16326 '                   VWM_R%        : 8 : 移動実行
16328 '                                   0 : 移動中止（中止操作/移動失敗）
16330 '呼出しモジュール : WIN_PMA,WIN_PMR,VWM_MV,VKEY_KY
16332 '
16334 WHILE INKEY$<>"":WEND             '先行入力除去
16336 VIL_VWM_PMB%=VIL_WIN_PM%:GOSUB *VIL_WIN_PMA
16338 VIL_WIN_X%=VIL_WIN_X%           -VIL_WIN_LB%
16340 VIL_WIN_Y%=VIL_WIN_Y%           -VIL_WIN_UB%
16342 VIL_WIN_W%=VIL_WIN_W%-VIL_WIN_X%+VIL_WIN_RB%
16344 VIL_WIN_Z%=VIL_WIN_Z%-VIL_WIN_Y%+VIL_WIN_DB%
16346 LINE(VIL_WIN_X%,VIL_WIN_Y%)-STEP(VIL_WIN_W%,VIL_WIN_Z%),XOR,7,B
16348 VIL_VKEY_KY%=0
16350 WHILE VIL_VKEY_KY%<>-1 AND VIL_VKEY_KY%<>-2         '決定／取消キー
16352 *VIL_VWM_KMOVE_W0
16354   GOSUB *VIL_VKEY_KY
16356   IF VIL_VKEY_KY%=-4 THEN *VIL_VWM_KMOVE_W0
16358   LINE(VIL_WIN_X%,VIL_WIN_Y%)-STEP(VIL_WIN_W%,VIL_WIN_Z%),XOR,7,B
16360   VIL_WIN_X%=VIL_WIN_X%                                                                  +((VIL_VKEY_KY%=-6)-(VIL_VKEY_KY%=-5))*VIL_VWM_XD% '←→
16362   VIL_WIN_X%=VIL_WIN_X%-((VIL_WIN_X%+VIL_WIN_LB%<VIL_VWM_XM%)                            -(VIL_VWM_WM%<VIL_WIN_X%+VIL_WIN_W%-VIL_WIN_RB%))                             *VIL_VWM_XD%
16364   VIL_WIN_X%=VIL_WIN_X%                                                                  +((VIL_VKEY_KY%=-10)-(VIL_VKEY_KY%=-9))*VIL_VWM_XD%*8
16366 '                                                     拡張←→
16368   VIL_WIN_X%=VIL_WIN_X%-((VIL_WIN_X%+VIL_WIN_LB%<VIL_VWM_XM%)                            -(VIL_VWM_WM%<VIL_WIN_X%+VIL_WIN_W%-VIL_WIN_RB%))                             *VIL_VWM_XD%*8
16370 '
16372   VIL_WIN_Y%=VIL_WIN_Y%                                                                  +((VIL_VKEY_KY%=-7)-(VIL_VKEY_KY%=-8))*VIL_VWM_YD% '↑↓
16374   VIL_WIN_Y%=VIL_WIN_Y%-((VIL_WIN_Y%+VIL_WIN_UB%<VIL_VWM_YM%)                            -(VIL_VWM_ZM%<VIL_WIN_Y%+VIL_WIN_Z%-VIL_WIN_DB%))                             *VIL_VWM_YD%
16376   VIL_WIN_Y%=VIL_WIN_Y%+((VIL_VKEY_KY%=-11)                                                          -(VIL_VKEY_KY%=-12))*VIL_VWM_YD%*8
16378 '                                                     拡張↑↓
16380   VIL_WIN_Y%=VIL_WIN_Y%-((VIL_WIN_Y%+VIL_WIN_UB%<VIL_VWM_YM%)                            -(VIL_VWM_ZM%<VIL_WIN_Y%+VIL_WIN_Z%-VIL_WIN_DB%))                            *VIL_VWM_YD%*8
16382   LINE(VIL_WIN_X%,VIL_WIN_Y%)-STEP(VIL_WIN_W%,VIL_WIN_Z%),XOR,7,B
16384 WEND
16386 LINE(VIL_WIN_X%,VIL_WIN_Y%)-STEP(VIL_WIN_W%,VIL_WIN_Z%),XOR,7,B
16388 '
16390 IF VIL_VKEY_KY%=-2 THEN                       '移動実行(決定)
16392   VIL_WIN_X%=VIL_WIN_X%+VIL_WIN_LB%:VIL_WIN_Y%=VIL_WIN_Y%+VIL_WIN_UB%
16394   GOSUB *VIL_VWM_MV
16396 ELSE                                          '移動中止(取消)
16398   VIL_WIN_X%=VIL_WIN_X%(VIL_WIN_AN%)
16400   VIL_WIN_Y%=VIL_WIN_Y%(VIL_WIN_AN%)
16402   VIL_WIN_W%=VIL_WIN_W%(VIL_WIN_AN%)
16404   VIL_WIN_Z%=VIL_WIN_Z%(VIL_WIN_AN%)
16406 ENDIF
16408 IF VIL_VWM_PMB% THEN GOSUB *VIL_WIN_PMR
16410 RETURN
16412 '
16414 *VIL_VWM_MV
16416 '　ウィンドウ移動（移動処理）
16418 '
16420 '入力変数         : WIN_X,WIN_Y   : 移動先ウィンドウ左上隅座標
16422 '破壊変数         : W0%,W1%,      : 座標一時格納
16424 '                   W2%,W3%
16426 '出力変数         : E%            : 0 : 移動正常終了
16428 '                                   5 : 移動失敗（退避領域不足）
16430 '                     E%=0 のとき
16432 '                       WIN_W%,WIN_Z% : 移動先のウィンドウ右下隅座標
16434 '                       VWM_R%        : 8 : 移動実行
16436 '                     E%=5 のとき
16438 '                       WIN_X%,WIN_Y% : 移動前のウィンドウ左上隅座標
16440 '                       VWM_R%        : 0 : 移動失敗
16442 '呼出しモジュール : なし
16444 '
16446 VIL_E%=0
16448 VIL_W0%=VIL_WIN_X%(VIL_WIN_AN%)-VIL_WIN_LB%:                                 VIL_W1%=VIL_WIN_Y%(VIL_WIN_AN%)-VIL_WIN_UB%
16450 VIL_W2%=VIL_WIN_W%(VIL_WIN_AN%)+VIL_WIN_RB%:                                 VIL_W3%=VIL_WIN_Z%(VIL_WIN_AN%)+VIL_WIN_DB%
16452 GET@A(VIL_W0%,VIL_W1%)-(VIL_W2%,VIL_W3%),                                          VIL_WIN_BF%,VIL_WIN_BFO&(VIL_WIN_AN%)         'ウィンドウ保存
16454 IF VIL_E%=0 THEN
16456   VIL_WIN_W%=VIL_WIN_X%+VIL_WIN_W%(VIL_WIN_AN%)                                                     -VIL_WIN_X%(VIL_WIN_AN%)
16458   VIL_WIN_Z%=VIL_WIN_Y%+VIL_WIN_Z%(VIL_WIN_AN%)                                                     -VIL_WIN_Y%(VIL_WIN_AN%)
16460   PUT@A(VIL_W0%,VIL_W1%)-(VIL_W2%,VIL_W3%),                                          VIL_WIN_BF%,,,,,VIL_WIN_BFO&(VIL_WIN_AN%-1) '背景復元
16462   GET@A(VIL_WIN_X%-VIL_WIN_LB%,VIL_WIN_Y%-VIL_WIN_UB%)                             -(VIL_WIN_W%+VIL_WIN_RB%,VIL_WIN_Z%+VIL_WIN_DB%),                              VIL_WIN_BF%,VIL_WIN_BFO&(VIL_WIN_AN%-1)     '移動先背景保存
16464   PUT@A(VIL_WIN_X%-VIL_WIN_LB%,VIL_WIN_Y%-VIL_WIN_UB%)                             -(VIL_WIN_W%+VIL_WIN_RB%,VIL_WIN_Z%+VIL_WIN_DB%),                              VIL_WIN_BF%,,,,,VIL_WIN_BFO&(VIL_WIN_AN%)
16466 '                                              移動先にウィンドウ表示
16468   VIL_WIN_X%(VIL_WIN_AN%)=VIL_WIN_X%
16470   VIL_WIN_Y%(VIL_WIN_AN%)=VIL_WIN_Y%
16472   VIL_WIN_W%(VIL_WIN_AN%)=VIL_WIN_W%
16474   VIL_WIN_Z%(VIL_WIN_AN%)=VIL_WIN_Z%
16476   VIL_VWM_R%=8
16478 ELSE
16480   VIL_WIN_X%=VIL_WIN_X%(VIL_WIN_AN%)
16482   VIL_WIN_Y%=VIL_WIN_Y%(VIL_WIN_AN%)
16484   VIL_VWM_R%=0
16486 ENDIF
16488 RETURN
16490 '
16492 *VIL_VWM_CLOSE
16494 '　ウィンドウ・クローズ
16496 '
16498 '入力変数         : なし
16500 '破壊変数         : なし
16502 '出力変数         : VWM_R%        : 2 : クローズ正常終了
16504 '呼出しモジュール : VWM_CL
16506 '
16508 GOSUB *VIL_VWM_CL
16510 VIL_VWM_R%=2
16512 RETURN
16514 '
16516 *VIL_VWM_HIDE
16518 '　ウィンドウ一時消去（ユーザインタフェース部）
16520 '
16522 '入力変数         : なし
16524 '破壊変数         : なし
16526 '出力変数         : E%            : 0 : 一時消去正常終了
16528 '                                   5 : 一時消去失敗（退避領域不足）
16530 '                   VWM_R%        : 4 : 一時消去実行
16532 '                                   0 : 一時消去中止（一時消去失敗）
16534 '呼出しモジュール : WIN_PMA,WIN_PMR,VWM_HD0,VWM_HD1
16536 '
16538 VIL_VWM_PMB%=VIL_WIN_PM%:GOSUB *VIL_WIN_PMA
16540 GOSUB *VIL_VWM_HD0
16542 IF VIL_E%=0 THEN
16544   WHILE MOUSE(2,0):WEND
16546   GOSUB *VIL_VWM_HD1
16548   VIL_VWM_R%=4
16550 ELSE
16552   VIL_VWM_R%=0
16554 ENDIF
16556 IF VIL_VWM_PMB% THEN GOSUB *VIL_WIN_PMR
16558 RETURN
16560 '
16562 *VIL_VWM_KHIDE
16564 '　ウィンドウ一時消去(キーボード操作版ユーザインタフェース部)
16566 '
16568 '入力変数         : なし
16570 '破壊変数         : なし
16572 '出力変数         : E%            : 0 : 一時消去正常終了
16574 '                                   5 : 一時消去失敗（退避領域不足）
16576 '                   VWM_R%        : 4 : 一時消去実行
16578 '                                   0 : 一時消去中止（一時消去失敗）
16580 '呼出しモジュール : WIN_PMA,WIN_PMR,VWM_HD0,VWM_HD1,VKEY_KY
16582 '
16584 WHILE INKEY$<>"":WEND
16586 VIL_VWM_PMB%=VIL_WIN_PM%:GOSUB *VIL_WIN_PMA
16588 GOSUB *VIL_VWM_HD0
16590 IF VIL_E%=0 THEN
16592   VIL_VKEY_KY%=-4:WHILE VIL_VKEY_KY%=-4:GOSUB *VIL_VKEY_KY:WEND
16594   GOSUB *VIL_VWM_HD1
16596   VIL_VWM_R%=4
16598 ENDIF
16600 IF VIL_VWM_PMB% THEN GOSUB *VIL_WIN_PMR
16602 RETURN
16604 '
16606 *VIL_VWM_HD0
16608 '　ウィンドウ一時消去（ウィンドウ一時退避処理）
16610 '
16612 '入力変数         : なし
16614 '破壊変数         : W0%,W1%,      : 座標一時格納
16616 '                   W2%,W3%
16618 '出力変数         : E%            : 0 : 一時消去正常終了
16620 '                                   5 : 一時消去失敗（退避領域不足）
16622 '呼出しモジュール : なし
16624 '
16626 VIL_E%=0
16628 VIL_W0%=VIL_WIN_X%(VIL_WIN_AN%)-VIL_WIN_LB%:                                 VIL_W1%=VIL_WIN_Y%(VIL_WIN_AN%)-VIL_WIN_UB%
16630 VIL_W2%=VIL_WIN_W%(VIL_WIN_AN%)+VIL_WIN_RB%:                                 VIL_W3%=VIL_WIN_Z%(VIL_WIN_AN%)+VIL_WIN_DB%
16632 GET@A(VIL_W0%,VIL_W1%)-(VIL_W2%,VIL_W3%),                                          VIL_WIN_BF%,VIL_WIN_BFO&(VIL_WIN_AN%)     'ウィンドウ保存
16634 IF VIL_E%=0 THEN
16636   PUT@A(VIL_W0%,VIL_W1%)-(VIL_W2%,VIL_W3%),                                          VIL_WIN_BF%,,,,,VIL_WIN_BFO&(VIL_WIN_AN%-1)   '背景復元
16638 ENDIF
16640 RETURN
16642 '
16644 *VIL_VWM_HD1
16646 '　ウィンドウ一時消去（ウィンドウ再表示処理）
16648 '
16650 '入力変数         : なし
16652 '破壊変数         : W0%,W1%,      : 座標一時格納
16654 '                   W2%,W3%
16656 '出力変数         : なし
16658 '呼出しモジュール : なし
16660 '
16662 VIL_W0%=VIL_WIN_X%(VIL_WIN_AN%)-VIL_WIN_LB%:                                 VIL_W1%=VIL_WIN_Y%(VIL_WIN_AN%)-VIL_WIN_UB%
16664 VIL_W2%=VIL_WIN_W%(VIL_WIN_AN%)+VIL_WIN_RB%:                                 VIL_W3%=VIL_WIN_Z%(VIL_WIN_AN%)+VIL_WIN_DB%
16666   PUT@A(VIL_W0%,VIL_W1%)-(VIL_W2%,VIL_W3%),                                          VIL_WIN_BF%,,,,,VIL_WIN_BFO&(VIL_WIN_AN%)   'ウィンドウ再表示
16668 RETURN
16670 '
16672 *VIL_VWM_HD2
16674 '　ウィンドウ一時消去（再退避・ウィンドウ再表示）
16676 '
16678 '入力変数         :   なし
16680 '破壊変数         : W0%,W1%,      : 座標一時格納
16682 '                   W2%,W3%
16684 '出力変数         :   なし
16686 '呼出しモジュール :   なし
16688 '
16690 VIL_W0%=VIL_WIN_X%(VIL_WIN_AN%)-VIL_WIN_LB%:                                 VIL_W1%=VIL_WIN_Y%(VIL_WIN_AN%)-VIL_WIN_UB%
16692 VIL_W2%=VIL_WIN_W%(VIL_WIN_AN%)+VIL_WIN_RB%:                                 VIL_W3%=VIL_WIN_Z%(VIL_WIN_AN%)+VIL_WIN_DB%
16694 GET@A(VIL_W0%,VIL_W1%)-(VIL_W2%,VIL_W3%),                                          VIL_WIN_BF%,VIL_WIN_BFO&(VIL_WIN_AN%-1) '退避した画面情報を更新
16696 PUT@A(VIL_W0%,VIL_W1%)-(VIL_W2%,VIL_W3%),                                          VIL_WIN_BF%,,,,,VIL_WIN_BFO&(VIL_WIN_AN%)   'ウィンドウ再表示
16698 RETURN
16700 '
16702 *VIL_VWM_RESIZE
16704 '　ウィンドウ・サイズ変更(ユーザインタフェース部)
16706 '
16708 '入力変数         : なし
16710 '破壊変数         : W0%           : 1:左辺移動 2:右辺移動
16712 '                   W1%           : 1:上辺移動 2:下辺移動
16714 '                   W2%,W3%       : 座標修正用
16716 '                   MX%,MY%       : マウス位置
16718 '出力変数         : E%            : 0 : サイズ変更正常終了
16720 '                                   5 : サイズ変更失敗（退避領域不足）
16722 '                   VWM_R%        : 16 : サイズ変更実行
16724 '                                    0 : サイズ変更中止
16726 '                                        （中止操作/サイズ変更失敗）
16728 '呼出しモジュール : WIN_PMA,WIN_PMR,VWM_RS
16730 '
16732 MOUSE 2,VIL_VWM_MCA2$,VIL_VWM_MCD2$,VIL_VWM_MCX2%,VIL_VWM_MCY2%
16734 MOUSE 1,VIL_MX%,VIL_MY%,1
16736 VIL_VWM_PMB%=VIL_WIN_PM%:GOSUB *VIL_WIN_PMA
16738 '
16740 VIL_W0%=VIL_WIN_W%-VIL_VWM_WL%-VIL_VWM_XM%+1
16742 VIL_W1%=VIL_WIN_Z%-VIL_VWM_ZL%-VIL_VWM_YM%+1
16744 VIL_W2%=VIL_WIN_X%+VIL_VWM_WL%-VIL_VWM_WM%-1
16746 VIL_W3%=VIL_WIN_Y%+VIL_VWM_ZL%-VIL_VWM_ZM%-1
16748 VIL_W0%=VIL_VWM_XM%-VIL_W0%*(VIL_W0%>0)
16750 VIL_W1%=VIL_VWM_YM%-VIL_W1%*(VIL_W1%>0)
16752 VIL_W2%=VIL_VWM_WM%-VIL_W2%*(VIL_W2%<0)
16754 VIL_W3%=VIL_VWM_ZM%-VIL_W3%*(VIL_W3%<0)
16756 MOUSE 4,VIL_W0%,VIL_W1%,VIL_W2%,VIL_W3%
16758 VIL_WIN_X%=VIL_WIN_X%-VIL_WIN_LB%:VIL_WIN_Y%=VIL_WIN_Y%-VIL_WIN_UB%:         VIL_WIN_W%=VIL_WIN_W%+VIL_WIN_RB%:VIL_WIN_Z%=VIL_WIN_Z%+VIL_WIN_DB%
16760 '
16762 VIL_W0%=0:VIL_W1%=0
16764 LINE(VIL_WIN_X%,VIL_WIN_Y%)-(VIL_WIN_W%,VIL_WIN_Z%),XOR,7,B
16766 WHILE MOUSE(2,0)
16768   IF MOUSE(9) OR MOUSE(10) THEN
16770     VIL_MX%=MOUSE(0):VIL_MY%=MOUSE(1)
16772     LINE(VIL_WIN_X%,VIL_WIN_Y%)-(VIL_WIN_W%,VIL_WIN_Z%),XOR,7,B
16774     IF VIL_MX%<=VIL_WIN_X%(VIL_WIN_AN%)-VIL_WIN_LB% THEN
16776       VIL_WIN_X%=VIL_MX%+(VIL_WIN_X%-VIL_MX%) MOD VIL_VWM_WD%
16778       VIL_WIN_W%=VIL_WIN_W%(VIL_WIN_AN%)+VIL_WIN_RB%:VIL_W0%=1
16780     ELSE IF VIL_MX%>=VIL_WIN_W%(VIL_WIN_AN%)+VIL_WIN_RB% THEN
16782       VIL_WIN_W%=VIL_MX%-(VIL_MX%-VIL_WIN_W%) MOD VIL_VWM_WD%
16784       VIL_WIN_X%=VIL_WIN_X%(VIL_WIN_AN%)-VIL_WIN_LB%:VIL_W0%=2
16786     ELSE
16788       IF VIL_W0%=1 THEN
16790         VIL_W2%=VIL_WIN_W%-VIL_VWM_XL%-(VIL_WIN_LB%+VIL_WIN_RB%-1)                                     -VIL_MX%
16792         VIL_W2%=VIL_MX%-VIL_W2%*(VIL_W2%<0)
16794         VIL_WIN_X%=VIL_W2%+(VIL_WIN_X%-VIL_W2%) MOD VIL_VWM_WD%
16796       ELSE IF VIL_W0%=2 THEN
16798         VIL_W2%=VIL_WIN_X%+VIL_VWM_XL%+(VIL_WIN_LB%+VIL_WIN_RB%-1)                                     -VIL_MX%
16800         VIL_W2%=VIL_MX%-VIL_W2%*(VIL_W2%>0)
16802         VIL_WIN_W%=VIL_W2%-(VIL_W2%-VIL_WIN_W%) MOD VIL_VWM_WD%
16804       ENDIF
16806     ENDIF
16808 '
16810     IF VIL_MY%<=VIL_WIN_Y%(VIL_WIN_AN%)-VIL_WIN_UB% THEN
16812       VIL_WIN_Y%=VIL_MY%+(VIL_WIN_Y%-VIL_MY%) MOD VIL_VWM_ZD%
16814       VIL_WIN_Z%=VIL_WIN_Z%(VIL_WIN_AN%)+VIL_WIN_DB%:VIL_W1%=1
16816     ELSE IF VIL_MY%>=VIL_WIN_Z%(VIL_WIN_AN%)+VIL_WIN_DB% THEN
16818       VIL_WIN_Z%=VIL_MY%-(VIL_MY%-VIL_WIN_Z%) MOD VIL_VWM_ZD%
16820       VIL_WIN_Y%=VIL_WIN_Y%(VIL_WIN_AN%)-VIL_WIN_UB%:VIL_W1%=2
16822     ELSE
16824       IF VIL_W1%=1 THEN
16826         VIL_W2%=VIL_WIN_Z%-VIL_VWM_YL%-(VIL_WIN_UB%+VIL_WIN_DB%-1)                                     -VIL_MY%
16828         VIL_W2%=VIL_MY%-VIL_W2%*(VIL_W2%<0)
16830         VIL_WIN_Y%=VIL_W2%+(VIL_WIN_Y%-VIL_W2%) MOD VIL_VWM_ZD
16832       ELSE IF VIL_W1%=2 THEN
16834         VIL_W2%=VIL_WIN_Y%+VIL_VWM_YL%+(VIL_WIN_UB%+VIL_WIN_DB%-1)                                     -VIL_MY%
16836         VIL_W2%=VIL_MY%-VIL_W2%*(VIL_W2%>0)
16838         VIL_WIN_Z%=VIL_W2%-(VIL_W2%-VIL_WIN_Z%) MOD VIL_VWM_ZD%
16840       ENDIF
16842     ENDIF
16844     LINE(VIL_WIN_X%,VIL_WIN_Y%)-(VIL_WIN_W%,VIL_WIN_Z%),XOR,7,B
16846   ENDIF
16848 WEND
16850 LINE(VIL_WIN_X%,VIL_WIN_Y%)-(VIL_WIN_W%,VIL_WIN_Z%),XOR,7,B
16852 IF MOUSE(2,1) THEN
16854   VIL_WIN_X%=VIL_WIN_X%(VIL_WIN_AN%)
16856   VIL_WIN_Y%=VIL_WIN_Y%(VIL_WIN_AN%)
16858   VIL_WIN_W%=VIL_WIN_W%(VIL_WIN_AN%)
16860   VIL_WIN_Z%=VIL_WIN_Z%(VIL_WIN_AN%)
16862 ELSE
16864   VIL_WIN_X%=VIL_WIN_X%+VIL_WIN_LB%:VIL_WIN_Y%=VIL_WIN_Y%+VIL_WIN_UB%
16866   VIL_WIN_W%=VIL_WIN_W%-VIL_WIN_RB%:VIL_WIN_Z%=VIL_WIN_Z%-VIL_WIN_DB%
16868   GOSUB *VIL_VWM_RS
16870 ENDIF
16872 MOUSE 2,VIL_VWM_MCA0$,VIL_VWM_MCD0$,VIL_VWM_MCX0%,VIL_VWM_MCY0%
16874 MOUSE 4,0,0,639,479
16876 IF VIL_VWM_PMB% THEN GOSUB *VIL_WIN_PMR
16878 RETURN
16880 '
16882 *VIL_VWM_KRESIZE
16884 '　ウィンドウ・サイズ変更(キー操作版ユーザインタフェース部)
16886 '
16888 '入力変数         : なし
16890 '破壊変数         : W0%           : 1:左辺移動 2:右辺移動
16892 '                   W1%           : 1:上辺移動 2:下辺移動
16894 '                   W2%,W3%,      : サイズ変更可能範囲
16896 '                   W4%,W5%
16898 '                   W6%           : 座標変化分
16900 '                   K$,KY%        : 入力キーとそのアスキーコード
16902 '出力変数         : E%            : 0 : サイズ変更正常終了
16904 '                                   5 : サイズ変更失敗（退避領域不足）
16906 '                   VWM_R%        : 16 : サイズ変更実行
16908 '                                    0 : サイズ変更中止
16910 '                                        （中止操作/サイズ変更失敗）
16912 '呼出しモジュール : WIN_PMA,WIN_PMR,VWM_RS
16914 '
16916 WHILE INKEY$<>"":WEND
16918 VIL_VWM_PMB%=VIL_WIN_PM%:GOSUB *VIL_WIN_PMA
16920 '
16922 VIL_W2%=VIL_WIN_W%-VIL_VWM_WL%-VIL_VWM_XM%+1
16924 VIL_W3%=VIL_WIN_Z%-VIL_VWM_ZL%-VIL_VWM_YM%+1
16926 VIL_W4%=VIL_WIN_X%+VIL_VWM_WL%-VIL_VWM_WM%-1
16928 VIL_W5%=VIL_WIN_Y%+VIL_VWM_ZL%-VIL_VWM_ZM%-1
16930 VIL_W2%=VIL_VWM_XM%-VIL_W2%*(VIL_W2%>0)
16932 VIL_W3%=VIL_VWM_YM%-VIL_W3%*(VIL_W3%>0)
16934 VIL_W4%=VIL_VWM_WM%-VIL_W4%*(VIL_W4%<0)
16936 VIL_W5%=VIL_VWM_ZM%-VIL_W5%*(VIL_W5%<0)
16938 VIL_WIN_X%=VIL_WIN_X%-VIL_WIN_LB%:VIL_WIN_Y%=VIL_WIN_Y%-VIL_WIN_UB%:         VIL_WIN_W%=VIL_WIN_W%+VIL_WIN_RB%:VIL_WIN_Z%=VIL_WIN_Z%+VIL_WIN_DB%
16940 '
16942 VIL_W0%=2:VIL_W1%=1
16944 LINE(VIL_WIN_X%,VIL_WIN_Y%)-(VIL_WIN_W%,VIL_WIN_Z%),XOR,7,B
16946 VIL_VKEY_KY%=0
16948 WHILE VIL_VKEY_KY%<>-1 AND VIL_VKEY_KY%<>-2       '取消 / 決定
16950 *VIL_VWM_KMOVE_W1
16952   GOSUB *VIL_VKEY_KY
16954   IF VIL_VKEY_KY%=-4 THEN *VIL_VWM_KMOVE_W1
16956   LINE(VIL_WIN_X%,VIL_WIN_Y%)-(VIL_WIN_W%,VIL_WIN_Z%),XOR,7,B
16958   VIL_W6%=((VIL_VKEY_KY%= -6)-(VIL_VKEY_KY%= -5))*VIL_VWM_WD%                         +((VIL_VKEY_KY%=-10)-(VIL_VKEY_KY%= -9))*VIL_VWM_WD%*8
16960 '                                                 ←→、拡張←→
16962   IF VIL_W0%=1 THEN                                   'MOVE WIN_X%
16964     VIL_WIN_X%=VIL_WIN_X%+VIL_W6%
16966     IF VIL_WIN_X%<VIL_W2% THEN
16968       VIL_WIN_W%=VIL_W4%-(VIL_W4%-VIL_WIN_W%) MOD VIL_VWM_WD%
16970       VIL_WIN_X%=VIL_WIN_X%(VIL_WIN_AN%)-VIL_WIN_LB%:VIL_W0%=2
16972     ELSE IF VIL_WIN_W%-VIL_VWM_XL%-(VIL_WIN_LB%+VIL_WIN_RB%-1)                          <VIL_WIN_X% THEN
16974       VIL_WIN_X%=VIL_WIN_X%(VIL_WIN_AN%)-VIL_WIN_LB%:VIL_W0%=2
16976       VIL_WIN_W%=VIL_WIN_X%+VIL_VWM_XL%+(VIL_WIN_LB%+VIL_WIN_RB%-1)                          +(VIL_WIN_W%-VIL_WIN_X%-VIL_VWM_XL%                                          -(VIL_WIN_LB%+VIL_WIN_RB%-1)) MOD VIL_VWM_WD%
16978     ENDIF
16980   ELSE                                                'MOVE WIN_W%
16982     VIL_WIN_W%=VIL_WIN_W%+VIL_W6%
16984     IF VIL_WIN_W%<VIL_WIN_X%+VIL_VWM_XL%+(VIL_WIN_LB%+VIL_WIN_RB%-1)               THEN
16986       VIL_WIN_W%=VIL_WIN_W%(VIL_WIN_AN%)+8:VIL_W0%=1
16988       VIL_WIN_X%=VIL_WIN_W%-VIL_VWM_XL%-(VIL_WIN_LB%+VIL_WIN_RB%-1)                          +(VIL_WIN_X%-VIL_WIN_W%+VIL_VWM_XL%                                          +(VIL_WIN_LB%+VIL_WIN_RB%-1)) MOD VIL_VWM_WD%
16990     ELSE IF VIL_W4%<VIL_WIN_W% THEN
16992       VIL_WIN_X%=VIL_W2%-(VIL_W2%-VIL_WIN_X%) MOD VIL_VWM_WD%
16994       VIL_WIN_W%=VIL_WIN_W%(VIL_WIN_AN%)+VIL_WIN_RB%:VIL_W0%=1
16996     ENDIF
16998   ENDIF
17000 '
17002    VIL_W6%=((VIL_VKEY_KY%= -7)-(VIL_VKEY_KY%= -8))*VIL_VWM_ZD%                         +((VIL_VKEY_KY%=-11)-(VIL_VKEY_KY%=-12))*VIL_VWM_ZD%*8
17004 '                                                 ↑↓、拡張↑↓
17006   IF VIL_W1%=1 THEN                                   'MOVE WIN_Y
17008     VIL_WIN_Y%=VIL_WIN_Y%+VIL_W6%
17010     IF VIL_WIN_Y%<VIL_W3% THEN
17012       VIL_WIN_Z%=VIL_W5%-(VIL_W5%-VIL_WIN_Z%) MOD VIL_VWM_ZD%
17014       VIL_WIN_Y%=VIL_WIN_Y%(VIL_WIN_AN%)-VIL_WIN_UB%:VIL_W1%=2
17016     ELSE IF VIL_WIN_Z%-VIL_VWM_YL%-(VIL_WIN_UB%+VIL_WIN_DB%-1)                          <VIL_WIN_Y% THEN
17018       VIL_WIN_Y%=VIL_WIN_Y%(VIL_WIN_AN%)-VIL_WIN_UB%:VIL_W1%=2
17020       VIL_WIN_Z%=VIL_WIN_Y%+VIL_VWM_YL%+(VIL_WIN_UB%+VIL_WIN_DB%-1)                          +(VIL_WIN_Z%-VIL_WIN_Y%-VIL_VWM_YL%                                          -(VIL_WIN_UB%+VIL_WIN_DB%-1)) MOD VIL_VWM_ZD%
17022     ENDIF
17024   ELSE                                                'MOVE WIN_Z
17026     VIL_WIN_Z%=VIL_WIN_Z%+VIL_W6%
17028     IF VIL_WIN_Z%<VIL_WIN_Y%+VIL_VWM_YL%+(VIL_WIN_UB%+VIL_WIN_DB%-1)               THEN
17030       VIL_WIN_Z%=VIL_WIN_Z%(VIL_WIN_AN%)+VIL_WIN_DB%:VIL_W1%=1
17032       VIL_WIN_Y%=VIL_WIN_Z%-VIL_VWM_YL%-(VIL_WIN_UB%+VIL_WIN_DB%-1)                          +(VIL_WIN_Y%-VIL_WIN_Z%+VIL_VWM_YL%                                          +(VIL_WIN_UB%+VIL_WIN_DB%-1)) MOD VIL_VWM_ZD%
17034     ELSE IF VIL_W5%<VIL_WIN_Z% THEN
17036       VIL_WIN_Y%=VIL_W3%-(VIL_W3%-VIL_WIN_Y%) MOD VIL_VWM_ZD%
17038       VIL_WIN_Z%=VIL_WIN_Z%(VIL_WIN_AN%)+VIL_WIN_DB%:VIL_W1%=1
17040     ENDIF
17042   ENDIF
17044   LINE(VIL_WIN_X%,VIL_WIN_Y%)-(VIL_WIN_W%,VIL_WIN_Z%),XOR,7,B
17046 WEND
17048 '
17050 LINE(VIL_WIN_X%,VIL_WIN_Y%)-(VIL_WIN_W%,VIL_WIN_Z%),XOR,7,B
17052 IF VIL_VKEY_KY%=-2 THEN
17054   VIL_WIN_X%=VIL_WIN_X%+VIL_WIN_LB%:VIL_WIN_Y%=VIL_WIN_Y%+VIL_WIN_UB%
17056   VIL_WIN_W%=VIL_WIN_W%-VIL_WIN_RB%:VIL_WIN_Z%=VIL_WIN_Z%-VIL_WIN_DB%
17058   GOSUB *VIL_VWM_RS
17060 ELSE
17062   VIL_WIN_X%=VIL_WIN_X%(VIL_WIN_AN%)
17064   VIL_WIN_Y%=VIL_WIN_Y%(VIL_WIN_AN%)
17066   VIL_WIN_W%=VIL_WIN_W%(VIL_WIN_AN%)
17068   VIL_WIN_Z%=VIL_WIN_Z%(VIL_WIN_AN%)
17070 ENDIF
17072 IF VIL_VWM_PMB% THEN GOSUB *VIL_WIN_PMR
17074 RETURN
17076 '
17078 *VIL_VWM_RS
17080 '　ウィンドウ・サイズ変更実行
17082 '
17084 '入力変数         : WIN_X%,WIN_Y% : リサイズ後のウィンドウ左上隅座標
17086 '                   WIN_W%,WIN_Z% : リサイズ後のウィンドウ右下隅座標
17088 '破壊変数         : なし
17090 '出力変数         : E%            : 0 : サイズ変更正常終了
17092 '                                   5 : サイズ変更失敗（退避領域不足）
17094 '                     E%=0 のとき
17096 '                       VWM_R%        : 16 : サイズ変更実行
17098 '                     E%=5 のとき
17100 '                       WIN_X%,WIN_Y% : サイズ変更前の
17102 '                       WIN_W%,WIN_Z% : 　ウィンドウ左上・右下隅座標
17104 '                       VWM_R%        : 0  : サイズ変更失敗
17106 '呼出しモジュール :   WIN_PMA,WIN_PMR,VWM_OP,VWM_CL
17108 '
17110 VIL_WIN_BFO&(VIL_WIN_AN%+1)=VIL_WIN_BFO&(VIL_WIN_AN%)                                                   +INT((INT((VIL_WIN_W%-VIL_WIN_X%+24)/8)                                           *(VIL_WIN_Z%-VIL_WIN_Y%+23)*4+1)/2)
17112 IF VIL_WIN_BFO&(VIL_WIN_AN%+1)<VIL_WIN_BFO&(VIL_WIN_AN%) THEN
17114   VIL_WIN_BFO&(VIL_WIN_AN%+1)=VIL_WIN_BFO&(VIL_WIN_AN%) 
17116 ENDIF
17118 VIL_E%=0
17120 GET@A(VIL_WIN_X%(VIL_WIN_AN%),VIL_WIN_Y%(VIL_WIN_AN%))                           -(VIL_WIN_W%(VIL_WIN_AN%),VIL_WIN_Z%(VIL_WIN_AN%))                            ,VIL_WIN_BF%,VIL_WIN_BFO&(VIL_WIN_AN%+1)         'ウィンドウ保存
17122 VIL_VWM_WX%=VIL_WIN_W%(VIL_WIN_AN%)-VIL_WIN_X%(VIL_WIN_AN%)
17124 VIL_VWM_WY%=VIL_WIN_Z%(VIL_WIN_AN%)-VIL_WIN_Y%(VIL_WIN_AN%)
17126 IF VIL_E%=0 THEN
17128   VIL_WIN_X%(VIL_WIN_AN%+1)=VIL_WIN_X%        'リサイズ後の位置保存
17130   VIL_WIN_Y%(VIL_WIN_AN%+1)=VIL_WIN_Y%
17132   VIL_WIN_W%(VIL_WIN_AN%+1)=VIL_WIN_W%
17134   VIL_WIN_Z%(VIL_WIN_AN%+1)=VIL_WIN_Z%
17136   GOSUB *VIL_VWM_CL                           'ウィンドウを一旦閉じる
17138 '
17140   IF VIL_VWM_N% THEN
17142     VIL_VWM_X%(VIL_VWM_N%)=VIL_WIN_X%(VIL_WIN_AN%+2)
17144     VIL_VWM_Y%(VIL_VWM_N%)=VIL_WIN_Y%(VIL_WIN_AN%+2)
17146     VIL_VWM_W%(VIL_VWM_N%)=VIL_WIN_W%(VIL_WIN_AN%+2)
17148     VIL_VWM_Z%(VIL_VWM_N%)=VIL_WIN_Z%(VIL_WIN_AN%+2)
17150   ELSE
17152     VIL_WIN_X%=VIL_WIN_X%(VIL_WIN_AN%+2)
17154     VIL_WIN_Y%=VIL_WIN_Y%(VIL_WIN_AN%+2)
17156     VIL_WIN_W%=VIL_WIN_W%(VIL_WIN_AN%+2)
17158     VIL_WIN_Z%=VIL_WIN_Z%(VIL_WIN_AN%+2)
17160   ENDIF
17162   VIL_VWM_AT%=VIL_VWM_AT%(VIL_WIN_AN%+1)
17164   VIL_VWM_T$ =VIL_VWM_T$(VIL_WIN_AN%+1)
17166   GOSUB *VIL_VWM_OP
17168   GOSUB *VIL_WIN_PMR
17170   PUT@A(0,0)-(VIL_VWM_WX%,VIL_VWM_WY%)                                              ,VIL_WIN_BF%,,,,,VIL_WIN_BFO&(VIL_WIN_AN%+1)
17172 '                                               ウィンドウ再表示
17174   GOSUB *VIL_WIN_PMA
17176   VIL_VWM_R%=16
17178 ELSE
17180   VIL_WIN_X%=VIL_WIN_X%(VIL_WIN_AN%)
17182   VIL_WIN_Y%=VIL_WIN_Y%(VIL_WIN_AN%)
17184   VIL_WIN_W%=VIL_WIN_W%(VIL_WIN_AN%)
17186   VIL_WIN_Z%=VIL_WIN_Z%(VIL_WIN_AN%)
17188   VIL_VWM_R%=0
17190 ENDIF
17192 RETURN
17194 '
17196 *VIL_VWM_XSCRLBAR
17198 '　水平スクロールバー
17200 '
17202 '入力変数         : なし
17204 '破壊変数         : なし
17206 '呼出しモジュール : SBAR_XOP
17208 '
17210 VIL_SBAR_Y%=VIL_WIN_Z%+3
17212 VIL_SBAR_X%=VIL_WIN_X%:VIL_SBAR_W%=VIL_WIN_W%
17214 VIL_SBAR_LBL%=VIL_VWM_XLBL%:VIL_SBAR_LIL%=VIL_VWM_XLIL%
17216 VIL_SBAR_LIP%=VIL_VWM_XLIP%:VIL_SBAR_LPL%=VIL_VWM_XLPL%
17218 VIL_VWM_PMB%=VIL_WIN_PM%:GOSUB *VIL_WIN_PMA
17220 GOSUB *VIL_SBAR_XOP
17222 IF VIL_VWM_PMB% THEN GOSUB *VIL_WIN_PMR
17224 VIL_VWM_XLIP%=VIL_SBAR_LIP%
17226 IF VIL_SBAR_R% THEN VIL_VWM_R%=4096
17228 RETURN
17230 '
17232 *VIL_VWM_YSCRLBAR
17234 '　垂直スクロールバー
17236 '
17238 '入力変数         : なし
17240 '破壊変数         : なし
17242 '呼出しモジュール : SBAR_YOP
17244 '
17246 VIL_SBAR_X%=VIL_WIN_W%+3
17248 VIL_SBAR_Y%=VIL_WIN_Y%:VIL_SBAR_Z%=VIL_WIN_Z%
17250 VIL_SBAR_LBL%=VIL_VWM_YLBL%:VIL_SBAR_LIL%=VIL_VWM_YLIL%
17252 VIL_SBAR_LIP%=VIL_VWM_YLIP%:VIL_SBAR_LPL%=VIL_VWM_YLPL%
17254 VIL_VWM_PMB%=VIL_WIN_PM%:GOSUB *VIL_WIN_PMA
17256 GOSUB *VIL_SBAR_YOP
17258 IF VIL_VWM_PMB% THEN GOSUB *VIL_WIN_PMR
17260 VIL_VWM_YLIP%=VIL_SBAR_LIP%
17262 IF VIL_SBAR_R% THEN VIL_VWM_R%=8192
17264 RETURN
17266 '
17268 '--------------------  スクロールバー・パッケージ　-----------
17270 '必要パッケージ : ウィンドウマネージャ
17272 '・スクロールバーの描画・操作入力処理
17274 '
17276 *VIL_SBAR_INITM
17278 '　スクロールバー・パッケージ初期化
17280 '
17282 '入力変数         : なし
17284 '破壊変数         : なし
17286 '出力変数         : なし
17288 '呼出しモジュール : なし
17290 '
17292 IF VIL_E%=0 THEN
17294 'パッケージ変数
17296 '   バー左右端Ｘ座標,上下端Ｙ座標
17298   VIL_SBAR_X%=0:VIL_SBAR_W%=0:VIL_SBAR_Y%=0:VIL_SBAR_Z%=0
17300 '   インジケータ左右端Ｘ座標,上下端Ｙ座標
17302   VIL_SBAR_IX%=0:VIL_SBAR_IW%=0:VIL_SBAR_IY%=0:VIL_SBAR_IZ%=0
17304 '   論理バー長,論理インジケータ長,論理インジケータ位置
17306 '                                    (0～LBL-1)
17308 '   論理ページ長
17310   VIL_SBAR_LBL%=0:VIL_SBAR_LIL%=0:VIL_SBAR_LIP%=0:VIL_SBAR_LPL%=0
17312 '   スクロールバー操作結果
17314   VIL_SBAR_R%=0
17316 ENDIF
17318 RETURN
17320 '
17322 *VIL_SBAR_ENVR
17324 '　アプリ環境ファイル読み込み
17326 '
17328 '入力変数         : なし
17330 '破壊変数         : なし
17332 '出力変数         : なし
17334 '呼出しモジュール : LNR
17336 '
17338 VIL_W0$="":WHILE VIL_W0$<>"#SBAR":GOSUB *VIL_LNR:WEND
17340 RETURN
17342 '
17344 *VIL_SBAR_ENVW
17346 '　アプリ環境ファイル書き込み
17348 '
17350 '入力変数         : なし
17352 '破壊変数         : なし
17354 '出力変数         : なし
17356 '呼出しモジュール : なし
17358 '
17360 PRINT #1,"#SBAR"
17362 RETURN
17364 '
17366 *VIL_SBAR_XOP
17368 '　水平スクロールバー操作
17370 '
17372 '入力変数         : MX%,MY%       : マウスクリック位置
17374 '                 : SBAR_X%,      : 左右端Ｘ座標
17376 '                   SBAR_W%
17378 '                   SBAR_Y%       : 上端Ｙ座標
17380 '                   SBAR_LBL%     : 論理バー長
17382 '                   SBAR_LIL%     : 論理インジケータ長
17384 '                   SBAR_LIP%     : 論理インジケータ位置
17386 '                   SBAR_LPL%     : 論理ページ長
17388 '破壊変数         : MX%,MY%       : マウス位置
17390 '                   W0%           : SBAR_LIP%保存
17392 '                   W1%           : インジケータ先端とＭＣのずれ
17394 '出力変数         : VIL_SBAR_R%   : スクロールバー操作結果
17396 '                                   0 : 操作無効／取消
17398 '                                   1 : SBAR_LIP% 1減少
17400 '                                   2 : SBAR_LIP% 1ページ減少
17402 '                                   3 : SBAR_LIP% ドラッグにより変化
17404 '                                   4 : SBAR_LIP% 1ページ増加
17406 '                                   5 : SBAR_LIP% 1増加
17408 '呼出しモジュール : SBAR_XIDRAW,SBAR_XIERASE
17410 '
17412 VIL_SBAR_R%=0
17414 VIL_SBAR_IX%=VIL_SBAR_X%+12                                                    +(VIL_SBAR_LIP%)*(VIL_SBAR_W%-VIL_SBAR_X%-24)/VIL_SBAR_LBL%
17416 VIL_SBAR_IW%=VIL_SBAR_IX%                                                      +VIL_SBAR_LIL%*(VIL_SBAR_W%-VIL_SBAR_X%-24)/VIL_SBAR_LBL%
17418 IF VIL_MX%<VIL_SBAR_X%+13 THEN
17420   IF VIL_SBAR_LIP%>0                                                             THEN GOSUB *VIL_SBAR_XIERASE:VIL_SBAR_LIP%=VIL_SBAR_LIP%-1:                       GOSUB *VIL_SBAR_XIDRAW:VIL_SBAR_R%=1
17422 ELSE IF VIL_MX%<VIL_SBAR_IX% THEN
17424   GOSUB *VIL_SBAR_XIERASE:                                                     VIL_SBAR_LIP%=VIL_SBAR_LIP%-VIL_SBAR_LPL%
17426   IF VIL_SBAR_LIP%<0 THEN VIL_SBAR_LIP%=0
17428   GOSUB *VIL_SBAR_XIDRAW:VIL_SBAR_R%=2
17430 ELSE IF VIL_MX%<VIL_SBAR_IW% THEN
17432   MOUSE 2,VIL_VWM_MCA1$,VIL_VWM_MCD1$,VIL_VWM_MCX1%,VIL_VWM_MCY1%
17434   MOUSE 1,VIL_MX%,VIL_MY%,1
17436   MOUSE 4,VIL_SBAR_X%+12+(VIL_MX%-VIL_SBAR_IX%),VIL_SBAR_Y%,                           VIL_SBAR_W%-12+(VIL_MX%-VIL_SBAR_IW%),VIL_SBAR_Y%+12
17438   VIL_W0%=VIL_SBAR_LIP%:VIL_W1%=VIL_MX%-VIL_SBAR_IX%
17440   WHILE MOUSE(2,0)
17442     VIL_MX%=MOUSE(9)
17444     IF VIL_MX% THEN
17446       VIL_MX%=MOUSE(0)
17448       GOSUB *VIL_SBAR_XIERASE
17450       VIL_SBAR_LIP%=(VIL_MX%-VIL_W1%-VIL_SBAR_X%-12)*VIL_SBAR_LBL%                                      /(VIL_SBAR_W%-VIL_SBAR_X%-24)
17452       GOSUB *VIL_SBAR_XIDRAW
17454     ENDIF
17456   WEND
17458   IF MOUSE(2,1) THEN                               '移動中止
17460     GOSUB *VIL_SBAR_XIERASE:VIL_SBAR_LIP%=VIL_W0%:                               GOSUB *VIL_SBAR_XIDRAW
17462   ELSE                                             '移動実行
17464     VIL_SBAR_R%=4
17466   ENDIF
17468   MOUSE 2,VIL_VWM_MCA0$,VIL_VWM_MCD0$,VIL_VWM_MCX0%,VIL_VWM_MCY0%
17470   MOUSE 4,0,0,639,479
17472 ELSE IF VIL_MX%<VIL_SBAR_W%-13 THEN
17474   GOSUB *VIL_SBAR_XIERASE:                                                     VIL_SBAR_LIP%=VIL_SBAR_LIP%+VIL_SBAR_LPL%
17476   IF VIL_SBAR_LIP%>VIL_SBAR_LBL%-VIL_SBAR_LIL%                                   THEN VIL_SBAR_LIP%=VIL_SBAR_LBL%-VIL_SBAR_LIL%
17478   GOSUB *VIL_SBAR_XIDRAW:VIL_SBAR_R%=4
17480 ELSE
17482   IF VIL_SBAR_LIP%+VIL_SBAR_LIL%<VIL_SBAR_LBL%                                   THEN GOSUB *VIL_SBAR_XIERASE:VIL_SBAR_LIP%=VIL_SBAR_LIP%+1:                       GOSUB *VIL_SBAR_XIDRAW:VIL_SBAR_R%=5
17484 ENDIF
17486 RETURN
17488 '
17490 *VIL_SBAR_YOP
17492 '　垂直スクロールバー操作
17494 '
17496 '入力変数         : MX%,MY%       : マウスクリック位置
17498 '                 : SBAR_X%,      : 左端Ｘ座標
17500 '                   SBAR_Y%       : 上下端Ｙ座標
17502 '                   SBAR_Z%
17504 '                   SBAR_LBL%     : 論理バー長
17506 '                   SBAR_LIL%     : 論理インジケータ長
17508 '                   SBAR_LIP%     : 論理インジケータ位置
17510 '                   SBAR_LPL%     : 論理ページ長
17512 '破壊変数         : MX%,MY%       : マウス位置
17514 '                   W0%           : SBAR_LIP%保存
17516 '                   W1%           : インジケータ先端とＭＣのずれ
17518 '出力変数         : VIL_SBAR_R%   : スクロールバー操作結果
17520 '                                   0 : 操作無効／取消
17522 '                                   1 : SBAR_LIP% 1減少
17524 '                                   2 : SBAR_LIP% 1ページ減少
17526 '                                   3 : SBAR_LIP% ドラッグにより変化
17528 '                                   4 : SBAR_LIP% 1ページ増加
17530 '                                   5 : SBAR_LIP% 1増加
17532 '呼出しモジュール : SBAR_YIDRAW,SBAR_YIERASE
17534 '
17536 VIL_SBAR_R%=0
17538 VIL_SBAR_IY%=VIL_SBAR_Y%+12                                                    +(VIL_SBAR_LIP%)*(VIL_SBAR_Z%-VIL_SBAR_Y%-24)/VIL_SBAR_LBL%
17540 VIL_SBAR_IZ%=VIL_SBAR_IY%                                                      +VIL_SBAR_LIL%*(VIL_SBAR_Z%-VIL_SBAR_Y%-24)/VIL_SBAR_LBL%
17542 IF VIL_MY%<VIL_SBAR_Y%+13 THEN
17544   IF VIL_SBAR_LIP%>0                                                             THEN GOSUB *VIL_SBAR_YIERASE:VIL_SBAR_LIP%=VIL_SBAR_LIP%-1:                       GOSUB *VIL_SBAR_YIDRAW:VIL_SBAR_R%=1
17546 ELSE IF VIL_MY%<VIL_SBAR_IY% THEN
17548   GOSUB *VIL_SBAR_YIERASE:                                                     VIL_SBAR_LIP%=VIL_SBAR_LIP%-VIL_SBAR_LPL%
17550   IF VIL_SBAR_LIP%<0 THEN VIL_SBAR_LIP%=0
17552   GOSUB *VIL_SBAR_YIDRAW:VIL_SBAR_R%=2
17554 ELSE IF VIL_MY%<VIL_SBAR_IZ% THEN
17556   MOUSE 2,VIL_VWM_MCA1$,VIL_VWM_MCD1$,VIL_VWM_MCX1%,VIL_VWM_MCY1%
17558   MOUSE 1,VIL_MX%,VIL_MY%,1
17560   MOUSE 4,VIL_SBAR_X%   ,VIL_SBAR_Y%+12+(VIL_MY%-VIL_SBAR_IY%),                        VIL_SBAR_X%+12,VIL_SBAR_Z%-12+(VIL_MY%-VIL_SBAR_IZ%)
17562   VIL_W0%=VIL_SBAR_LIP%:VIL_W1%=VIL_MY%-VIL_SBAR_IY%
17564   WHILE MOUSE(2,0)
17566     VIL_MY%=MOUSE(10)
17568     IF VIL_MY% THEN
17570       VIL_MY%=MOUSE(1)
17572       GOSUB *VIL_SBAR_YIERASE
17574       VIL_SBAR_LIP%=(VIL_MY%-VIL_W1%-VIL_SBAR_Y%-12)*VIL_SBAR_LBL%                                      /(VIL_SBAR_Z%-VIL_SBAR_Y%-24)
17576       GOSUB *VIL_SBAR_YIDRAW
17578     ENDIF
17580   WEND
17582   IF MOUSE(2,1) THEN                               '移動中止
17584     GOSUB *VIL_SBAR_YIERASE:VIL_SBAR_LIP%=VIL_W0%:                               GOSUB *VIL_SBAR_YIDRAW
17586   ELSE                                             '移動実行
17588     VIL_SBAR_R%=4
17590   ENDIF
17592   MOUSE 2,VIL_VWM_MCA0$,VIL_VWM_MCD0$,VIL_VWM_MCX0%,VIL_VWM_MCY0%
17594   MOUSE 4,0,0,639,479
17596 ELSE IF VIL_MY%<VIL_SBAR_Z%-13 THEN
17598   GOSUB *VIL_SBAR_YIERASE:                                                     VIL_SBAR_LIP%=VIL_SBAR_LIP%+VIL_SBAR_LPL%
17600   IF VIL_SBAR_LIP%>VIL_SBAR_LBL%-VIL_SBAR_LIL%                                   THEN VIL_SBAR_LIP%=VIL_SBAR_LBL%-VIL_SBAR_LIL%
17602   GOSUB *VIL_SBAR_YIDRAW:VIL_SBAR_R%=4
17604 ELSE
17606   IF VIL_SBAR_LIP%+VIL_SBAR_LIL%<VIL_SBAR_LBL%                                   THEN GOSUB *VIL_SBAR_YIERASE:VIL_SBAR_LIP%=VIL_SBAR_LIP%+1:                       GOSUB *VIL_SBAR_YIDRAW:VIL_SBAR_R%=5
17608 ENDIF
17610 RETURN
17612 '
17614 *VIL_SBAR_XDRAW
17616 '　水平スクロールバー描画
17618 '
17620 '入力変数         : SBAR_X%,      : 左右端Ｘ座標
17622 '                   SBAR_W%
17624 '                   SBAR_Y%       : 上端Ｙ座標
17626 '                   SBAR_LBL%     : 論理バー長
17628 '                   SBAR_LIL%     : 論理インジケータ長
17630 '                   SBAR_LIP%     : 論理インジケータ位置
17632 '破壊変数         : なし
17634 '出力変数         : なし
17636 '呼出しモジュール : SBAR_XIDRAW
17638 '
17640 ' 
17642 LINE(VIL_SBAR_X%,VIL_SBAR_Y%)-(VIL_SBAR_W%,VIL_SBAR_Y%+10),PSET,%2,BF
17644 CONNECT(VIL_SBAR_X%+11,VIL_SBAR_Y%+10)                                             -(VIL_SBAR_W%-11,VIL_SBAR_Y%+10)                                             -(VIL_SBAR_W%-11,VIL_SBAR_Y%   ),%3
17646 CONNECT(VIL_SBAR_X%+11,VIL_SBAR_Y%+ 9)                                             -(VIL_SBAR_X%+11,VIL_SBAR_Y%   )                                             -(VIL_SBAR_W%-12,VIL_SBAR_Y%   ),%1
17648 GOSUB *VIL_SBAR_XIDRAW
17650 RETURN
17652 '
17654 *VIL_SBAR_YDRAW
17656 '　垂直スクロールバー描画
17658 '
17660 '入力変数         : SBAR_Y%,      : 上下端Ｙ座標
17662 '                   SBAR_Z%
17664 '                   SBAR_X%       : 左端Ｘ座標
17666 '                   SBAR_LBL%     : 論理バー長
17668 '                   SBAR_LIL%     : 論理インジケータ長
17670 '                   SBAR_LIP%     : 論理インジケータ位置
17672 '破壊変数         : なし
17674 '出力変数         : なし
17676 '呼出しモジュール : SBAR_YIDRAW
17678 '
17680 ' 
17682 LINE(VIL_SBAR_X%,VIL_SBAR_Y%)-(VIL_SBAR_X%+10,VIL_SBAR_Z%),PSET,%2,BF
17684 CONNECT(VIL_SBAR_X%   ,VIL_SBAR_Z%-11)                                             -(VIL_SBAR_X%+10,VIL_SBAR_Z%-11)                                             -(VIL_SBAR_X%+10,VIL_SBAR_Y%+11),%3
17686 CONNECT(VIL_SBAR_X%   ,VIL_SBAR_Z%-12)                                             -(VIL_SBAR_X%   ,VIL_SBAR_Y%+11)                                             -(VIL_SBAR_X%+ 9,VIL_SBAR_Y%+11),%1
17688 GOSUB *VIL_SBAR_YIDRAW
17690 RETURN
17692 '
17694 *VIL_SBAR_XIDRAW
17696 '　水平インジケータ描画
17698 '
17700 '入力変数         : SBAR_X%,      : 左右端Ｘ座標
17702 '                   SBAR_W%
17704 '                   SBAR_Y%       : 上端Ｙ座標
17706 '                   SBAR_LBL%     : 論理バー長
17708 '                   SBAR_LIL%     : 論理インジケータ長
17710 '                   SBAR_LIP%     : 論理インジケータ位置
17712 '破壊変数         : なし
17714 '出力変数         : なし
17716 '呼出しモジュール : なし
17718 '
17720 VIL_SBAR_IX%=VIL_SBAR_X%+12                                                    +(VIL_SBAR_LIP%)*(VIL_SBAR_W%-VIL_SBAR_X%-24)/VIL_SBAR_LBL%
17722 VIL_SBAR_IW%=VIL_SBAR_IX%                                                      +VIL_SBAR_LIL%*(VIL_SBAR_W%-VIL_SBAR_X%-24)/VIL_SBAR_LBL%
17724 CONNECT(VIL_SBAR_IX%,VIL_SBAR_Y%+9)                                                -(VIL_SBAR_IX%,VIL_SBAR_Y%+1)                                                -(VIL_SBAR_IW%,VIL_SBAR_Y%+1),%3
17726 CONNECT(VIL_SBAR_IX%+1,VIL_SBAR_Y%+9)                                              -(VIL_SBAR_IW%  ,VIL_SBAR_Y%+9)                                              -(VIL_SBAR_IW%  ,VIL_SBAR_Y%+2),%1
17728 RETURN
17730 '
17732 *VIL_SBAR_YIDRAW
17734 '　垂直インジケータ描画
17736 '
17738 '入力変数         : SBAR_Y%,      : 上下端Ｙ座標
17740 '                   SBAR_Z%
17742 '                   SBAR_X%       : 左端Ｘ座標
17744 '                   SBAR_LBL%     : 論理バー長
17746 '                   SBAR_LIL%     : 論理インジケータ長
17748 '                   SBAR_LIP%     : 論理インジケータ位置
17750 '破壊変数         : なし
17752 '出力変数         : なし
17754 '呼出しモジュール : なし
17756 '
17758 VIL_SBAR_IY%=VIL_SBAR_Y%+12                                                    +(VIL_SBAR_LIP%)*(VIL_SBAR_Z%-VIL_SBAR_Y%-24)/VIL_SBAR_LBL%
17760 VIL_SBAR_IZ%=VIL_SBAR_IY%                                                      +VIL_SBAR_LIL%*(VIL_SBAR_Z%-VIL_SBAR_Y%-24)/VIL_SBAR_LBL%
17762 CONNECT(VIL_SBAR_X%+1,VIL_SBAR_IZ%)                                                -(VIL_SBAR_X%+1,VIL_SBAR_IY%)                                                -(VIL_SBAR_X%+9,VIL_SBAR_IY%),%3
17764 CONNECT(VIL_SBAR_X%+2,VIL_SBAR_IZ%  )                                              -(VIL_SBAR_X%+9,VIL_SBAR_IZ%  )                                              -(VIL_SBAR_X%+9,VIL_SBAR_IY%+1),%1
17766 RETURN
17768 '
17770 *VIL_SBAR_XIERASE
17772 '　水平インジケータ消去
17774 '
17776 '入力変数         : SBAR_X%,      : 左右端Ｘ座標
17778 '                   SBAR_W%
17780 '                   SBAR_Y%       : 上端Ｙ座標
17782 '                   SBAR_LBL%     : 論理バー長
17784 '                   SBAR_LIL%     : 論理インジケータ長
17786 '                   SBAR_LIP%     : 論理インジケータ位置
17788 '破壊変数         : なし
17790 '出力変数         : なし
17792 '呼出しモジュール : なし
17794 '
17796 VIL_SBAR_IX%=VIL_SBAR_X%+12                                                    +(VIL_SBAR_LIP%)*(VIL_SBAR_W%-VIL_SBAR_X%-24)/VIL_SBAR_LBL%
17798 VIL_SBAR_IW%=VIL_SBAR_IX%                                                      +VIL_SBAR_LIL%*(VIL_SBAR_W%-VIL_SBAR_X%-24)/VIL_SBAR_LBL%
17800 LINE(VIL_SBAR_IX%,VIL_SBAR_Y%+1)-(VIL_SBAR_IW%,VIL_SBAR_Y%+9),                   PSET,%2,BF
17802 RETURN
17804 '
17806 *VIL_SBAR_YIERASE
17808 '　垂直インジケータ消去
17810 '
17812 '入力変数         : SBAR_Y%,      : 上下端Ｙ座標
17814 '                   SBAR_Z%
17816 '                   SBAR_X%       : 左端Ｘ座標
17818 '                   SBAR_LBL%     : 論理バー長
17820 '                   SBAR_LIL%     : 論理インジケータ長
17822 '                   SBAR_LIP%     : 論理インジケータ位置
17824 '破壊変数         : なし
17826 '出力変数         : なし
17828 '呼出しモジュール : なし
17830 '
17832 VIL_SBAR_IY%=VIL_SBAR_Y%+12                                                    +(VIL_SBAR_LIP%)*(VIL_SBAR_Z%-VIL_SBAR_Y%-24)/VIL_SBAR_LBL%
17834 VIL_SBAR_IZ%=VIL_SBAR_IY%                                                      +VIL_SBAR_LIL%*(VIL_SBAR_Z%-VIL_SBAR_Y%-24)/VIL_SBAR_LBL%
17836 LINE(VIL_SBAR_X%+1,VIL_SBAR_IY%)-(VIL_SBAR_X%+9,VIL_SBAR_IZ%),                   PSET,%2,BF
17838 RETURN
17840 '
17842 '--------------------  選択パッケージ　--------------------
17844 '必要パッケージ : メニュー選択、仮想キー
17846 '・実行/取消、はい/いいえ、確認など入力
17848 '
17850 *VIL_SEL_INITM
17852 '　選択パッケージ初期化
17854 '
17856 '入力変数         :   なし
17858 '破壊変数         :   なし
17860 '出力変数         :   なし
17862 '呼出しモジュール :   なし
17864 '
17866 'パッケージ変数   :   なし
17868 '
17870 RETURN
17872 *VIL_SEL_ENVR
17874 '　アプリ環境ファイル読み込み
17876 '
17878 '入力変数         : なし
17880 '破壊変数         : なし
17882 '出力変数         : なし
17884 '呼出しモジュール : LNR
17886 '
17888 VIL_W0$="":WHILE VIL_W0$<>"#SEL":GOSUB *VIL_LNR:WEND
17890 RETURN
17892 '
17894 *VIL_SEL_ENVW
17896 '　アプリ環境ファイル書き込み
17898 '
17900 '入力変数         : なし
17902 '破壊変数         : なし
17904 '出力変数         : なし
17906 '呼出しモジュール : なし
17908 '
17910 PRINT #1,"#SEL"
17912 RETURN
17914 '
17916 *VIL_SEL_OK
17918 '　「確認」選択
17920 '
17922 '入力変数         : X%,Y%         : 「確認」ボックス左上隅座標
17924 '                                     (40x24ドット)
17926 '破壊変数         : W%,Z%         : 左上隅ボックス右下隅座標
17928 '                   XN%,YN%       : ボックス縦横個数
17930 '                   XL%,YL%       : ボックス縦横間隔(左上隅座標の間隔)
17932 '                   C%            : ボックスカーソル（ＢＣ）色
17934 '出力変数 :         KN%           : 入力番号
17936 '                           1       :決定 / 選択　　（1:確認）
17938 '                          -1       :取消
17940 '                          -2       :ボックス外を左クリック
17942 '                          -3       :非対応キー入力
17944 '                         -13       :ウィンドウマネージャ起動キー
17946 '                   KY%           : 入力キーのアスキーコード
17948 '                                  （入力なし:0 ）
17950 '                   K$            : 入力キー
17952 '                                   （入力なし:""）
17954 '                   MX%,MY%       : 左クリック位置(絶対座標)
17956 '                   MW%,MZ%       : 左クリック位置(相対座標)
17958 '                                   (ともにKN%=-2 の時有効)
17960 '                            ただしウィンドウ外クリックの時 MW%=-1
17962 '                   VKEY_KY%      : 選択キーコード
17964 '                   MSEL_BC%      : -1 （ＢＣ表示済） 
17966 '呼出しモジュール : MSEL_M,MSEL_BC
17968 '
17970 SYMBOL(VIL_X%+4,VIL_Y%+4),"確認",1,1,7
17972 LINE(VIL_X%+2,VIL_Y%+2)-(VIL_X%+37,VIL_Y%+21),PSET,7,B
17974 VIL_W%=VIL_X%+39:VIL_Z%=VIL_Y%+23
17976 VIL_XN%=1:VIL_YN%=1:VIL_C%=15:VIL_MSEL_MN%=0:VIL_MSEL_BC%=0
17978 VIL_MSEL_BB%=1:VIL_MSEL_BE%=1
17980 GOSUB *VIL_MSEL_M
17982 GOSUB *VIL_MSEL_BC
17984 RETURN
17986 '
17988 *VIL_SEL_YN
17990 '　「はい」「いいえ」　選択
17992 '
17994 '入力変数         : X%,Y%         : 「はい」ボックス左上隅座標
17996 '                                     (56x24ドット)
17998 '                   MSEL_BN%      : ボックスカーソル初期位置
18000 '                                     (1:はい / 2:いいえ)
18002 '破壊変数         : W%,Z%         : 左上隅ボックス右下隅座標
18004 '                   XN%,YN%       : ボックス縦横個数
18006 '                   XL%,YL%       : ボックス縦横間隔(左上隅座標の間隔)
18008 '                   C%            : ボックスカーソル（ＢＣ）色
18010 '出力変数 :         KN%           : 入力番号
18012 '                           1,2     :決定 / 選択 （1:はい / 2:いいえ）
18014 '                          -1       :取消
18016 '                          -2       :ボックス外を左クリック
18018 '                          -3       :非対応キー入力
18020 '                         -13       :ウィンドウマネージャ起動キー
18022 '                   KY%           : 入力キーのアスキーコード
18024 '                                  （入力なし:0 ）
18026 '                   K$            : 入力キー
18028 '                                   （入力なし:""）
18030 '                   MX%,MY%       : 左クリック位置(絶対座標)
18032 '                   MW%,MZ%       : 左クリック位置(相対座標)
18034 '                                   (ともにKN%=-2 の時有効)
18036 '                            ただしウィンドウ外クリックの時 MW%=-1
18038 '                   VKEY_KY%      : 選択キーコード
18040 '                   MSEL_BN%      : 最後のＢＣ位置 (KN<1のときも有効)
18042 '                   MSEL_BC%      : -1 （ＢＣ表示済） 
18044 '呼出しモジュール : MSEL_M,MSEL_BC
18046 '
18048 SYMBOL(VIL_X%+4,VIL_Y%+4),"はい    いいえ",1,1,7
18050 LINE(VIL_X%+ 2,VIL_Y%+2)-(VIL_X%+ 53,VIL_Y%+21),PSET,7,B
18052 LINE(VIL_X%+66,VIL_Y%+2)-(VIL_X%+117,VIL_Y%+21),PSET,7,B
18054 VIL_W%=VIL_X%+55:VIL_Z%=VIL_Y%+23
18056 VIL_XL%=64:VIL_XN%=2:VIL_YN%=1:VIL_C%=15:VIL_MSEL_BD%=0
18058 VIL_MSEL_MN%=0:VIL_MSEL_BC%=0:VIL_MSEL_BB%=1:VIL_MSEL_BE%=2
18060 GOSUB *VIL_MSEL_M
18062 GOSUB *VIL_MSEL_BC
18064 IF VIL_KN%=-1 THEN VIL_KN%=2      '取消入力なら「いいえ」
18066 RETURN
18068 '
18070 *VIL_SEL_DO
18072 '　「実行」「取消」選択
18074 '   (0,0)-(87,23)
18076 '
18078 '入力変数         : X%,Y%         : 「実行」ボックス左上隅座標
18080 '                                     (40x24ドット)
18082 '                   MSEL_BN%      : ボックスカーソル初期位置
18084 '                                     (1:実行 / 2:取消)
18086 '破壊変数         : W%,Z%         : 左上隅ボックス右下隅座標
18088 '                   XN%,YN%       : ボックス縦横個数
18090 '                   XL%,YL%       : ボックス縦横間隔(左上隅座標の間隔)
18092 '                   C%            : ボックスカーソル（ＢＣ）色
18094 '出力変数 :         KN%           : 入力番号
18096 '                           1,2     :決定 / 選択 （1:実行 / 2:取消）
18098 '                          -1       :取消
18100 '                          -2       :ボックス外を左クリック
18102 '                          -3       :非対応キー入力
18104 '                         -13       :ウィンドウマネージャ起動キー
18106 '                   KY%           : 入力キーのアスキーコード
18108 '                                  （入力なし:0 ）
18110 '                   K$            : 入力キー
18112 '                                   （入力なし:""）
18114 '                   MX%,MY%       : 左クリック位置(絶対座標)
18116 '                   MW%,MZ%       : 左クリック位置(相対座標)
18118 '                                   (ともにKN%=-2 の時有効)
18120 '                            ただしウィンドウ外クリックの時 MW%=-1
18122 '                   VKEY_KY%      : 選択キーコード
18124 '                   MSEL_BN%      : 最後のＢＣ位置 (KN<1のときも有効)
18126 '                   MSEL_BC%      : -1 （ＢＣ表示済） 
18128 '呼出しモジュール : MSEL_M,MSEL_BC
18130 '
18132 SYMBOL(VIL_X%+4,VIL_Y%+4),"実行  取消",1,1,7
18134 LINE(VIL_X%+ 2,VIL_Y%+2)-(VIL_X%+37,VIL_Y%+21),PSET,7,B
18136 LINE(VIL_X%+50,VIL_Y%+2)-(VIL_X%+85,VIL_Y%+21),PSET,7,B
18138 VIL_W%=VIL_X%+39:VIL_Z%=VIL_Y%+23
18140 VIL_XL%=48:VIL_XN%=2:VIL_YN%=1:VIL_C%=15:VIL_MSEL_BD%=0
18142 VIL_MSEL_MN%=0:VIL_MSEL_BC%=0:VIL_MSEL_BB%=1:VIL_MSEL_BE%=2
18144 GOSUB *VIL_MSEL_M
18146 GOSUB *VIL_MSEL_BC
18148 IF VIL_KN%=-1 THEN VIL_KN%=2      '取消入力なら「いいえ」
18150 RETURN
18152 '
18154 'SCALE--------2---------3---------4---------5---------6---------7-----*--*8
