45000 '<<<<<<<<<<<<<<<<<<<<  Visual Interface Library  >>>>>>>>>>>>>>>>>>>>
45004 '<<<<<<<<<<<<<<<<<<<<       　Ｖ　Ｉ　Ｌ　       >>>>>>>>>>>>>>>>>>>>
45008 '<<<<<<<<<<<< ウィンドウマネージャ・パッケージ・ファイル >>>>>>>>>>>>
45012 '
45016 '--------------------  バージョンチェック　--------------------
45020 '
45024 *VIL_VWM_VER
45028 VIL_VER%=300                                  'ＶＩＬ VER3.00
45032 RETURN
45036 '
45040 '--------------------  ウィンドウマネージャ・パッケージ　-----------
45044 '必要パッケージ : ウィンドウ／メニュー選択／入力
45048 '・ウィンドウ・オープン / クローズ処理代替
45052 '・ウィンドウ外枠・スイッチ等の描画
45056 '・ウィンドウ移動・サイズ変更・スタック順序変更（現在未サポート）
45060 '・マウスカーソル資源の定義
45064 '
45068 *VIL_VWM_INITM
45072 '　ウィンドウマネージャ・パッケージ初期化
45076 '
45080 '入力変数         : W0%           : 最大ウィンドウ通し番号
45084 '                   W1%           : ウィンドウ背景色用パレット番号
45088 '破壊変数         : なし
45092 '出力変数         : なし
45096 '呼出しモジュール : なし
45100 '使用環境 :・ページ０が１６色グラフィック画面
45104 '　　　　　・マウス表示ページ０
45108 '　　　　　・マウス移動範囲　(0,0)-(639,479)
45112 '          ・ウィンドウ・サイズ : 最小32x0 / 最大624x458
45116 'パッケージ変数
45120 VIL_VWM_AT%=  0                 'アクティブウィンドウ属性
45124 '                                (有効な属性の和を指定)
45128 '             1 : MENU        メニュースイッチ表示
45132 '             2 : CLOSE       クローズ可能（スイッチ表示）
45136 '             4 : HIDE        一時消去可能（スイッチ表示）
45140 '             8 : MOVE        移動可能
45144 '            16 : RESIZE      サイズ変更可能（スイッチ表示）
45148 '            32 : LOWER       そのウィンドウを他のウィンドウの下に
45152 '                             することを許す?
45156 '                             （現バージョンでは未サポート）
45160 VIL_VWM_T$=""                   'アクティブウィンドウ・タイトル
45164 VIL_VWM_ATB%= 0:VIL_VWM_PMB%= 0 'VWM_AT%,WIN_PM% 保存
45168 VIL_VWM_WX%=  0:VIL_VWM_WY% = 0 '座標ワーク
45172 VIL_VWM_XM%=  8:VIL_VWM_YM%= 14 '移動/リサイズ時左上隅座標最小値
45176 VIL_VWM_WM%=631:VIL_VWM_ZM%=471 '移動/リサイズ時右下隅座標最大値
45180 VIL_VWM_XL%= 32:VIL_VWM_YL%=  8 'リサイズ時のＸ・Ｙ方向長さ最小値
45184 VIL_VWM_WL%=624:VIL_VWM_ZL%=458 'リサイズ時のＸ・Ｙ方向長さ最大値
45188 VIL_VWM_XD%=  1:VIL_VWM_YD%=  1 '移動時の単位ドット数
45192 VIL_VWM_WD%=  1:VIL_VWM_ZD%=  1 'リサイズ時の単位ドット数
45196 VIL_VWM_N%=0                    'ウィンドウ通し番号 (０のとき無効)
45200 VIL_VWM_R%=0                    'ウィンドウマネージャ処理結果
45204 VIL_VWM_NMAX%=VIL_W0%           '最大ウィンドウ通し番号
45208 VIL_VWM_CB%=VIL_W1%             'ウィンドウ背景色用パレット番号
45212 DIM VIL_VWM_X%(VIL_W0%),VIL_VWM_Y%(VIL_W0%)   '通し番号での
45216 DIM VIL_VWM_W%(VIL_W0%),VIL_VWM_Z%(VIL_W0%)   'ウィンドウ位置保存
45220 DIM VIL_VWM_AT%(VIL_WIN_ANMAX%) 'ウィンドウ属性
45224 DIM VIL_VWM_T$(VIL_WIN_ANMAX%)  'ウィンドウ・タイトル
45228 DIM VIL_VWM_N%(VIL_WIN_ANMAX%)  'ウィンドウ通し番号保存
45232 '     枠・背景色の（G,R,B）輝度
45236 DIM VIL_VWM_CF%(2),VIL_VWM_CB%(2)
45240 '
45244 '     CNF読み込み
45248 VIL_W0$="":WHILE VIL_W0$<>"#VWM":GOSUB *VIL_LNR:WEND
45252 '     標準マウスカーソル
45256 GOSUB *VIL_LNR:VIL_MCX0%=VAL(VIL_W0$):                                                       VIL_MCY0%=VAL(MID$(VIL_W0$,INSTR(VIL_W0$,",")+1))
45260 GOSUB *VIL_LNR
45264 FOR VIL_I%=1 TO 63 STEP 2:                                                     VIL_VWM_MCA0$=VIL_VWM_MCA0$+CHR$(VAL("&H"+MID$(VIL_W0$,VIL_I%,2))):        NEXT
45268 GOSUB *VIL_LNR
45272 FOR VIL_I%=1 TO 63 STEP 2:                                                     VIL_VWM_MCD0$=VIL_VWM_MCD0$+CHR$(VAL("&H"+MID$(VIL_W0$,VIL_I%,2))):        NEXT
45276 '     ウィンドウ移動用マウスカーソル
45280 GOSUB *VIL_LNR:VIL_MCX1%=VAL(VIL_W0$):                                                      VIL_MCY1%=VAL(MID$(VIL_W0$,INSTR(VIL_W0$,",")+1))
45284 GOSUB *VIL_LNR
45288 FOR VIL_I%=1 TO 63 STEP 2:                                                     VIL_VWM_MCA1$=VIL_VWM_MCA1$+CHR$(VAL("&H"+MID$(VIL_W0$,VIL_I%,2))):        NEXT
45292 GOSUB *VIL_LNR
45296 FOR VIL_I%=1 TO 63 STEP 2:                                                     VIL_VWM_MCD1$=VIL_VWM_MCD1$+CHR$(VAL("&H"+MID$(VIL_W0$,VIL_I%,2))):        NEXT
45300 '     ウィンドウサイズ変更用マウスカーソル
45304 GOSUB *VIL_LNR:VIL_MCX2%=VAL(VIL_W0$):                                                      VIL_MCY2%=VAL(MID$(VIL_W0$,INSTR(VIL_W0$,",")+1))
45308 GOSUB *VIL_LNR
45312 FOR VIL_I%=1 TO 63 STEP 2:                                                     VIL_VWM_MCA2$=VIL_VWM_MCA2$+CHR$(VAL("&H"+MID$(VIL_W0$,VIL_I%,2))):        NEXT
45316 GOSUB *VIL_LNR
45320 FOR VIL_I%=1 TO 63 STEP 2:                                                     VIL_VWM_MCD2$=VIL_VWM_MCD2$+CHR$(VAL("&H"+MID$(VIL_W0$,VIL_I%,2))):        NEXT
45324 '                                     ウィンドウ枠幅設定
45328 VIL_WIN_UB%=14:VIL_WIN_DB%=8:VIL_WIN_RB%=8:VIL_WIN_LB%=8
45332 '
45336 MOUSE 2,VIL_VWM_MCA0$,VIL_VWM_MCD0$,VIL_VWM_MCX0%,VIL_VWM_MCY0%
45340 '
45344 RETURN
45348 '
45352 *VIL_VWM_ENVR
45356 '　アプリ環境ファイル読み込み
45360 '
45364 '入力変数         : なし
45368 '破壊変数         : I%            : ループ用
45372 '出力変数         : VWM_CF%()     : 枠の（G,R,B）輝度
45376 '                   VWM_CB%()     : 背景色の（G,R,B）輝度
45380 '                   VWM_X%(),     : ウィンドウ位置保存
45384 '                   VWM_Y%(),
45388 '                   VWM_W%(),
45392 '                   VWM_Z%()
45396 '呼出しモジュール : VIL_LNR
45400 '
45404 VIL_W0$="":WHILE VIL_W0$<>"#VWM":GOSUB *VIL_LNR:WEND
45408 '     枠の（G,R,B）輝度読み込み
45412 GOSUB *VIL_LNR
45416 FOR VIL_I%=0 TO 2
45420   VIL_VWM_CF%(VIL_I%)=VAL(VIL_W0$):                                            VIL_W0$=MID$(VIL_W0$,INSTR(VIL_W0$,",")+1)
45424 NEXT
45428 '     背景色の（G,R,B）輝度読み込み
45432 GOSUB *VIL_LNR
45436 FOR VIL_I%=0 TO 2
45440   VIL_VWM_CB%(VIL_I%)=VAL(VIL_W0$):                                            VIL_W0$=MID$(VIL_W0$,INSTR(VIL_W0$,",")+1)
45444 NEXT
45448 '     ウィンドウ位置読み込み
45452 FOR VIL_I%=1 TO VIL_VWM_NMAX%
45456   GOSUB *VIL_LNR
45460   VIL_VWM_X%(VIL_I%)=VAL(VIL_W0$):                                             VIL_W0$=MID$(VIL_W0$,INSTR(VIL_W0$,",")+1)
45464   VIL_VWM_Y%(VIL_I%)=VAL(VIL_W0$):                                             VIL_W0$=MID$(VIL_W0$,INSTR(VIL_W0$,",")+1)
45468   VIL_VWM_W%(VIL_I%)=VAL(VIL_W0$):                                             VIL_W0$=MID$(VIL_W0$,INSTR(VIL_W0$,",")+1)
45472   VIL_VWM_Z%(VIL_I%)=VAL(VIL_W0$)
45476 NEXT
45480 GOSUB *VIL_VWM_PALSET
45484 RETURN
45488 '
45492 *VIL_VWM_ENVW
45496 '　アプリ環境ファイル書き込み
45500 '
45504 '入力変数         : なし
45508 '破壊変数         : なし
45512 '出力変数         : なし
45516 '呼出しモジュール : なし
45520 '
45524 PRINT #1,"#VWM"
45528 '     枠の（G,R,B）輝度書き込み
45532 PRINT #1,USING "###,###,###";                                                VIL_VWM_CF%(0),VIL_VWM_CF%(1),VIL_VWM_CF%(2)
45536 '     背景色の（G,R,B）輝度書き込み
45540 PRINT #1,USING "###,###,###";                                                VIL_VWM_CB%(0),VIL_VWM_CB%(1),VIL_VWM_CB%(2)
45544 '     ウィンドウ位置書き込み
45548 FOR VIL_I%=1 TO VIL_VWM_NMAX%
45552 PRINT #1,USING "###,###,###,###";                                            VIL_VWM_X%(0),VIL_VWM_Y%(0),VIL_VWM_W%(0),VIL_VWM_Z%(0)
45556 NEXT
45560 RETURN
45564 '
45568 *VIL_VWM_PALSET
45572 '　ウィンドウ枠・背景色パレット設定
45576 '
45580 '入力変数         : VWM_CF%()     : 枠の（G,R,B）輝度
45584 '                   VWM_CB%()     : 背景色の（G,R,B）輝度
45588 '                   VWM_CB%       : ウィンドウ背景色用パレット番号
45592 '破壊変数         : W0%,W1%,W2%   : 輝度ワーク
45596 '出力変数         : なし
45600 '呼出しモジュール : なし
45604 '
45608 VIL_W0%=VIL_VWM_CF%(0):VIL_W1%=VIL_VWM_CF%(1):VIL_W2%=VIL_VWM_CF%(2)
45612 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
45616 PALETTE 2,[VIL_W0%,VIL_W1%,VIL_W2%],1
45620 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
45624 PALETTE VIL_VWM_CB%,[VIL_VWM_CB%(0),VIL_VWM_CB%(1),VIL_VWM_CB%(2)],1
45628 RETURN
45632 '
45636 *VIL_VWM_OP
45640 '　ウィンドウ・オープン
45644 '
45648 '入力変数         : VWM_N%        : ウィンドウ通し番号
45652 '                     VWM_N%=0のとき
45656 '                       WIN_X%,WIN_Y%         : ウィンドウ左上隅座標
45660 '                       WIN_W%,WIN_Z%         : ウィンドウ右下隅座標
45664 '                     VWM_N%<>0のとき
45668 '                       VWM_X%(VWM_N%),       : ウィンドウ左上隅座標
45672 '                       VWM_Y%(VWM_N%)
45676 '                       VWM_W%(VWM_N%),       : ウィンドウ右下隅座標
45680 '                       VWM_Z%(VWM_N%)
45684 '                     VWM_AT%        : アクティブウィンドウ属性
45688 '                         (有効な属性の和を指定)
45692 '             1 : MENU        メニュースイッチ表示
45696 '             2 : CLOSE       クローズ可能（スイッチ表示）
45700 '             4 : HIDE        一時消去可能（スイッチ表示）
45704 '             8 : MOVE        移動可能
45708 '            16 : RESIZE      サイズ変更可能（スイッチ表示）
45712 '            32 : LOWER       そのウィンドウを他のウィンドウの下に
45716 '                             することを許す?
45720 '                             （現バージョンでは未サポート）
45724 '                   VWM_T$        : アクティブウィンドウ・タイトル
45728 '破壊変数         : W0%           : ウィンドウ・タイトル表示処理
45732 '出力変数         : E%            : 0 : 正常終了
45736 '                                   5 : オープン失敗（退避領域不足）
45740 '                   WIN_X%,WIN_Y%,
45744 '                   WIN_W%,WIN_Z% : オープン失敗時のみ、
45748 '           　　　　　　            現在のアクティブ・ウィンドウの
45752 '                                   値を設定
45756 '                   WIN_PM%       : -1 (相対座標モード)
45760 '呼出しモジュール : WIN_PMA,WIN_PMR,WIN_OP
45764 '
45768 GOSUB *VIL_WIN_PMA
45772 IF VIL_WIN_AN% THEN
45776   LINE(VIL_WIN_X%(VIL_WIN_AN%)+16,VIL_WIN_Y%(VIL_WIN_AN%)-11)                     -(VIL_WIN_W%(VIL_WIN_AN%)-16,VIL_WIN_Y%(VIL_WIN_AN%)- 4)                     ,XOR,%3,BF                   '旧ＡＷのハイライトバー消去
45780 ENDIF
45784 IF VIL_VWM_N% THEN                '通しウィンドウ番号での座標復元
45788   VIL_WIN_X%=VIL_VWM_X%(VIL_VWM_N%):VIL_WIN_Y%=VIL_VWM_Y%(VIL_VWM_N%)
45792   VIL_WIN_W%=VIL_VWM_W%(VIL_VWM_N%):VIL_WIN_Z%=VIL_VWM_Z%(VIL_VWM_N%)
45796 ENDIF
45800 GOSUB *VIL_WIN_OP
45804 IF VIL_E% THEN            '退避領域不足なら旧ＡＷのハイライトバー復元
45808   LINE(VIL_WIN_X%(VIL_WIN_AN%)+16,VIL_WIN_Y%(VIL_WIN_AN%)-11)                     -(VIL_WIN_W%(VIL_WIN_AN%)-16,VIL_WIN_Y%(VIL_WIN_AN%)- 4)                     ,XOR,%3,BF
45812 ELSE
45816   VIL_VWM_AT%(VIL_WIN_AN%)=VIL_VWM_AT%
45820   VIL_VWM_T$(VIL_WIN_AN%) =VIL_VWM_T$
45824   VIL_VWM_N%(VIL_WIN_AN%) =VIL_VWM_N%
45828 '----- 外枠描画 -----
45832   LINE(VIL_WIN_X%-8,VIL_WIN_Y%-14)-(VIL_WIN_W%+8,VIL_WIN_Z%+8)                     ,PSET,%VIL_VWM_CB%,BF
45836 '
45840   LINE(VIL_WIN_X%-5,VIL_WIN_Y%-11)-(VIL_WIN_W%+5,VIL_WIN_Y%-3)                     ,PSET,%2,BF
45844   LINE(VIL_WIN_X%-5,VIL_WIN_Z%+ 3)-(VIL_WIN_W%+5,VIL_WIN_Z%+5)                     ,PSET,%2,BF
45848   LINE(VIL_WIN_X%-5,VIL_WIN_Y%- 2)-(VIL_WIN_X%-1,VIL_WIN_Z%+2)                     ,PSET,%2,BF
45852   LINE(VIL_WIN_W%+1,VIL_WIN_Y%- 2)-(VIL_WIN_W%+5,VIL_WIN_Z%+2)                     ,PSET,%2,BF
45856 '
45860   CONNECT(VIL_WIN_W%+7,VIL_WIN_Y%-13)-(VIL_WIN_X%-7,VIL_WIN_Y%-13)                   -(VIL_WIN_X%-7,VIL_WIN_Z%+ 7),%3
45864   CONNECT(VIL_WIN_W%+6,VIL_WIN_Y%-12)-(VIL_WIN_X%-6,VIL_WIN_Y%-12)                   -(VIL_WIN_X%-6,VIL_WIN_Z%+ 6),%3
45868   CONNECT(VIL_WIN_X%-6,VIL_WIN_Z%+ 7)-(VIL_WIN_W%+7,VIL_WIN_Z%+ 7)                   -(VIL_WIN_W%+7,VIL_WIN_Y%-12),%1
45872   CONNECT(VIL_WIN_X%-5,VIL_WIN_Z%+ 6)-(VIL_WIN_W%+6,VIL_WIN_Z%+ 6)                   -(VIL_WIN_W%+6,VIL_WIN_Y%-11),%1
45876 '
45880   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
45884   CONNECT(VIL_WIN_W%  ,VIL_WIN_Y%-1)-(VIL_WIN_X%-1,VIL_WIN_Y%-1)                     -(VIL_WIN_X%-1,VIL_WIN_Z%  ),%1
45888   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
45892   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
45896 '----- CLOSE SWITCH -----
45900   IF (VIL_VWM_AT% AND 2)=2 THEN
45904     LINE(VIL_WIN_X%-5,VIL_WIN_Y%-11)-(VIL_WIN_X%+3,VIL_WIN_Y%-3)                     ,PSET,%1,B
45908     LINE(VIL_WIN_X%-5,VIL_WIN_Y%-11)-(VIL_WIN_X%+3,VIL_WIN_Y%-3)                     ,PSET,%1
45912     LINE(VIL_WIN_X%+3,VIL_WIN_Y%-11)-(VIL_WIN_X%-5,VIL_WIN_Y%-3)                     ,PSET,%1
45916   ENDIF
45920 '----- HIDE SWITCH -----
45924   IF (VIL_VWM_AT% AND 4)=4 THEN
45928     LINE(VIL_WIN_X%+ 5,VIL_WIN_Y%-11)-(VIL_WIN_X%+13,VIL_WIN_Y%-3)                   ,PSET,%1,B
45932     LINE(VIL_WIN_X%+13,VIL_WIN_Y%-11)-(VIL_WIN_X%+ 5,VIL_WIN_Y%-3)                   ,PSET,%1
45936   ENDIF
45940 '----- MENU SWITCH -----
45944   IF (VIL_VWM_AT% AND 1)=1 THEN
45948     LINE(VIL_WIN_W%-13,VIL_WIN_Y%-11)-(VIL_WIN_W%-5,VIL_WIN_Y%- 3)                   ,PSET,%1,B
45952     LINE(VIL_WIN_W%-13,VIL_WIN_Y%- 8)-(VIL_WIN_W%-5,VIL_WIN_Y%- 8)                   ,PSET,%1
45956     LINE(VIL_WIN_W%-13,VIL_WIN_Y%- 6)-(VIL_WIN_W%-5,VIL_WIN_Y%- 6)                   ,PSET,%1
45960   ENDIF
45964 '----- RESIZE SWITCH -----
45968   IF (VIL_VWM_AT% AND 16)=16 THEN
45972     LINE(VIL_WIN_W%-3,VIL_WIN_Y%-11)-(VIL_WIN_W%+5,VIL_WIN_Y%-3)                     ,PSET,%1,B
45976     LINE(VIL_WIN_W%-3,VIL_WIN_Y%- 8)-(VIL_WIN_W%+2,VIL_WIN_Y%-3)                     ,PSET,%1,B
45980   ENDIF
45984 '----- TITLE -----
45988   VIL_W0%=INT(VIL_WIN_W%-VIL_WIN_X%-36)/5
45992   IF VIL_W0%>0 THEN
45996     SYMBOL(VIL_WIN_X%+18,VIL_WIN_Y%-10),LEFT$(VIL_VWM_T$,VIL_W0%)                      ,.5!,.5!,%1,,,,1
46000   ENDIF
46004 '
46008   LINE(VIL_WIN_X%+16,VIL_WIN_Y%-11)-(VIL_WIN_W%-16,VIL_WIN_Y%-4)               ,XOR,%3,BF
46012 ENDIF
46016 '
46020 GOSUB *VIL_WIN_PMR
46024 RETURN
46028 '
46032 *VIL_VWM_CL
46036 '　ウィンドウ・クロ－ズ
46040 '
46044 '入力変数         : なし
46048 '破壊変数         : なし
46052 '出力変数         : WIN_X%,WIN_Y% : 新アクティブウィンドウ左上隅座標
46056 '                   WIN_W%,WIN_Z% : 新アクティブウィンドウ右下隅座標
46060 '                   VWM_AT%       : 新アクティブウィンドウ属性
46064 '                   VWM_T$        : 新アクティブウィンドウ・タイトル
46068 '                   VWM_N%        : 新アクティブウィンドウ通し番号
46072 '                     クローズ前のウィンドウのVWM_N%<>0のとき
46076 '                       VWM_X%(VWM_N%),   : ウィンドウ左上隅座標
46080 '                       VWM_Y%(VWM_N%)
46084 '                       VWM_W%(VWM_N%),   : ウィンドウ右下隅座標
46088 '                       VWM_Z%(VWM_N%)
46092 '                     　（クローズ前に現在位置・サイズを保存）
46096 '                   WIN_PM%       :  -1 (相対座標モード)
46100 '呼出しモジュール : WIN_PMA,WIN_PMR,WIN_CL
46104 '
46108 IF VIL_VWM_N% THEN                                                             VIL_VWM_X%(VIL_VWM_N%)=VIL_WIN_X%:VIL_VWM_Y%(VIL_VWM_N%)=VIL_WIN_Y%:         VIL_VWM_W%(VIL_VWM_N%)=VIL_WIN_W%:VIL_VWM_Z%(VIL_VWM_N%)=VIL_WIN_Z%
46112 GOSUB *VIL_WIN_PMA
46116 GOSUB *VIL_WIN_CL
46120 VIL_VWM_AT%=VIL_VWM_AT%(VIL_WIN_AN%)
46124 VIL_VWM_T$ =VIL_VWM_T$(VIL_WIN_AN%)
46128 VIL_VWM_N% =VIL_VWM_N%(VIL_WIN_AN%)
46132 IF VIL_WIN_AN% THEN                                                            LINE(VIL_WIN_X%+16,VIL_WIN_Y%-11)-(VIL_WIN_W%-16,VIL_WIN_Y%-4)                   ,XOR,%3,BF
46136 GOSUB *VIL_WIN_PMR
46140 RETURN
46144 '
46148 *VIL_VWM_CLDMY
46152 '　ウィンドウ・ダミークロ－ズ
46156 '
46160 '入力変数         : なし
46164 '破壊変数         : なし
46168 '出力変数         : WIN_X%,WIN_Y% : 新アクティブウィンドウ左上隅座標
46172 '                   WIN_W%,WIN_Z% : 新アクティブウィンドウ右下隅座標
46176 '                   VWM_AT%       : 新アクティブウィンドウ属性
46180 '                   VWM_T$        : 新アクティブウィンドウ・タイトル
46184 '                   VWM_N%        : 新アクティブウィンドウ通し番号
46188 '                     クローズ前のウィンドウのVWM_N%<>0のとき
46192 '                       VWM_X%(VWM_N%),   : ウィンドウ左上隅座標
46196 '                       VWM_Y%(VWM_N%)
46200 '                       VWM_W%(VWM_N%),   : ウィンドウ右下隅座標
46204 '                       VWM_Z%(VWM_N%)
46208 '                     　（クローズ前に現在位置・サイズを保存）
46212 '                   WIN_PM%       :  -1 (相対座標モード)
46216 '呼出しモジュール : WIN_PMA,WIN_PMR,WIN_CLDMY
46220 '
46224 IF VIL_VWM_N% THEN                                                             VIL_VWM_X%(VIL_VWM_N%)=VIL_WIN_X%:VIL_VWM_Y%(VIL_VWM_N%)=VIL_WIN_Y%:         VIL_VWM_W%(VIL_VWM_N%)=VIL_WIN_W%:VIL_VWM_Z%(VIL_VWM_N%)=VIL_WIN_Z%
46228 GOSUB *VIL_WIN_PMA
46232 GOSUB *VIL_WIN_CLDMY
46236 LINE(VIL_WIN_X%(VIL_WIN_AN%+1)+16,VIL_WIN_Y%(VIL_WIN_AN%+1)-11)                 -(VIL_WIN_W%(VIL_WIN_AN%+1)-16,VIL_WIN_Y%(VIL_WIN_AN%+1)- 4)                 ,XOR,%3,BF
46240 VIL_VWM_AT%=VIL_VWM_AT%(VIL_WIN_AN%)
46244 VIL_VWM_T$ =VIL_VWM_T$(VIL_WIN_AN%)
46248 VIL_VWM_N% =VIL_VWM_N%(VIL_WIN_AN%)
46252 IF VIL_WIN_AN% THEN                                                            LINE(VIL_WIN_X%+16,VIL_WIN_Y%-11)-(VIL_WIN_W%-16,VIL_WIN_Y%-4)                   ,XOR,%3,BF
46256 GOSUB *VIL_WIN_PMR
46260 RETURN
46264 '
46268 *VIL_VWM_CLALL
46272 '　ウィンドウ全クローズ
46276 '
46280 '入力変数         : なし
46284 '破壊変数         : なし
46288 '出力変数         : なし
46292 '呼出しモジュール : WIN_CL
46296 '
46300 WHILE VIL_WIN_AN%
46304   GOSUB *VIL_VWM_CL
46308 WEND
46312 RETURN
46316 '
46320 *VIL_VWM_CLS
46324 '　アクティブウィンドウ内クリア
46328 '入力変数         : なし
46332 '破壊変数         : なし
46336 '出力変数         : なし
46340 '呼出しモジュール : なし
46344 '
46348 LINE(0,0)-(VIL_WIN_W%-VIL_WIN_X%,VIL_WIN_Z%-VIL_WIN_Y%)                          ,PSET,%VIL_VWM_CB%,BF
46352 RETURN
46356 ' 
46360 *VIL_VWM_CHECK
46364 '　ウィンドウマネージャ呼出しチェック
46368 '    MSEL_M/MSEL_IN/INP_STRの呼出し直後に呼び出すことにより、
46372 '      ・ウィンドウ枠の各スイッチを左クリック : VWM_WIN  を呼出
46376 '      ・ウィンドウマネージャ起動キーを入力   : VWM_MENU を呼出
46380 '入力変数         : MX%,MY%       : マウスクリック位置
46384 '                 : KN%           : 入力番号
46388 '                 : KY%           : 入力キー
46392 '破壊変数         : なし
46396 '出力変数         : VWM_R%        : マネージャ処理結果
46400 '                                     0:処理なし
46404 '                                     2:CLOSE
46408 '                                     4:HIDE
46412 '                                     8:MOVE
46416 '                                    16:RESIZE
46420 '呼出しモジュール : VWM_WIN,VWM_MENU
46424 '
46428 VIL_VWM_R%=0
46432 IF VIL_KN%=-2 THEN                'ボックス外クリック
46436   GOSUB *VIL_VWM_WIN
46440 ELSE IF VIL_MSEL_KY%=-13 THEN
46444   VIL_WIN_X%=VIL_WIN_W%   +(VIL_WIN_W%-582)*(VIL_WIN_W%>582) '49+8-639
46448   VIL_WIN_Y%=VIL_WIN_Y%-32+(VIL_WIN_Y%- 46)*(VIL_WIN_Y%< 46)                                           +(VIL_WIN_Y%-406)*(VIL_WIN_Y%>406)
46452 '                                             -32-14 , -32+98+7-479
46456   GOSUB *VIL_VWM_MENU
46460 ENDIF
46464 RETURN
46468 '
46472 *VIL_VWM_WIN
46476 '　ウィンドウスイッチ版ウィンドウマネージャ
46480 '入力変数         : MX%,MY%       : マウスクリック位置
46484 '破壊変数         : なし
46488 '出力変数         : VWM_R%        : マネージャ処理結果
46492 '                                     0:処理なし
46496 '                                     2:CLOSE
46500 '                                     4:HIDE
46504 '                                     8:MOVE
46508 '                                    16:RESIZE
46512 '呼出しモジュール : VWM_CLOSE,VWM_HIDE,VWM_MOVE,VWM_RESIZE,VWM_MENU
46516 '
46520 VIL_VWM_R%=0
46524 IF (VIL_VWM_AT% AND 2)=2                                                     AND VIL_WIN_X%- 6<VIL_MX% AND VIL_MX%<VIL_WIN_X%+4                           AND VIL_WIN_Y%-12<VIL_MY% AND VIL_MY%<VIL_WIN_Y%-2 THEN
46528   GOSUB *VIL_VWM_CLOSE
46532 ELSE IF (VIL_VWM_AT% AND  4)= 4                                                   AND VIL_WIN_X%+ 4<VIL_MX% AND VIL_MX%<VIL_WIN_X%+14                          AND VIL_WIN_Y%-12<VIL_MY% AND VIL_MY%<VIL_WIN_Y%- 2 THEN
46536   GOSUB *VIL_VWM_HIDE
46540 ELSE IF (VIL_VWM_AT% AND  1)= 1                                                   AND VIL_WIN_W%-14<VIL_MX% AND VIL_MX%<VIL_WIN_W%- 4                          AND VIL_WIN_Y%-12<VIL_MY% AND VIL_MY%<VIL_WIN_Y%- 2 THEN
46544   VIL_WIN_X%=VIL_WIN_W%   +(VIL_WIN_W%-582)*(VIL_WIN_W%>582) '49+8-639
46548   VIL_WIN_Y%=VIL_WIN_Y%-32+(VIL_WIN_Y%- 46)*(VIL_WIN_Y%< 46)                                           +(VIL_WIN_Y%-406)*(VIL_WIN_Y%>406)
46552 '                                              -32-14 , -32+98+7-479
46556   GOSUB *VIL_VWM_MENU
46560 ELSE IF (VIL_VWM_AT% AND 16)=16                                                   AND VIL_WIN_W%- 4<VIL_MX% AND VIL_MX%<VIL_WIN_W%+ 6                          AND VIL_WIN_Y%-12<VIL_MY% AND VIL_MY%<VIL_WIN_Y%- 2 THEN
46564   GOSUB *VIL_VWM_RESIZE
46568 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%-12<VIL_MY% AND VIL_MY%<VIL_WIN_Y%- 2 THEN
46572   GOSUB *VIL_VWM_MOVE
46576 ENDIF
46580 RETURN
46584 '
46588 *VIL_VWM_MENU
46592 '　メニュー版ウィンドウマネージャ
46596 '
46600 '入力変数         : WIN_X%,WIN_Y% : マネージャウィンドウ左上隅座標
46604 '破壊変数         : なし
46608 '出力変数         : VWM_R%        : マネージャ処理結果
46612 '                                     0:処理なし
46616 '                                     2:CLOSE
46620 '                                     4:HIDE
46624 '                                     8:MOVE
46628 '                                    16:RESIZE
46632 '呼出しモジュール :   WIN_PMA,WIN_PMR,VWM_OP,VWM_CL,MSEL_M,
46636 '                     VWM_CLOSE,VWM_HIDE,VWM_MOVE,VWM_RESIZE,
46640 '                     VWM_KHIDE,VWM_KMOVE,VWM_KRESIZE,
46644 '                     VWM_INF
46648 '
46652 GOSUB *VIL_WIN_PMA
46656 LINE(VIL_WIN_X%(VIL_WIN_AN%)+16,VIL_WIN_Y%(VIL_WIN_AN%)-11)                     -(VIL_WIN_W%(VIL_WIN_AN%)-16,VIL_WIN_Y%(VIL_WIN_AN%)- 4),XOR,%3,BF
46660 VIL_VWM_ATB%=VIL_VWM_AT%
46664 VIL_WIN_W%=VIL_WIN_X%+49:VIL_WIN_Z%=VIL_WIN_Y%+97
46668 VIL_VWM_T$="VWM":VIL_VWM_AT%=0:VIL_VWM_N%=0
46672 GOSUB *VIL_VWM_OP
46676 SYMBOL(5,  0),"<VWM>", 1,1,6
46680 SYMBOL(1, 20),"CLOSE", 1,1,%1-((VIL_VWM_ATB% AND  2)= 2)*2
46684 SYMBOL(1, 36),"HIDE",  1,1,%1-((VIL_VWM_ATB% AND  4)= 4)*2
46688 SYMBOL(1, 52),"MOVE",  1,1,%1-((VIL_VWM_ATB% AND  8)= 8)*2
46692 SYMBOL(1, 68),"RESIZE",1,1,%1-((VIL_VWM_ATB% AND 16)=16)*2
46696 SYMBOL(1, 84),"<INFO>",1,1,%3
46700 '
46704 VIL_X%=1:VIL_Y%=20:VIL_W%=VIL_X%+47:VIL_Z%=VIL_Y%+14
46708 VIL_YL%=16:VIL_XN%=1:VIL_YN%=5:VIL_MSEL_BD%=0:VIL_C%=15
46712 VIL_MSEL_BC%=0:VIL_MSEL_MN%=1:VIL_MSEL_BB%=1:VIL_MSEL_BE%=5
46716 GOSUB *VIL_MSEL_M
46720 IF VIL_KN%=-3 OR (0<VIL_KN% AND VIL_KN%<5                                                                AND (VIL_VWM_ATB% AND 2^VIL_KN%)=0)              THEN 46716
46724 GOSUB *VIL_VWM_CL
46728 GOSUB *VIL_WIN_PMA
46732 LINE(VIL_WIN_X%(VIL_WIN_AN%)+16,VIL_WIN_Y%(VIL_WIN_AN%)-11)                     -(VIL_WIN_W%(VIL_WIN_AN%)-16,VIL_WIN_Y%(VIL_WIN_AN%)- 4),XOR,%3,BF
46736 GOSUB *VIL_WIN_PMR
46740 IF VIL_KN%<1 THEN RETURN
46744 '
46748 ON VIL_KN% GOTO 46756,46768,46780,46816,46852
46752 '
46756 GOSUB *VIL_VWM_CLOSE
46760 RETURN
46764 '
46768 IF VIL_MSEL_KY%=-4 THEN GOSUB *VIL_VWM_HIDE ELSE GOSUB *VIL_VWM_KHIDE
46772 RETURN
46776 '
46780 IF VIL_MSEL_KY%=-4 THEN
46784   VIL_MX%=(VIL_WIN_X%+VIL_WIN_W%)\2:VIL_MY%=VIL_WIN_Y%-4
46788   MOUSE 1,VIL_MX%,VIL_MY%
46792   GOSUB *VIL_VWM_MOVE
46796 ELSE
46800   GOSUB *VIL_VWM_KMOVE
46804 ENDIF
46808 RETURN
46812 '
46816 IF VIL_MSEL_KY%=-4 THEN
46820   VIL_MX%=VIL_WIN_W%:VIL_MY%=VIL_WIN_Y%-6
46824   MOUSE 1,VIL_MX%,VIL_MY%
46828   GOSUB *VIL_VWM_RESIZE
46832 ELSE
46836   GOSUB *VIL_VWM_KRESIZE
46840 ENDIF
46844 RETURN
46848 '
46852 VIL_WIN_X%=VIL_WIN_X%+(VIL_WIN_X%-448)*(VIL_WIN_X%>448)   '183+8-639
46856 VIL_WIN_Y%=VIL_WIN_Y%+(VIL_WIN_Y%-380)*(VIL_WIN_Y%>380)   ' 91+8-479
46860 GOSUB *VIL_VWM_INF
46864 RETURN
46868 '
46872 *VIL_VWM_INF
46876 '　ウィンドウ情報表示
46880 '入力変数         : WIN_X%,WIN_Y% : 情報ウィンドウ左上隅座標
46884 '破壊変数         : なし
46888 '出力変数         : E%            : 0 : 正常終了
46892 '                                   5 : オープン失敗（退避領域不足）
46896 '呼出しモジュール :   VWM_OP,VWM_CL,INP_MVWAIT
46900 '
46904 VIL_WIN_W%=VIL_WIN_X%+183:VIL_WIN_Z%=VIL_WIN_Y%+91
46908 VIL_VWM_T$="VWM INFORMATION":VIL_VWM_AT%=0:VIL_VWM_N%=0
46912 VIL_E%=0
46916 GOSUB *VIL_VWM_OP
46920 IF VIL_E%=0 THEN
46924   SYMBOL(8, 8),"POSITION:("                                                                +FNVIL_P2S0$(VIL_WIN_X%(VIL_WIN_AN%-1),3)+","                                +FNVIL_P2S0$(VIL_WIN_Y%(VIL_WIN_AN%-1),3)+")",1,1,4
46928   SYMBOL(8,28),"SIZE    : "+FNVIL_P2S0$(VIL_WIN_W%(VIL_WIN_AN%-1)              -VIL_WIN_X%(VIL_WIN_AN%-1)+1,3)+"×"+FNVIL_P2S0$(VIL_WIN_Z%(                 VIL_WIN_AN%-1)-VIL_WIN_Y%(VIL_WIN_AN%-1)+1,3),1,1,4
46932   SYMBOL(8,48),"WINDOW  : "+FNVIL_P2S0$(VIL_WIN_AN%-1,3)+"/"                                            +FNVIL_P2S0$(VIL_WIN_ANMAX%,3),1,1,4
46936   SYMBOL(8,68),"FREE    : "                                                    +FNVIL_P2S0$((VIL_WIN_BFMAX&-VIL_WIN_BFO&(VIL_WIN_AN%-1))\512,4)+"K/"        +FNVIL_P2S0$( VIL_WIN_BFMAX&\512,4)+"K",1,1,4
46940   GOSUB *VIL_INP_MVWAIT
46944   GOSUB *VIL_VWM_CL
46948 ENDIF
46952 RETURN
46956 '
46960 *VIL_VWM_MOVE
46964 '　ウィンドウ移動（ユーザ・インタフェース部）
46968 '
46972 '入力変数         : なし
46976 '破壊変数         : W0,W1       : 移動量
46980 '                   W2,W3       : W0,W1 → VWM_XD%,VWM_YD% の定数倍
46984 '                   MX,MY       : マウス位置
46988 '出力変数         : E%          : 0 : 移動正常終了
46992 '                                 5 : 移動失敗（退避領域不足）
46996 '                   VWM_R%      : 8 : 移動実行
47000 '                                 0 : 移動中止（中止操作/移動失敗）
47004 '呼出しモジュール : WIN_PMA,WIN_PMR,VWM_MV
47008 '
47012 MOUSE 2,VIL_VWM_MCA1$,VIL_VWM_MCD1$,VIL_VWM_MCX1%,VIL_VWM_MCY1%
47016 MOUSE 1,VIL_MX%,VIL_MY%,1
47020 VIL_VWM_PMB%=VIL_WIN_PM%:GOSUB *VIL_WIN_PMA
47024 VIL_WIN_X%=VIL_WIN_X%-8:VIL_WIN_Y%=VIL_WIN_Y%-14
47028 VIL_WIN_W%=VIL_WIN_W%+8:VIL_WIN_Z%=VIL_WIN_Z%+ 8
47032 MOUSE 4,                                                                     VIL_VWM_XM%+VIL_MX%-VIL_WIN_X%-8,VIL_VWM_YM%+VIL_MY%-VIL_WIN_Y%-14,          VIL_VWM_WM%+VIL_MX%-VIL_WIN_W%+8,VIL_VWM_ZM%+VIL_MY%-VIL_WIN_Z%+ 8
47036 VIL_W0%=0:VIL_W1%=0:VIL_W2%=0:VIL_W3%=0
47040 VIL_WIN_W%=VIL_WIN_W%-VIL_WIN_X%:VIL_WIN_Z%=VIL_WIN_Z%-VIL_WIN_Y%
47044 LINE(VIL_WIN_X%,VIL_WIN_Y%)-STEP(VIL_WIN_W%,VIL_WIN_Z%),XOR,7,B
47048 WHILE MOUSE(2,0)
47052   VIL_MX%=MOUSE(9):VIL_MY%=MOUSE(10)
47056   IF VIL_MX% OR VIL_MY% THEN
47060     LINE(VIL_WIN_X%+VIL_W2%,VIL_WIN_Y%+VIL_W3%)                                 -STEP(VIL_WIN_W%        ,VIL_WIN_Z%),XOR,7,B
47064     VIL_W0%=VIL_W0%+VIL_MX%:VIL_W1%=VIL_W1%+VIL_MY%
47068     VIL_W2%=VIL_W0%-VIL_W0% MOD VIL_VWM_XD%
47072     VIL_W3%=VIL_W1%-VIL_W1% MOD VIL_VWM_YD%
47076     LINE(VIL_WIN_X%+VIL_W2%,VIL_WIN_Y%+VIL_W3%)                                 -STEP(VIL_WIN_W%        ,VIL_WIN_Z%),XOR,7,B
47080   ENDIF
47084 WEND
47088 VIL_WIN_X%=VIL_WIN_X%+VIL_W2%:VIL_WIN_Y%=VIL_WIN_Y%+VIL_W3%
47092 LINE(VIL_WIN_X%,VIL_WIN_Y%)-STEP(VIL_WIN_W%,VIL_WIN_Z%),XOR,7,B
47096 '
47100 IF MOUSE(2,1) THEN                               '移動中止
47104   VIL_WIN_X%=VIL_WIN_X%(VIL_WIN_AN%)
47108   VIL_WIN_Y%=VIL_WIN_Y%(VIL_WIN_AN%)
47112   VIL_WIN_W%=VIL_WIN_W%(VIL_WIN_AN%)
47116   VIL_WIN_Z%=VIL_WIN_Z%(VIL_WIN_AN%)
47120 ELSE                                             '移動実行
47124   VIL_WIN_X%=VIL_WIN_X%+8:VIL_WIN_Y%=VIL_WIN_Y%+14
47128 '  VIL_WW=VIL_WW+VIL_WX:VIL_WZ=VIL_WY+VIL_WZ
47132   GOSUB *VIL_VWM_MV
47136 ENDIF
47140 MOUSE 2,VIL_VWM_MCA0$,VIL_VWM_MCD0$,VIL_VWM_MCX0%,VIL_VWM_MCY0%
47144 MOUSE 4,0,0,639,479
47148 IF VIL_VWM_PMB% THEN GOSUB *VIL_WIN_PMR
47152 RETURN
47156 '
47160 *VIL_VWM_KMOVE
47164 '　ウィンドウ移動（キー操作版ユーザ・インタフェース部）
47168 '
47172 '入力変数         : なし
47176 '破壊変数         : K$,KY%        : 入力キーとそのアスキーコード
47180 '出力変数         : E%            : 0 : 移動正常終了
47184 '                                   5 : 移動失敗（退避領域不足）
47188 '                   VWM_R%        : 8 : 移動実行
47192 '                                   0 : 移動中止（中止操作/移動失敗）
47196 '呼出しモジュール : WIN_PMA,WIN_PMR,VWM_MV,MSEL_KY
47200 '
47204 WHILE INKEY$<>"":WEND             '先行入力除去
47208 VIL_VWM_PMB%=VIL_WIN_PM%:GOSUB *VIL_WIN_PMA
47212 VIL_WIN_X%=VIL_WIN_X%           -8:VIL_WIN_Y%=VIL_WIN_Y%           -14
47216 VIL_WIN_W%=VIL_WIN_W%-VIL_WIN_X%+8:VIL_WIN_Z%=VIL_WIN_Z%-VIL_WIN_Y%+ 8
47220 LINE(VIL_WIN_X%,VIL_WIN_Y%)-STEP(VIL_WIN_W%,VIL_WIN_Z%),XOR,7,B
47224 VIL_MSEL_KY%=0
47228 WHILE VIL_MSEL_KY%<>-1 AND VIL_MSEL_KY%<>-2         '決定／取消キー
47232   GOSUB *VIL_MSEL_KY
47236   IF VIL_MSEL_KY%=-4 THEN 47232
47240   LINE(VIL_WIN_X%,VIL_WIN_Y%)-STEP(VIL_WIN_W%,VIL_WIN_Z%),XOR,7,B
47244   VIL_WIN_X%=VIL_WIN_X%                                                                  +((VIL_MSEL_KY%=-6)-(VIL_MSEL_KY%=-5))*VIL_VWM_XD% '←→
47248   VIL_WIN_X%=VIL_WIN_X%                                                                  -((VIL_WIN_X%+8<VIL_VWM_XM%)                                                  -(VIL_VWM_WM%<VIL_WIN_X%+VIL_WIN_W%-8))*VIL_VWM_XD%
47252   VIL_WIN_X%=VIL_WIN_X%                                                                  +((VIL_MSEL_KY%=-10)-(VIL_MSEL_KY%=-9))*VIL_VWM_XD%*8
47256 '                                                     [前行][次行]
47260   VIL_WIN_X%=VIL_WIN_X%                                                                  -((VIL_WIN_X%+8<VIL_VWM_XM%)                                                  -(VIL_VWM_WM%<VIL_WIN_X%+VIL_WIN_W%-8))*VIL_VWM_XD%*8
47264 '
47268   VIL_WIN_Y%=VIL_WIN_Y%                                                                  +((VIL_MSEL_KY%=-7)-(VIL_MSEL_KY%=-8))*VIL_VWM_YD% '↑↓
47272   VIL_WIN_Y%=VIL_WIN_Y%-((VIL_WIN_Y%+14<VIL_VWM_YM%)                                     -(VIL_VWM_ZM%<VIL_WIN_Y%+VIL_WIN_Z%-8))*VIL_VWM_YD%
47276   VIL_WIN_Y%=VIL_WIN_Y%+((VIL_MSEL_KY%=-11)                                                          -(VIL_MSEL_KY%=-12))*VIL_VWM_YD%*8
47280 '                                                     [HOME][削除]
47284   VIL_WIN_Y%=VIL_WIN_Y%-((VIL_WIN_Y%+14<VIL_VWM_YM%)                                                 -(VIL_VWM_ZM%<VIL_WIN_Y%+VIL_WIN_Z%-8))                                     *VIL_VWM_YD%*8
47288   LINE(VIL_WIN_X%,VIL_WIN_Y%)-STEP(VIL_WIN_W%,VIL_WIN_Z%),XOR,7,B
47292 WEND
47296 LINE(VIL_WIN_X%,VIL_WIN_Y%)-STEP(VIL_WIN_W%,VIL_WIN_Z%),XOR,7,B
47300 '
47304 IF VIL_MSEL_KY%=-2 THEN                       '移動実行(決定)
47308   VIL_WIN_X%=VIL_WIN_X%+8:VIL_WIN_Y%=VIL_WIN_Y%+14
47312   GOSUB *VIL_VWM_MV
47316 ELSE                                          '移動中止(取消)
47320   VIL_WIN_X%=VIL_WIN_X%(VIL_WIN_AN%)
47324   VIL_WIN_Y%=VIL_WIN_Y%(VIL_WIN_AN%)
47328   VIL_WIN_W%=VIL_WIN_W%(VIL_WIN_AN%)
47332   VIL_WIN_Z%=VIL_WIN_Z%(VIL_WIN_AN%)
47336 ENDIF
47340 IF VIL_VWM_PMB% THEN GOSUB *VIL_WIN_PMR
47344 RETURN
47348 '
47352 *VIL_VWM_MV
47356 '　ウィンドウ移動（移動処理）
47360 '
47364 '入力変数         : WIN_X,WIN_Y   : 移動先ウィンドウ左上隅座標
47368 '破壊変数         : なし
47372 '出力変数         : E%            : 0 : 移動正常終了
47376 '                                   5 : 移動失敗（退避領域不足）
47380 '                     E%=0 のとき
47384 '                       WIN_W%,WIN_Z% : 移動先のウィンドウ右下隅座標
47388 '                       VWM_R%        : 8 : 移動実行
47392 '                     E%=5 のとき
47396 '                       WIN_X%,WIN_Y% : 移動前のウィンドウ左上隅座標
47400 '                       VWM_R%        : 0 : 移動失敗
47404 '呼出しモジュール : なし
47408 '
47412 VIL_E%=0
47416 GET@A(VIL_WIN_X%(VIL_WIN_AN%)-8,VIL_WIN_Y%(VIL_WIN_AN%)-14)                      -(VIL_WIN_W%(VIL_WIN_AN%)+8,VIL_WIN_Z%(VIL_WIN_AN%)+ 8)                      ,VIL_WIN_BF%,VIL_WIN_BFO&(VIL_WIN_AN%)            'ウィンドウ保存
47420 IF VIL_E%=0 THEN
47424   VIL_WIN_W%=VIL_WIN_X%+VIL_WIN_W%(VIL_WIN_AN%)                                                     -VIL_WIN_X%(VIL_WIN_AN%)
47428   VIL_WIN_Z%=VIL_WIN_Y%+VIL_WIN_Z%(VIL_WIN_AN%)                                                     -VIL_WIN_Y%(VIL_WIN_AN%)
47432   PUT@A(VIL_WIN_X%(VIL_WIN_AN%)-8,VIL_WIN_Y%(VIL_WIN_AN%)-14)                      -(VIL_WIN_W%(VIL_WIN_AN%)+8,VIL_WIN_Z%(VIL_WIN_AN%)+ 8)                      ,VIL_WIN_BF%,,,,,VIL_WIN_BFO&(VIL_WIN_AN%-1)    '背景復元
47436   GET@A(VIL_WIN_X%-8,VIL_WIN_Y%-14)-(VIL_WIN_W%+8,VIL_WIN_Z%+8)                     ,VIL_WIN_BF%,VIL_WIN_BFO&(VIL_WIN_AN%-1)       '移動先背景保存
47440   PUT@A(VIL_WIN_X%-8,VIL_WIN_Y%-14)-(VIL_WIN_W%+8,VIL_WIN_Z%+8)                     ,VIL_WIN_BF%,,,,,VIL_WIN_BFO&(VIL_WIN_AN%)
47444 '                                              移動先にウィンドウ表示
47448   VIL_WIN_X%(VIL_WIN_AN%)=VIL_WIN_X%
47452   VIL_WIN_Y%(VIL_WIN_AN%)=VIL_WIN_Y%
47456   VIL_WIN_W%(VIL_WIN_AN%)=VIL_WIN_W%
47460   VIL_WIN_Z%(VIL_WIN_AN%)=VIL_WIN_Z%
47464   VIL_VWM_R%=8
47468 ELSE
47472   VIL_WIN_X%=VIL_WIN_X%(VIL_WIN_AN%)
47476   VIL_WIN_Y%=VIL_WIN_Y%(VIL_WIN_AN%)
47480   VIL_VWM_R%=0
47484 ENDIF
47488 RETURN
47492 '
47496 *VIL_VWM_CLOSE
47500 '　ウィンドウ・クローズ
47504 '
47508 '入力変数         : なし
47512 '破壊変数         : なし
47516 '出力変数         : VWM_R%        : 2 : クローズ正常終了
47520 '呼出しモジュール : VWM_CL
47524 '
47528 GOSUB *VIL_VWM_CL
47532 VIL_VWM_R%=2
47536 RETURN
47540 '
47544 *VIL_VWM_HIDE
47548 '　ウィンドウ一時消去（ユーザインタフェース部）
47552 '
47556 '入力変数         : なし
47560 '破壊変数         : なし
47564 '出力変数         : E%            : 0 : 一時消去正常終了
47568 '                                   5 : 一時消去失敗（退避領域不足）
47572 '                   VWM_R%        : 4 : 一時消去実行
47576 '                                   0 : 一時消去中止（一時消去失敗）
47580 '呼出しモジュール : WIN_PMA,WIN_PMR,VWM_HD0,VWM_HD1
47584 '
47588 VIL_VWM_PMB%=VIL_WIN_PM%:GOSUB *VIL_WIN_PMA
47592 GOSUB *VIL_VWM_HD0
47596 IF VIL_E%=0 THEN
47600   WHILE MOUSE(2,0):WEND
47604   GOSUB *VIL_VWM_HD1
47608   VIL_VWM_R%=4
47612 ELSE
47616   VIL_VWM_R%=0
47620 ENDIF
47624 IF VIL_VWM_PMB% THEN GOSUB *VIL_WIN_PMR
47628 RETURN
47632 '
47636 *VIL_VWM_KHIDE
47640 '　ウィンドウ一時消去(キーボード操作版ユーザインタフェース部)
47644 '
47648 '入力変数         : なし
47652 '破壊変数         : なし
47656 '出力変数         : E%            : 0 : 一時消去正常終了
47660 '                                   5 : 一時消去失敗（退避領域不足）
47664 '                   VWM_R%        : 4 : 一時消去実行
47668 '                                   0 : 一時消去中止（一時消去失敗）
47672 '呼出しモジュール : WIN_PMA,WIN_PMR,VWM_HD0,VWM_HD1,MSEL_KY
47676 '
47680 WHILE INKEY$<>"":WEND
47684 VIL_VWM_PMB%=VIL_WIN_PM%:GOSUB *VIL_WIN_PMA
47688 GOSUB *VIL_VWM_HD0
47692 IF VIL_E%=0 THEN
47696   VIL_MSEL_KY%=-4:WHILE VIL_MSEL_KY%=-4:GOSUB *VIL_MSEL_KY:WEND
47700   GOSUB *VIL_VWM_HD1
47704   VIL_VWM_R%=4
47708 ENDIF
47712 IF VIL_VWM_PMB% THEN GOSUB *VIL_WIN_PMR
47716 RETURN
47720 '
47724 *VIL_VWM_HD0
47728 '　ウィンドウ一時消去（ウィンドウ一時退避処理）
47732 '
47736 '入力変数         : なし
47740 '破壊変数         : なし
47744 '出力変数         : E%            : 0 : 一時消去正常終了
47748 '                                   5 : 一時消去失敗（退避領域不足）
47752 '呼出しモジュール : なし
47756 '
47760 VIL_E%=0
47764 GET@A(VIL_WIN_X%(VIL_WIN_AN%)-8,VIL_WIN_Y%(VIL_WIN_AN%)-14)                      -(VIL_WIN_W%(VIL_WIN_AN%)+8,VIL_WIN_Z%(VIL_WIN_AN%)+ 8)                       ,VIL_WIN_BF%,VIL_WIN_BFO&(VIL_WIN_AN%)           'ウィンドウ保存
47768 IF VIL_E%=0 THEN
47772   PUT@A(VIL_WIN_X%(VIL_WIN_AN%)-8,VIL_WIN_Y%(VIL_WIN_AN%)-14)                      -(VIL_WIN_W%(VIL_WIN_AN%)+8,VIL_WIN_Z%(VIL_WIN_AN%)+ 8)                       ,VIL_WIN_BF%,,,,,VIL_WIN_BFO&(VIL_WIN_AN%-1)   '背景復元
47776 ENDIF
47780 RETURN
47784 '
47788 *VIL_VWM_HD1
47792 '　ウィンドウ一時消去（ウィンドウ再表示処理）
47796 '
47800 '入力変数         : なし
47804 '破壊変数         : なし
47808 '出力変数         : なし
47812 '呼出しモジュール : なし
47816 '
47820 PUT@A(VIL_WIN_X%(VIL_WIN_AN%)-8,VIL_WIN_Y%(VIL_WIN_AN%)-14)                      -(VIL_WIN_W%(VIL_WIN_AN%)+8,VIL_WIN_Z%(VIL_WIN_AN%)+ 8)                       ,VIL_WIN_BF%,,,,,VIL_WIN_BFO&(VIL_WIN_AN%)   'ウィンドウ再表示
47824 RETURN
47828 '
47832 *VIL_VWM_HD2
47836 '　ウィンドウ一時消去（再退避・ウィンドウ再表示）
47840 '
47844 '入力変数         :   なし
47848 '破壊変数         :   なし
47852 '出力変数         :   なし
47856 '呼出しモジュール :   なし
47860 '
47864 GET@A(VIL_WIN_X%(VIL_WIN_AN%)-8,VIL_WIN_Y%(VIL_WIN_AN%)-14)                      -(VIL_WIN_W%(VIL_WIN_AN%)+8,VIL_WIN_Z%(VIL_WIN_AN%)+ 8)                       ,VIL_WIN_BF%,VIL_WIN_BFO&(VIL_WIN_AN%-1) '退避した画面情報を更新
47868 PUT@A(VIL_WIN_X%(VIL_WIN_AN%)-8,VIL_WIN_Y%(VIL_WIN_AN%)-14)                      -(VIL_WIN_W%(VIL_WIN_AN%)+8,VIL_WIN_Z%(VIL_WIN_AN%)+ 8)                       ,VIL_WIN_BF%,,,,,VIL_WIN_BFO&(VIL_WIN_AN%)   'ウィンドウ再表示
47872 RETURN
47876 '
47880 *VIL_VWM_RESIZE
47884 '　ウィンドウ・サイズ変更(ユーザインタフェース部)
47888 '
47892 '入力変数         : なし
47896 '破壊変数         : W0%           : 1:左辺移動 2:右辺移動
47900 '                   W1%           : 1:上辺移動 2:下辺移動
47904 '                   W2%,W3%       : 座標修正用
47908 '                   MX%,MY%       : マウス位置
47912 '出力変数         : E%            : 0 : サイズ変更正常終了
47916 '                                   5 : サイズ変更失敗（退避領域不足）
47920 '                   VWM_R%        : 16 : サイズ変更実行
47924 '                                    0 : サイズ変更中止
47928 '                                        （中止操作/サイズ変更失敗）
47932 '呼出しモジュール : WIN_PMA,WIN_PMR,VWM_RS
47936 '
47940 MOUSE 2,VIL_VWM_MCA2$,VIL_VWM_MCD2$,VIL_VWM_MCX2%,VIL_VWM_MCY2%
47944 MOUSE 1,VIL_MX%,VIL_MY%,1
47948 VIL_VWM_PMB%=VIL_WIN_PM%:GOSUB *VIL_WIN_PMA
47952 'LINE(VIL_VWXM,VIL_VWYM)-(VIL_VWWM,VIL_VWZM),PSET,2,B
47956 'LINE(VIL_VWXM-8,VIL_VWYM-14)-(VIL_VWWM+8,VIL_VWZM+8),PSET,3,B
47960 '
47964 VIL_WIN_X%=VIL_WIN_X%-8:VIL_WIN_Y%=VIL_WIN_Y%-14
47968 VIL_WIN_W%=VIL_WIN_W%+8:VIL_WIN_Z%=VIL_WIN_Z%+ 8
47972 VIL_W0%=VIL_WIN_W%-VIL_VWM_WL%- 7-VIL_VWM_XM%
47976 VIL_W1%=VIL_WIN_Z%-VIL_VWM_ZL%- 7-VIL_VWM_YM%
47980 VIL_W2%=VIL_WIN_X%+VIL_VWM_WL%+ 7-VIL_VWM_WM%
47984 VIL_W3%=VIL_WIN_Y%+VIL_VWM_ZL%+13-VIL_VWM_ZM%
47988 MOUSE 4,                                                                      VIL_VWM_XM%-VIL_W0%*(VIL_W0%>0)-8,VIL_VWM_YM%-VIL_W1%*(VIL_W1%>0)-14        ,VIL_VWM_WM%-VIL_W2%*(VIL_W2%<0)+8,VIL_VWM_ZM%-VIL_W3%*(VIL_W3%<0)+ 8
47992 '
47996 VIL_W0%=0:VIL_W1%=0
48000 LINE(VIL_WIN_X%,VIL_WIN_Y%)-(VIL_WIN_W%,VIL_WIN_Z%),XOR,7,B
48004 WHILE MOUSE(2,0)
48008   IF MOUSE(9) OR MOUSE(10) THEN
48012     VIL_MX%=MOUSE(0):VIL_MY%=MOUSE(1)
48016     LINE(VIL_WIN_X%,VIL_WIN_Y%)-(VIL_WIN_W%,VIL_WIN_Z%),XOR,7,B
48020     IF VIL_MX%<=VIL_WIN_X%(VIL_WIN_AN%)-8 THEN
48024       VIL_WIN_X%=VIL_MX%+(VIL_WIN_X%-VIL_MX%) MOD VIL_VWM_WD%
48028       VIL_WIN_W%=VIL_WIN_W%(VIL_WIN_AN%)+8:VIL_W0%=1
48032     ELSE IF VIL_MX%>=VIL_WIN_W%(VIL_WIN_AN%)+8 THEN
48036       VIL_WIN_W%=VIL_MX%-(VIL_MX%-VIL_WIN_W%) MOD VIL_VWM_WD%
48040       VIL_WIN_X%=VIL_WIN_X%(VIL_WIN_AN%)-8:VIL_W0%=2
48044     ELSE
48048       IF VIL_W0%=1 THEN
48052         VIL_W2%=VIL_WIN_W%-VIL_VWM_XL%-15-VIL_MX%
48056         VIL_W2%=VIL_MX%-VIL_W2%*(VIL_W2%<0)
48060         VIL_WIN_X%=VIL_W2%+(VIL_WIN_X%-VIL_W2%) MOD VIL_VWM_WD%
48064       ELSE IF VIL_W0%=2 THEN
48068         VIL_W2%=VIL_WIN_X%+VIL_VWM_XL%+15-VIL_MX%
48072         VIL_W2%=VIL_MX%-VIL_W2%*(VIL_W2%>0)
48076         VIL_WIN_W%=VIL_W2%-(VIL_W2%-VIL_WIN_W%) MOD VIL_VWM_WD%
48080       ENDIF
48084     ENDIF
48088 '
48092     IF VIL_MY%<=VIL_WIN_Y%(VIL_WIN_AN%)-14 THEN
48096       VIL_WIN_Y%=VIL_MY%+(VIL_WIN_Y%-VIL_MY%) MOD VIL_VWM_ZD%
48100       VIL_WIN_Z%=VIL_WIN_Z%(VIL_WIN_AN%)+ 8:VIL_W1%=1
48104     ELSE IF VIL_MY%>=VIL_WIN_Z%(VIL_WIN_AN%)+8 THEN
48108       VIL_WIN_Z%=VIL_MY%-(VIL_MY%-VIL_WIN_Z%) MOD VIL_VWM_ZD%
48112       VIL_WIN_Y%=VIL_WIN_Y%(VIL_WIN_AN%)-14:VIL_W1%=2
48116     ELSE
48120       IF VIL_W1%=1 THEN
48124         VIL_W2%=VIL_WIN_Z%-VIL_VWM_YL%-21-VIL_MY%
48128         VIL_W2%=VIL_MY%-VIL_W2%*(VIL_W2%<0)
48132         VIL_WIN_Y%=VIL_W2%+(VIL_WIN_Y%-VIL_W2%) MOD VIL_VWM_ZD
48136       ELSE IF VIL_W1%=2 THEN
48140         VIL_W2%=VIL_WIN_Y%+VIL_VWM_YL%+21-VIL_MY%
48144         VIL_W2%=VIL_MY%-VIL_W2%*(VIL_W2%>0)
48148         VIL_WIN_Z%=VIL_W2%-(VIL_W2%-VIL_WIN_Z%) MOD VIL_VWM_ZD%
48152       ENDIF
48156     ENDIF
48160     LINE(VIL_WIN_X%,VIL_WIN_Y%)-(VIL_WIN_W%,VIL_WIN_Z%),XOR,7,B
48164   ENDIF
48168 WEND
48172 LINE(VIL_WIN_X%,VIL_WIN_Y%)-(VIL_WIN_W%,VIL_WIN_Z%),XOR,7,B
48176 IF MOUSE(2,1) THEN
48180   VIL_WIN_X%=VIL_WIN_X%(VIL_WIN_AN%)
48184   VIL_WIN_Y%=VIL_WIN_Y%(VIL_WIN_AN%)
48188   VIL_WIN_W%=VIL_WIN_W%(VIL_WIN_AN%)
48192   VIL_WIN_Z%=VIL_WIN_Z%(VIL_WIN_AN%)
48196 ELSE
48200   VIL_WIN_X%=VIL_WIN_X%+8:VIL_WIN_Y%=VIL_WIN_Y%+14
48204   VIL_WIN_W%=VIL_WIN_W%-8:VIL_WIN_Z%=VIL_WIN_Z%- 8
48208   GOSUB *VIL_VWM_RS
48212 ENDIF
48216 MOUSE 2,VIL_VWM_MCA0$,VIL_VWM_MCD0$,VIL_VWM_MCX0%,VIL_VWM_MCY0%
48220 MOUSE 4,0,0,639,479
48224 IF VIL_VWM_PMB% THEN GOSUB *VIL_WIN_PMR
48228 RETURN
48232 '
48236 *VIL_VWM_KRESIZE
48240 '　ウィンドウ・サイズ変更(キー操作版ユーザインタフェース部)
48244 '
48248 '入力変数         : なし
48252 '破壊変数         : W0%           : 1:左辺移動 2:右辺移動
48256 '                   W1%           : 1:上辺移動 2:下辺移動
48260 '                   W2%,W3%,      : サイズ変更可能範囲
48264 '                   W4%,W5%
48268 '                   W6%           : 座標変化分
48272 '                   K$,KY%        : 入力キーとそのアスキーコード
48276 '出力変数         : E%            : 0 : サイズ変更正常終了
48280 '                                   5 : サイズ変更失敗（退避領域不足）
48284 '                   VWM_R%        : 16 : サイズ変更実行
48288 '                                    0 : サイズ変更中止
48292 '                                        （中止操作/サイズ変更失敗）
48296 '呼出しモジュール : WIN_PMA,WIN_PMR,VWM_RS
48300 '
48304 WHILE INKEY$<>"":WEND
48308 VIL_VWM_PMB%=VIL_WIN_PM%:GOSUB *VIL_WIN_PMA
48312 'LINE(VIL_VWXM,VIL_VWYM)-(VIL_VWWM,VIL_VWZM),PSET,2,B
48316 'LINE(VIL_VWXM-8,VIL_VWYM-14)-(VIL_VWWM+8,VIL_VWZM+8),PSET,3,B
48320 '
48324 VIL_WIN_X%=VIL_WIN_X%-8:VIL_WIN_Y%=VIL_WIN_Y%-14
48328 VIL_WIN_W%=VIL_WIN_W%+8:VIL_WIN_Z%=VIL_WIN_Z%+ 8
48332 VIL_W2%=VIL_WIN_W%-VIL_VWM_WL%- 7-VIL_VWM_XM%
48336 VIL_W3%=VIL_WIN_Z%-VIL_VWM_ZL%- 7-VIL_VWM_YM%
48340 VIL_W4%=VIL_WIN_X%+VIL_VWM_WL%+ 7-VIL_VWM_WM%
48344 VIL_W5%=VIL_WIN_Y%+VIL_VWM_ZL%+13-VIL_VWM_ZM%
48348 VIL_W2%=VIL_VWM_XM%-VIL_W2%*(VIL_W2%>0)- 8
48352 VIL_W3%=VIL_VWM_YM%-VIL_W3%*(VIL_W3%>0)-14
48356 VIL_W4%=VIL_VWM_WM%-VIL_W4%*(VIL_W4%<0)+ 8
48360 VIL_W5%=VIL_VWM_ZM%-VIL_W5%*(VIL_W5%<0)+ 8
48364 'LINE(VIL_W3  ,VIL_W4   )-(VIL_W5  ,VIL_W6  ),PSET,1,B
48368 'LINE(VIL_W3-8,VIL_W4-14)-(VIL_W5+8,VIL_W6+8),PSET,4,B
48372 '
48376 VIL_W0%=2:VIL_W1%=1
48380 LINE(VIL_WIN_X%,VIL_WIN_Y%)-(VIL_WIN_W%,VIL_WIN_Z%),XOR,7,B
48384 VIL_MSEL_KY%=0
48388 WHILE VIL_MSEL_KY%<>-1 AND VIL_MSEL_KY%<>-2       '取消 / 決定
48392   GOSUB *VIL_MSEL_KY
48396   IF VIL_MSEL_KY%=-4 THEN 48392
48400   LINE(VIL_WIN_X%,VIL_WIN_Y%)-(VIL_WIN_W%,VIL_WIN_Z%),XOR,7,B
48404   VIL_W6%=((VIL_MSEL_KY%= -6)-(VIL_MSEL_KY%= -5))*VIL_VWM_WD%                         +((VIL_MSEL_KY%=-10)-(VIL_MSEL_KY%= -9))*VIL_VWM_WD%*8
48408 '                                                 ←→、拡張←→
48412   IF VIL_W0%=1 THEN                                   'MOVE WIN_X%
48416     VIL_WIN_X%=VIL_WIN_X%+VIL_W6%
48420     IF VIL_WIN_X%<VIL_W2% THEN
48424       VIL_WIN_W%=VIL_W4%-(VIL_W4%-VIL_WIN_W%) MOD VIL_VWM_WD%
48428       VIL_WIN_X%=VIL_WIN_X%(VIL_WIN_AN%)-8:VIL_W0%=2
48432     ELSE IF VIL_WIN_W%-VIL_VWM_XL%-15<VIL_WIN_X% THEN
48436       VIL_WIN_X%=VIL_WIN_X%(VIL_WIN_AN%)-8:VIL_W0%=2
48440       VIL_WIN_W%=VIL_WIN_X%+VIL_VWM_XL%+15                                                 +(VIL_WIN_W%-VIL_WIN_X%-VIL_VWM_XL%-15) MOD VIL_VWM_WD%
48444     ENDIF
48448   ELSE                                                'MOVE WIN_W%
48452     VIL_WIN_W%=VIL_WIN_W%+VIL_W6%
48456     IF VIL_WIN_W%<VIL_WIN_X%+VIL_VWM_XL%+15 THEN
48460       VIL_WIN_W%=VIL_WIN_W%(VIL_WIN_AN%)+8:VIL_W0%=1
48464       VIL_WIN_X%=VIL_WIN_W%-VIL_VWM_XL%-15                                                 +(VIL_WIN_X%-VIL_WIN_W%+VIL_VWM_XL%+15) MOD VIL_VWM_WD%
48468     ELSE IF VIL_W4%<VIL_WIN_W% THEN
48472       VIL_WIN_X%=VIL_W2%-(VIL_W2%-VIL_WIN_X%) MOD VIL_VWM_WD%
48476       VIL_WIN_W%=VIL_WIN_W%(VIL_WIN_AN%)+8:VIL_W0%=1
48480     ENDIF
48484   ENDIF
48488 '
48492    VIL_W6%=((VIL_MSEL_KY%= -7)-(VIL_MSEL_KY%= -8))*VIL_VWM_ZD%                         +((VIL_MSEL_KY%=-11)-(VIL_MSEL_KY%=-12))*VIL_VWM_ZD%*8
48496 '                                                 ↑↓、拡張↑↓
48500   IF VIL_W1%=1 THEN                                   'MOVE WIN_Y
48504     VIL_WIN_Y%=VIL_WIN_Y%+VIL_W6%
48508     IF VIL_WIN_Y%<VIL_W3% THEN
48512       VIL_WIN_Z%=VIL_W5%-(VIL_W5%-VIL_WIN_Z%) MOD VIL_VWM_ZD%
48516       VIL_WIN_Y%=VIL_WIN_Y%(VIL_WIN_AN%)-14:VIL_W1%=2
48520     ELSE IF VIL_WIN_Z%-VIL_VWM_YL%-21<VIL_WIN_Y% THEN
48524       VIL_WIN_Y%=VIL_WIN_Y%(VIL_WIN_AN%)-14:VIL_W1%=2
48528       VIL_WIN_Z%=VIL_WIN_Y%+VIL_VWM_YL%+21                                                 +(VIL_WIN_Z%-VIL_WIN_Y%-VIL_VWM_YL%-21) MOD VIL_VWM_ZD%
48532     ENDIF
48536   ELSE                                                'MOVE WIN_Z
48540     VIL_WIN_Z%=VIL_WIN_Z%+VIL_W6%
48544     IF VIL_WIN_Z%<VIL_WIN_Y%+VIL_VWM_YL%+21 THEN
48548       VIL_WIN_Z%=VIL_WIN_Z%(VIL_WIN_AN%)+8:VIL_W1%=1
48552       VIL_WIN_Y%=VIL_WIN_Z%-VIL_VWM_YL%-21                                                 +(VIL_WIN_Y%-VIL_WIN_Z%+VIL_VWM_YL%+21) MOD VIL_VWM_ZD%
48556     ELSE IF VIL_W5%<VIL_WIN_Z% THEN
48560       VIL_WIN_Y%=VIL_W3%-(VIL_W3%-VIL_WIN_Y%) MOD VIL_VWM_ZD%
48564       VIL_WIN_Z%=VIL_WIN_Z%(VIL_WIN_AN%)+8:VIL_W1%=1
48568     ENDIF
48572   ENDIF
48576   LINE(VIL_WIN_X%,VIL_WIN_Y%)-(VIL_WIN_W%,VIL_WIN_Z%),XOR,7,B
48580 WEND
48584 '
48588 LINE(VIL_WIN_X%,VIL_WIN_Y%)-(VIL_WIN_W%,VIL_WIN_Z%),XOR,7,B
48592 IF VIL_MSEL_KY%=-2 THEN
48596   VIL_WIN_X%=VIL_WIN_X%+8:VIL_WIN_Y%=VIL_WIN_Y%+14
48600   VIL_WIN_W%=VIL_WIN_W%-8:VIL_WIN_Z%=VIL_WIN_Z%- 8
48604   GOSUB *VIL_VWM_RS
48608 ELSE
48612   VIL_WIN_X%=VIL_WIN_X%(VIL_WIN_AN%)
48616   VIL_WIN_Y%=VIL_WIN_Y%(VIL_WIN_AN%)
48620   VIL_WIN_W%=VIL_WIN_W%(VIL_WIN_AN%)
48624   VIL_WIN_Z%=VIL_WIN_Z%(VIL_WIN_AN%)
48628 ENDIF
48632 IF VIL_VWM_PMB% THEN GOSUB *VIL_WIN_PMR
48636 RETURN
48640 '
48644 *VIL_VWM_RS
48648 '　ウィンドウ・サイズ変更実行
48652 '
48656 '入力変数         : WIN_X%,WIN_Y% : リサイズ後のウィンドウ左上隅座標
48660 '                   WIN_W%,WIN_Z% : リサイズ後のウィンドウ右下隅座標
48664 '破壊変数         : なし
48668 '出力変数         : E%            : 0 : サイズ変更正常終了
48672 '                                   5 : サイズ変更失敗（退避領域不足）
48676 '                     E%=0 のとき
48680 '                       VWM_R%        : 16 : サイズ変更実行
48684 '                     E%=5 のとき
48688 '                       WIN_X%,WIN_Y% : サイズ変更前の
48692 '                       WIN_W%,WIN_Z% : 　ウィンドウ左上・右下隅座標
48696 '                       VWM_R%        : 0  : サイズ変更失敗
48700 '呼出しモジュール :   WIN_PMA,WIN_PMR,VWM_OP,VWM_CL
48704 '
48708 VIL_WIN_BFO&(VIL_WIN_AN%+1)=VIL_WIN_BFO&(VIL_WIN_AN%)                                                   +INT((INT((VIL_WIN_W%-VIL_WIN_X%+24)/8)                                           *(VIL_WIN_Z%-VIL_WIN_Y%+23)*4+1)/2)
48712 IF VIL_WIN_BFO&(VIL_WIN_AN%+1)<VIL_WIN_BFO&(VIL_WIN_AN%) THEN
48716   VIL_WIN_BFO&(VIL_WIN_AN%+1)=VIL_WIN_BFO&(VIL_WIN_AN%) 
48720 ENDIF
48724 VIL_E%=0
48728 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)         'ウィンドウ保存
48732 VIL_VWM_WX%=VIL_WIN_W%(VIL_WIN_AN%)-VIL_WIN_X%(VIL_WIN_AN%)
48736 VIL_VWM_WY%=VIL_WIN_Z%(VIL_WIN_AN%)-VIL_WIN_Y%(VIL_WIN_AN%)
48740 IF VIL_E%=0 THEN
48744   VIL_WIN_X%(VIL_WIN_AN%+1)=VIL_WIN_X%        'リサイズ後の位置保存
48748   VIL_WIN_Y%(VIL_WIN_AN%+1)=VIL_WIN_Y%
48752   VIL_WIN_W%(VIL_WIN_AN%+1)=VIL_WIN_W%
48756   VIL_WIN_Z%(VIL_WIN_AN%+1)=VIL_WIN_Z%
48760   GOSUB *VIL_VWM_CL                           'ウィンドウを一旦閉じる
48764 '
48768   VIL_WIN_X%=VIL_WIN_X%(VIL_WIN_AN%+2)
48772   VIL_WIN_Y%=VIL_WIN_Y%(VIL_WIN_AN%+2)
48776   VIL_WIN_W%=VIL_WIN_W%(VIL_WIN_AN%+2)
48780   VIL_WIN_Z%=VIL_WIN_Z%(VIL_WIN_AN%+2)
48784   VIL_VWM_AT%=VIL_VWM_AT%(VIL_WIN_AN%+1)
48788   VIL_VWM_T$ =VIL_VWM_T$(VIL_WIN_AN%+1)
48792   GOSUB *VIL_VWM_OP
48796   GOSUB *VIL_WIN_PMR
48800   PUT@A(0,0)-(VIL_VWM_WX%,VIL_VWM_WY%)                                              ,VIL_WIN_BF%,,,,,VIL_WIN_BFO&(VIL_WIN_AN%+1)
48804 '                                               ウィンドウ再表示
48808   GOSUB *VIL_WIN_PMA
48812   VIL_VWM_R%=16
48816 ELSE
48820   VIL_WIN_X%=VIL_WIN_X%(VIL_WIN_AN%)
48824   VIL_WIN_Y%=VIL_WIN_Y%(VIL_WIN_AN%)
48828   VIL_WIN_W%=VIL_WIN_W%(VIL_WIN_AN%)
48832   VIL_WIN_Z%=VIL_WIN_Z%(VIL_WIN_AN%)
48836   VIL_VWM_R%=0
48840 ENDIF
48844 RETURN
48848 '
48852 '--------------------  選択パッケージ　--------------------
48856 '必要パッケージ : メニュー選択
48860 '・実行/取消、はい/いいえ、確認など入力
48864 '
48868 *VIL_SEL_INITM
48872 '　選択パッケージ初期化
48876 '
48880 '入力変数         :   なし
48884 '破壊変数         :   なし
48888 '出力変数         :   なし
48892 '呼出しモジュール :   なし
48896 '
48900 'パッケージ変数   :   なし
48904 '
48908 RETURN
48912 *VIL_SEL_ENVR
48916 '　アプリ環境ファイル読み込み
48920 '
48924 '入力変数         : なし
48928 '破壊変数         : なし
48932 '出力変数         : なし
48936 '呼出しモジュール : VIL_LNR
48940 '
48944 VIL_W0$="":WHILE VIL_W0$<>"#SEL":GOSUB *VIL_LNR:WEND
48948 RETURN
48952 '
48956 *VIL_SEL_ENVW
48960 '　アプリ環境ファイル書き込み
48964 '
48968 '入力変数         : なし
48972 '破壊変数         : なし
48976 '出力変数         : なし
48980 '呼出しモジュール : なし
48984 '
48988 PRINT #1,"#SEL"
48992 RETURN
48996 '
49000 *VIL_SEL_OK
49004 '　「確認」選択
49008 '
49012 '入力変数         : X%,Y%         : 「確認」ボックス左上隅座標
49016 '                                     (40x24ドット)
49020 '破壊変数         : W%,Z%         : 左上隅ボックス右下隅座標
49024 '                   XN%,YN%       : ボックス縦横個数
49028 '                   XL%,YL%       : ボックス縦横間隔(左上隅座標の間隔)
49032 '                   C%            : ボックスカーソル（ＢＣ）色
49036 '出力変数 :         KN%           : 入力番号
49040 '                           1       :決定 / 選択　　（1:確認）
49044 '                          -1       :取消
49048 '                          -2       :ボックス外を左クリック
49052 '                          -3       :非対応キー入力
49056 '                         -13       :ウィンドウマネージャ起動キー
49060 '                   KY%           : 入力キーのアスキーコード
49064 '                                  （入力なし:0 ）
49068 '                   K$            : 入力キー
49072 '                                   （入力なし:""）
49076 '                   MX%,MY%       : 左クリック位置(絶対座標)
49080 '                   MW%,MZ%       : 左クリック位置(相対座標)
49084 '                                   (ともにKN%=-2 の時有効)
49088 '                            ただしウィンドウ外クリックの時 MW%=-1
49092 '                   MSEL_KY%      : 選択キーコード
49096 '                   MSEL_BC%      : -1 （ＢＣ表示済） 
49100 '呼出しモジュール : MSEL_M,MSEL_BC
49104 '
49108 SYMBOL(VIL_X%+4,VIL_Y%+4),"確認",1,1,7
49112 LINE(VIL_X%+2,VIL_Y%+2)-(VIL_X%+37,VIL_Y%+21),PSET,7,B
49116 VIL_W%=VIL_X%+39:VIL_Z%=VIL_Y%+23
49120 VIL_XN%=1:VIL_YN%=1:VIL_C%=15:VIL_MSEL_MN%=0:VIL_MSEL_BC%=0
49124 VIL_MSEL_BB%=1:VIL_MSEL_BE%=1
49128 GOSUB *VIL_MSEL_M
49132 GOSUB *VIL_MSEL_BC
49136 RETURN
49140 '
49144 *VIL_SEL_YN
49148 '　「はい」「いいえ」　選択
49152 '
49156 '入力変数         : X%,Y%         : 「はい」ボックス左上隅座標
49160 '                                     (56x24ドット)
49164 '                   MSEL_BN%      : ボックスカーソル初期位置
49168 '                                     (1:はい / 2:いいえ)
49172 '破壊変数         : W%,Z%         : 左上隅ボックス右下隅座標
49176 '                   XN%,YN%       : ボックス縦横個数
49180 '                   XL%,YL%       : ボックス縦横間隔(左上隅座標の間隔)
49184 '                   C%            : ボックスカーソル（ＢＣ）色
49188 '出力変数 :         KN%           : 入力番号
49192 '                           1,2     :決定 / 選択 （1:はい / 2:いいえ）
49196 '                          -1       :取消
49200 '                          -2       :ボックス外を左クリック
49204 '                          -3       :非対応キー入力
49208 '                         -13       :ウィンドウマネージャ起動キー
49212 '                   KY%           : 入力キーのアスキーコード
49216 '                                  （入力なし:0 ）
49220 '                   K$            : 入力キー
49224 '                                   （入力なし:""）
49228 '                   MX%,MY%       : 左クリック位置(絶対座標)
49232 '                   MW%,MZ%       : 左クリック位置(相対座標)
49236 '                                   (ともにKN%=-2 の時有効)
49240 '                            ただしウィンドウ外クリックの時 MW%=-1
49244 '                   MSEL_KY%      : 選択キーコード
49248 '                   MSEL_BN%      : 最後のＢＣ位置 (KN<1のときも有効)
49252 '                   MSEL_BC%      : -1 （ＢＣ表示済） 
49256 '呼出しモジュール : MSEL_M,MSEL_BC
49260 '
49264 SYMBOL(VIL_X%+4,VIL_Y%+4),"はい    いいえ",1,1,7
49268 LINE(VIL_X%+ 2,VIL_Y%+2)-(VIL_X%+ 53,VIL_Y%+21),PSET,7,B
49272 LINE(VIL_X%+66,VIL_Y%+2)-(VIL_X%+117,VIL_Y%+21),PSET,7,B
49276 VIL_W%=VIL_X%+55:VIL_Z%=VIL_Y%+23
49280 VIL_XL%=64:VIL_XN%=2:VIL_YN%=1:VIL_C%=15:VIL_MSEL_BD%=0
49284 VIL_MSEL_MN%=0:VIL_MSEL_BC%=0:VIL_MSEL_BB%=1:VIL_MSEL_BE%=2
49288 GOSUB *VIL_MSEL_M
49292 GOSUB *VIL_MSEL_BC
49296 IF VIL_KN%=-1 THEN VIL_KN%=2      '取消入力なら「いいえ」
49300 RETURN
49304 '
49308 *VIL_SEL_DO
49312 '　「実行」「取消」選択
49316 '   (0,0)-(87,23)
49320 '
49324 '入力変数         : X%,Y%         : 「実行」ボックス左上隅座標
49328 '                                     (40x24ドット)
49332 '                   MSEL_BN%      : ボックスカーソル初期位置
49336 '                                     (1:実行 / 2:取消)
49340 '破壊変数         : W%,Z%         : 左上隅ボックス右下隅座標
49344 '                   XN%,YN%       : ボックス縦横個数
49348 '                   XL%,YL%       : ボックス縦横間隔(左上隅座標の間隔)
49352 '                   C%            : ボックスカーソル（ＢＣ）色
49356 '出力変数 :         KN%           : 入力番号
49360 '                           1,2     :決定 / 選択 （1:実行 / 2:取消）
49364 '                          -1       :取消
49368 '                          -2       :ボックス外を左クリック
49372 '                          -3       :非対応キー入力
49376 '                         -13       :ウィンドウマネージャ起動キー
49380 '                   KY%           : 入力キーのアスキーコード
49384 '                                  （入力なし:0 ）
49388 '                   K$            : 入力キー
49392 '                                   （入力なし:""）
49396 '                   MX%,MY%       : 左クリック位置(絶対座標)
49400 '                   MW%,MZ%       : 左クリック位置(相対座標)
49404 '                                   (ともにKN%=-2 の時有効)
49408 '                            ただしウィンドウ外クリックの時 MW%=-1
49412 '                   MSEL_KY%      : 選択キーコード
49416 '                   MSEL_BN%      : 最後のＢＣ位置 (KN<1のときも有効)
49420 '                   MSEL_BC%      : -1 （ＢＣ表示済） 
49424 '呼出しモジュール : MSEL_M,MSEL_BC
49428 '
49432 SYMBOL(VIL_X%+4,VIL_Y%+4),"実行  取消",1,1,7
49436 LINE(VIL_X%+ 2,VIL_Y%+2)-(VIL_X%+37,VIL_Y%+21),PSET,7,B
49440 LINE(VIL_X%+50,VIL_Y%+2)-(VIL_X%+85,VIL_Y%+21),PSET,7,B
49444 VIL_W%=VIL_X%+39:VIL_Z%=VIL_Y%+23
49448 VIL_XL%=48:VIL_XN%=2:VIL_YN%=1:VIL_C%=15:VIL_MSEL_BD%=0
49452 VIL_MSEL_MN%=0:VIL_MSEL_BC%=0:VIL_MSEL_BB%=1:VIL_MSEL_BE%=2
49456 GOSUB *VIL_MSEL_M
49460 GOSUB *VIL_MSEL_BC
49464 IF VIL_KN%=-1 THEN VIL_KN%=2      '取消入力なら「いいえ」
49468 RETURN
49472 '
49476 'SCALE--------2---------3---------4---------5---------6---------7-----*--*8
