100 '---------------  ＶＩＬローダファイル Ver3.20　---------------
110 '--------------------  ＶＩＬ組み込み開始　--------------------
120 CLEAR ,,512,FRE(4)-1024*128,0,0               'メモリ領域設定
130 SCREEN 0:PALETTE@:CLS
140 VIL_W0%=0:VIL_W1%=0:VIL_W2%=0:VIL_W3%=0:VIL_W4%=0  '汎用ワーク変数
150 VIL_W5%=0:VIL_W6%=0:VIL_W7%=0:VIL_W8%=0:VIL_W9%=0
160 VIL_W0&=0:VIL_W1&=0:VIL_W2&=0:VIL_W3&=0:VIL_W4&=0  '汎用ワーク変数
170 VIL_W5&=0:VIL_W6&=0:VIL_W7&=0:VIL_W8&=0:VIL_W9&=0
180 VIL_W0$="":VIL_W1$="":VIL_W2$="":VIL_W3$=""
190 'ループ変数                長さ
200 VIL_I%=0:VIL_J%=0:VIL_K%=0:VIL_L%=0
210 '文字列汎用,ファイル名汎用,描画色  ,背景色(0..15)
220 VIL_A$="":VIL_F$="":VIL_C%=15:VIL_CB%=0:VIL_CC%=7
230 '左上隅・右下隅座標
240 VIL_X%=0:VIL_Y%=0:VIL_W%=0:VIL_Z%=0
250 'Ｘ・Ｙ軸方向長さ  ,個数
260 VIL_XL%=0:VIL_YL%=0:VIL_XN%=0:VIL_YN%=0
270 'パレット番号,入力番号,入力キー,アスキーコード,パッドコード
280 VIL_P%=0:VIL_KN%=0:VIL_K$="":VIL_KY%=0:VIL_PAD%=0
290 'マウス位置
300 VIL_MX%=0:VIL_MY%=0:VIL_MW%=0:VIL_MZ%=0
310 '
320 VIL_E%=0                                      'エラー番号
330 VIL_DIR$=""                                   'VILディレクトリ
340 VIL_APPCNF$="APPLI.CNF"                       'アプリ設定ファイル名
350 DIM VIL_ENVNAM$(31),VIL_ENVVAL$(31)           '環境変数　名前／値
360 VIL_ENVNUM%=0                                 '環境変数の数
370 VIL_VER%=320                                  'ＶＩＬ VER3.20
380 '
390 *VIL_CNF                              '設定ファイル"VIL.CNF"読込
400 PRINT"Searching "+CHR$(34)+"VIL.CNF"+CHR$(34)
410 PRINT"Searching current directory"
420 GOSUB *VIL_ERR_ON:VIL_E%=0
430 OPEN "I",#1,"VIL.CNF"                 'カレントディレクトリを探す
440 IF VIL_E%=63 THEN
450   PRINT"Searching root directory"
460   VIL_E%=0
470   OPEN "I",#1,"\VIL.CNF"              'ルートディレクトリを探す
480   IF VIL_E%=63 THEN                   '見つからなければ設定中止
490     PRINT"WARNING:"+CHR$(34)+"VIL.CNF"+CHR$(34)+" not found"
500     GOTO *VIL_L_BGN
510   ENDIF
520 ENDIF
530 PRINT"Reading "+CHR$(34)+"VIL.CNF"+CHR$(34)
540 '
550 '    環境変数設定
560 WHILE EOF(1)=0
570   GOSUB *VIL_LNR
580   VIL_W0%=INSTR(VIL_W0$," "):VIL_W1%=VIL_W0%          'スペース開始
590   WHILE MID$(VIL_W0$,VIL_W1%,1)=" ":VIL_W1%=VIL_W1%+1:WEND
600   VIL_ENVNAM$(VIL_ENVNUM%)=LEFT$(VIL_W0$,VIL_W0%-1)
610   VIL_ENVVAL$(VIL_ENVNUM%)= MID$(VIL_W0$,VIL_W1%)
620   VIL_ENVNUM%=VIL_ENVNUM%+1
630 '  GOSUB *VIL_LNR
640 WEND
650 'FOR VIL_I%=0 TO VIL_ENVNUM%-1:                                                 PRINT VIL_I%;"|";VIL_ENVNAM$(VIL_I%);"|";VIL_ENVVAL$(VIL_I%);"|":          NEXT':VIL_W0$=INPUT$(1)                        '*** デバッグ用
660 VIL_W0%=SEARCH(VIL_ENVNAM$,"VILDIR"):                                        IF VIL_W0%>-1 THEN VIL_DIR$=VIL_ENVVAL$(VIL_W0%) 'VILディレクトリ設定
670 VIL_W0%=SEARCH(VIL_ENVNAM$,"APPLICNF"):                                      IF VIL_W0%>-1 THEN VIL_APPCNF$=VIL_ENVVAL$(VIL_W0%)
680 CLOSE #1
690 '
700 *VIL_L_BGN                                ' VIL リンク開始
710 ON ERROR GOTO 0
720 *VIL_L_BAS:                                                                  CHAIN MERGE VIL_DIR$+"VIL_BAS.BAS",*VIL_L_VWM,ALL,DELETE *VIL_L_BAS
730 *VIL_L_VWM:                                                                  CHAIN MERGE VIL_DIR$+"VIL_VWM.BAS",*VIL_L_END,ALL,DELETE *VIL_L_VWM
740 *VIL_L_END                                ' VIL リンク終了
750 '
760 GOSUB *VIL_ERR_ON:GOSUB *VIL_DEFFN:GOTO *MAIN
770 '
780 *VIL_DEFFN
790 '  S$:文字列に変換 SS$:左にスペースを詰める S0$:左に0を詰める
800 '  P :正の整数     I  :整数                 R  :実数
810 DEF FNVIL_P2S$(X&)       =MID$(STR$(X&),2)
820 DEF FNVIL_P2SS$(X&,Y%)   =RIGHT$("          "+STR$(X&),Y%)
830 DEF FNVIL_P2S0$(X&,Y%)   =RIGHT$("0000000000"+MID$(STR$(X&),2),Y%)
840 DEF FNVIL_I2S$(X&)       =MID$(STR$(X&),1-(X&>=0))
850 DEF FNVIL_I2SS$(X&,Y%)   =RIGHT$("          "+STR$(X&),Y%)
860 '符号１桁(+-) + 00… + 数値
870 DEF FNVIL_I2S0$(X&,Y%)   =MID$("+-",1-(X&<0),1)                                                       +RIGHT$("0000000000"+MID$(STR$(ABS(X&)),2)                                          ,Y%-1)
880 DEF FNVIL_R2S$(X#)       =MID$(STR$(X#),1-(X#>=0))
890 DEF FNVIL_R2SS$(X#,Y%,Z%)=RIGHT$("          "+STR$(FIX(X#)),Y%)+"."                                   +MID$("0000000000"+STR$(X#)+"0000000000"                                          ,INSTR("0000000000"+STR$(X#),".")+1,Z%)
900 DEF FNVIL_R2S0$(X#,Y%,Z%)=MID$("+-",1-(X#<0),1)+RIGHT$("0000000000"              +MID$(STR$(FIX(ABS(X#))),2),Y%-1)+MID$("0000000000"+STR$(X#)                 +"0000000000",INSTR("0000000000"+STR$(X#),".")+1,Z%)
910 RETURN
920 '
930 'ＶＩＬ汎用モジュール
940 '
950 *VIL_ERR_ON:ON ERROR GOTO *VIL_ERR:RETURN
960 '
970 *VIL_ERR:VIL_E%=ERR:RESUME NEXT
980 '*VIL_ERR:SCREEN 0:VIL_E%=ERR:PRINT "ERR";VIL_E%;"IN";ERL:BEEP:A$=INPUT$(1):IF A$=" " THEN ON ERROR GOTO 0 ELSE RESUME NEXT   'デバッグ用
990 '
1000 *VIL_CNFOP
1010 'VIL_APPCNF$ をオープン。正常終了時 VIL_E%=0
1020 VIL_E%=0
1030 OPEN "I",#1,VIL_APPCNF$
1040 RETURN
1050 '
1060 *VIL_CNFCL
1070 'VIL_APPCNF$ をクローズ。正常終了時 VIL_E%=0
1080 VIL_E%=0
1090 CLOSE #1
1100 RETURN
1110 '
1120 *VIL_CNFERR
1130 'ＶＩＬ設定ファイル読み込み時のエラー処理（現バージョンでは強制終了）
1140 PRINT"CNFファイルに誤りがあります"
1150 PRINT"エラー行:";VIL_W0$
1160 STOP
1170 RETURN
1180 '
1190 *VIL_LNR
1200 '１行読み込み（空行・コメント行スキップ）
1210 LINE INPUT #1,VIL_W0$':SCREEN 0:PRINT VIL_W0$;"!"
1220 IF (VIL_W0$="" OR LEFT$(VIL_W0$,1)="'") AND EOF(1)=0 THEN *VIL_LNR
1230 RETURN
1240 '
1250 '--------------------  ＶＩＬ組み込み終了　--------------------
20000 '
20010 '<<<<<<<<<<<<<<<  Visual Interface Library Demo V3.20  >>>>>>>>>>>>>>>
20020 '
20030 *MAIN       'ＶＩＬは最初にこのラベルを呼び出す
20040 '
20050 RANDOMIZE TIME:DEFINT A-Z
20060 '
20070 'SCREEN 1,0,3,1:VIEW(0,0)-(639,479):WINDOW(0,0)-(639,479)
20080 SCREEN@ 0:CLS
20090 VIEW(0,0)-(639,479):WINDOW(0,0)-(639,479)
20100 PLAY OFF
20110 '
20120 '起動画面
20130 '
20140 SCREEN 0:CLS
20150 LINE(160,160)-(479,319),PSET,7,BF
20160 SYMBOL(224,168),"ＶＩＬ",4,4,4
20170 SYMBOL(224,260),"Visual Interface Library",1,1,0
20180 SYMBOL(224,280)," Demonstration  Program ",1,1,0
20190 '
20200 '<<<<<<<<<<<<<<<<<<<<  VIL INITIALIZE  >>>>>>>>>>>>>>>>>>>>
20210 '
20220 'ＶＩＬパッケージ初期化
20230 '
20240 GOSUB *VIL_CNFOP
20250 '
20260 GOSUB *VIL_ENV_INITM
20270 '
20280 GOSUB *VIL_BEEP_INITM
20290 '
20300 VIL_W0&=1024*500\2            '画面退避(最大ウィンドウ総面積)
20310 VIL_W1%=20                    '最大ウィンドウ番号
20320 GOSUB *VIL_WIN_INITM
20330 '
20340 GOSUB *VIL_VKEY_INITM
20350 '
20360 VIL_W0%=120                   '最大メニュー番号
20370 VIL_W1%=256                   '最大ボックス数
20380 VIL_W2%=10                    '設定メニュー最大行数
20390 GOSUB *VIL_MSEL_INITM
20400 '
20410 VIL_W0%=2                     'ヒストリ系列数
20420 GOSUB *VIL_INP_INITM
20430 '
20440 VIL_W0&=50000                 '画像データバッファ要素数
20450 VIL_W1%=50                    '画像データインデックス要素数
20460 VIL_W2&=100                   'パレットデータバッファ要素数
20470 VIL_W3%=10                    'パレットデータインデックス要素数
20480 GOSUB *VIL_MG_INITM
20490 '
20500 VIL_W0%=10                   '最大ウィンドウ通し番号
20510 VIL_W1%=8                     'ウィンドウ背景色用パレット番号
20520 VIL_W2%=0                     '枠幅パターン数
20530 GOSUB *VIL_VWM_INITM
20540 '
20550 GOSUB *VIL_SBAR_INITM
20560 '
20570 VIL_W0%=5                    'メニュー個数
20580 GOSUB *VIL_PDM_INITM
20590 '
20600 GOSUB *VIL_SEL_INITM
20610 '
20620 IF VIL_E% THEN PRINT"VIL INIT ERROR!!":BEEP:STOP
20630 GOSUB *VIL_CNFCL
20640 '
20650 'アプリ環境ファイル読み込み
20660 '
20670 GOSUB *VIL_ENV_ROP
20680   GOSUB *VIL_BEEP_ENVR
20690   GOSUB *VIL_WIN_ENVR
20700   GOSUB *VIL_VKEY_ENVR
20710   GOSUB *VIL_MSEL_ENVR
20720   GOSUB *VIL_INP_ENVR
20730   GOSUB *VIL_MG_ENVR
20740   GOSUB *VIL_VWM_ENVR
20750   GOSUB *VIL_SBAR_ENVR
20755   GOSUB *VIL_PDM_ENVR
20760   GOSUB *VIL_SEL_ENVR
20770 GOSUB *VIL_ENV_RCL
20780 '
20790 '<<<<<<<<<<<<<<<<<<<<  INIT  >>>>>>>>>>>>>>>>>>>>
20800 DIM TXTBUF$(52)
20810 RESTORE *TXT_DATA:FOR I=0 TO 52:READ TXTBUF$(I):NEXT
20820 *TXT_DATA
20830 DATA "　　　　 ～　スクロールバー　～ 　　　　"
20840 DATA "　このウィンドウは縦方向のスクロールバー"
20850 DATA "が付いています。                      　"
20860 DATA "              上スクロールスイッチ→┌┐"
20870 DATA "                            　      ├┤"
20880 DATA "              上リージョン───┬→││"
20890 DATA "                            　  │  ├┤"
20900 DATA "              インジケータ────→││"
20910 DATA "                                │  ├┤"
20920 DATA "              下リージョン      └→││"
20930 DATA "                                    ├┤"
20940 DATA "              下スクロールスイッチ→└┘"
20950 DATA "　下スクロールスイッチをクリックすると、"
20960 DATA "この説明文の続きを読むことができます。最"
20970 DATA "初の方を読みたいときは、上スクロールスイ"
20980 DATA "ッチをクリックしてください。            "
20990 DATA "                                      　"
21000 DATA "　インジケータは、説明文全体のうちどの部"
21010 DATA "分がウィンドウ内に表示されているかを示し"
21020 DATA "ています。このインジケータをドラッグする"
21030 DATA "ことで、任意の位置に一気に移動することが"
21040 DATA "できます。                              "
21050 DATA "                                      　"
21060 DATA "　スクロールスイッチをクリックすると表示"
21070 DATA "内容を一行ずつ進める／戻すことができます"
21080 DATA "が、インジケータ上下のリージョンをクリッ"
21090 DATA "クすると、一ページずつ進める／戻すことが"
21100 DATA "できます。                              "
21110 DATA "                                      　"
21120 DATA "　この後では横方向のスクロールバーも登場"
21130 DATA "しますが、操作方法は同様です。        　"
21140 DATA ""
21150 DATA "　この文章、ある程度長さがないとスクロー"
21160 DATA "ルバーの例になりませんので、以下余談を書"
21170 DATA "きます(^_^;)。なお、このウィンドウを抜け"
21180 DATA "るときは、クローズスイッチを押してくださ"
21190 DATA "い。"
21200 DATA ""
21210 DATA "　このウィンドウマネージャ（ＷＭ）は一応"
21220 DATA "ＶＩＬの標準ＷＭとして設計しています。で"
21230 DATA "すから人によっては高機能すぎると思われる"
21240 DATA "かもしれませんが、使わない属性は指定しな"
21250 DATA "いようにすれば、アプリケーション側で対応"
21260 DATA "ルーチンを書く必要もありません。        "
21270 DATA ""
21280 DATA "  例えばＲＰＧを作るのなら、全てのウィン"
21290 DATA "ドウで全属性ＯＦＦでも問題ないでしょう。"
21300 DATA "個人的には MOVE 属性ぐらいは対応すると、"
21310 DATA "コマンドウィンドウのレイアウトが自由にで"
21320 DATA "きて楽しいと思いますが……（妙に具体的な"
21330 DATA "例(^_^;)。フリコレ12にはなんとか(謎)）。"
21340 DATA "　　　　　　　　　↑　　　　　　　　　　"
21350 DATA "　　　　　あっ、前回は11だったのに(^_^;)"
21360 '
21370 DIM SHTMAP(63,7)
21380 RESTORE *SHTMAP_DATA
21390 FOR Y=0 TO 7
21400   READ A$
21410   FOR X=0 TO 63
21420     SHTMAP(X,Y)=VAL(MID$(A$,X+1,1))
21430   NEXT
21440 NEXT
21450 '
21460 *SHTMAP_DATA
21470 DATA 0000000000000000004000000000000000000040040000000222222242222222
21480 DATA 0000000000001322224222200001000000000040040000000000000040000000
21490 DATA 0000000000000000004000000005000000100040040000000222222222222222
21500 DATA 0000000013222222224000000004000001010222022000000000000012222222
21510 DATA 0000000000000000004000010134000000100004000000000000000012222222
21520 DATA 0001000000000000004000050004000000500002224200000222222222222222
21530 DATA 0005000000000000004000042224000000400000004000000000000040000000
21540 DATA 0004000000000000004000040004000000400000004000000222222242222222
21550 '
21560 VIL_MG_F$="VDEMO320":GOSUB *VIL_MG_LD
21570 '
21580 DIM PDM_X(5),PDM_N(5),PDM_XL(5),PDM_BM$(5),PDM_WM$(5,10)
21590 '
21600 '<<<<<<<<<<<<<<<<<<<<  MAIN MENU  >>>>>>>>>>>>>>>>>>>>
21610 *MAINMENU
21620 'SCREEN 1,1
21630 'SCREEN 1,0:SCREEN@0:CLS
21640 'MOUSE 2,VIL_VWM_MCA0$,VIL_VWM_MCD0$,VIL_VWM_MCX0%,VIL_VWM_MCY0%
21650 'ON ERROR GOTO 0'**********
21660 GOSUB *VIL_WIN_PMA
21670 CLS:PALETTE 4,[100,0,150]
21680 LINE(0,0)-(639,479),PSET,%4,BF
21690 LINE(216,128)-(423,399),PRESET,,BF
21700 SYMBOL(224,32),"Visual Interface Library",1,1,7
21710 SYMBOL(272,64),"ＶＩＬ",2,2,4,,,7
21720 SYMBOL(192,104),"デモンストレ－ション  プログラム",1,1,4
21730 RESTORE *MAINMENU_DATA
21740 FOR Y=0 TO 4
21750   READ A$
21760   SYMBOL(232,Y*32+144),FNVIL_P2S$(Y+1)+" "+A$,1,1,7
21770 NEXT
21780 '
21790 *MAINMENU_DATA
21800 DATA "はじめに","基本パッケージ"
21810 DATA "ウィンドウマネージャ","応用例"
21820 DATA "終了"
21830 '
21840 VIL_X%=224:VIL_Y%=142:VIL_W%=VIL_X%+191:VIL_Z%=VIL_Y%+19
21850 VIL_XN%=1:VIL_YN%=5:VIL_YL%=32:VIL_C%=15:VIL_CB%=0
21860 VIL_MSEL_BB%=1:VIL_MSEL_BE%=5:VIL_MSEL_BD%=0:VIL_MSEL_BAM%=0:
21870 VIL_MSEL_MN%=100:VIL_MSEL_BC%=0
21880 GOSUB *VIL_MSEL_M
21890 IF VIL_KN%>0 THEN ON VIL_KN% GOSUB *INTRO,*BAS,*VWM,*APPLY,*END
21900 GOTO *MAINMENU
21910 '
21920 '<<<<<<<<<<<<<<<<<<<<  はじめに  >>>>>>>>>>>>>>>>>>>>
21930 *INTRO
21940 CLS
21950 VIL_WIN_X%=20:VIL_WIN_Y%=20:VIL_WIN_W%=VIL_WIN_X%+399:VIL_WIN_Z%=471
21960 VIL_VWM_AT%=0:VIL_VWM_T$="INTRO"
21970 GOSUB *VIL_VWM_OP
21980 SYMBOL(8,  8),"　　　　　　　　　～　はじめに　～　　　　　　　",1,1,6
21990 SYMBOL(8, 36),"　ＶＩＬはＦ－ＢＡＳＩＣ３８６上のプログラムで、",1,1,7
22000 SYMBOL(8, 56),"マルチウィンドウ表示・マウス入力などのユーザ・イ",1,1,7
22010 SYMBOL(8, 76),"ンタフェースを実現するサブルーチン集です。　　　",1,1,7
22020 SYMBOL(8, 96),"　このデモンストレーション・プログラムでは、以下",1,1,7
22030 SYMBOL(8,116),"の項目でその機能を説明します。　　　　　　　　　",1,1,7
22040 SYMBOL(8,136),"　２．基本パッケージ　　　　　　　　　　　　　　",1,1,7
22050 SYMBOL(8,156),"　　ウィンドウ、メニュー選択、文字列入力、      ",1,1,7
22060 SYMBOL(8,176),"　　マルチグラフィックス　　　　　　　　　　　　",1,1,7
22070 SYMBOL(8,196),"　３．ウィンドウマネージャ・パッケージ　　　　　",1,1,7
22080 SYMBOL(8,216),"　　移動、サイズ変更、スクロールバー、　　　　　",1,1,7
22090 SYMBOL(8,236),"　　プルダウンメニュー　　　　　　　　　　　　",1,1,7
22100 SYMBOL(8,256),"　４．応用　　　　　　　　　　　　　　　　　　　",1,1,7
22110 SYMBOL(8,276),"　　各パッケージの組み合わせによる応用例　　　　",1,1,7
22120 SYMBOL(8,436)," リターンキーかマウスの左ボタンを押してください ",1,1,6
22130 WAIT 50
22140 WHILE INKEY$<>CHR$(13) AND MOUSE(3,0)=0 AND MOUSE(2,0)=0:WEND
22150 GOSUB *VIL_VWM_CL
22160 RETURN
22170 '
22180 '<<<<<<<<<<<<<<<<<<<<  基本パッケージ  >>>>>>>>>>>>>>>>>>>>
22190 *BAS
22200 '
22210 CLS'SCREEN 0:CLS
22220 MOUSE 2,VIL_VWM_MCA0$,VIL_VWM_MCD0$,VIL_VWM_MCX0%,VIL_VWM_MCY0%
22230 LINE(0,0)-(639,479),PSET,4,BF
22240 FOR I=0 TO 30
22250   LINE(RND*639,RND*480)-(RND*639,RND*480),XOR,RND*6+1,BF
22260 NEXT
22270 '
22280 VIL_WIN_X%=30:VIL_WIN_Y%=50
22290 VIL_WIN_W%=VIL_WIN_X%+16*17+15:VIL_WIN_Z%=VIL_WIN_Y%+136+16+7
22300 VIL_WIN_UB%=0:VIL_WIN_DB%=0:VIL_WIN_LB%=0:VIL_WIN_RB%=0
22310 GOSUB *VIL_WIN_PMA:GOSUB *VIL_WIN_OP:GOSUB *VIL_WIN_PMR
22320 CLS
22330 SYMBOL(8,  8),"　～　ＶＩＬ　基本パッケージ　～　",1,1,6
22340 SYMBOL(8, 36),"基本パッケージは主に以下のパッケー",1,1,7
22350 SYMBOL(8, 56),"ジから成っています。          　　",1,1,7
22360 SYMBOL(8, 76),"・ウィンドウ・パッケージ        　",1,1,7
22370 SYMBOL(8, 96),"・メニュー選択パッケージ        　",1,1,7
22380 SYMBOL(8,116),"・入力パッケージ                　",1,1,7
22390 SYMBOL(8,136),"・マルチグラフィックス・パッケージ",1,1,7
22400 '
22410 'GOTO *BAS_MG0'************
22420 VIL_WIN_X%=50:VIL_WIN_Y%=240
22430 VIL_WIN_W%=VIL_WIN_X%+16*13+15:VIL_WIN_Z%=VIL_WIN_Y%+68+16+7
22440 VIL_WIN_UB%=0:VIL_WIN_DB%=0:VIL_WIN_LB%=0:VIL_WIN_RB%=0
22450 GOSUB *VIL_WIN_PMA:GOSUB *VIL_WIN_OP:GOSUB *VIL_WIN_PMR
22460 CLS
22470 SYMBOL(8,  8),"ウィンドウ・パッケージでは",1,1,7
22480 SYMBOL(8, 28),"このように画面の矩形領域を",1,1,7
22490 SYMBOL(8, 48),"退避し、ウィンドウを開くこ",1,1,7
22500 SYMBOL(8, 68),"とができます。　　　　　　",1,1,7
22510 '
22520 VIL_WIN_X%=30:VIL_WIN_Y%=350
22530 VIL_WIN_W%=VIL_WIN_X%+16*15+15:VIL_WIN_Z%=VIL_WIN_Y%+28+16+7
22540 VIL_WIN_UB%=5:VIL_WIN_DB%=5:VIL_WIN_LB%=5:VIL_WIN_RB%=5
22550 GOSUB *VIL_WIN_PMA:GOSUB *VIL_WIN_OP
22560 LINE(VIL_WIN_X%-5,VIL_WIN_Y%-5)-(VIL_WIN_W%+5,VIL_WIN_Z%+5),PSET,0,B
22570 LINE(VIL_WIN_X%-4,VIL_WIN_Y%-4)-(VIL_WIN_W%+4,VIL_WIN_Z%+4),PSET,7,BF
22580 LINE(VIL_WIN_X%-2,VIL_WIN_Y%-2)-(VIL_WIN_W%+2,VIL_WIN_Z%+2),PSET,0,B
22590 LINE(VIL_WIN_X%-1,VIL_WIN_Y%-1)-(VIL_WIN_W%+1,VIL_WIN_Z%+1),PSET,0,B
22600 GOSUB *VIL_WIN_PMR
22610 SYMBOL(8,  8),"必要ならばユーザ・プログラムが",1,1,0
22620 SYMBOL(8, 28),"枠などを描画できます。　　　　",1,1,0
22630 '
22640 VIL_WIN_X%=360:VIL_WIN_Y%=40
22650 VIL_WIN_W%=VIL_WIN_X%+16*11+15:VIL_WIN_Z%=VIL_WIN_Y%+139
22660 VIL_WIN_UB%=2:VIL_WIN_DB%=2:VIL_WIN_LB%=2:VIL_WIN_RB%=2
22670 GOSUB *VIL_WIN_PMA:GOSUB *VIL_WIN_OP
22680 DEF PEN 0,2
22690 LINE(VIL_WIN_X%-2,VIL_WIN_Y%-2)-(VIL_WIN_W%+1,VIL_WIN_Z%+1),PSET,1,B
22700 GOSUB *VIL_WIN_PMR
22710 CLS
22720 FOR I=1 TO 7
22730   CIRCLE(0,0),I*5,I
22740   CIRCLE(190,10),I*5,I
22750   SYMBOL(-60+I*8*6,120),"SAMPLE",1,1,I
22760 NEXT
22770 SYMBOL(8, 50),"ウィンドウ内への描画は",1,1,7
22780 SYMBOL(8, 70),"このようにクリッピング",1,1,7
22790 SYMBOL(8, 90),"させることが可能です。",1,1,7
22800 '
22810 PALETTE 4,[ 64, 64, 64]
22820 PALETTE 5,[128,  0,  0]
22830 RESTORE *WIN_DATA1
22840 FOR I=0 TO 2
22850   VIL_WIN_X%=320+I*24:VIL_WIN_Y%=240+I*48
22860   VIL_WIN_W%=VIL_WIN_X%+119:VIL_WIN_Z%=VIL_WIN_Y%+63
22870   VIL_WIN_UB%=16:VIL_WIN_DB%=2:VIL_WIN_LB%=2:VIL_WIN_RB%=2
22880   GOSUB *VIL_WIN_PMA:GOSUB *VIL_WIN_OP
22890   LINE(VIL_WIN_X%-2,VIL_WIN_Y%-16)                                                -(VIL_WIN_W%+2,VIL_WIN_Y%- 2),PSET,%5,BF
22900   DEF PEN 0,2
22910   LINE(VIL_WIN_X%-2,VIL_WIN_Y%-16)                                                -(VIL_WIN_W%+1,VIL_WIN_Z%+ 1),PSET,%4,B
22920   LINE(VIL_WIN_X%-2,VIL_WIN_Y%- 2)                                                -(VIL_WIN_W%+1,VIL_WIN_Y% -2),PSET,%4
22930   DEF PEN 0,1
22940   LINE(VIL_WIN_X%+1,VIL_WIN_Y%-13)                                                -(VIL_WIN_X%+9,VIL_WIN_Y%-4),PSET,%4,B
22950   CIRCLE(VIL_WIN_X%+5,VIL_WIN_Y%-8.6!),2,%1,1.5!,,,F
22960   LINE(VIL_WIN_W%-1,VIL_WIN_Y%-13)                                                -(VIL_WIN_W%-9,VIL_WIN_Y%- 4),PSET,%4,B
22970   LINE(VIL_WIN_W%-1,VIL_WIN_Y%-13)                                                -(VIL_WIN_W%-5,VIL_WIN_Y%- 8),PSET,%4,B
22980   SYMBOL(VIL_WIN_X%+13,VIL_WIN_Y%-11),"xterm",.5!,.5!,%4
22990   GOSUB *VIL_WIN_PMR
23000   CLS
23010   READ A$
23020   SYMBOL(8,8),A$,1,1,7
23030 NEXT
23040 '
23050 *WIN_DATA1
23060 DATA "ウィンドウの","重ね合わせも","このとおり"
23070 '
23080 RESTORE *WIN_DATA2
23090 GOSUB *VIL_WIN_PMA
23100 LINE(272,434)-(639,479),PSET,7,BF
23110 SYMBOL(280,440),"[RET]キー／マウスの左クリック／パッドの[A]で",1,1,0
23120 SYMBOL(280,460),"ウィンドウが１個ずつ閉じます。              ",1,1,0
23130 FOR I=1 TO 6 
23140   WHILE INKEY$=CHR$(13) OR MOUSE(3,0) OR PTRIG(1)=1:WEND
23150   WHILE INKEY$<>CHR$(13) AND MOUSE(3,0)=0 AND PTRIG(1)<>1:WEND
23160   READ VIL_WIN_UB%,VIL_WIN_DB%,VIL_WIN_LB%,VIL_WIN_RB%
23170   GOSUB *VIL_WIN_CL 
23180 NEXT
23190 '
23200 *WIN_DATA2
23210 DATA 16,2,2,2, 16,2,2,2, 16,2,2,2, 2,2,2,2, 5,5,5,5, 0,0,0,0
23220 '
23230 LINE(272,434)-(639,479),PSET,7,BF
23240 SYMBOL(280,440),"取消キー／マウスの右クリック／パッドの[B]で",1,1,0
23250 SYMBOL(280,460),"次に進みます。",1,1,0
23260 '
23270 VIL_WIN_X%=50:VIL_WIN_Y%=240
23280 VIL_WIN_W%=VIL_WIN_X%+16*13+15:VIL_WIN_Z%=VIL_WIN_Y%+148+16+7
23290 VIL_WIN_UB%=0:VIL_WIN_DB%=0:VIL_WIN_LB%=0:VIL_WIN_RB%=0
23300 GOSUB *VIL_WIN_PMA:GOSUB *VIL_WIN_OP:GOSUB *VIL_WIN_PMR
23310 CLS
23320 SYMBOL(8,  8),"メニュー選択パッケージでは",1,1,7
23330 SYMBOL(8, 28),"・マウス　　　　　　　　　",1,1,7
23340 SYMBOL(8, 48),"・パッド　　　　　　　　　",1,1,7
23350 SYMBOL(8, 68),"・テンキー　　　　　　　　",1,1,7
23360 SYMBOL(8, 88),"・カ－ソルキー　　　　　　",1,1,7
23370 SYMBOL(8,108),"などを使用して、　　　　　",1,1,7
23380 SYMBOL(8,128),"画面の矩形領域（ボックス）",1,1,7
23390 SYMBOL(8,148),"の一つを選択できます。　　",1,1,7
23400 '
23410 VIL_WIN_X%=320:VIL_WIN_Y%=40
23420 VIL_WIN_W%=VIL_WIN_X%+16*18+15:VIL_WIN_Z%=VIL_WIN_Y%+359
23430 VIL_WIN_UB%=0:VIL_WIN_DB%=0:VIL_WIN_LB%=0:VIL_WIN_RB%=0
23440 GOSUB *VIL_WIN_PMA:GOSUB *VIL_WIN_OP:GOSUB *VIL_WIN_PMR
23450 '
23460 CLS
23470 SYMBOL(8,  8),"例えば下の数字の中から",1,1,7
23480 SYMBOL(8, 28),"一つ選択してみてください。",1,1,7
23490 FOR Y=0 TO 2
23500   FOR X=0 TO 2
23510     LINE(X*64+16,192-Y*64)-(X*64+63,192-Y*64+47),PSET,7,B
23520     SYMBOL(X*64+28,194-Y*64),FNVIL_I2S$(Y*3+X+1),3,3,7
23530   NEXT
23540 NEXT
23550 SYMBOL(16, 304),"選択→",1,1,7
23560 LINE(80,288)-(127,335),PSET,7,B
23570 '
23580 VIL_MSEL_BN%=1:VIL_MSEL_MN%=0:VIL_MSEL_BC%=0
23590 '
23600 *MSEL_TENKEY1
23610 VIL_X%=12:VIL_Y%=188:VIL_W%=VIL_X%+55:VIL_Z%=VIL_Y%+55
23620 VIL_XN%=3:VIL_YN%=3:VIL_XL%=64:VIL_YL%=64:VIL_MSEL_BD%=4:VIL_C%=10
23630 VIL_MSEL_BB%=1:VIL_MSEL_BE%=9
23640 GOSUB *VIL_MSEL_M
23650 IF VIL_KN%>0 THEN
23660   LINE(81,289)-(126,334),PRESET,,BF
23670   SYMBOL(92,290),FNVIL_P2S$(VIL_KN%),3,3,6
23680 ENDIF
23690 IF VIL_KN%<>-1 THEN *MSEL_TENKEY1
23700 '
23710 *MSEL_TAU1
23720 CLS
23730 '
23740 ANS=INT(RND*64)+1
23750 FOR Y=0 TO 7
23760   FOR X=0 TO 7
23770     XA=RND*8:YA=RND*8
23780     SYMBOL(X*24+XA+64,Y*24+YA+64),                                                     KMID$("ΤＴ",2+(Y*8+X+1=ANS),1),1,1,RND*6+1
23790   NEXT
23800 NEXT
23810 SYMBOL(8,260)," ☆☆☆  「Τを探せ」ゲ－ム  ☆☆☆ ",1,1,6
23820 SYMBOL(8,280),"Ｔ(ティー)の中に一つだけ隠れている  ",1,1,4
23830 SYMBOL(8,300),"Τ(タウ)を見つけて選択してください。",1,1,4
23840 '
23850 VIL_MSEL_BN%=1:VIL_MSEL_MN%=0:VIL_MSEL_BC%=0
23860 '
23870 *MSEL_TAU2
23880 VIL_X%=64:VIL_Y%=64:VIL_W%=VIL_X%+23:VIL_Z%=VIL_Y%+23
23890 VIL_XL%=24:VIL_YL%=24:VIL_XN%=8:VIL_YN%=8:VIL_MSEL_BD%=0:VIL_C%=15
23900 VIL_MSEL_BB%=1:VIL_MSEL_BE%=64
23910 GOSUB *VIL_MSEL_M
23920 IF VIL_KN%>0 THEN 
23930   IF VIL_KN%=ANS THEN
23940     LINE(80,320)-(239,335),PRESET,,BF
23950     SYMBOL(80,320),"☆☆☆ 正解！ ☆☆☆",1,1,6
23960     GOSUB *VIL_BEEP_G
23970     GOTO *MSEL_TAU1
23980   ELSE
23990     LINE(80,320)-(239,335),PRESET,,BF
24000     SYMBOL(80,320),"××× はずれ ×××",1,1,2
24010     GOSUB *VIL_BEEP_B
24020   ENDIF
24030 ENDIF
24040 IF VIL_KN%<>-1 THEN *MSEL_TAU2
24050 '
24060 *MSEL_ADV1
24070 CLS
24080 '
24090 LINE(4,  4)-(299,295),PSET,4,B
24100 LINE(8, 30)-(295,229),PSET,4,B
24110 LINE(8,234)-(295,261),PSET,4,B
24120 SYMBOL(104,10),"MYSTIC HOUSE",1,1,4
24130 SYMBOL(16,238),"見る   取る   動かす たたく 終わる",1,1,4
24140 SYMBOL(8,302),"　↑　アドベンチャーゲームなどにも",1,1,7
24150 SYMBOL(8,322),"　　　利用できます。",1,1,7
24160 RESTORE *MSEL_DATA1
24170 FOR I=0 TO 17
24180   READ K,X,Y:LINE(X,Y)-(X,Y),PSET,4
24190   FOR J=2 TO K:READ X,Y:LINE -(X,Y),PSET,4:NEXT
24200 NEXT
24210 '
24220 *MSEL_DATA1
24230 DATA 4,  48, 30,  48,110, 255,110, 255, 30
24240 DATA 2,  48,110,   8,229
24250 DATA 2, 255,110, 295,229
24260 DATA 4,  70,110,  70, 35, 110, 35, 110,110
24270 DATA 5,  74, 70,  74, 73,  77, 73,  77, 70,  74, 70
24280 DATA 5, 130,130, 120,160, 210,160, 200,130, 130,130
24290 DATA 4, 120,160, 120,170, 210,170, 210,160
24300 DATA 4, 135,170, 125,210, 130,210, 140,170
24310 DATA 4, 195,170, 205,210, 200,210, 190,170
24320 DATA 5, 265, 40, 265, 80, 280,130, 280, 90, 265, 40
24330 DATA 5, 160, 45, 160, 80, 200, 80, 200, 45, 160, 45
24340 DATA 5, 170, 50, 173, 74, 187, 70, 188, 52, 170, 50
24350 DATA 2, 174, 56, 177, 55
24360 DATA 2, 182, 56, 185, 58
24370 DATA 2, 180, 57, 178, 62
24380 DATA 2, 176, 70, 181, 67
24390 DATA 5,  65,127,  65,122, 70,127,  65,127, 58,134
24400 DATA 2,  61,131,  63,134
24410 '
24420 VIL_MSEL_BN%=1:VIL_MSEL_BC%=0
24430 '
24440 *MSEL_ADV2
24450 VIL_X%=14:VIL_Y%=236:VIL_W%=VIL_X%+51:VIL_Z%=VIL_Y%+23
24460 VIL_XN%=5:VIL_YN%=1:VIL_XL%=56:VIL_MSEL_BD%=0:VIL_C%=15
24470 VIL_MSEL_BB%=1:VIL_MSEL_BE%=5:VIL_MSEL_MN%=101
24480 GOSUB *VIL_MSEL_M
24490 IF VIL_KN%>0 THEN
24500   VIL_X%=8:VIL_Y%=265:VIL_L%=36:VIL_C%=12
24510   VIL_A$=KMID$("見る　取る　動かすたたく終わる",VIL_KN%*3-2,3)
24520   GOSUB *VIL_INP_GPRINT
24530   IF VIL_KN%=5 THEN *MSEL_CNFM1
24540   VERB=VIL_KN%
24550 '
24560   RESTORE *MSEL_DATA2
24570   FOR I=1 TO 5
24580     READ VIL_MSEL_X%(I),VIL_MSEL_Y%(I),VIL_MSEL_W%(I),VIL_MSEL_Z%(I)
24590   NEXT
24600   VIL_XN%=5:VIL_YN%=1:VIL_MSEL_BD%=0:VIL_C%=15
24610   VIL_MSEL_MN%=102:VIL_MSEL_BC%=0
24620   VIL_MSEL_BB%=1:VIL_MSEL_BE%=5
24630 *MSEL_ADV3
24640   GOSUB *VIL_MSEL_IN
24650   GOSUB *VIL_MSEL_BC
24660   IF VIL_KN%<1 THEN *MSEL_ADV3
24670 '
24680 *MSEL_DATA2
24690   DATA  68, 33,112,112
24700   DATA 158, 43,202, 82 
24710   DATA 263, 38,282,132
24720   DATA  56,120, 72,136
24730   DATA 118,128,212,212
24740 '
24750   RESTORE *MSEL_DATA3:FOR I=1 TO VIL_KN%:READ VIL_A$:NEXT
24760 '
24770 *MSEL_DATA3
24780   DATA ドア,肖像画,窓,鍵,テーブル
24790 '
24800   VIL_X%=64:VIL_Y%=265:VIL_L%=8:VIL_C%=12:VIL_CB%=0
24810   GOSUB *VIL_INP_GPRINT
24820 '
24830   RESTORE *MSEL_DATA4
24840   FOR I=1 TO VERB
24850     IF I=VERB THEN
24860       FOR J=1 TO VIL_KN%:READ VIL_A$:NEXT
24870     ELSE
24880       FOR J=1 TO 5:READ VIL_A$:NEXT
24890     ENDIF
24900   NEXT
24910 '
24920 *MSEL_DATA4
24930   DATA "閉まっている　　　","見覚えのない顔だ　","外は晴れている　　"
24940   DATA "黄金の鍵だ　　　　","埃が積もっている　"
24950   DATA "取れるわけがない　","使い道はなさそうだ","取れるわけがない　"
24960   DATA "何故か取れない　　","重くて持てない　　"
24970   DATA "鍵が掛かっている　","ネジ止めされている","錆びついている　　"
24980   DATA "何故か動かない　　","疲れるからいやだ　"
24990   DATA "トントン　　　　　","手が痛いからいやだ","叩いても開かない　"
25000   DATA "叩いてどーする　　","ドンドン　　　　　"
25010 '
25020   VIL_X%=136:VIL_Y%=265:VIL_L%=20:VIL_C%=12:VIL_CB%=0
25030   VIL_A$=": "+VIL_A$
25040   GOSUB *VIL_INP_GPRINT
25050 ENDIF
25060 GOTO *MSEL_ADV2
25070 '
25080 *MSEL_CNFM1
25090 MAXTURN=50
25100 RESTORE *MSEL_DATA5
25110 FOR I=1 TO 8
25120   READ J:VIL_MSEL_BN%(105+I)=J
25130 NEXT
25140 '
25150 *MSEL_DATA5
25160 DATA 2,1,1,2,2,4,1,1
25170 '
25180 *MSEL_CNFM2
25190 CLS
25200 SYMBOL(16,  8),"　☆☆☆☆☆　設　定　☆☆☆☆☆　",1,1,6
25210 SYMBOL(16, 36),"表示      　英語　　　　日本語　　",1,1,7
25220 SYMBOL(16, 60),"ＢＧＭ      ＯＮ    　　ＯＦＦ　　",1,1,7
25230 SYMBOL(16, 84),"効果音　　　ＯＮ　　　　ＯＦＦ　　",1,1,7
25240 SYMBOL(16,108),"ヒント      あり    　　なし　　　",1,1,7
25250 SYMBOL(16,132),"難易度      初級　中級　上級　　　",1,1,7
25260 SYMBOL(16,156),"表示速度　　０　１　２　３　４　５",1,1,7
25270 SYMBOL(16,180),"最大ターン　(00)  ←　  　→  (99)",1,1,7
25280 SYMBOL(16,212),"　　　　～　決定　取消　～　　　　",1,1,7
25290 SYMBOL(16,276),"　↑　設定メニューも実現できます。",1,1,5
25300 GOSUB *PRINT_TURN
25310 '
25320 VIL_MSEL_BC%=0:VIL_VWM_R%=0
25330 VIL_C%=15:VIL_CC%=7
25340 VIL_MSEL_CMN%=105:VIL_MSEL_CMR%=8
25350 VIL_MSEL_BN%(VIL_MSEL_CMN%)=1 'カーソル位置を第一行に設定
25360 GOSUB *VIL_MSEL_CNFSV
25370 MAXTURN_OLD=MAXTURN
25380 '
25390 RESTORE *MSEL_DATA6
25400 FOR I=1 TO 8
25410   READ VIL_MSEL_CX%(I),VIL_MSEL_CY%(I)
25420   READ W,Z
25430     VIL_MSEL_CW%(I)=VIL_MSEL_CX%(I)+W
25440     VIL_MSEL_CZ%(I)=VIL_MSEL_CY%(I)+Z
25450   READ VIL_MSEL_CL%(I)
25460   READ VIL_MSEL_CN%(I),VIL_MSEL_CBB%(I),VIL_MSEL_CBE%(I)
25470 NEXT
25480 '
25490 *MSEL_DATA6
25500 DATA 108, 34, 51, 19,  96,  2,1,2
25510 DATA 108, 58, 51, 19,  96,  2,1,2
25520 DATA 108, 82, 51, 19,  96,  2,1,2
25530 DATA 108,106, 51, 19,  96,  2,1,2
25540 DATA 108,130, 35, 19,  48,  3,1,3
25550 DATA 108,154, 19, 19,  32,  6,0,5
25560 DATA 108,178, 35, 19, 144,  2,1,2
25570 DATA 108,210, 35, 19,  48,  2,1,2
25580 '
25590 ENDF=0
25600 WHILE ENDF=0
25610   GOSUB *VIL_MSEL_CNFM
25620   IF VIL_MSEL_CR%=7 AND VIL_KN%>0 THEN
25630     MAXTURN=MAXTURN-(VIL_KN%=1)*(MAXTURN>0)+(VIL_KN%=2)*(MAXTURN<99)
25640     GOSUB *PRINT_TURN
25650   ELSE IF VIL_MSEL_CR%=8 THEN
25660     ENDF=-1
25670     IF VIL_KN%=2 THEN GOSUB *VIL_MSEL_CNFLD:MAXTURN=MAXTURN_OLD
25680 '                    設定を取消
25690   ENDIF
25700 WEND
25710 '
25720 *MSEL_CNFM3
25730 SYMBOL(16,304)," 　　　もう一度やりますか？　　　 ",1,1,7
25740 VIL_X%=92:VIL_Y%=334:VIL_MSEL_BN%=1:VIL_C%=15
25750 GOSUB *VIL_SEL_YN
25760 SYMBOL(16,304),"　　　　　　　　　　　　　　　　　",1,1,7
25770 IF VIL_KN%=1 THEN *MSEL_CNFM2                                                             ELSE IF VIL_KN%=2 THEN *INP ELSE *MSEL_CNFM3
25780 '
25790 *PRINT_TURN
25800 VIL_X%=192:VIL_Y%=180:VIL_L%=2:VIL_C%=15:VIL_CB%=0
25810 VIL_A$=FNVIL_P2S0$(MAXTURN,2)
25820 GOSUB *VIL_INP_GPRINT
25830 RETURN
25840 '
25850 *INP
25860 GOSUB *VIL_WIN_PMA:GOSUB *VIL_WIN_CL:GOSUB *VIL_WIN_CL
25870 '
25880 LINE(272,434)-(639,479),PSET,4,BF
25890 VIL_WIN_X%=16:VIL_WIN_Y%=240
25900 VIL_WIN_W%=VIL_WIN_X%+16*15+15:VIL_WIN_Z%=VIL_WIN_Y%+68+16+7
25910 VIL_WIN_UB%=0:VIL_WIN_DB%=0:VIL_WIN_LB%=0:VIL_WIN_RB%=0
25920 GOSUB *VIL_WIN_PMA:GOSUB *VIL_WIN_OP:GOSUB *VIL_WIN_PMR
25930 CLS
25940 SYMBOL(8,  8),"入力パッケージでは、　　　　　",1,1,7
25950 SYMBOL(8, 28),"・入力文字列の最大長を指定可能",1,1,7
25960 SYMBOL(8, 48),"・日本語入力が可能　　　　　　",1,1,7
25970 SYMBOL(8, 68),"・ヒストリ呼び出しが可能    　",1,1,7
25980 '
25990 VIL_WIN_X%=320:VIL_WIN_Y%=8
26000 VIL_WIN_W%=VIL_WIN_X%+16*18+15:VIL_WIN_Z%=VIL_WIN_Y%+376+16+7
26010 VIL_WIN_UB%=0:VIL_WIN_DB%=0:VIL_WIN_LB%=0:VIL_WIN_RB%=0
26020 GOSUB *VIL_WIN_PMA:GOSUB *VIL_WIN_OP:GOSUB *VIL_WIN_PMR
26030 NAM$="":TIM$=""
26040 '
26050 *INP_NAME1
26060 CLS:GOSUB *VIL_INP_FEPON
26070 SYMBOL(8,  8),"＊＊＊＊＊　使用可能キー　＊＊＊＊＊",1,1,6
26080 SYMBOL(8, 28),"[RET]   : 決定　　　　　　　　　　　",1,1,7
26090 SYMBOL(8, 48),"[取消]  : 取消　　　　　　　　　　　",1,1,7
26100 SYMBOL(8, 68),"←　→  : カーソル移動　　　　　　　",1,1,7
26110 SYMBOL(8, 88),"[BS]    : カーソル位置の左１文字削除",1,1,7
26120 SYMBOL(8,108),"[削除]  : カーソル位置１文字削除　　",1,1,7
26130 SYMBOL(8,128),"[HOME]  : クリア　　　　　　　　　　",1,1,7
26140 SYMBOL(8,148),"↑↓    : ヒストリー呼び出し  　　　",1,1,7
26150 SYMBOL(8,168),"マウス左/右 : [決定]/[取消]と等価　 ",1,1,7
26160 SYMBOL(8,188),"パッドＡ/Ｂ : [決定]/[取消]と等価　 ",1,1,7
26170 SYMBOL(8,208),"方向ボタン  : カーソルキーと等価　　",1,1,7
26180 SYMBOL(8,228),"＊＊＊＊＊　 　使用例　 　＊＊＊＊＊",1,1,6
26190 '
26200 SYMBOL(8,248),"あなたの名前を入力してください。　　",1,1,7
26210 SYMBOL(8,268),"(半角16文字以内) :　　　　　　　　　",1,1,7
26220 '
26230 *INP_NAME2
26240 VIL_X%=8+16*9:VIL_Y%=268:VIL_L%=16:VIL_C%=15:VIL_CB%=0:VIL_A$="" 'NAM$
26250 VIL_INP_HSN%=1
26260 GOSUB *VIL_INP_STR
26270 IF VIL_KN%=-1 OR VIL_A$="" THEN *INP_NAME2
26280 NAM$=VIL_A$
26290 '
26300 SYMBOL(8,288),"現在時刻を入力してください。　　　　",1,1,7
26310 SYMBOL(8,308),"(00:00～23:59)   :　　　　　　　　　",1,1,7
26320 '
26330 *INP_NAME3
26340 VIL_INP_HSN%=2
26350 VIL_X%=8+16*9:VIL_Y%=308:VIL_L%=5:VIL_C%=15:VIL_CB%=0:VIL_A$="" 'TIM$
26360 GOSUB *VIL_INP_STR
26370 IF VIL_KN%=-1 OR VIL_A$="" THEN *INP_NAME3
26380 TIM$=VIL_A$
26390 IF LEN(VIL_A$)<>5 OR MID$(VIL_A$,3,1)<>":"                                     THEN GOSUB *VIL_BEEP_B:GOTO *INP_NAME3
26400 HOUR=VAL(LEFT$(VIL_A$,2)):MINUTE=VAL(MID$(VIL_A$,4,2))
26410 IF HOUR<0 OR 23<HOUR OR MINUTE<0 OR 59<MINUTE THEN
26420   GOSUB *VIL_BEEP_B:GOTO *INP_NAME3
26430 ENDIF
26440 IF 6<=HOUR AND HOUR<=11 THEN
26450   A$="おはよう。"
26460 ELSE IF 12=<HOUR AND HOUR<=18 THEN
26470   A$="こんにちは。"
26480 ELSE
26490   A$="こんばんは。"
26500 ENDIF
26510 '
26520 GOSUB *VIL_INP_FEPOFF
26530 SYMBOL(8,328),"現在"+FNVIL_P2S$(HOUR)+"時"+FNVIL_P2S$(MINUTE)+"分。"                      ,1,1,4
26540 SYMBOL(8,348),NAM$+"さん、"+A$,1,1,4
26550 *INP_NAME4
26560 SYMBOL(8,376),"もう一度やる？",1,1,7
26570 VIL_MSEL_BN%=1
26580 VIL_X%=132:VIL_Y%=372
26590 GOSUB *VIL_SEL_YN
26600 IF VIL_KN%<1 THEN *INP_NAME4
26610 '
26620 IF VIL_KN%=1 THEN *INP_NAME1
26630 '
26640 GOSUB *VIL_WIN_PMA:GOSUB *VIL_WIN_CL:GOSUB *VIL_WIN_CL
26650 '
26660 *BAS_MG0
26670 VIL_WIN_X%=16:VIL_WIN_Y%=240
26680 VIL_WIN_W%=VIL_WIN_X%+16*19+15:VIL_WIN_Z%=VIL_WIN_Y%+48+16+7
26690 VIL_WIN_UB%=0:VIL_WIN_DB%=0:VIL_WIN_LB%=0:VIL_WIN_RB%=0
26700 GOSUB *VIL_WIN_PMA:GOSUB *VIL_WIN_OP:GOSUB *VIL_WIN_PMR:CLS
26710 SYMBOL(8,  8),"マルチグラフィックス・パッケージでは、",1,1,7
26720 SYMBOL(8, 28),"複数のパレットやグラフィックパターンを",1,1,7
26730 SYMBOL(8, 48),"切替表示できます。                    ",1,1,7
26740 '
26750 VIL_WIN_X%=360:VIL_WIN_Y%=160
26760 VIL_WIN_W%=VIL_WIN_X%+16*16+15:VIL_WIN_Z%=VIL_WIN_Y%+68+16+7
26770 VIL_WIN_UB%=0:VIL_WIN_DB%=0:VIL_WIN_LB%=0:VIL_WIN_RB%=0
26780 GOSUB *VIL_WIN_PMA:GOSUB *VIL_WIN_OP:GOSUB *VIL_WIN_PMR:CLS
26790 SYMBOL(8,  8),"本パッケージにより口パクアニメー",1,1,7
26800 SYMBOL(8, 28),"ションを実現した例です。　　　　",1,1,7
26810 SYMBOL(8, 48),"リターンキーかマウスの左ボタンを",1,1,7
26820 SYMBOL(8, 68),"押すと終了します",1,1,7
26830 '
26840 VIL_WIN_X%=420:VIL_WIN_Y%=40
26850 VIL_WIN_W%=VIL_WIN_X%+111:VIL_WIN_Z%=VIL_WIN_Y%+111
26860 VIL_WIN_UB%=0:VIL_WIN_DB%=0:VIL_WIN_LB%=0:VIL_WIN_RB%=0
26870 GOSUB *VIL_WIN_PMA:GOSUB *VIL_WIN_OP:GOSUB *VIL_WIN_PMR:CLS
26880 '
26890 SCREEN 1,1,3,1
26900 GOSUB *VIL_WIN_PMR
26910 VIL_MG_PN%=1:GOSUB *VIL_MG_SETP
26920 VIL_MG_GN%=1:VIL_MG_X%=0:VIL_MG_Y%=0:GOSUB *VIL_MG_PUTG
26930 VIL_MG_GN%=4:VIL_MG_X%=47:VIL_MG_Y%=70:GOSUB *VIL_MG_PUTG
26940 T1=0
26950 WHILE INKEY$<>"":WEND:I=MOUSE(3,0)
26960 WHILE INKEY$="" AND MOUSE(3,0)=0
26970   T2=RND*6
26980   FOR J=0 TO T2
26990     VIL_MG_GN%=3:VIL_MG_X%=47:VIL_MG_Y%=70:                                         GOSUB *VIL_MG_PUTG:WAIT 5+RND*10
27000     VIL_MG_GN%=2:VIL_MG_X%=47:VIL_MG_Y%=70:                                         GOSUB *VIL_MG_PUTG:WAIT 5+RND*10
27010     VIL_MG_GN%=3:VIL_MG_X%=47:VIL_MG_Y%=70:                                         GOSUB *VIL_MG_PUTG:WAIT 5+RND*10
27020     T1=T1+1
27030   NEXT
27040   VIL_MG_GN%=4:VIL_MG_X%=47:VIL_MG_Y%=70:                                         GOSUB *VIL_MG_PUTG:WAIT 20+RND*10
27050   IF T1>10 THEN
27060     VIL_MG_GN%=6:VIL_MG_X%=28:VIL_MG_Y%=42:                                         GOSUB *VIL_MG_PUTG:WAIT 5
27070     VIL_MG_GN%=7:VIL_MG_X%=28:VIL_MG_Y%=42:                                         GOSUB *VIL_MG_PUTG:WAIT 5
27080     VIL_MG_GN%=8:VIL_MG_X%=28:VIL_MG_Y%=42:                                         GOSUB *VIL_MG_PUTG:WAIT 5
27090     VIL_MG_GN%=7:VIL_MG_X%=28:VIL_MG_Y%=42:                                         GOSUB *VIL_MG_PUTG:WAIT 5
27100     VIL_MG_GN%=6:VIL_MG_X%=28:VIL_MG_Y%=42:                                         GOSUB *VIL_MG_PUTG:WAIT 5
27110     VIL_MG_GN%=5:VIL_MG_X%=28:VIL_MG_Y%=42:                                         GOSUB *VIL_MG_PUTG:WAIT 5
27120     T1=0
27130   ENDIF
27140 WEND
27150 '
27160 SCREEN 0
27170 MOUSE 1,320,240,0:MOUSE 2,VIL_VWM_MCA0$,VIL_VWM_MCD0$,VIL_VWM_MCX0%,VIL_VWM_MCY0%
27180 GOSUB *VIL_WIN_PMA:GOSUB *VIL_WIN_CLALL
27190 'A$=INPUT$(1)
27200 RETURN
27210 '
27220 '<<<<<<<<<<<<<<<<<<<<  ウィンドウマネージャ  >>>>>>>>>>>>>>>>>>>>
27230 *VWM
27240 CLS'SCREEN 1,0:CLS
27250 VIL_VWM_N%=0
27260 PALETTE 7,[255,255,255]  'パレット(8 XOR 15)を白にする
27270 PALETTE 5,[80,80,0]
27280 FOR Y=0 TO 479 STEP 16
27290   FOR X=0 TO 639 STEP 8*7
27300     SYMBOL(X,Y),"ＶＩＬ ",1,1,%5,,NOT
27310   NEXT
27320 NEXT
27330 'GOTO *VWM_RAISE_0'GOTO *VWM_PDM_0 '****************************
27340 'GOTO *VWM_PDM_0 '****************************
27350 '
27360 VIL_WIN_X%=100                :VIL_WIN_Y%=40
27370 VIL_WIN_W%=VIL_WIN_X%+16*19+15:VIL_WIN_Z%=VIL_WIN_Y%+8+16+7
27380 VIL_VWM_T$="VWM":VIL_VWM_AT%=0
27390 GOSUB *VIL_VWM_OP
27400 SYMBOL(  8,  8),"～ ウィンドウマネージャ・パッケージ ～",1,1,6
27410 '
27420 GOSUB *VIL_WIN_PMA
27430 VIL_WIN_X%=20                 :VIL_WIN_Y%=80
27440 VIL_WIN_W%=VIL_WIN_X%+16*16+15:VIL_WIN_Z%=VIL_WIN_Y%+136+16+7
27450 VIL_VWM_T$="MOVE":VIL_VWM_AT%=8
27460 GOSUB *VIL_VWM_OP
27470 SYMBOL(  8,  8),"　　 ～　ウィンドウ移動　～ 　　",1,1,6
27480 SYMBOL(  8, 36)," MOVE 属性をもつウィンドウは、上",1,1,7
27490 SYMBOL(  8, 56),"部のタイトルバーにマウスカーソル",1,1,7
27500 SYMBOL(  8, 76),"を合わせて左ボタンを押すと、ドラ",1,1,7
27510 SYMBOL(  8, 96),"ッグで動かすことができます。　　",1,1,7
27520 SYMBOL(  8,136),"　　　　　　　納得した。→　　　",1,1,7
27530 '
27540 VIL_KN%=0
27550 WHILE VIL_KN%<>1
27560   VIL_X%=228:VIL_Y%=132
27570   GOSUB *VIL_SEL_OK
27580   IF VIL_KN%=-2 THEN GOSUB *VIL_VWM_WIN
27590 WEND
27600 '
27610 VIL_WIN_X%=60                 :VIL_WIN_Y%=122
27620 VIL_WIN_W%=VIL_WIN_X%+16*15+15:VIL_WIN_Z%=VIL_WIN_Y%+116+16+7
27630 VIL_VWM_T$="CLOSE 0":VIL_VWM_AT%=0
27640 GOSUB *VIL_VWM_OP
27650 SYMBOL(8, 8)," ～　ウィンドウ・クローズ　～ ",1,1,6
27660 SYMBOL(8,36),"CLOSE 属性をもつウィンドウは、",1,1,7
27670 SYMBOL(8,56),"左上隅の　スイッチをクリックす",1,1,7
27680 SYMBOL(8,76),"ると、閉じることができます。　",1,1,7
27690 LINE(75,60)-(84,69),PSET,7,B
27700 LINE(75,60)-(84,69),PSET,7
27710 LINE(75,69)-(84,60),PSET,7
27720 '
27730 *VWM_CL0
27740 '
27750 VIL_WIN_X%=160                :VIL_WIN_Y%=250
27760 VIL_WIN_W%=VIL_WIN_X%+16*12+15:VIL_WIN_Z%=VIL_WIN_Y%+28+16+7
27770 VIL_VWM_T$="CLOSE 1":VIL_VWM_AT%=2
27780 GOSUB *VIL_VWM_OP
27790 SYMBOL(8, 8),"例えば、このウィンドウを",1,1,7
27800 SYMBOL(8,28),"閉じてみてください。　　",1,1,7
27810 '
27820 VIL_VWM_R%=0
27830 WHILE VIL_VWM_R%<>2
27840   MOUSE 1,,,1
27850   WHILE MOUSE(3,0)=0 AND MOUSE(2,0)=0:WEND
27860   VIL_MX%=MOUSE(0):VIL_MY%=MOUSE(1)
27870   MOUSE 1,,,0
27880   GOSUB *VIL_VWM_WIN
27890 WEND
27900 '
27910 WHILE INKEY$<>"":WEND
27920 SYMBOL(8,116),"もう一度やる？",1,1,7
27930 '
27940 *VWM_CL1
27950 '
27960 'VIL_KN%=0
27970 VIL_X%=132:VIL_Y%=112
27980 GOSUB *VIL_SEL_YN
27990 IF VIL_KN%<1 THEN *VWM_CL1
28000 IF VIL_KN%=1 THEN *VWM_CL0
28010 '
28020 VIL_WIN_X%=100                :VIL_WIN_Y%=164
28030 VIL_WIN_W%=VIL_WIN_X%+16*15+15:VIL_WIN_Z%=VIL_WIN_Y%+136+16+7
28040 VIL_VWM_T$="HIDE":VIL_VWM_AT%=4
28050 GOSUB *VIL_VWM_OP
28060 SYMBOL(8,  8),"　～　ウィンドウ一時消去　～　",1,1,6
28070 SYMBOL(8, 36)," HIDE 属性をもつウィンドウは、",1,1,7
28080 SYMBOL(8, 56),"左上隅の　スイッチをクリックす",1,1,7
28090 SYMBOL(8, 76),"ると、左ボタンを押している間、",1,1,7
28100 SYMBOL(8, 96),"一時的に閉じることができます。",1,1,7
28110 SYMBOL(8,136),"　　納得したら  →　　　　　　",1,1,7
28120 LINE(75,60)-(84,69),PSET,7,B
28130 LINE(75,69)-(84,60),PSET,7
28140 '
28150 VIL_KN%=0
28160 WHILE VIL_KN% <> 1
28170   VIL_X%=212:VIL_Y%=132
28180   GOSUB *VIL_SEL_OK
28190   IF VIL_KN%=-2 THEN GOSUB *VIL_VWM_WIN
28200 WEND
28210 '
28220 *VWM_RESIZE0
28230 VIL_WIN_X%=140                :VIL_WIN_Y%=206
28240 VIL_WIN_W%=VIL_WIN_X%+16*16+15:VIL_WIN_Z%=VIL_WIN_Y%+136+16+7
28250 VIL_VWM_T$="RESIZE":VIL_VWM_AT%=16
28260 GOSUB *VIL_VWM_OP
28270 *VWM_RESIZE1
28280 SYMBOL(8,  8)," ～　ウィンドウ・サイズ変更　～ ",1,1,6
28290 SYMBOL(8, 36)," RESIZE 属性をもつウィンドウは、",1,1,7
28300 SYMBOL(8, 56),"右上隅の　スイッチにマウスカーソ",1,1,7
28310 SYMBOL(8, 76),"ルを合わせて左ボタンを押すと、ド",1,1,7
28320 SYMBOL(8, 96),"ラッグで大きさを変えることができ",1,1,7
28330 SYMBOL(8,116),"ます。                          ",1,1,7
28340 SYMBOL(8,136),"　　納得したら  →　　　　　　　",1,1,7
28350 LINE(75,60)-(84,69),PSET,7,B
28360 LINE(75,64)-(80,69),PSET,7,B
28370 *VWM_RESIZE2
28380 'VIL_KN%=0
28390 VIL_X%=212:VIL_Y%=132
28400 GOSUB *VIL_SEL_OK
28410 IF VIL_KN%=-2 THEN GOSUB *VIL_VWM_WIN:                                        IF VIL_VWM_R%=16 THEN *VWM_RESIZE1
28420 IF VIL_KN%<>1 THEN *VWM_RESIZE2
28430 '
28440 *VWM_YSCRLBAR_0
28450 VIL_WIN_X%=100                :VIL_WIN_Y%=100
28460 VIL_WIN_W%=VIL_WIN_X%+16*20+15:VIL_WIN_Z%=VIL_WIN_Y%+20*16+15
28470 VIL_VWM_T$="Y SCROLL BAR":VIL_VWM_AT%=2+8192
28480 VIL_VWM_YLBL%=53:VIL_VWM_YLIL%=16:VIL_VWM_YLIP%=0:VIL_VWM_YLPL%=16
28490 GOSUB *VIL_VWM_OP
28500 MOUSE 1,,,1:VIL_VWM_R%=0
28510 WHILE VIL_VWM_R%<>2
28520   VIL_VWM_R%=0
28530   IF VIL_SBAR_R%=1 THEN '一行UP
28540     GET@A(0,  0)-(16*20+15,20*16+15),VIL_WIN_BF%,                                                                 VIL_WIN_BFO&(VIL_WIN_AN%)
28550     PUT@A(0, 20)-(16*20+15,20*16+35),VIL_WIN_BF%,,,,,                                                             VIL_WIN_BFO&(VIL_WIN_AN%)
28560     LINE(0,0)-(16*20+15,19),PSET,%VIL_VWM_CB%,BF
28570     SYMBOL(8,8),TXTBUF$(VIL_VWM_YLIP%),1,1,7
28580   ELSE IF VIL_SBAR_R%=5 THEN '一行DOWN
28590     GET@A(0,  0)-(16*20+15,20*16+15),VIL_WIN_BF%,                                                                 VIL_WIN_BFO&(VIL_WIN_AN%)
28600     PUT@A(0,-20)-(16*20+15,20*16- 5),VIL_WIN_BF%,,,,,                                                             VIL_WIN_BFO&(VIL_WIN_AN%)
28610     LINE(0,20*15+8)-(16*20+15,20*16+15),PSET,%VIL_VWM_CB%,BF
28620     SYMBOL(8,20*15+8),TXTBUF$(VIL_VWM_YLIP%+15),1,1,7
28630   ELSE 
28640     GOSUB *VIL_VWM_CLS
28650     FOR I=0 TO 15
28660       SYMBOL(8,I*20+8),TXTBUF$(VIL_VWM_YLIP%+I),1,1,7
28670     NEXT
28680   ENDIF
28690   VIL_X%=-1:VIL_Y%=-1:VIL_W%=VIL_X%:VIL_Z%=VIL_Y%
28700   VIL_XN%=1:VIL_YN%=1:VIL_MSEL_BD%=0:VIL_C%=15:VIL_MSEL_MN%=0
28710   VIL_MSEL_BB%=1:VIL_MSEL_BE%=1
28720   WHILE VIL_VWM_R%<>8192 AND VIL_VWM_R%<>2
28730     GOSUB *VIL_MSEL_M
28740     GOSUB *VIL_VWM_CHECK
28750   WEND
28760 WEND
28770 '
28780 *VWM_XSCRLBAR_0
28790 VIL_WIN_X%=160                :VIL_WIN_Y%=160
28800 VIL_WIN_W%=VIL_WIN_X%+79:VIL_WIN_Z%=VIL_WIN_Y%+79
28810 VIL_VWM_T$="X-Y":VIL_VWM_AT%=2+4096+8192
28820 VIL_VWM_XLBL%=320:VIL_VWM_XLIL%=80:VIL_VWM_XLIP%=0:VIL_VWM_XLPL%=40
28830 VIL_VWM_YLBL%=320:VIL_VWM_YLIL%=80:VIL_VWM_YLIP%=0:VIL_VWM_YLPL%=40
28840 GOSUB *VIL_VWM_OP:CLS
28850 MOUSE 1,,,1:VIL_VWM_R%=0
28860 WHILE VIL_VWM_R%<>2
28870   VIL_VWM_R%=0
28880   VIL_MG_GN%=18
28890   VIL_MG_X%=-VIL_VWM_XLIP%
28900   VIL_MG_Y%=-VIL_VWM_YLIP%
28910   GOSUB *VIL_MG_PUTG
28920   VIL_X%=-1:VIL_Y%=-1:VIL_W%=VIL_X%:VIL_Z%=VIL_Y%
28930   VIL_XN%=1:VIL_YN%=1:VIL_MSEL_BD%=0:VIL_C%=15:VIL_MSEL_MN%=0
28940   VIL_MSEL_BB%=1:VIL_MSEL_BE%=1
28950   WHILE VIL_VWM_R%<>4096 AND VIL_VWM_R%<>8192 AND VIL_VWM_R%<>2
28960     GOSUB *VIL_MSEL_M
28970     GOSUB *VIL_VWM_CHECK
28980   WEND
28990 WEND
29000 'SCREEN 1,1:CLS:SCREEN 1,0
29010 '
29020 FOR I=1 TO 4:GOSUB *VIL_VWM_CL:NEXT
29030 '
29040 *VWM_RAISE_0
29050 VIL_WIN_X%=20                 :VIL_WIN_Y%=80
29060 VIL_WIN_W%=VIL_WIN_X%+16*20+15:VIL_WIN_Z%=VIL_WIN_Y%+108+16+7
29070 VIL_VWM_T$="RAISE":VIL_VWM_AT%=0
29080 GOSUB *VIL_VWM_OP
29090 SYMBOL(8,  8)," 　　　～　ウィンドウ順序変更　～　　　 ",1,1,6
29100 SYMBOL(8, 28),"　下の３個のウィンドウは、重なりの順序を",1,1,7
29110 SYMBOL(8, 48),"自由に変更することができます。　　　　　",1,1,7
29120 SYMBOL(8, 68),"　下に隠れているウィンドウのどこかをクリ",1,1,7
29130 SYMBOL(8, 88),"ックすると、そのウィンドウが一番上に出て",1,1,7
29140 SYMBOL(8,108),"きます。　　　　　　　　　　　　　　　　",1,1,7
29150 '
29160 VIL_WIN_X%=40                :VIL_WIN_Y%=240
29170 VIL_WIN_W%=VIL_WIN_X%+20*17+15:VIL_WIN_Z%=VIL_WIN_Y%+38+16+7
29180 VIL_VWM_T$="QUIT":VIL_VWM_AT%=32+64
29190 GOSUB *VIL_VWM_OP
29200 SYMBOL(8,  8),"終了するときは[確認]をクリックしてください",1,1,7
29210 '5
29220 VIL_WIN_X%=80            :VIL_WIN_Y%=280
29230 VIL_WIN_W%=VIL_WIN_X%+240:VIL_WIN_Z%=VIL_WIN_Y%+160
29240 VIL_VWM_T$="DEMO2":VIL_VWM_AT%=32+64
29250 GOSUB *VIL_VWM_OP
29260 DEMO2_X=0:DEMO2_XY=0:DEMO2_C=1
29270 '
29280 VIL_WIN_X%=240            :VIL_WIN_Y%=220
29290 VIL_WIN_W%=VIL_WIN_X%+200:VIL_WIN_Z%=VIL_WIN_Y%+200
29300 VIL_VWM_T$="DEMO1":VIL_VWM_AT%=32+64
29310 GOSUB *VIL_VWM_OP
29320 DEMO1_L=0:DEMO1_C=1
29330 '
29340 ENDF=0
29350 WHILE ENDF=0
29360   MOUSE 1,,,1
29370   IF VIL_VWM_T$="DEMO1" THEN
29380     LINE(100-DEMO1_L,100-DEMO1_L)-(100+DEMO1_L,100+DEMO1_L),                          PSET,DEMO1_C,B
29390     DEMO1_L=DEMO1_L+2:WAIT 1
29400     IF DEMO1_L=100 THEN DEMO1_L=0:DEMO1_C=DEMO1_C+1:                               IF DEMO1_C=8 THEN DEMO1_C=1
29410   ELSE IF VIL_VWM_T$="DEMO2" THEN
29420     IF DEMO2_XY=0 THEN
29430       LINE(DEMO2_X,0)-(240-DEMO2_X,160),PSET,DEMO2_C
29440       DEMO2_X=DEMO2_X+2:WAIT 1
29450       IF DEMO2_X>240 THEN DEMO2_X=0:DEMO2_XY=1
29460     ELSE
29470       LINE(240,DEMO2_X)-(0,160-DEMO2_X),PSET,DEMO2_C
29480       DEMO2_X=DEMO2_X+2:WAIT 1
29490       IF DEMO2_X>160 THEN DEMO2_X=0:DEMO2_XY=0:DEMO2_C=DEMO2_C+1:                    IF DEMO2_C=8 THEN DEMO2_C=1
29500     ENDIF
29510   ELSE
29520     VIL_X%=152:VIL_Y%=36:GOSUB *VIL_SEL_OK
29530     IF VIL_KN%=1 THEN ENDF=-1
29540     IF VIL_KN%=-2 THEN GOSUB *VIL_VWM_CHECK
29550   ENDIF
29560   IF MOUSE(3,0)                                                                        THEN VIL_KN%=-2:VIL_MX%=MOUSE(4,0):VIL_MY%=MOUSE(5,0):                                  GOSUB *VIL_VWM_CHECK':PRINT VIL_MX%,VIL_MY%
29570 WEND
29580 '
29590 FOR I=1 TO 4:GOSUB *VIL_VWM_CL:NEXT
29600 VIL_WIN_X%=20                 :VIL_WIN_Y%=80
29610 VIL_WIN_W%=VIL_WIN_X%+16*18+15:VIL_WIN_Z%=VIL_WIN_Y%+218+16+7
29620 VIL_VWM_T$="ALL 0":VIL_VWM_AT%=0
29630 GOSUB *VIL_VWM_OP
29640 SYMBOL(8,  8),"　最後の例として、複数の属性を指定し",1,1,7
29650 SYMBOL(8, 28),"たウィンドウを右に挙げます。いろいろ",1,1,7
29660 SYMBOL(8, 48),"試してみてください。　　　　　　　　",1,1,7
29670 SYMBOL(8, 68),"　なお、このウィンドウは　　　　　　",1,1,7
29680 SYMBOL(8, 88),"・移動範囲　 　: (120,40)-(599,439) ",1,1,4
29690 SYMBOL(8,108),"・最大サイズ 　: 328×248ドット　 　",1,1,4
29700 SYMBOL(8,128),"・最小サイズ　 : 136× 72ドット　 　",1,1,4
29710 SYMBOL(8,148),"・移動単位　 　: X・Y方向共 8ドット ",1,1,4
29720 SYMBOL(8,168),"・リサイズ単位 : X・Y方向共16ドット ",1,1,4
29730 SYMBOL(8,188),"となっています。　　　　　　　　　　",1,1,7
29740 '
29750 *VWM_ALL_0
29760 VIL_WIN_X%=320           :VIL_WIN_Y%=120
29770 VIL_WIN_W%=VIL_WIN_X%+167:VIL_WIN_Z%=VIL_WIN_Y%+119
29780 VIL_VWM_T$="ALL 1":VIL_VWM_AT%=1+2+4+8+16
29790 GOSUB *VIL_VWM_OP
29800 *VWM_ALL_1
29810 GOSUB *VWM_ALL_9
29820 VIL_VWM_XM%=120       '移動/リサイズ時ウィンドウ左上隅座標最小値
29830 VIL_VWM_YM%= 40
29840 VIL_VWM_WM%=599       '移動/リサイズ時ウィンドウ右下隅座標最大値
29850 VIL_VWM_ZM%=439
29860 VIL_VWM_XL%=136       'リサイズ時のＸ・Ｙ方向長さ最小値
29870 VIL_VWM_YL%= 72
29880 VIL_VWM_WL%=328       'リサイズ時のＸ・Ｙ方向長さ最大値
29890 VIL_VWM_ZL%=248
29900 VIL_VWM_XD%=  8       '移動時の単位ドット数
29910 VIL_VWM_YD%=  8
29920 VIL_VWM_WD%= 16       'リサイズ時の単位ドット数
29930 VIL_VWM_ZD%= 16
29940 '
29950 MOUSE 1,,,1:VIL_VWM_R%=0
29960 WHILE VIL_VWM_R%<>2
29970   VIL_X%=8:VIL_Y%=8:VIL_W%=VIL_X%+7:VIL_Z%=VIL_Y%+7
29980   VIL_XN%=1:VIL_YN%=1:VIL_MSEL_BD%=0:VIL_C%=15:VIL_MSEL_MN%=0
29990   VIL_MSEL_BB%=1:VIL_MSEL_BE%=1
30000   GOSUB *VIL_MSEL_M
30010   GOSUB *VIL_VWM_CHECK
30020   IF VIL_VWM_R% AND VIL_VWM_R%<>2 THEN GOSUB *VWM_ALL_9
30030 WEND
30040 '
30050 *VWM_ALL_2
30060 SYMBOL(8,218),"もう一度やる？",1,1,7
30070 VIL_KN%=0
30080 VIL_X%=132:VIL_Y%=218
30090 GOSUB *VIL_SEL_YN
30100 IF VIL_KN%<1 THEN *VWM_ALL_2
30110 IF VIL_KN%=1 THEN *VWM_ALL_0
30120 '
30130 VIL_VWM_XM%=  8       '移動/リサイズ時ウィンドウ左上隅座標最小値
30140 VIL_VWM_YM%= 14
30150 VIL_VWM_WM%=631       '移動/リサイズ時ウィンドウ右下隅座標最大値
30160 VIL_VWM_ZM%=471
30170 VIL_VWM_XL%= 32       'リサイズ時のＸ・Ｙ方向長さ最小値
30180 VIL_VWM_YL%=  8
30190 VIL_VWM_WL%=624       'リサイズ時のＸ・Ｙ方向長さ最大値
30200 VIL_VWM_ZL%=458
30210 VIL_VWM_XD%=  1       '移動時の単位ドット数
30220 VIL_VWM_YD%=  1
30230 VIL_VWM_WD%=  1       'リサイズ時の単位ドット数
30240 VIL_VWM_ZD%=  1
30250 GOSUB *VIL_VWM_CLALL
30260 GOTO *VWM_PDM_0
30270 '
30280 *VWM_ALL_9
30290 GOSUB *VIL_VWM_CLS
30300 CIRCLE((VIL_WIN_W%-VIL_WIN_X%)\2,(VIL_WIN_Z%-VIL_WIN_Y%)\2)                        ,(VIL_WIN_W%-VIL_WIN_X%)\2,1                                                 ,(VIL_WIN_Z%-VIL_WIN_Y%)/(VIL_WIN_W%-VIL_WIN_X%)
30310 A$="位置　("+FNVIL_P2S0$(VIL_WIN_X%,3)+","                                               +FNVIL_P2S0$(VIL_WIN_Y%,3)+")"
30320 SYMBOL(8, 8),A$,1,1,6
30330 A$="　 　-("+FNVIL_P2S0$(VIL_WIN_W%,3)+","                                               +FNVIL_P2S0$(VIL_WIN_Z%,3)+")"
30340 SYMBOL(8,28),A$,1,1,6
30350 A$="サイズ("+FNVIL_P2S0$(VIL_WIN_W%-VIL_WIN_X%+1,3)+","                                  +FNVIL_P2S0$(VIL_WIN_Z%-VIL_WIN_Y%+1,3)+")"
30360 SYMBOL(8,48),A$,1,1,6
30370 RETURN
30380 '
30390 *VWM_PDM_0
30400 VIL_WIN_X%=140:VIL_WIN_Y%=100:VIL_WIN_W%=508:VIL_WIN_Z%=100+98+16+7
30410 GOSUB *VIL_WIN_OP:GOSUB *VIL_WIN_PMR:CLS
30420 VIL_VWM_AT%(VIL_WIN_AN%)=16384
30430 SYMBOL(8, 8),"プルダウンメニュー・パッケージの例です。　　",1,1,7
30440 SYMBOL(8,28),"終わるときは右上の[終了]を選んでください。　",1,1,7
30450 SYMBOL(8,58),"※現バージョンでは、バー上のメニューを選んだ",1,1,7
30460 SYMBOL(8,78),"　後、ウィンドウ上メニューのドラッグによる選",1,1,7
30470 SYMBOL(8,98),"　択はできませんm(__)m。　　　　　　　　　　",1,1,7
30480 PALETTE 12,[128-80,128-80,128-80]
30490 'PALETTE 13,[128   ,128   ,128   ]
30500 PALETTE 14,[128+80,128+80,128+80]
30510 RESTORE *VWM_PDM_1
30520 FOR I=1 TO VIL_PDM_MN%
30530   READ PDM_BM$(I),OF,ML
30540   VIL_PDM_X%(I)=VIL_PDM_W%(I-1)+1+OF:VIL_PDM_W%(I)=VIL_PDM_X%(I)+ML
30550 NEXT
30560 *VWM_PDM_1
30570 DATA "ＶＩＬ",0,64
30580 DATA "ファイル",0,80
30590 DATA "編集",0,80
30600 DATA "実行",0,80
30610 DATA "終了",281,48
30620 GOSUB *VIL_PDM_BDRAW
30630 FOR I=1 TO VIL_PDM_MN%
30640   SYMBOL(VIL_PDM_X%(I)+8,4),PDM_BM$(I),1,1,%1
30650   SYMBOL(VIL_PDM_X%(I)+9,5),PDM_BM$(I),1,1,%3
30660 NEXT
30670 RESTORE *VWM_PDM_9
30680 FOR I=1 TO VIL_PDM_MN%-1
30690   READ PDM_X(I),PDM_N(I),PDM_XL(I)
30700   FOR J=1 TO PDM_N(I):                                                           READ PDM_WM$(I,J):                                                       NEXT
30710 NEXT
30720 '
30730 *VWM_PDM_2
30740 VIL_MSEL_BC%=0:VIL_MSEL_MN%=0:VIL_MSEL_BN%=1:VIL_KN%=0
30750 WHILE VIL_KN%<>5
30760   IF VIL_KN%=0 THEN GOSUB *VIL_PDM_BSEL
30770   IF 0<VIL_KN% AND VIL_KN%<5 THEN
30780     VIL_WIN_X%=PDM_X(VIL_KN%):                                                   VIL_WIN_W%=VIL_WIN_X%+PDM_XL(VIL_KN%)*8+15
30790     VIL_PDM_YN%=PDM_N(VIL_KN%)
30800     GOSUB *VIL_PDM_OP
30810     FOR I=1 TO VIL_PDM_YN%
30820           SYMBOL(8,I*20-18),PDM_WM$(VIL_PDM_N%,I),1,1,0
30830     NEXT
30840     GOSUB *VIL_PDM_WSEL
30850     GOSUB *VIL_PDM_CL
30860     IF VIL_KN%>0 THEN
30870       VIL_WIN_X%=200:VIL_WIN_Y%=200:VIL_WIN_W%=440:VIL_WIN_Z%=248
30880       VIL_VWM_N%=0:VIL_VWM_AT%=0
30890       GOSUB *VIL_VWM_OP
30900       SYMBOL(8,8),PDM_WM$(VIL_PDM_N%,VIL_KN%),1,1,7
30910       GOSUB *VIL_INP_MVWAIT
30920       GOSUB *VIL_VWM_CL
30930       VIL_KN%=0
30940     ELSE IF VIL_KN%=-5 OR VIL_KN%=-6 THEN
30950       GOSUB *VIL_PDM_BMMV
30960       VIL_KN%=VIL_PDM_N%
30970     ELSE IF VIL_KN%=-2 THEN
30980       GOSUB *VIL_PDM_BMMV
30990      IF VIL_PDM_R% THEN VIL_KN%=VIL_PDM_N%
31000     ELSE
31010       VIL_KN%=0
31020     ENDIF
31030   ELSE IF VIL_KN%=5 THEN
31040   ELSE
31050     VIL_KN%=0
31060     'BMENUでKN<=0の処理
31070   ENDIF
31080 WEND
31090 GOSUB *VIL_MSEL_BC
31100 VIL_VWM_N%=0
31110 VIL_WIN_X%=240                :VIL_WIN_Y%=170
31120 VIL_WIN_W%=VIL_WIN_X%+16*9+15:VIL_WIN_Z%=VIL_WIN_Y%+32+16+15
31130 VIL_VWM_T$="CONFIRM":VIL_VWM_AT%=1+2+4+8
31140 GOSUB *VIL_VWM_OP
31150 SYMBOL(8,  8),"    終了します    ",1,1,7
31160 VIL_VWM_R%=0
31170 WHILE VIL_VWM_R%<>2
31180   VIL_X%=34:VIL_Y%=32:VIL_MSEL_BN%=2
31190   GOSUB *VIL_SEL_DO
31200   IF VIL_KN%>0 THEN 
31210     VIL_VWM_R%=2:GOSUB *VIL_VWM_CL
31220   ELSE IF VIL_KN%=-1 THEN
31230     VIL_KN%=2:VIL_VWM_R%=2:GOSUB *VIL_VWM_CL
31240   ELSE
31250     GOSUB *VIL_VWM_CHECK:VIL_KN%=2
31260   ENDIF
31270 WEND
31280 IF VIL_KN%=2 THEN *VWM_PDM_2
31290 PALETTE 14,[255,255,  0]
31300 PALETTE 12,[255,  0,  0]
31310 VIL_VWM_XM%=0:VIL_VWM_YM%=0:VIL_VWM_WM%=639:VIL_VWM_ZM%=479
31320 VIL_WIN_UB%=0:VIL_WIN_DB%=0:VIL_WIN_LB%=0:VIL_WIN_RB%=0:
31330 GOSUB *VIL_WIN_PMA:GOSUB *VIL_WIN_CL
31340 RETURN
31350 '
31360 *VWM_PDM_9
31370 '左上隅X座標,項目数,1行文字数,項目データ
31380 DATA   0,2,11,"VILについて","アクセサリ"
31390 DATA  64,3, 8,"新規","読込","保存"
31400 DATA 144,5,12,"削除","複写","挿入","検索","置換"
31410 DATA 224,5,12,"通常実行","ステップ実行","一行実行","中断","再開"
31420 '
31430 '<<<<<<<<<<<<<<<<<<<<  応用例  >>>>>>>>>>>>>>>>>>>>
31440 *APPLY
31450 '
31460 VIL_VWM_N%=0
31470 VIL_WIN_X%=160                :VIL_WIN_Y%=360
31480 VIL_WIN_W%=VIL_WIN_X%+16*21+15:VIL_WIN_Z%=VIL_WIN_Y%+56+16+15
31490 VIL_VWM_T$="CONFIRM":VIL_VWM_AT%=1+2+4+8
31500 GOSUB *VIL_VWM_OP
31510 SYMBOL(8,  8)," 　　　　　　 ～　応用例　～ 　　　　　　 ",1,1,6
31520 SYMBOL(8, 28),"現在作成中です。次回までお待ち下さいm(__)m",1,1,7
31530 VIL_VWM_R%=0
31540 WHILE VIL_VWM_R%<>2
31550   VIL_X%=156:VIL_Y%=50:VIL_MSEL_BN%=2
31560   GOSUB *VIL_SEL_OK
31570   IF VIL_KN%>0 THEN 
31580     VIL_VWM_R%=2:GOSUB *VIL_VWM_CL
31590   ELSE IF VIL_KN%=-1 THEN
31600     VIL_VWM_R%=2:GOSUB *VIL_VWM_CL
31610   ELSE
31620     GOSUB *VIL_VWM_CHECK
31630   ENDIF
31640 WEND
31650 RETURN
31660 '
31670 '<<<<<<<<<<<<<<<<<<<<  終了  >>>>>>>>>>>>>>>>>>>>
31680 *END
31690 VIL_VWM_N%=0
31700 VIL_WIN_X%=240                :VIL_WIN_Y%=360
31710 VIL_WIN_W%=VIL_WIN_X%+16*9+15:VIL_WIN_Z%=VIL_WIN_Y%+48+16+15
31720 VIL_VWM_T$="CONFIRM":VIL_VWM_AT%=1+2+4+8
31730 GOSUB *VIL_VWM_OP
31740 SYMBOL(8,  8),"　 ～　終了　～ 　",1,1,6
31750 SYMBOL(8, 28),"TownsOS に戻ります",1,1,7
31760 VIL_VWM_R%=0
31770 WHILE VIL_VWM_R%<>2
31780   VIL_X%=34:VIL_Y%=50:VIL_MSEL_BN%=2
31790   GOSUB *VIL_SEL_DO
31800   IF VIL_KN%>0 THEN 
31810     VIL_VWM_R%=2:GOSUB *VIL_VWM_CL
31820   ELSE IF VIL_KN%=-1 THEN
31830     VIL_KN%=2:VIL_VWM_R%=2:GOSUB *VIL_VWM_CL
31840   ELSE
31850     GOSUB *VIL_VWM_CHECK:VIL_KN%=2
31860   ENDIF
31870 WEND
31880 IF VIL_KN%=2 THEN RETURN
31890 SYSTEM
