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