home *** CD-ROM | disk | FTP | other *** search
/ FM Towns: Free Software Collection 5 / FREESOFT.BIN / fb386 / fmbed / fmbed.bas next >
BASIC Source File  |  1992-08-19  |  59KB  |  1,676 lines

  1. 10000 DATA " _________________________________________________________ "
  2. 10010 DATA "  FMBED  Ver1.06   1992/01/26   Copyright(c) TETSU 1992-   "
  3. 10020 DATA "                   FileName=「FMBED.BAS」                    "
  4. 10030 DATA "                 for FM-TOWNS  要2MbyteRAM                 "
  5. 10040 DATA "                 F-BASIC386 V1.1L20 以降用                 "
  6. 10050 DATA "           カレントディレクトリに「mtrnsm.rex」が必要        "
  7. 10060 DATA " ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ "
  8. 10070 *INIT
  9. 10080   SCREEN@ 0: COLOR 7,0,7,0: WIDTH 80,25: CONSOLE 0,24,0: CLS 4
  10. 10090   PAL=0: FOR I=0 TO 15: PALETTE I,[PAL,PAL,PAL]: NEXT I
  11. 10100   COLOR 7,0,7,1: RESTORE
  12. 10110   FOR I=0 TO 6: READ I$: LOCATE 11,7+I: PRINT I$;: NEXT I
  13. 10120   COLOR 7,0,7,0
  14. 10130   A$="*INIT"      :GOSUB *INIT_PR
  15. 10140   CLEAR ,,512,400000,1000
  16. 10150   DEFLNG A-Z: PAL=0
  17. 10160 'FREQCTL=  0: LOADM "freqctl.rex",FREQCTL
  18. 10170   MTRNSM =300: LOADM "mtrnsm.rex" ,MTRNSM
  19. 10180   WINDOW(0,0)-(1023,511)
  20. 10190   VIEW  (0,0)-(1023,511)
  21. 10200   LINE  (0,0)-(639,479),PSET,%7,BF
  22. 10210   DEF FNVRAM(X,Y)=INT((INT((X+8)/8)*(Y+1)*4+2-1)/2)
  23. 10220   DIM P1$(4),P2$(4,5),V%(23)
  24. 10230   P1$(0)="C4E4G4C4,R2R4E4,R2R4G4"
  25. 10240   P1$(1)="L16CDEFGAB>C<BAGFEDC"
  26. 10250   P1$(2)="C,E,G"
  27. 10260   P1$(3)=""
  28. 10270   P1$(4)=""
  29. 10280   VOL=64: AT=0
  30. 10290   PI!=3.14159!/2
  31. 10300   LOADWX =160: LOADWY =180: FILE$ =""
  32. 10310   SAVEWX =160: SAVEWY =180
  33. 10320   ERRWX  =220: ERRWY  =180
  34. 10330   EXITWX =220: EXITWY =180
  35. 10340   PLAYWX =110: PLAYWY =180
  36. 10350   LFOWX  =160: LFOWY  =180
  37. 10360   KX     = 11: KY     =425
  38. 10370   LFO=4
  39. 10380 'CALLM FREQCTL,LFO
  40. 10390   FOR I=0 TO 5: PART I,I: NEXT I
  41. 10400   BGM 1
  42. 10410 '
  43. 10420   A$="*BOX"       :GOSUB *INIT_PR: GOSUB *BOX
  44. 10430   A$="*BAR_GET"   :GOSUB *INIT_PR: GOSUB *BAR_GET
  45. 10440   A$="*SYMBOL"    :GOSUB *INIT_PR: GOSUB *SYMBOL
  46. 10450   A$="*ENV_INIT"  :GOSUB *INIT_PR: GOSUB *ENV_INIT
  47. 10460   A$="*CMP_INIT"  :GOSUB *INIT_PR: GOSUB *CMP_INIT
  48. 10470   A$="*VOL_INIT"  :GOSUB *INIT_PR: GOSUB *VOL_INIT
  49. 10480   A$="*PLAY_INIT" :GOSUB *INIT_PR: GOSUB *PLAY_INIT
  50. 10490   A$="*V_INIT"    :GOSUB *INIT_PR: GOSUB *V_INIT
  51. 10500   A$="*KB_INIT"   :GOSUB *INIT_PR: GOSUB *KB_INIT
  52. 10510   A$="*FSLCT_INIT":GOSUB *INIT_PR: GOSUB *FSLCT_INIT
  53. 10520   A$="*BTN_INIT"  :GOSUB *INIT_PR: GOSUB *BTN_INIT
  54. 10530   A$="*MOUSE_INIT":GOSUB *INIT_PR: GOSUB *MOUSE_INIT
  55. 10540   MOUSE 0: MOUSE 1,320,240,1: MOUSE 1,320,240,1
  56. 10550   MS=MS_INIT: GOSUB *MOUSE_SET
  57. 10560   GOSUB *PAL_INIT: CLS 4
  58. 10570   ON ERROR GOTO *ERR
  59. 10580 '
  60. 10590 *MAIN
  61. 10600   MOUSE 4,0,0,639,479
  62. 10610   GOSUB *MPLOOP1
  63. 10620 '
  64. 10630   J=0
  65. 10640   FOR I=1 TO 18
  66. 10650     IF BTN%(I,0)<=MX AND BTN%(I,1)<=MY AND                                         MX<=BTN%(I,2) AND MY<=BTN%(I,3) AND                                         (BTN%(I,4)=3 OR PUSH=BTN%(I,4))      THEN J=I: I=18
  67. 10660   NEXT I
  68. 10670   ON J GOSUB  *KB    ,*ENV_OP  ,*CMP_OP   ,*VOL_OP ,*PLAYOFF,*EXIT                       ,*PLAY  ,*PLAY_SET,*AT_OP    ,*V_SCRN ,*V_READ ,*V_CNT                      ,*V_SAVE,*V_CLR   ,*VNAME    ,*LOAD   ,*SAVE   ,*LFO
  69. 10680 GOTO *MAIN
  70. 10690 '
  71. 10700 *PAL_INIT
  72. 10710   RESTORE *PAL_INIT
  73. 10720   DIM G(15),R(15),B(15)
  74. 10730   FOR I=0 TO 15
  75. 10740     READ G,R,B: G(I)=G*16:R(I)=R*16:B(I)=B*16
  76. 10750   NEXT I
  77. 10760   FOR I!=0 TO 1 STEP .2!
  78. 10770     FOR J=0 TO 15
  79. 10780     PALETTE J,[PAL+(G(J)-PAL)*I!,PAL+(R(J)-PAL)*I!,PAL+(B(J)-PAL)*I!]
  80. 10790     NEXT J
  81. 10800   NEXT I!
  82. 10810   FOR J=0 TO 15
  83. 10820     PALETTE J,[G(J),R(J),B(J)]
  84. 10830   NEXT J
  85. 10840   ERASE G,R,B
  86. 10850 RETURN
  87. 10860 DATA 00,00,00 , 00,00,08 , 00,08,00 , 00,08,08
  88. 10870 DATA 08,00,00 , 08,00,08 , 08,08,00 , 08,08,08
  89. 10880 DATA 04,04,04 , 00,00,15 , 00,15,00 , 00,15,15
  90. 10890 DATA 15,00,00 , 15,00,15 , 15,15,00 , 15,15,15
  91. 10900 '
  92. 10910 *INIT_PR
  93. 10920   LOCATE 0,0
  94. 10930   PRINT A$;"          "
  95. 10940 RETURN
  96. 10950 '
  97. 10960 *BTN_INIT
  98. 10970   DIM BTN%(18,4)
  99. 10980   RESTORE *BTN_INIT
  100. 10990   FOR I=1 TO 18
  101. 11000     FOR J=0 TO 4
  102. 11010       READ BTN%(I,J)
  103. 11020     NEXT J
  104. 11030   NEXT I
  105. 11040   DATA  11,425,626,475,1'KB
  106. 11050   DATA   1, 22,500,309,3'ENV_OP
  107. 11060   DATA 190,320,291,420,3'CMP_OP
  108. 11070   DATA 310,342,411,356,3'VOL
  109. 11080   DATA 420,367,500,419,3'PLAY OFF
  110. 11090   DATA 420,311,500,337,1'EXIT
  111. 11100   DATA 305,394,414,416,3'PLAY
  112. 11110   DATA 347,373,370,388,1'PLAY_SET
  113. 11120   DATA 383,373,414,388,1'AT_OP
  114. 11130   DATA 509, 77,631,337,1'V_SCRN
  115. 11140   DATA 510,370,574,385,1'V_READ
  116. 11150   DATA 580,370,612,385,1'V_CNT
  117. 11160   DATA 510,395,542,410,1'V_SAVE
  118. 11170   DATA 580,395,628,410,1'V_CLR
  119. 11180   DATA 544,342,607,357,1'VNAME
  120. 11190   DATA 509, 29,631, 49,1'LOAD
  121. 11200   DATA 509, 50,631, 70,1'SAVE
  122. 11210   DATA 420,339,500,365,1'LFO
  123. 11220 RETURN
  124. 11230 '
  125. 11240 *BOX_PR
  126. 11250   LINE(X1,Y1)-(X2,Y2),PSET,%0,BF,%7
  127. 11260   CONNECT(X1,Y2)-(X1,Y1)-(X2,Y1),%15
  128. 11270 RETURN
  129. 11280 '
  130. 11290 *BOX
  131. 11300   RESTORE *BOX
  132. 11310   READ X1,Y1,X2,Y2
  133. 11320   WHILE X1<>-1
  134. 11330     GOSUB *BOX_PR
  135. 11340     READ X1,Y1,X2,Y2
  136. 11350   WEND
  137. 11360   DATA 001,001,638,020'title
  138. 11370   DATA 502, 22,638,419'音色達
  139. 11380   DATA 632, 71,508, 28'LOAD SAVE
  140. 11390   DATA 509, 29,631, 49'LOAD
  141. 11400   DATA 509, 50,631, 70'SAVE
  142. 11410   DATA 632, 96,508, 76'FILES
  143. 11420   DATA 509, 77,527, 95'<
  144. 11430   DATA 613, 77,631, 95'>
  145. 11440   DATA 632,118,508, 98'BNK NAME
  146. 11450   DATA 611,338,508,124'VOICE_NAMES
  147. 11460   DATA 632,360,508,340'VNAME
  148. 11470   DATA 632,338,613,124'VOICE_BAR
  149. 11480   DATA 614,125,631,143'V_▲
  150. 11490   DATA 614,319,631,337'V_▼
  151. 11500   DATA   1, 22,125,309'ENV
  152. 11510   DATA 123,103,  3, 40'ENV Pattern
  153. 11520   DATA   1,310,299,419'ALG
  154. 11530   DATA 160,413,  7,316'ALG Pattern
  155. 11540   DATA   1,421,638,478'KB
  156. 11550   DATA 420,311,500,337'EXIT
  157. 11560   DATA 420,339,500,365'LFO
  158. 11570   DATA 420,367,500,419'PLAY OFF
  159. 11580   DATA 301,311,418,365'VOLUME
  160. 11590   DATA 301,367,418,419'mml
  161. 11600   DATA 415,417,304,393'mml NUM
  162. 11610   DATA 415,391,341,369'mml com
  163. 11620   DATA 342,370,376,390'mml set
  164. 11630   DATA 377,370,414,390'mml auto
  165. 11640   DATA  -1, -1, -1, -1
  166. 11650 RETURN
  167. 11660 '
  168. 11670 *SYMBOL
  169. 11680   RESTORE *SYMBOL
  170. 11690   READ X,Y,A$
  171. 11700   WHILE X<>-1
  172. 11710     SYMBOL(X,Y),A$,1,1,0
  173. 11720     READ X,Y,A$
  174. 11730   WEND
  175. 11740   DATA  30,  3,FMBED   Ver 1.06
  176. 11750   DATA 500,  3,(c) TETSU 1992-
  177. 11760   DATA 615,127,▲
  178. 11770   DATA 615,320,▼
  179. 11780   DATA 540, 32,LOAD
  180. 11790   DATA 540, 53,SAVE
  181. 11800   DATA 510,370,読み込み
  182. 11810   DATA 510,395,保存
  183. 11820   DATA 580,370,試聴
  184. 11830   DATA 580,395,初期化
  185. 11840   DATA 430,316,EXIT
  186. 11850   DATA 430,345,LFO 設定
  187. 11860   DATA 430,375,PLAY
  188. 11870   DATA 437,397,OFF
  189. 11880   DATA 318,320,VOLUME
  190. 11890   DATA 347,373,SET
  191. 11900   DATA 309,373,MML
  192. 11910   DATA  -1, -1,END
  193. 11920 RETURN
  194. 11930 '
  195. 11940 *BAR_PR
  196. 11950   LINE(BX,BY)-STEP(23,15),PSET,%7,BF
  197. 11960   SYMBOL(BX,BY),RIGHT$("  "+STR$(NUM),3),1,1,7
  198. 11970   PUT@A(BX+41,BY)-(BX+88,BY+14),BAR1%
  199. 11980   X1=BX+42+42*(NUM-MIN)/(MAX-MIN):Y1=BY:X2=X1+3:Y2=Y1+14
  200. 11990   PUT@A(X1,Y1)-(X2,Y2),BAR2%
  201. 12000 RETURN
  202. 12010 '
  203. 12020 *BAR_GET
  204. 12030    DIM BAR1%(200),BAR2%(200)
  205. 12040    LINE(41,480)-STEP(47,14),PSET,%7,BF
  206. 12050    X1=88: Y1=480+8: X2=41: Y2=480+6
  207. 12060    GOSUB *BOX_PR
  208. 12070    GET@A(41,480)-(41+47,480+14),BAR1%
  209. 12080    X1=0:Y1=480:X2=X1+3:Y2=Y1+14
  210. 12090    GOSUB *BOX_PR
  211. 12100    GET@A(0,480)-(3,480+14),BAR2%
  212. 12110 RETURN
  213. 12120 '
  214. 12130 *BAR_INIT
  215. 12140   CONNECT(BX+28,BY+7)-(BX+ 39,BY+2)-(BX+39,BY+12),0,PSET,F
  216. 12150   CONNECT(BX+90,BY+2)-(BX+101,BY+7)-(BX+90,BY+12),0,PSET,F
  217. 12160   GOSUB *BAR_PR
  218. 12170 RETURN
  219. 12180 '
  220. 12190 *MPLOOP1
  221. 12200   PUSH=0
  222. 12210   WHILE PUSH=0
  223. 12220     IF MOUSE(2,0)=-1 THEN PUSH=1
  224. 12230     IF MOUSE(2,1)=-1 THEN PUSH=2
  225. 12240   WEND
  226. 12250   MX=MOUSE(0):MY=MOUSE(1)
  227. 12260 RETURN
  228. 12270 '
  229. 12280 *MPLOOP2
  230. 12290   WHILE MOUSE(2,0)=-1 OR MOUSE(2,1)=-1: WEND
  231. 12300 RETURN
  232. 12310 '
  233. 12320 *KB_INIT
  234. 12330   DIM KZ(11,4)
  235. 12340   RESTORE *KB_INIT
  236. 12350   FOR I=0 TO 11
  237. 12360     FOR J=0 TO 4
  238. 12370       READ KZ(I,J)
  239. 12380     NEXT J
  240. 12390   NEXT I
  241. 12400   DATA  0, 0,11,50, 0  '0  C
  242. 12410   DATA 11, 0,22,50, 2  '1  D
  243. 12420   DATA 22, 0,33,50, 4  '2  E
  244. 12430   DATA 33, 0,44,50, 5  '3  F
  245. 12440   DATA 44, 0,55,50, 7  '4  G
  246. 12450   DATA 55, 0,66,50, 9  '5  A
  247. 12460   DATA 66, 0,77,50,11  '6  B
  248. 12470   DATA 08, 0,14,30, 1  '7  C+
  249. 12480   DATA 19, 0,25,30, 3  '8  D+
  250. 12490   DATA 41, 0,47,30, 6  '9  F+
  251. 12500   DATA 52, 0,58,30, 8  '10 G+
  252. 12510   DATA 63, 0,69,30,10  '11 A+
  253. 12520   FOR I=0 TO 6 
  254. 12530     LINE(KX+KZ(I,0),KY)-(KX+KZ(I,2),KY+KZ(I,3)),PSET,%8,BF,%15
  255. 12540   NEXT I
  256. 12550   FOR I=7 TO 11
  257. 12560     LINE(KX+KZ(I,0),KY)-(KX+KZ(I,2),KY+KZ(I,3)),PSET,%8,BF,%8
  258. 12570   NEXT I
  259. 12580   CIRCLE(KX+5,KY+45),2,%10,,,,F
  260. 12590   DIM A%(FNVRAM(77,50))
  261. 12600   GET@A(KX,KY)-(KX+77,KY+50),A%
  262. 12610   FOR X=KX+77 TO KX+539 STEP 77
  263. 12620     PUT@A(X,KY)-(X+77,KY+50),A%
  264. 12630   NEXT X
  265. 12640   ERASE A%
  266. 12650 RETURN
  267. 12660 '
  268. 12670 *KB
  269. 12680   MOUSE 4,KX,KY,KX+615,KY+50
  270. 12690   MS=4: GOSUB *MOUSE_SET
  271. 12700   KN=-1
  272. 12710   GOSUB *PLAYOFF_EXE
  273. 12720   PLAY "%C @128 U0"
  274. 12730   WHILE MOUSE(2,0)=-1
  275. 12740     X=MOUSE(0)-KX: Y=MOUSE(1)-KY
  276. 12750     O=X \ 77: X=X MOD 77
  277. 12760     FOR I=0 TO 11
  278. 12770       IF KZ(I,0)<=X AND X<=KZ(I,2) AND Y<=KZ(I,3) THEN J=12*O+KZ(I,4)
  279. 12780     NEXT I
  280. 12790     IF J<>KN THEN KN=J: OUTM #255,&H90,KN+24,VOL
  281. 12800   WEND
  282. 12810   OUTM #255,&H90,KN+24,0
  283. 12820   MS=MS_INIT: GOSUB *MOUSE_SET
  284. 12830 RETURN
  285. 12840 '
  286. 12850 *ENV_INIT
  287. 12860   RESTORE *ENV_INIT
  288. 12870   DIM ENV%(3,10),ENVMIN%(8),ENVMAX%(8),ENV2%(3,10),CLR%(23)
  289. 12880   FOR I=0 TO 8
  290. 12890     READ A$,ENVMIN%(I),ENVMAX%(I)
  291. 12900     SYMBOL(3,110+20*I),A$,1,1,0
  292. 12910     BX=19: BY=110+20*I: NUM=0: MIN=ENVMIN%(I): MAX=ENVMAX%(I)
  293. 12920     GOSUB *BAR_INIT
  294. 12930   NEXT I
  295. 12940   SYMBOL(3,290),"AM"  ,1,1,0
  296. 12950   SYMBOL(35,290),"0"  ,1,1,7
  297. 12960   SYMBOL(60,290),"off",1,1,0
  298. 12970   FOR I=0 TO 3: ENV%(I,10)=1: NEXT I
  299. 12980   SYMBOL(98, 24),"on" ,1,1,0
  300. 12990   MSKF=1
  301. 13000   DATA AR, 0,31
  302. 13010   DATA DR, 0,31
  303. 13020   DATA SR, 0,31
  304. 13030   DATA RR, 0,15
  305. 13040   DATA SL, 0,15
  306. 13050   DATA TL, 0,127
  307. 13060   DATA KS, 0,3
  308. 13070   DATA ML, 0,15
  309. 13080   DATA DT,-3,3
  310. 13090   FOR I=0 TO 23: READ CLR%(I): NEXT I
  311. 13100   DATA 0,0,0,0,0,0,32639,32639,0,0,0,0,0,0,3855,3855,0,0,0,0,0,0,0,0
  312. 13110   S=0
  313. 13120   GOSUB *ENV_PR
  314. 13130   DIM A%(FNVRAM(124,287))
  315. 13140   GET@A(1,22)-(125,309),A%
  316. 13150   FOR I=0 TO 3
  317. 13160     PUT@A(1+125*I,22)-(125+125*I,309),A%
  318. 13170     SYMBOL(-3+125*I,24),STR$(I+1),1,1,2,,PSET,1
  319. 13180   NEXT I
  320. 13190   ERASE A%
  321. 13200 RETURN
  322. 13210 '
  323. 13220 *ENV_PR
  324. 13230   WINDOW(0,127)-(400,0)
  325. 13240   VIEW(4+S*125,41)-(122+S*125,102)
  326. 13250   TL=127-ENV%(S,5): AR=ENV%(S,0): DR=ENV%(S,1)
  327. 13260   SL=ENV%(S,4): SR=ENV%(S,2): RR=ENV%(S,3)
  328. 13270   X1=0:   Y1=0: X2=0:   Y2=0: X3=0:   Y3=0
  329. 13280   X4=300: Y4=0: X5=400: Y5=0: X6=500: Y6=0
  330. 13290   IF AR=0 OR TL=0 GOTO *ENV_PR_3
  331. 13300   X2=(31-AR)*150/31: Y2=TL
  332. 13310   IF SL=0 THEN X3=X2: Y3=Y2: GOTO *ENV_PR_1
  333. 13320   IF DR=0 THEN X3=X2: Y3=Y2: SR=0: GOTO *ENV_PR_1
  334. 13330   Y3=(15-SL)*TL/15: X3=X2+(Y2-Y3)/TAN(PI!*(DR/31*.5!+.5!))
  335. 13340 *ENV_PR_1
  336. 13350   IF SR=31 THEN X4=X3:  Y4=0:  GOTO *ENV_PR_2
  337. 13360   IF SR=0   THEN X4=300: Y4=Y3: GOTO *ENV_PR_2
  338. 13370   X4=300: Y4=Y3-(X4-X3)*TAN(PI!*SR/31)
  339. 13380   IF Y4<=0 THEN X4=X3+(X4-X3)*Y3/(Y3-Y4): Y4=0: GOTO *ENV_PR_3
  340. 13390 *ENV_PR_2
  341. 13400   IF RR=15 THEN X5=X4:  Y5=0:  GOTO *ENV_PR_3
  342. 13410   IF RR=0   THEN X5=400: Y5=Y4: GOTO *ENV_PR_3
  343. 13420   X5=400: Y5=Y4-(X5-X4)*TAN(PI!*RR/15)
  344. 13430   IF Y5<=0 THEN X5=X4+(X5-X4)*Y4/(Y4-Y5): Y5=0
  345. 13440 *ENV_PR_3
  346. 13450   LINE(0,0)-(400,127),PSET,%7,BF
  347. 13460   LINE(X2,0)-(X2,127),PSET,%1,,&H6666
  348. 13470   LINE(X3,0)-(X3,127),PSET,%1,,&H6666
  349. 13480   LINE(300,0)-(300,127),PSET,%1,,&H6666
  350. 13490   CONNECT(X1,Y1)-(X2,Y2)-(X3,Y3)-(X4,Y4)-(X5,Y5)-(X6,Y6),1
  351. 13500   WINDOW(0,0)-(1023,511)
  352. 13510   VIEW  (0,0)-(1023,511)
  353. 13520 RETURN
  354. 13530 '
  355. 13540 *ENV_OP
  356. 13550   S=MX\125: P=(MY-110)\20
  357. 13560   IF 22<=MY AND MY<=39 THEN P=10: GOTO *ENV_MSK
  358. 13570 IF P<0 RETURN
  359. 13580   IF P=9 GOTO *ENV_AM
  360. 13590   BX=19+125*S: BY=110+20*P
  361. 13600   NUM=ENV%(S,P): MIN=ENVMIN%(P): MAX=ENVMAX%(P)
  362. 13610   BC=-1: V=0
  363. 13620   MX=MOUSE(0): MY=MOUSE(1)
  364. 13630   IF BX+28<=MX AND BY<=MY AND MX<=BX+40 AND MY<=BY+14                            THEN BC=0: V=-1: MOUSE 4,BX+28,BY,BX+40,BY+14
  365. 13640   IF BX+89<=MX AND BY<=MY AND MX<=BX+101 AND MY<=BY+14                           THEN BC=0: V= 1: MOUSE 4,BX+89,BY,BX+101,BY+14
  366. 13650   IF BX+41<=MX AND BY<=MY AND MX<=BX+88 AND MY<=BY+14                            THEN BC=0: V= 0:MOUSE 4,BX+42,BY,BX+84,BY+14
  367. 13660   '
  368. 13670   IF BC=-1 RETURN
  369. 13680   MOUSE 1,,,0: T=0
  370. 13690   IF V=0 GOTO *ENV_BAR
  371. 13700 '
  372. 13710   WHILE MOUSE(2,0)=-1 OR MOUSE(2,1)=-1
  373. 13720     IF 0<T AND T<200 GOTO *ENV_OP_1
  374. 13730     IF MOUSE(2,0)=-1 THEN PUSH=1
  375. 13740     IF MOUSE(2,1)=-1 THEN PUSH=10
  376. 13750     I=NUM+V*PUSH
  377. 13760     IF I<MIN THEN I=MIN
  378. 13770     IF MAX<I THEN I=MAX
  379. 13780     IF I<>NUM THEN NUM=I: ENV%(S,P)=NUM: GOSUB *ENV_PR:                                        GOSUB *BAR_PR: GOSUB *AT                                               ELSE MOUSE 1,MOUSE(0),MOUSE(1),1
  380. 13790 *ENV_OP_1
  381. 13800     T=T+1
  382. 13810   WEND
  383. 13820   MOUSE 1,MOUSE(0),MOUSE(1),1
  384. 13830   GOSUB *V_SET
  385. 13840 RETURN
  386. 13850 '
  387. 13860 *ENV_BAR
  388. 13870   IF PUSH=1 THEN NUM=(MOUSE(0)-42-BX)*(MAX-MIN)/42+MIN: ENV%(S,P)=NUM:                       GOSUB *ENV_PR: GOSUB *BAR_PR
  389. 13880   MOUSE 1,BX+42+42*(NUM-MIN)/(MAX-MIN)
  390. 13890   GOSUB *AT
  391. 13900   WHILE MOUSE(2,0)=-1 OR MOUSE(2,1)=-1
  392. 13910     WHILE MOUSE(9)=0 AND(MOUSE(2,0)=-1 OR MOUSE(2,1)=-1): WEND
  393. 13920     NUM=(MOUSE(0)-42-BX)*(MAX-MIN)/42+MIN
  394. 13930     IF NUM<>ENV%(S,P) THEN ENV%(S,P)=NUM: GOSUB *ENV_PR:                                               GOSUB *BAR_PR: GOSUB *AT
  395. 13940   WEND
  396. 13950   MOUSE 1,MOUSE(0),MOUSE(1),1
  397. 13960   GOSUB *V_SET
  398. 13970 RETURN
  399. 13980 '
  400. 13990 *ENV_AM
  401. 14000   IF ENV%(S,P)=0 THEN ENV%(S,P)=1: A$="on" ELSE ENV%(S,P)=0: A$="off"
  402. 14010   LINE(19+125*S,290)-STEP(101,15),PSET,%7,BF
  403. 14020   SYMBOL(19+125*S,290),RIGHT$("  "+STR$(ENV%(S,P)),3),1,1,7
  404. 14030   SYMBOL(60+125*S,290),A$,1,1,0
  405. 14040   GOSUB *AT
  406. 14050   GOSUB *MPLOOP2
  407. 14060   GOSUB *V_SET
  408. 14070 RETURN
  409. 14080 '
  410. 14090 *ENV_MSK
  411. 14100   IF ENV%(S,10)=0 THEN ENV%(S,10)=1: A$="on" :CL=0                                            ELSE ENV%(S,10)=0: A$="off":CL=7
  412. 14110   LINE(98+125*S,24)-STEP(23,15),PSET,%7,BF
  413. 14120   SYMBOL(98+125*S,24),A$,1,1,CL
  414. 14130   GOSUB *AT
  415. 14140   GOSUB *MPLOOP2
  416. 14150   GOSUB *V_SET
  417. 14160 RETURN
  418. 14170 '
  419. 14180 *CMP_INIT
  420. 14190   RESTORE *CMP_INIT
  421. 14200   DATA ALG,0,7
  422. 14210   DATA FB ,0,7
  423. 14220   DATA PMS,0,7
  424. 14230   DATA AMS,0,3
  425. 14240   DATA PAN,0,3
  426. 14250   DIM CMP%(4),CMPMIN%(4),CMPMAX%(4),CMP2%(4)
  427. 14260   FOR I=0 TO 3
  428. 14270     READ A$,CMPMIN%(I),CMPMAX%(I)
  429. 14280     SYMBOL(166,320+20*I),A$,1,1,0
  430. 14290     BX=190: BY=320+20*I: NUM=0: MIN=CMPMIN%(I): MAX=CMPMAX%(I)
  431. 14300     GOSUB *BAR_INIT
  432. 14310   NEXT I
  433. 14320   READ A$,CMPMIN%(4),CMPMAX%(4)
  434. 14330   SYMBOL(166,400),A$,1,1,0
  435. 14340   SYMBOL(198,400),STR$(0),1,1,7
  436. 14350   SYMBOL(225,400),"off",1,1,0
  437. 14360   SYMBOL(265,400),"off",1,1,0
  438. 14370 '
  439. 14380   A$="FMBED Ver1.06"
  440. 14390   DIM A%(511)
  441. 14400   GET@A(0,511)-(1023,511),A%
  442. 14410   P1=PEEK(VARPTR(A$),4): P2=VARPTR(A%(0)): J=1
  443. 14420   FOR I=0 TO LEN(A$)-1
  444. 14430     IF PEEK(P1+I)<>PEEK(P2+I) THEN J=0
  445. 14440     POKE P2+I,PEEK(P1+I)
  446. 14450   NEXT I
  447. 14460   PUT@A(0,511)-(1023,511),A%
  448. 14470   ERASE A%
  449. 14480 IF J GOTO *CMP_INIT_2
  450. 14490 '
  451. 14500   LINE(640,0)-(1023,511),PSET,%7,BF
  452. 14510   CONNECT(770,50)-(660,50)-(660,30)-(687,30)-(687,50),0'------------0
  453. 14520   CONNECT(760,130)-(675,130)-(675,110)-(702,110)-(702,130),0'-------1
  454. 14530   LINE(690,170)-(720,130),PSET,0
  455. 14540   LINE(765,220)-(685,220),PSET,0'-----------------------------------2
  456. 14550   CONNECT(745,220)-(725,260)-(704,260)-(704,243)-(734,243),0
  457. 14560   CONNECT(765,320)-(670,320)-(670,302)-(700,302)-(700,320),0'-------3
  458. 14570   LINE(720,360)-(750,320),PSET,0
  459. 14580   CONNECT(850,70)-(900,70)-(900,30)-(835,30)-(835,10),0'------------4
  460. 14590   CONNECT-(865,10)-(865,30),0
  461. 14600   LINE(900,50)-(920,50),PSET,0
  462. 14610   CONNECT(915,145)-(825,145)-(825,127)-(853,127)-(853,145),0'-------5
  463. 14620   LINE(860,115)-(900,175),PSET,0,B
  464. 14630   CONNECT(858,210)-(858,228)-(832,228)-(832,210)-(900,210),0'-------6
  465. 14640   CONNECT-(900,270)-(875,270),0
  466. 14650   LINE(875,240)-(910,240),PSET,0
  467. 14660   CONNECT(890,305)-(890,289)-(860,289)-(860,305)-(905,305),0'-------7
  468. 14670   CONNECT-(905,371)-(875,371),0
  469. 14680   LINE(875,327)-(905,327),PSET,0
  470. 14690   LINE(875,349)-(905,349),PSET,0
  471. 14700   LINE(905,338)-(920,338),PSET,0
  472. 14710   FOR I=0 TO 7
  473. 14720     FOR J=1 TO 4
  474. 14730       READ X,Y,CL
  475. 14740       IF CL=0 THEN CL1=8:CL2=15 ELSE CL1=15:CL2=0
  476. 14750       LINE(X-6,Y-10)-(X+6,Y+10),PSET,0,BF,%CL1
  477. 14760       SYMBOL(X-12,Y-7),STR$(J),1,1,%CL2,,PSET,1
  478. 14770     NEXT J
  479. 14780   NEXT I
  480. 14790 *CMP_INIT_2
  481. 14800   GOSUB *ALG_PR
  482. 14810   DATA 675, 50,1,    700, 50,1,    725, 50,1,    750, 50,0
  483. 14820   DATA 690,130,1,    690,160,1,    715,130,1,    740,130,0
  484. 14830   DATA 715,260,1,    685,220,1,    715,220,1,    745,220,0
  485. 14840   DATA 685,320,1,    715,320,1,    715,360,1,    745,320,0
  486. 14850   DATA 850, 30,1,    880, 30,0,    850, 70,1,    880, 70,0
  487. 14860   DATA 840,145,1,    880,115,0,    880,145,0,    880,175,0
  488. 14870   DATA 845,210,1,    875,210,0,    875,240,0,    875,270,0
  489. 14880   DATA 875,305,0,    875,327,0,    875,349,0,    875,371,0
  490. 14890 RETURN
  491. 14900 '
  492. 14910 *CMP_OP
  493. 14920   P=(MY-320)\20
  494. 14930   IF P=4 GOTO *CMP_PAN
  495. 14940   BX=190: BY=320+20*P
  496. 14950   NUM=CMP%(P): MIN=CMPMIN%(P): MAX=CMPMAX%(P)
  497. 14960   BC=-1: V=0
  498. 14970   MX=MOUSE(0): MY=MOUSE(1)
  499. 14980   IF BX+28<=MX AND BY<=MY AND MX<=BX+40 AND MY<=BY+14                            THEN BC=0: V=-1: MOUSE 4,BX+28,BY,BX+40,BY+14
  500. 14990   IF BX+89<=MX AND BY<=MY AND MX<=BX+101 AND MY<=BY+14                           THEN BC=0: V= 1: MOUSE 4,BX+89,BY,BX+101,BY+14
  501. 15000   IF BX+41<=MX AND BY<=MY AND MX<=BX+88 AND MY<=BY+14                            THEN BC=0: V= 0:MOUSE 4,BX+42,BY,BX+84,BY+14
  502. 15010   '
  503. 15020   IF BC=-1 RETURN
  504. 15030   MOUSE 1,,,0: T=0
  505. 15040   IF V=0 GOTO *CMP_BAR
  506. 15050 '
  507. 15060   WHILE MOUSE(2,0)=-1 OR MOUSE(2,1)=-1
  508. 15070     IF 0<T AND T<200 GOTO *CMP_OP_1
  509. 15080     IF MOUSE(2,0)=-1 THEN PUSH=1
  510. 15090     IF MOUSE(2,1)=-1 THEN PUSH=10
  511. 15100     I=NUM+V*PUSH
  512. 15110     IF I<MIN THEN I=MIN
  513. 15120     IF MAX<I THEN I=MAX
  514. 15130     IF I<>NUM THEN NUM=I: CMP%(P)=NUM: GOSUB *ALG_PR: GOSUB *BAR_PR:                           GOSUB *AT                                                              ELSE MOUSE 1,MOUSE(0),MOUSE(1),1
  515. 15140 *CMP_OP_1
  516. 15150     T=T+1
  517. 15160   WEND
  518. 15170   MOUSE 1,MOUSE(0),MOUSE(1),1
  519. 15180   GOSUB *V_SET
  520. 15190 RETURN
  521. 15200 '
  522. 15210 *CMP_BAR
  523. 15220   IF PUSH=1 THEN NUM=(MOUSE(0)-42-BX)*(MAX-MIN)/42+MIN: CMP%(P)=NUM:                         GOSUB *ALG_PR: GOSUB *BAR_PR
  524. 15230   MOUSE 1,BX+42+42*(NUM-MIN)/(MAX-MIN)
  525. 15240   GOSUB *AT
  526. 15250   WHILE MOUSE(2,0)=-1 OR MOUSE(2,1)=-1
  527. 15260     WHILE MOUSE(9)=0 AND(MOUSE(2,0)=-1 OR MOUSE(2,1)=-1): WEND
  528. 15270     NUM=(MOUSE(0)-42-BX)*(MAX-MIN)/42+MIN
  529. 15280     IF NUM<>CMP%(P) THEN CMP%(P)=NUM: GOSUB *ALG_PR: GOSUB *BAR_PR:                                  GOSUB *AT
  530. 15290   WEND
  531. 15300   MOUSE 1,MOUSE(0),MOUSE(1),1
  532. 15310   GOSUB *V_SET
  533. 15320 RETURN
  534. 15330 '
  535. 15340 *CMP_PAN
  536. 15350   IF 225<=MX AND 400<=MY AND MX<=248 AND MY<=415                                 THEN CMP%(4)=CMP%(4) XOR 2
  537. 15360   IF 265<=MX AND 400<=MY AND MX<=288 AND MY<=415                                 THEN CMP%(4)=CMP%(4) XOR 1
  538. 15370   LINE(190,400)-(291,415),PSET,%7,BF
  539. 15380   SYMBOL(190,400),RIGHT$("  "+STR$(CMP%(4)),3),1,1,7
  540. 15390   IF CMP%(4) AND 2 THEN A$="on" ELSE A$="off"
  541. 15400   SYMBOL(225,400),A$,1,1,0
  542. 15410   IF CMP%(4) AND 1 THEN A$="on" ELSE A$="off"
  543. 15420   SYMBOL(265,400),A$,1,1,0
  544. 15430   GOSUB *AT
  545. 15440   GOSUB *MPLOOP2
  546. 15450   GOSUB *V_SET
  547. 15460 RETURN
  548. 15470 '
  549. 15480 *ALG_PR
  550. 15490   DIM A%(FNVRAM(152,96))
  551. 15500   X=152*(CMP%(0)\4): Y=96*(CMP%(0) MOD 4)
  552. 15510   GET@A(640+X,Y)-(791+X,95+Y),A%
  553. 15520   PUT@A(8,317)-(159,412),A%
  554. 15530   ERASE A%
  555. 15540 RETURN
  556. 15550 '
  557. 15560 *LFO
  558. 15570   SYMBOL(430,345),"LFO 設定",1,1,2
  559. 15580   WX=LFOWX: WY=LFOWY: WXS=310: WYS=130: WON=9: WF=0
  560. 15590   RESTORE *LFO
  561. 15600   GOSUB *WIN_INIT
  562. 15610   DATA  50, 45, 90, 65'OFF
  563. 15620   DATA  95, 45,135, 65'3.98
  564. 15630   DATA 140, 45,180, 65'5.56
  565. 15640   DATA 185, 45,225, 65'6.02
  566. 15650   DATA 230, 45,270, 65'6.37
  567. 15660   DATA  95, 70,135, 90'6.88
  568. 15670   DATA 140, 70,180, 90'9.63
  569. 15680   DATA 185, 70,225, 90'48.1
  570. 15690   DATA 230, 70,270, 90'72.2
  571. 15700   SYMBOL(WX+20,WY+20),"LFO 設定",1,1,0
  572. 15710   GOSUB *LFO_PR
  573. 15720   GOSUB *MPLOOP2
  574. 15730 WHILE MOUSE(2,1)=0
  575. 15740   GOSUB *WIN
  576. 15750   MOUSE 4,0,0,639,479
  577. 15760   IF 1<=WC AND WC<=9 THEN LFO=WC-1: GOSUB *LFO_PR: GOSUB *MPLOOP2
  578. 15770 WEND
  579. 15780   LFOWX=WX: LFOWY=WY
  580. 15790   GOSUB *WIN_END
  581. 15800   SYMBOL(430,345),"LFO 設定",1,1,0
  582. 15810   GOSUB *MPLOOP2
  583. 15820 RETURN
  584. 15830 '
  585. 15840 *LFO_PR
  586. 15850 'CALLM FREQCTL,LFO
  587. 15860   SYMBOL(WX+ 58,WY+48),"OFF", 1,1,-2*(LFO=0)
  588. 15870   SYMBOL(WX+ 99,WY+48),"3.98",1,1,-2*(LFO=1)
  589. 15880   SYMBOL(WX+144,WY+48),"5.56",1,1,-2*(LFO=2)
  590. 15890   SYMBOL(WX+189,WY+48),"6.02",1,1,-2*(LFO=3)
  591. 15900   SYMBOL(WX+234,WY+48),"6.37",1,1,-2*(LFO=4)
  592. 15910   SYMBOL(WX+ 99,WY+73),"6.88",1,1,-2*(LFO=5)
  593. 15920   SYMBOL(WX+144,WY+73),"9.63",1,1,-2*(LFO=6)
  594. 15930   SYMBOL(WX+189,WY+73),"48.1",1,1,-2*(LFO=7)
  595. 15940   SYMBOL(WX+234,WY+73),"72.2",1,1,-2*(LFO=8)
  596. 15950 RETURN
  597. 15960 '
  598. 15970 *VOL_INIT
  599. 15980   BX=310: BY=342: NUM=VOL: MIN=0: MAX=127
  600. 15990   GOSUB *BAR_INIT
  601. 16000 RETURN
  602. 16010 '
  603. 16020 *VOL_OP
  604. 16030   BX=310: BY=342: NUM=VOL: MIN=0: MAX=127: BC=-1: V=0
  605. 16040   MX=MOUSE(0): MY=MOUSE(1)
  606. 16050   IF BX+28<=MX AND BY<=MY AND MX<=BX+40 AND MY<=BY+14                            THEN BC=0: V=-1: MOUSE 4,BX+28,BY,BX+40,BY+14
  607. 16060   IF BX+89<=MX AND BY<=MY AND MX<=BX+101 AND MY<=BY+14                           THEN BC=0: V= 1: MOUSE 4,BX+89,BY,BX+101,BY+14
  608. 16070   IF BX+41<=MX AND BY<=MY AND MX<=BX+88 AND MY<=BY+14                            THEN BC=0: V= 0:MOUSE 4,BX+42,BY,BX+84,BY+14
  609. 16080   '
  610. 16090   IF BC=-1 RETURN
  611. 16100   MOUSE 1,,,0: T=0
  612. 16110   IF V=0 GOTO *VOL_BAR
  613. 16120 '
  614. 16130   WHILE MOUSE(2,0)=-1 OR MOUSE(2,1)=-1
  615. 16140     IF 0<T AND T<200 GOTO *VOL_OP_1
  616. 16150     IF MOUSE(2,0)=-1 THEN PUSH=1
  617. 16160     IF MOUSE(2,1)=-1 THEN PUSH=10
  618. 16170     I=NUM+V*PUSH
  619. 16180     IF I<MIN THEN I=MIN
  620. 16190     IF MAX<I THEN I=MAX
  621. 16200     IF I<>NUM THEN NUM=I: VOL=NUM: GOSUB *BAR_PR ELSE MOUSE 1,,,1
  622. 16210 *VOL_OP_1
  623. 16220     T=T+1
  624. 16230   WEND
  625. 16240   MOUSE 1,,,1
  626. 16250 RETURN
  627. 16260 '
  628. 16270 *VOL_BAR
  629. 16280   IF PUSH=1 THEN NUM=(MOUSE(0)-42-BX)*(MAX-MIN)/42+MIN: VOL=NUM:                             GOSUB *BAR_PR
  630. 16290   MOUSE 1,BX+42+42*(NUM-MIN)/(MAX-MIN)
  631. 16300   WHILE MOUSE(2,0)=-1 OR MOUSE(2,1)=-1
  632. 16310     WHILE MOUSE(9)=0 AND(MOUSE(2,0)=-1 OR MOUSE(2,1)=-1): WEND
  633. 16320     NUM=(MOUSE(0)-42-BX)*(MAX-MIN)/42+MIN
  634. 16330     IF NUM<>VOL THEN VOL=NUM: GOSUB *BAR_PR
  635. 16340   WEND
  636. 16350   MOUSE 1,,,1
  637. 16360 RETURN
  638. 16370 '
  639. 16380 *V_SET
  640. 16390   FOR I=0 TO 10
  641. 16400     ENV2%(0,I)=ENV%(0,I): ENV2%(1,I)=ENV%(2,I)
  642. 16410     ENV2%(2,I)=ENV%(1,I): ENV2%(3,I)=ENV%(3,I)
  643. 16420   NEXT I
  644. 16430   FOR I=0 TO 4
  645. 16440     CMP2%(I)=CMP%(I)
  646. 16450   NEXT I
  647. 16460   P1=VARPTR(V%(0))
  648. 16470   FOR I=0 TO 3
  649. 16480     IF ENV2%(I,8)<0 THEN J=4+ABS(ENV2%(I,8)) ELSE J=ENV2%(I,8)
  650. 16490     POKE P1+ 8+I,16*J+ENV2%(I,7)'                            DT  ML
  651. 16500     IF MSKF=1 AND ENV2%(I,10)=0 THEN POKE P1+12+I,127                                                       ELSE POKE P1+12+I,ENV2%(I,5)'TL
  652. 16510     POKE P1+16+I,64*ENV2%(I,6)+ENV2%(I,0)'                   KS  AR
  653. 16520     POKE P1+20+I,128*ENV2%(I,9)+ENV2%(I,1)'                  AM  DR
  654. 16530     POKE P1+24+I,ENV2%(I,2)'                                 SR
  655. 16540     POKE P1+28+I,16*ENV2%(I,4)+ENV2%(I,3)'                   SL  RR
  656. 16550   NEXT I
  657. 16560   POKE P1+32,8*CMP2%(1)+CMP2%(0)'                            FB  ALG
  658. 16570   POKE P1+33,64*CMP2%(4)+16*CMP2%(3)+CMP2%(2)'           PAN AMS PMS
  659. 16580   VOICE 128,V%,0
  660. 16590 RETURN
  661. 16600 '
  662. 16610 *PLAYOFF
  663. 16620   SYMBOL(430,375),"PLAY",1,1,2
  664. 16630   SYMBOL(437,397),"OFF",1,1,2
  665. 16640   MOUSE 4,420,367,500,419
  666. 16650   GOSUB *PLAYOFF_EXE
  667. 16660   GOSUB *MPLOOP2
  668. 16670   SYMBOL(430,375),"PLAY",1,1,0
  669. 16680   SYMBOL(437,397),"OFF",1,1,0
  670. 16690 RETURN
  671. 16700 '
  672. 16710 *PLAYOFF_EXE
  673. 16720   PLAY OFF
  674. 16730   VOICE 128,CLR%,0
  675. 16740   A$="@V0 @128"
  676. 16750   PLAY A$,A$,A$,A$,A$,A$
  677. 16760   VOICE 128,V%,0
  678. 16770 RETURN
  679. 16780 '
  680. 16790 *EXIT
  681. 16800   SYMBOL(430,316),"EXIT",1,1,2
  682. 16810   WX=EXITWX: WY=EXITWY: WXS=190: WYS=95: WF=0: WON=2
  683. 16820   RESTORE *EXIT
  684. 16830   GOSUB *WIN_INIT
  685. 16840   DATA  78, 68,128, 88'実行
  686. 16850   DATA 133, 68,183, 88'取消
  687. 16860   SYMBOL(WX+50,WY+30),"終了します",1,1,0
  688. 16870   SYMBOL(WX+87,WY+70),"実行",1,1,0
  689. 16880   SYMBOL(WX+142,WY+70),"取消",1,1,0
  690. 16890   GOSUB *MPLOOP2
  691. 16900 *EXIT_LOOP
  692. 16910   GOSUB *WIN
  693. 16920   EXITWX=WX: EXITWY=WY: MOUSE 4,0,0,639,479
  694. 16930   IF WC=1 THEN GOSUB *EXIT_EXE
  695. 16940   IF WC=2 OR MOUSE(2,1)=-1 THEN GOTO *EXIT_RET
  696. 16950 GOTO *EXIT_LOOP
  697. 16960 *EXIT_RET
  698. 16970   GOSUB *WIN_END
  699. 16980   SYMBOL(430,316),"EXIT",1,1,0
  700. 16990   GOSUB *MPLOOP2
  701. 17000 RETURN
  702. 17010 '
  703. 17020 *EXIT_EXE
  704. 17030   CLOSE
  705. 17040   GOSUB *PLAYOFF_EXE
  706. 17050   GOSUB *WIN_END
  707. 17060   FOR I=0 TO 44 STEP 4
  708. 17070     POKE VARPTR(V%(0))+I,PEEK(VARPTR(ALLV%(0,127,0))+I,4),4
  709. 17080   NEXT I
  710. 17090   VOICE 128,V%,0
  711. 17100 END
  712. 17110 '
  713. 17120 *PLAY_INIT
  714. 17130   PN=0
  715. 17140   FOR I=0 TO 4
  716. 17150     X1=305+I*22:Y1=394: X2=X1+21:Y2=Y1+22:GOSUB *BOX_PR
  717. 17160     IF I=PN THEN CL=7 ELSE CL=0
  718. 17170     SYMBOL(303+I*22,398),STR$(I),1,1,CL,,,1
  719. 17180   NEXT I
  720. 17190   IF AT THEN CL=7 ELSE CL=0
  721. 17200   SYMBOL(381,373),"AUTO",1,1,CL
  722. 17210   FOR J=0 TO 4
  723. 17220     A$=P1$(J)
  724. 17230     FOR I=0 TO 5
  725. 17240       K=INSTR(A$,",")
  726. 17250       IF K=0 THEN P2$(J,I)=A$: A$=""                                                     ELSE P2$(J,I)=LEFT$(A$,K-1): A$=MID$(A$,K+1)
  727. 17260     NEXT I
  728. 17270   NEXT J
  729. 17280   'SYMBOL(309,373),"MML",1,1,0,,,1,1
  730. 17290 RETURN
  731. 17300 '
  732. 17310 *PLAY
  733. 17320   SYMBOL(303+PN*22,398),STR$(PN),1,1,0,,,1
  734. 17330   PN=(MOUSE(0)-305)\22
  735. 17340   SYMBOL(303+PN*22,398),STR$(PN),1,1,2,,,1
  736. 17350   GOSUB *PLAYOFF_EXE
  737. 17360   A$="T120 %C @128 Q8 L4 O4 U0 @V"+STR$(VOL)
  738. 17370   PLAY OFF
  739. 17380   PLAY A$,A$,A$,A$,A$,A$
  740. 17390   PLAY P2$(PN,0),P2$(PN,1),P2$(PN,2),P2$(PN,3),P2$(PN,4),P2$(PN,5)
  741. 17400   GOSUB *MPLOOP2
  742. 17410   SYMBOL(303+PN*22,398),STR$(PN),1,1,7,,,1
  743. 17420 RETURN
  744. 17430 '
  745. 17440 *PLAY_SET
  746. 17450   RESTORE *PLAY_SET
  747. 17460   SYMBOL(347,373),"SET",1,1,2
  748. 17470   GOSUB *MPLOOP2
  749. 17480   GOSUB *MPLOOP1
  750. 17490   IF MX<305 OR MY<394 OR 414<MX OR 416<MY OR PUSH=2 GOTO*PLAY_SET_RET
  751. 17500   SYMBOL(303+PN*22,398),STR$(PN),1,1,0,,,1
  752. 17510   PN=(MX-305)\22
  753. 17520   SYMBOL(303+PN*22,398),STR$(PN),1,1,2,,,1
  754. 17530   WX=PLAYWX: WY=PLAYWY: WXS=430: WYS=120: WF=0: WON=1
  755. 17540   GOSUB *WIN_INIT
  756. 17550   DATA  80,50,410,70
  757. 17560   SYMBOL(WX+20,WY+20),"MMLのSET",1,1,0
  758. 17570   SYMBOL(WX+30,WY+53),"MML"+STR$(PN),1,1,0,,,1,1
  759. 17580   IX=WX+85: IY=WY+53: IM=40: IMM=240: IA$=P1$(PN): ICL=0
  760. 17590   GOSUB *INP_INIT
  761. 17600   GOSUB *MPLOOP2
  762. 17610   WHILE IC<>&H0D AND MOUSE(2,1)=0 AND IC<>&H18
  763. 17620     GOSUB *WIN
  764. 17630     PLAYWX=WX: PLAYWY=WY: IX=WX+85: IY=WY+53
  765. 17640     IF WC=1 THEN MOUSE 4,IX,IY,IX+IM*8,IY+15 ELSE MOUSE 4,0,0,639,479
  766. 17650     GOSUB *INP
  767. 17660   WEND
  768. 17670   P1$(PN)=IA$: A$=IA$
  769. 17680   GOSUB *INP_END
  770. 17690   FOR I=0 TO 5
  771. 17700     J=INSTR(A$,",")
  772. 17710     IF J=0 THEN P2$(PN,I)=A$: A$=""                                                    ELSE P2$(PN,I)=LEFT$(A$,J-1): A$=MID$(A$,J+1)
  773. 17720   NEXT I
  774. 17730   GOSUB *WIN_END
  775. 17740   SYMBOL(303+PN*22,398),STR$(PN),1,1,7,,,1
  776. 17750 *PLAY_SET_RET
  777. 17760   SYMBOL(347,373),"SET",1,1,0
  778. 17770   GOSUB *MPLOOP2
  779. 17780 RETURN
  780. 17790 '
  781. 17800 *AT
  782. 17810   IF AT=0 RETURN
  783. 17820   GOSUB *PLAYOFF_EXE
  784. 17830   GOSUB *V_SET
  785. 17840   A$="T120 %C @128 Q8 L4 O4 U0 @V"+STR$(VOL)
  786. 17850   PLAY A$,A$,A$,A$,A$,A$
  787. 17860   PLAY P2$(PN,0),P2$(PN,1),P2$(PN,2),P2$(PN,3),P2$(PN,4),P2$(PN,5)
  788. 17870 RETURN
  789. 17880 '
  790. 17890 *AT_OP
  791. 17900   IF AT=0 THEN AT=1: CL=7: ELSE AT=0: CL=0
  792. 17910   SYMBOL(381,373),"AUTO",1,1,CL
  793. 17920   GOSUB *MPLOOP2
  794. 17930 RETURN
  795. 17940 '
  796. 17950 *V_INIT
  797. 17960   CONNECT(511,86)-(525,79)-(525,93),0,,F
  798. 17970   CONNECT(615,79)-(629,86)-(615,93),0,,F
  799. 17980   DIM ALLV%(23,127,9),VN(9),VNS(9),BNK$(9),A%(23)
  800. 17990   P1=VARPTR(A%(0)): P2=VARPTR(ALLV%(0,0,0))
  801. 18000   FOR I=0 TO 127
  802. 18010     VOICE COPY I+1,A%,0
  803. 18020     CALLM MTRNSM,P1,P2+48*I,48
  804. 18030   NEXT I
  805. 18040   ERASE A%
  806. 18050   FOR I=0 TO 9: VN(I)=-1: VNS(I)=0: BNK$(I)="": NEXT I
  807. 18060   GOSUB *V_BTN1_PR
  808. 18070   GOSUB *V_PR
  809. 18080 RETURN
  810. 18090 '
  811. 18100 *V_PR
  812. 18110   Q=VARPTR(Q$)
  813. 18120   POKE Q+4,8
  814. 18130   FOR I=0 TO 12
  815. 18140     IF I+VNS(BNK)=VN(BNK) THEN CL=2 ELSE CL=7
  816. 18150     POKE Q,VARPTR(ALLV%(0,I+VNS(BNK),BNK)),4
  817. 18160     LINE(512,127+I*16)-STEP(96,15),PSET,%7,BF
  818. 18170     SYMBOL(512,127+I*16),RIGHT$("  "+STR$(VNS(BNK)+I+1),3)+" "+Q$,                                   1,1,CL
  819. 18180   NEXT I
  820. 18190 RETURN
  821. 18200 '
  822. 18210 *V_SCRN
  823. 18220   VC=-1
  824. 18230   IF 509<=MX AND  77<=MY AND MX<=527 AND MY<= 95 GOSUB *V_LEFT
  825. 18240   IF 613<=MX AND  77<=MY AND MX<=631 AND MY<= 95 GOSUB *V_RIGHT
  826. 18250   IF 528<=MX AND  77<=MY AND MX<=612 AND MY<= 95 GOSUB *V_BAR1
  827. 18260   IF 614<=MX AND 125<=MY AND MX<=631 AND MY<=143 GOSUB *V_UP
  828. 18270   IF 614<=MX AND 319<=MY AND MX<=631 AND MY<=337 GOSUB *V_DOWN
  829. 18280   IF 614<=MX AND 144<=MY AND MX<=631 AND MY<=318 GOSUB *V_BAR2
  830. 18290   IF 509<=MX AND 125<=MY AND MX<=610 AND MY<=337 GOSUB *V_SLCT
  831. 18300   MOUSE 4,0,0,639,479
  832. 18310 RETURN
  833. 18320 '
  834. 18330 *V_LEFT
  835. 18340   MOUSE 4,509,77,527,95: MOUSE 1,,,0
  836. 18350   WHILE MOUSE(2,0)=-1
  837. 18360     I=BNK-1
  838. 18370     IF I<0 THEN I=0: MOUSE 1,MOUSE(0),MOUSE(1),1                                       ELSE BNK=I: GOSUB *V_BTN1_PR: GOSUB *V_PR
  839. 18380   WEND
  840. 18390   MOUSE 1,MOUSE(0),MOUSE(1),1
  841. 18400 RETURN
  842. 18410 '
  843. 18420 *V_RIGHT
  844. 18430   MOUSE 4,613,77,631,95: MOUSE 1,,,0
  845. 18440   WHILE MOUSE(2,0)=-1
  846. 18450     I=BNK+1
  847. 18460     IF 9<I THEN I=9: MOUSE 1,MOUSE(0),MOUSE(1),1                                       ELSE BNK=I: GOSUB *V_BTN1_PR: GOSUB *V_PR
  848. 18470   WEND
  849. 18480   MOUSE 1,MOUSE(0),MOUSE(1),1
  850. 18490 RETURN
  851. 18500 '
  852. 18510 *V_BAR1
  853. 18520   MOUSE 4,537,77,604,95: MOUSE 1,,,0
  854. 18530   WHILE MOUSE(2,0)=-1
  855. 18540     I=(MOUSE(0)-537)/67*9
  856. 18550     IF I<>BNK THEN BNK=I: GOSUB *V_BTN1_PR: GOSUB *V_PR 
  857. 18560   WEND
  858. 18570   MOUSE 1,MOUSE(0),MOUSE(1),1
  859. 18580 RETURN
  860. 18590 '
  861. 18600 *V_UP
  862. 18610   MOUSE 4,614,125,631,143: MOUSE 1,,,0
  863. 18620   DIM A%(FNVRAM(96,208))
  864. 18630   WHILE MOUSE(2,0)=-1
  865. 18640     IF VNS(BNK)<=0 GOTO *V_UP_1
  866. 18650     VNS(BNK)=VNS(BNK)-1
  867. 18660     GOSUB *V_BTN2_PR
  868. 18670     GET@A(512,127)-(608,318),A%
  869. 18680     PUT@A(512,143)-(608,334),A%
  870. 18690     Q=VARPTR(Q$)
  871. 18700     POKE Q+4,8
  872. 18710     POKE Q,VARPTR(ALLV%(0,VNS(BNK),BNK)),4
  873. 18720     IF VNS(BNK)=VN(BNK) THEN CL=2 ELSE CL=7
  874. 18730     LINE(512,127)-STEP(96,15),PSET,%7,BF
  875. 18740     SYMBOL(512,127),RIGHT$("  "+STR$(VNS(BNK)+1),3)+" "+Q$,1,1,CL
  876. 18750 *V_UP_1
  877. 18760   WEND
  878. 18770   ERASE A%
  879. 18780   MOUSE 1,MOUSE(0),MOUSE(1),1
  880. 18790 RETURN
  881. 18800 '
  882. 18810 *V_DOWN
  883. 18820   MOUSE 4,614,319,631,337: MOUSE 1,,,0
  884. 18830   DIM A%(FNVRAM(96,208))
  885. 18840   WHILE MOUSE(2,0)=-1
  886. 18850     IF 115<=VNS(BNK) GOTO *V_DOWN_1
  887. 18860     VNS(BNK)=VNS(BNK)+1
  888. 18870     GOSUB *V_BTN2_PR
  889. 18880     GET@A(512,143)-(608,334),A%
  890. 18890     PUT@A(512,127)-(608,318),A%
  891. 18900     Q=VARPTR(Q$)
  892. 18910     POKE Q+4,8
  893. 18920     POKE Q,VARPTR(ALLV%(0,VNS(BNK)+12,BNK)),4
  894. 18930     IF VNS(BNK)+12=VN(BNK) THEN CL=2 ELSE CL=7
  895. 18940     LINE(512,319)-STEP(96,15),PSET,%7,BF
  896. 18950     SYMBOL(512,319),RIGHT$("  "+STR$(VNS(BNK)+13),3)+" "+Q$,1,1,CL
  897. 18960 *V_DOWN_1
  898. 18970   WEND
  899. 18980   ERASE A%
  900. 18990   MOUSE 1,MOUSE(0),MOUSE(1),1
  901. 19000 RETURN
  902. 19010 '
  903. 19020 *V_BAR2
  904. 19030   MOUSE 4,614,153,631,310: MOUSE 1,,,0
  905. 19040   WHILE MOUSE(2,0)=-1
  906. 19050     I=(MOUSE(1)-153)/157*115
  907. 19060     IF I<>VNS(BNK) THEN VNS(BNK)=I: GOSUB *V_BTN2_PR: GOSUB *V_PR
  908. 19070   WEND
  909. 19080   MOUSE 1,MOUSE(0),MOUSE(1),1
  910. 19090 RETURN
  911. 19100 '
  912. 19110 *V_BTN1_PR
  913. 19120   LINE(512,101)-STEP(96,15),PSET,%7,BF
  914. 19130   SYMBOL(512,101),RIGHT$("  "+STR$(BNK),3)+" "+BNK$(BNK),1,1,7
  915. 19140   X1=537+BNK*66/9-9: Y1=77: X2=X1+18: Y2=95
  916. 19150   LINE(528,77)-(612,95),PSET,%7,BF
  917. 19160   GOSUB *BOX_PR
  918. 19170 *V_BTN2_PR
  919. 19180   X1=614: Y1=153+157*VNS(BNK)/115-9: X2=631: Y2=Y1+17
  920. 19190   LINE(614,144)-(631,318),PSET,%7,BF
  921. 19200   GOSUB *BOX_PR
  922. 19210 RETURN
  923. 19220 '
  924. 19230 *V_SLCT
  925. 19240   MOUSE 4,512,127,608,334
  926. 19250   MS=4: GOSUB *MOUSE_SET
  927. 19260   I=(MOUSE(1)-127)\16
  928. 19270   GOSUB *V_SLCT_PR
  929. 19280 *V_SLCT_LOOP
  930. 19290   J=(MOUSE(1)-127)\16
  931. 19300   IF I<>J GOSUB *V_SLCT_PR: I=J: GOSUB *V_SLCT_PR
  932. 19310   IF MOUSE(2,1)=-1 THEN GOSUB *V_SLCT_PR:GOSUB *MPLOOP2:GOTO *V_SLCT2
  933. 19320 IF MOUSE(2,0)=-1 GOTO *V_SLCT_LOOP
  934. 19330   VC=VNS(BNK)+I
  935. 19340   GOSUB *V_SLCT_PR
  936. 19350 *V_SLCT2
  937. 19360   MS=MS_INIT: GOSUB *MOUSE_SET
  938. 19370 RETURN
  939. 19380 '
  940. 19390 *V_SLCT_PR
  941. 19400   LINE(511,126+I*16)-STEP(97,16),XOR,%11,BF,%3
  942. 19410 RETURN
  943. 19420 '
  944. 19430 *ENV_SET
  945. 19440   P=VARPTR(ALLV%(0,VC,BNK))
  946. 19450   FOR I=0 TO 3
  947. 19460     J=PEEK(P+8+I)
  948. 19470     IF J AND 64 THEN ENV2%(I,8)=-((J AND 48) \ 16)                                          ELSE ENV2%(I,8)=(J AND 48)\16'               DT
  949. 19480     ENV2%(I,7)=J AND 15'                                     ML
  950. 19490     ENV2%(I,5)=PEEK(P+12+I) AND 127'                         TL
  951. 19500     ENV2%(I,6)=PEEK(P+16+I) \ 64'                            KS
  952. 19510     ENV2%(I,0)=PEEK(P+16+I) AND 31'                          AR
  953. 19520     ENV2%(I,9)=PEEK(P+20+I) \ 128'                           AM
  954. 19530     ENV2%(I,1)=PEEK(P+20+I) AND 31'                          DR
  955. 19540     ENV2%(I,2)=PEEK(P+24+I) AND 31'                          SR
  956. 19550     ENV2%(I,4)=PEEK(P+28+I) \ 16'                            SL
  957. 19560     ENV2%(I,3)=PEEK(P+28+I) AND 15'                          RR
  958. 19570   NEXT I
  959. 19580   CMP2%(1)=(PEEK(P+32) AND 56)\ 8'                           FB
  960. 19590   CMP2%(0)=PEEK(P+32) AND 7'                                 ALG
  961. 19600   CMP2%(4)=PEEK(P+33) \ 64'                                  PAN
  962. 19610   CMP2%(3)=(PEEK(P+33) AND 48)\ 16'                          AMS
  963. 19620   CMP2%(2)=PEEK(P+33) AND 7'                                 PMS
  964. 19630   FOR I=0 TO 9: SWAP ENV2%(1,I),ENV2%(2,I): NEXT I
  965. 19640 RETURN
  966. 19650 '
  967. 19660 *V_READ
  968. 19670   SYMBOL(510,370),"読み込み",1,1,2
  969. 19680 *V_READ_LOOP
  970. 19690   GOSUB *MPLOOP2
  971. 19700   GOSUB *MPLOOP1
  972. 19710   IF MX<509 OR MY<77 OR 631<MX OR 337<MY OR PUSH=2 GOTO *V_READ_RET
  973. 19720   GOSUB *V_SCRN
  974. 19730 IF VC=-1 GOTO *V_READ_LOOP
  975. 19740   MOUSE 1,,,0
  976. 19750   VN(BNK)=VC
  977. 19760   GOSUB *V_PR
  978. 19770   VNAME$="": P=VARPTR(ALLV%(0,VN(BNK),BNK))
  979. 19780   FOR I=0 TO 7
  980. 19790     J=PEEK(P+I): IF J=0 THEN I=7 ELSE VNAME$=VNAME$+CHR$(J)
  981. 19800   NEXT I
  982. 19810   LINE(544,342)-STEP(63,15),PSET,%7,BF
  983. 19820   SYMBOL(544,342),VNAME$,1,1,7
  984. 19830   GOSUB *ENV_SET
  985. 19840   FOR S=0 TO 3
  986. 19850     FOR I=0 TO 9: ENV%(S,I)=ENV2%(S,I): NEXT I
  987. 19860     GOSUB *ENV_PR
  988. 19870     FOR I=0 TO 8
  989. 19880       BX=19+125*S: BY=110+20*I
  990. 19890       NUM=ENV%(S,I): MIN=ENVMIN%(I): MAX=ENVMAX%(I)
  991. 19900       GOSUB *BAR_PR
  992. 19910     NEXT I
  993. 19920     IF ENV%(S,9)=1 THEN A$="on" ELSE A$="off"
  994. 19930     LINE(19+125*S,290)-STEP(101,15),PSET,%7,BF
  995. 19940     SYMBOL(19+125*S,290),RIGHT$("  "+STR$(ENV%(S,9)),3),1,1,7
  996. 19950     SYMBOL(60+125*S,290),A$,1,1,0
  997. 19960   NEXT S
  998. 19970   MOUSE 1,MOUSE(0),MOUSE(1),1
  999. 19980   FOR I=0 TO 4: CMP%(I)=CMP2%(I): NEXT I
  1000. 19990   GOSUB *ALG_PR
  1001. 20000   FOR I=0 TO 3
  1002. 20010     BX=190: BY=320+20*I: NUM=CMP%(I): MIN=CMPMIN%(I): MAX=CMPMAX%(I)
  1003. 20020     GOSUB *BAR_PR
  1004. 20030   NEXT I
  1005. 20040   LINE(190,400)-(291,415),PSET,%7,BF
  1006. 20050   SYMBOL(190,400),RIGHT$("  "+STR$(CMP%(4)),3),1,1,7
  1007. 20060   IF CMP%(4) AND 2 THEN A$="on" ELSE A$="off"
  1008. 20070   SYMBOL(225,400),A$,1,1,0
  1009. 20080   IF CMP%(4) AND 1 THEN A$="on" ELSE A$="off"
  1010. 20090   SYMBOL(265,400),A$,1,1,0
  1011. 20100   GOSUB *V_SET
  1012. 20110   GOSUB *AT
  1013. 20120 *V_READ_RET
  1014. 20130   SYMBOL(510,370),"読み込み",1,1,0
  1015. 20140 RETURN
  1016. 20150 '
  1017. 20160 *V_CNT
  1018. 20170   SYMBOL(580,370),"試聴",1,1,2
  1019. 20180 *V_CNT_LOOP
  1020. 20190   GOSUB *MPLOOP2
  1021. 20200   GOSUB *MPLOOP1
  1022. 20210   IF MX<509 OR MY<77 OR 631<MX OR 337<MY OR PUSH=2 GOTO *V_CNT_RET
  1023. 20220   GOSUB *V_SCRN
  1024. 20230 IF VC=-1 GOTO *V_CNT_LOOP
  1025. 20240   DIM A%(23)
  1026. 20250   P1=VARPTR(ALLV%(0,VC,BNK)): P2=VARPTR(A%(0))
  1027. 20260   CALLM MTRNSM,P1,P2,48
  1028. 20270   GOSUB *PLAYOFF_EXE
  1029. 20280   VOICE 128,A%,0
  1030. 20290   ERASE A%
  1031. 20300   A$="T120 %C @128 Q8 L4 O4 U0 @V"+STR$(VOL)
  1032. 20310   PLAY A$,A$,A$,A$,A$,A$
  1033. 20320   PLAY P2$(PN,0),P2$(PN,1),P2$(PN,2),P2$(PN,3),P2$(PN,4),P2$(PN,5)
  1034. 20330   GOSUB *MPLOOP2
  1035. 20340   GOTO *V_CNT_LOOP
  1036. 20350 *V_CNT_RET
  1037. 20360   SYMBOL(580,370),"試聴",1,1,0
  1038. 20370 RETURN
  1039. 20380 '
  1040. 20390 *V_SAVE
  1041. 20400   SYMBOL(510,395),"保存",1,1,2
  1042. 20410 *V_SAVE_LOOP
  1043. 20420   GOSUB *MPLOOP2
  1044. 20430   GOSUB *MPLOOP1
  1045. 20440   IF MX<509 OR MY<77 OR 631<MX OR 337<MY OR PUSH=2 GOTO *V_SAVE_RET
  1046. 20450   GOSUB *V_SCRN
  1047. 20460 IF VC=-1 GOTO *V_SAVE_LOOP
  1048. 20470   VN(BNK)=VC
  1049. 20480   MSKF=0: GOSUB *V_SET
  1050. 20490   P1=VARPTR(V%(0)): P2=VARPTR(ALLV%(0,VN(BNK),BNK))
  1051. 20500   FOR I=0 TO 7
  1052. 20510     A$=MID$(VNAME$,I+1,1)
  1053. 20520     IF A$="" THEN POKE P1+I,0 ELSE POKE P1+I,ASC(A$)
  1054. 20530   NEXT I
  1055. 20540   FOR I=0 TO 44 STEP 4
  1056. 20550     POKE P2+I,PEEK(P1+I,4),4
  1057. 20560   NEXT I
  1058. 20570   GOSUB *V_PR
  1059. 20580   IF BNK=0 THEN VOICE VC+1,V%,0
  1060. 20590   MSKF=1: GOSUB *V_SET
  1061. 20600 *V_SAVE_RET
  1062. 20610   SYMBOL(510,395),"保存",1,1,0
  1063. 20620 RETURN
  1064. 20630 '
  1065. 20640 *V_CLR
  1066. 20650   SYMBOL(580,395),"初期化",1,1,2
  1067. 20660 *V_CLR_LOOP
  1068. 20670   GOSUB *MPLOOP2
  1069. 20680   GOSUB *MPLOOP1
  1070. 20690   IF MX<509 OR MY<77 OR 631<MX OR 337<MY OR PUSH=2 GOTO *V_CLR_RET
  1071. 20700   GOSUB *V_SCRN
  1072. 20710 IF VC=-1 GOTO *V_CLR_LOOP
  1073. 20720   P=VARPTR(ALLV%(0,VC,BNK))
  1074. 20730   FOR I=0 TO 47
  1075. 20740     POKE P+I,0
  1076. 20750   NEXT I
  1077. 20760   GOSUB *V_PR
  1078. 20770   IF BNK<>0 GOTO *V_CLR_RET
  1079. 20780   DIM A%(23)
  1080. 20790   FOR I=0 TO 23: A%(I)=0: NEXT I
  1081. 20800   VOICE VC+1,A%,0
  1082. 20810   ERASE A%
  1083. 20820 *V_CLR_RET
  1084. 20830   SYMBOL(580,395),"初期化",1,1,0
  1085. 20840 RETURN
  1086. 20850 '
  1087. 20860 *VNAME
  1088. 20870   LINE(544,342)-STEP(63,15),PSET,%7,BF
  1089. 20880   IX=544: IY=342: IA$=VNAME$: IM=8: IMM=8: ICL=15
  1090. 20890   GOSUB *INP_INIT
  1091. 20900 *VNAME_LOOP
  1092. 20910   IF MOUSE(2,1) OR IC=&H0D OR IC=&H18 GOTO *VNAME_RET
  1093. 20920   MX=MOUSE(0): MY=MOUSE(1)
  1094. 20930   IF MOUSE(2,0) THEN IF 544<=MX AND 342<=MY AND MX<=607 AND MY<=357                                 THEN MOUSE 4,544,342,607,357                                                ELSE GOTO *VNAME_RET ELSE MOUSE 4,0,0,639,479
  1095. 20940   GOSUB *INP
  1096. 20950   GOTO *VNAME_LOOP
  1097. 20960 *VNAME_RET
  1098. 20970   VNAME$=IA$
  1099. 20980   GOSUB *INP_END
  1100. 20990 RETURN
  1101. 21000 '
  1102. 21010 *LOAD
  1103. 21020   SYMBOL(540, 32),"LOAD",1,1,2
  1104. 21030   WX=LOADWX: WY=LOADWY: WXS=335: WYS=125: WF=0: WON=4
  1105. 21040   RESTORE *LOAD
  1106. 21050   GOSUB*WIN_INIT
  1107. 21060   DATA 130, 45,310, 65'文字入力
  1108. 21070   DATA 200, 85,250,105'実行
  1109. 21080   DATA 260, 85,310,105'取消
  1110. 21090   DATA 260, 13,310, 33'FILES
  1111. 21100   SYMBOL(WX+15,WY+15),"音色ファイルのLOAD",1,1,0
  1112. 21110   SYMBOL(WX+266,WY+16),"FILES",1,1,0
  1113. 21120   SYMBOL(WX+35,WY+47),"ファイル名",1,1,0
  1114. 21130   SYMBOL(WX+209,WY+87),"実行",1,1,0
  1115. 21140   SYMBOL(WX+269,WY+87),"取消",1,1,0
  1116. 21150 *LOAD_2
  1117. 21160   IX=WX+135: IY=WY+48: IM=21: IMM=84: IA$=FILE$: ICL=0
  1118. 21170   LINE(IX,IY)-STEP(IM*8,15),PSET,7,BF
  1119. 21180   GOSUB *INP_INIT
  1120. 21190   GOSUB *MPLOOP2
  1121. 21200 *LOAD_LOOP
  1122. 21210   GOSUB *WIN
  1123. 21220   LOADWX=WX: LOADWY=WY: IX=WX+135: IY=WY+48
  1124. 21230   IF WC=1  THEN MOUSE 4,IX,IY,IX+IM*8,IY+15 ELSE MOUSE 4,0,0,639,479
  1125. 21240   IF WC=2 OR IC=&H0D THEN GOTO *LOAD_CHK
  1126. 21250   IF WC=3 OR MOUSE(2,1)=-1 OR IC=&H18                                            THEN GOSUB *INP_END: GOSUB *WIN_END: GOTO *LOAD_RET
  1127. 21260   IF WC=4 GOSUB *LOAD_FILES
  1128. 21270   GOSUB *INP
  1129. 21280   FILE$=IA$
  1130. 21290 GOTO *LOAD_LOOP
  1131. 21300 *LOAD_RET
  1132. 21310   CLOSE
  1133. 21320   SYMBOL(540, 32),"LOAD",1,1,0
  1134. 21330   GOSUB *MPLOOP2
  1135. 21340 RETURN
  1136. 21350 '
  1137. 21360 *LOAD_FILES
  1138. 21370   GOSUB *INP_END
  1139. 21380   GOSUB *FSLCT
  1140. 21390   IF FSLCT$<>"" THEN IA$=FSLCT$
  1141. 21400   LINE(WX+131,WY+46)-(WX+309,WY+64),PSET,7,BF
  1142. 21410   GOSUB *INP_INIT
  1143. 21420 RETURN'
  1144. 21430 '
  1145. 21440 *LOAD_CHK
  1146. 21450   GOSUB *INP_END
  1147. 21460   LINE(WX+40,WY+87)-STEP(140,15),PSET,7,BF
  1148. 21470   LFN$=FILE$
  1149. 21480   IF INSTR(LFN$,".")=0 THEN LFN$=LFN$+".FMB"
  1150. 21490   I=INSTR(LFN$,":")
  1151. 21500   LFN1$=LEFT$(LFN$,I)
  1152. 21510   LFN2$=MID$(LFN$,I+1)
  1153. 21520 '
  1154. 21530   ON ERROR GOTO *LOAD_ERR
  1155. 21540   OPEN "I",1,LFN$: CLOSE
  1156. 21550   ON ERROR GOTO *ERR
  1157. 21560 '
  1158. 21570   OPEN "R",1,LFN1$+"(128)"+LFN2$
  1159. 21580   OPEN "R",2,LFN1$+"(1)"  +LFN2$
  1160. 21590   FIELD 1,128 AS A$
  1161. 21600   FIELD 2,  1 AS B$
  1162. 21610   FTL=LOF(2)
  1163. 21620   IF FTL<6152 THEN CLOSE: A$="Bad File Size": GOTO *LOAD_ERR_RET
  1164. 21630 '
  1165. 21640 *LOAD_EXE
  1166. 21650   DIM A%(4)
  1167. 21660   FP=0: L=8: P=VARPTR(A%(0))
  1168. 21670   GOSUB *FLOAD
  1169. 21680   P=VARPTR(A%(0)): BNK$(BNK)=""
  1170. 21690   FOR I=0 TO 7
  1171. 21700     J=PEEK(P): IF J=0 THEN I=7 ELSE BNK$(BNK)=BNK$(BNK)+CHR$(J)
  1172. 21710   NEXT I
  1173. 21720   ERASE A%
  1174. 21730 '
  1175. 21740   FP=8: L=6144: P=VARPTR(ALLV%(0,0,BNK))
  1176. 21750   GOSUB *FLOAD
  1177. 21760 '
  1178. 21770   IF BNK<>0 GOTO *LOAD_EXE_2
  1179. 21780   DIM A%(23)
  1180. 21790   P1=VARPTR(ALLV%(0,0,BNK)): P2=VARPTR(A%(0))
  1181. 21800   FOR I=0 TO 127
  1182. 21810     CALLM MTRNSM,P1+48*I,P2,48
  1183. 21820     VOICE I+1,A%,0
  1184. 21830   NEXT I
  1185. 21840   ERASE A%
  1186. 21850 *LOAD_EXE_2
  1187. 21860   CLOSE
  1188. 21870   GOSUB *WIN_END
  1189. 21880   GOSUB *V_BTN1_PR
  1190. 21890   GOSUB *V_PR
  1191. 21900 GOTO *LOAD_RET
  1192. 21910 '
  1193. 21920 *LOAD_ERR
  1194. 21930   ON ERROR GOTO *ERR
  1195. 21940   IF ERR= 63 THEN A$="File not Find"
  1196. 21950   IF ERR<>63 THEN A$="File Access Error"
  1197. 21960 RESUME *LOAD_ERR_RET
  1198. 21970 '
  1199. 21980 *LOAD_ERR_RET
  1200. 21990   BEEP: SYMBOL(WX+40,WY+87),A$,1,1,2
  1201. 22000 GOTO *LOAD_2
  1202. 22010 '
  1203. 22020 *FLOAD    'FP   L  >  P  LFN1$,LFN2$
  1204. 22030   N1=(FP+127)\128: L1=128*N1-FP: N3=(FP+L)\128
  1205. 22040   L3=FP+L-128*N3:  L2=L-L1-L3:   N2=N3-N1
  1206. 22050   IF FP+L<128*N1 THEN L1=L: L2=0: L3=0: N2=0
  1207. 22060 '
  1208. 22070   I=0
  1209. 22080   WHILE I<L1
  1210. 22090     GET 2,FP+I+1
  1211. 22100     POKE P,ASC(B$)
  1212. 22110     I=I+1: P=P+1
  1213. 22120   WEND
  1214. 22130 '
  1215. 22140   I=0: P1=PEEK(VARPTR(A$),4)
  1216. 22150   WHILE I<N2
  1217. 22160     GET 1,N1+I+1
  1218. 22170     CALLM MTRNSM,P1,P,128
  1219. 22180     I=I+1: P=P+128
  1220. 22190   WEND
  1221. 22200 '
  1222. 22210   I=0
  1223. 22220   WHILE I<L3
  1224. 22230     GET 2,128*N3+I+1
  1225. 22240     POKE P,ASC(B$)
  1226. 22250     I=I+1: P=P+1
  1227. 22260   WEND
  1228. 22270 RETURN
  1229. 22280 '
  1230. 22290 *ERR
  1231. 22300   BEEP: CLOSE: MOUSE 0: MOUSE 1,,,1
  1232. 22310   GOSUB *INP_END
  1233. 22320   GOSUB *WIN_END
  1234. 22330   WX=ERRWX: WY=ERRWY: WXS=190: WYS=95: WON=2: WF=0
  1235. 22340   RESTORE *ERR
  1236. 22350   GOSUB *WIN_INIT
  1237. 22360   DATA  78, 68,128, 88'中断
  1238. 22370   DATA 133, 68,183, 88'無視
  1239. 22380   SYMBOL(WX+18,WY+15),"エラーが発生しました",1,1,0
  1240. 22390   SYMBOL(WX+30,WY+40),"ERROR"+STR$(ERR)+"/"+STR$(ERL)+"行",1,1,0
  1241. 22400   SYMBOL(WX+87,WY+70),"中断",1,1,0
  1242. 22410   SYMBOL(WX+142,WY+70),"無視",1,1,0
  1243. 22420   GOSUB *MPLOOP2
  1244. 22430 *ERR_LOOP
  1245. 22440   GOSUB *WIN
  1246. 22450   ERRWX=WX: ERRWY=WY: MOUSE 4,0,0,639,479
  1247. 22460   IF WC=1 THEN PLAY OFF: END
  1248. 22470   IF WC=2 OR MOUSE(2,1)=-1 THEN GOSUB *WIN_END: GOSUB *MPLOOP2:                                             RESUME NEXT
  1249. 22480 GOTO *ERR_LOOP
  1250. 22490 '
  1251. 22500 *ERRKP
  1252. 22510   ERRC=ERR
  1253. 22520 RESUME NEXT
  1254. 22530 '
  1255. 22540 *SAVE
  1256. 22550   SYMBOL(540, 53),"SAVE",1,1,2
  1257. 22560   WX=SAVEWX: WY=SAVEWY: WXS=330: WYS=120: WF=0: WON=4
  1258. 22570   RESTORE *SAVE
  1259. 22580   GOSUB*WIN_INIT
  1260. 22590   DATA 120, 40,300, 60'文字入力
  1261. 22600   DATA 190, 85,240,105'実行
  1262. 22610   DATA 250, 85,300,105'取消
  1263. 22620   DATA 250, 13,300, 33'FILES
  1264. 22630   SYMBOL(WX+15,WY+15),"音色ファイルのSAVE",1,1,0
  1265. 22640   SYMBOL(WX+256,WY+16),"FILES",1,1,0
  1266. 22650   SYMBOL(WX+25,WY+42),"ファイル名",1,1,0
  1267. 22660   SYMBOL(WX+199,WY+87),"実行",1,1,0
  1268. 22670   SYMBOL(WX+259,WY+87),"取消",1,1,0
  1269. 22680 *SAVE_2
  1270. 22690   IX=WX+125: IY=WY+43: IM=21: IMM=84: IA$=FILE$: ICL=0
  1271. 22700   LINE(IX,IY)-STEP(IM*8,15),PSET,7,BF
  1272. 22710   GOSUB *INP_INIT
  1273. 22720   GOSUB *MPLOOP2
  1274. 22730 *SAVE_LOOP
  1275. 22740   GOSUB *WIN
  1276. 22750   SAVEWX=WX: SAVEWY=WY: IX=WX+125: IY=WY+43
  1277. 22760   IF WC=1  THEN MOUSE 4,IX,IY,IX+IM*8,IY+15 ELSE MOUSE 4,0,0,639,479
  1278. 22770   IF WC=2 OR IC=&H0D THEN GOTO *SAVE_CHK
  1279. 22780   IF WC=3 OR MOUSE(2,1)=-1 OR IC=&H18                                            THEN GOSUB *INP_END: GOTO *SAVE_RET
  1280. 22790   IF WC=4 GOSUB *SAVE_FILES
  1281. 22800   GOSUB *INP
  1282. 22810   FILE$=IA$
  1283. 22820 GOTO *SAVE_LOOP
  1284. 22830 *SAVE_RET
  1285. 22840   CLOSE
  1286. 22850   GOSUB *WIN_END
  1287. 22860   SYMBOL(540, 53),"SAVE",1,1,0
  1288. 22870   GOSUB *MPLOOP2
  1289. 22880 RETURN
  1290. 22890 '
  1291. 22900 *SAVE_FILES
  1292. 22910   GOSUB *INP_END
  1293. 22920   GOSUB *FSLCT
  1294. 22930   IF FSLCT$<>"" THEN IA$=FSLCT$
  1295. 22940   LINE(WX+121,WY+41)-(WX+299,WY+59),PSET,7,BF
  1296. 22950   GOSUB *INP_INIT
  1297. 22960 RETURN
  1298. 22970 '
  1299. 22980 *SAVE_CHK
  1300. 22990   GOSUB *INP_END
  1301. 23000   LINE(WX+40,WY+87)-STEP(140,15),PSET,7,BF
  1302. 23010   SFN$=FILE$
  1303. 23020   IF INSTR(SFN$,".")=0 THEN SFN$=SFN$+".FMB"
  1304. 23030   I=INSTR(SFN$,":")
  1305. 23040   IF I=0 THEN SFN1$="" ELSE SFN1$=LEFT$(SFN$,I)
  1306. 23050   SFN2$=MID$(SFN$,I+1)
  1307. 23060 '
  1308. 23070   ON ERROR GOTO *SAVE_ERR
  1309. 23080   OPEN "O",1,SFN$: CLOSE
  1310. 23090   ON ERROR GOTO *ERR
  1311. 23100 '
  1312. 23110 *SAVE_EXE
  1313. 23120   LINE(WX+40,WY+87)-STEP(140,15),PSET,7,BF
  1314. 23130   OPEN "R",1,SFN1$+"(128)"+SFN2$
  1315. 23140   FIELD 1,128 AS A$
  1316. 23150   DIM B%(63)
  1317. 23160   ERRC=0: M=0: L1=0: L2=0: L3=0: S$=STRING$(128,"*")
  1318. 23170   ON ERROR GOTO *ERRKP
  1319. 23180 '
  1320. 23190   DIM A%(4): P=VARPTR(A%(0)): L=8
  1321. 23200   FOR I=0 TO 7
  1322. 23210     I$=MID$(BNK$(BNK),I+1,1)
  1323. 23220     IF I$="" POKE P+I,0 ELSE POKE P+I,ASC(I$)
  1324. 23230   NEXT I
  1325. 23240   GOSUB *SAVE_EXE_SUB
  1326. 23250   ERASE A%
  1327. 23260 '
  1328. 23270   P=VARPTR(ALLV%(0,0,BNK)): L=6144
  1329. 23280   GOSUB *SAVE_EXE_SUB
  1330. 23290 '
  1331. 23300   CLOSE
  1332. 23310 '
  1333. 23320   OPEN "R",2,SFN1$+"(1)"+SFN2$
  1334. 23330   FIELD 2,1 AS B$
  1335. 23340   P2=VARPTR(B%(0))
  1336. 23350   I=0
  1337. 23360   WHILE I<L3 AND ERRC=0
  1338. 23370     LSET B$=CHR$(PEEK(P2+I))
  1339. 23380     PUT 2,128*M+I+1
  1340. 23390     I=I+1
  1341. 23400   WEND
  1342. 23410   CLOSE
  1343. 23420   ON ERROR GOTO *ERR
  1344. 23430   ERASE B%
  1345. 23440   IF ERRC<>0 THEN BEEP: CLOSE: KILL SFN$: A$="Scanty Free Area":                              GOTO *SAVE_ERR_RET
  1346. 23450 GOTO *SAVE_RET
  1347. 23460 '
  1348. 23470 *SAVE_EXE_SUB
  1349. 23480   P2=VARPTR(B%(0))'------------------------------------------------L1
  1350. 23490   L1=128-L3
  1351. 23500   IF L<L1 THEN L1=L
  1352. 23510   I=0
  1353. 23520   WHILE I<L1 AND ERRC=0
  1354. 23530     POKE P2+L3+I,PEEK(P+I)
  1355. 23540     I=I+1
  1356. 23550   WEND
  1357. 23560 IF L3+L1<128 THEN L2=0: N=0: L3=L3+L1: GOTO *SAVE_EXE_SUB_RET
  1358. 23570   POKE VARPTR(S$),P2,4: POKE VARPTR(S$)+4,128
  1359. 23580   LSET A$=S$
  1360. 23590   PUT 1,M+1
  1361. 23600   M=M+1
  1362. 23610 '
  1363. 23620   N=(L-L1)\128: L2=128*N: L3=(L-L1) MOD 128'------------------L2
  1364. 23630   I=0
  1365. 23640   WHILE I<N AND ERRC=0
  1366. 23650     POKE VARPTR(S$),P+L1+128*I,4: POKE VARPTR(S$)+4,128
  1367. 23660     LSET A$=S$
  1368. 23670     PUT 1,M+1
  1369. 23680     M=M+1: I=I+1
  1370. 23690   WEND
  1371. 23700 '
  1372. 23710   I=0'-------------------------------------------------------------L3
  1373. 23720   WHILE I<L3 AND ERRC=0
  1374. 23730     POKE P2+I,PEEK(P+L1+L2+I)
  1375. 23740     I=I+1
  1376. 23750   WEND
  1377. 23760 *SAVE_EXE_SUB_RET
  1378. 23770 '
  1379. 23780 RETURN
  1380. 23790 '
  1381. 23800 *SAVE_ERR
  1382. 23810   IF ERR=64 THEN RESUME *SAVE_ERR_3
  1383. 23820 *SAVE_ERR_2
  1384. 23830   BEEP: ON ERROR GOTO *ERR
  1385. 23840   A$="File Access Error"
  1386. 23850 RESUME *SAVE_ERR_RET
  1387. 23860 '
  1388. 23870 *SAVE_ERR_3
  1389. 23880   BEEP: ON ERROR GOTO *ERR
  1390. 23890   SYMBOL(WX+40,WY+87),"Over Write ?",1,1,2
  1391. 23900   GOSUB *MPLOOP2
  1392. 23910 *SAVE_ERR_3_LOOP
  1393. 23920   GOSUB *WIN
  1394. 23930   SAVEWX=WX: SAVEWY=WY: MOUSE 4,0,0,639,479
  1395. 23940   IF WC=1 THEN A$="": GOTO *SAVE_ERR_RET
  1396. 23950   IF WC=2 OR INKEY$=CHR$(&H0D)                                                   THEN ON ERROR GOTO *SAVE_ERR_2: KILL SFN$:                                       ON ERROR GOTO *ERR: GOTO *SAVE_EXE
  1397. 23960   IF WC=3 OR MOUSE(2,1)=-1 GOTO *SAVE_RET
  1398. 23970 GOTO *SAVE_ERR_3_LOOP
  1399. 23980 '
  1400. 23990 *SAVE_ERR_RET
  1401. 24000   LINE(WX+40,WY+87)-STEP(140,15),PSET,7,BF
  1402. 24010   SYMBOL(WX+40,WY+87),A$,1,1,2
  1403. 24020 GOTO *SAVE_2
  1404. 24030 '
  1405. 24040 '
  1406. 24050 *FSLCT
  1407. 24060   WIDTH 80,25: CONSOLE 2,23,0: COLOR 0,0,7,4: CLS 4
  1408. 24070   DIM FSLCT%(46080)
  1409. 24080   GET@A(0,0)-(380,479),FSLCT%
  1410. 24090   LINE(0,0)-(380,479),PSET,,BF
  1411. 24100   LINE(380,0)-(380,479),PSET,0
  1412. 24110 *FSLCT_1
  1413. 24120   CL=5
  1414. 24130   GOSUB *FSLCT_PR
  1415. 24140   CL=4
  1416. 24150   ON ERROR GOTO *FSLCT_ERR
  1417. 24160   CLS 1: LOCATE 0,2:FILES DSK$+PATH$(DSK)+"*.*"
  1418. 24170   ON ERROR GOTO *ERR
  1419. 24180   YMAX=CSRLIN
  1420. 24190   GOSUB *FSLCT_PR
  1421. 24200   IF CL=4 THEN LOCATE 10,0:PRINT DSK$+PATH$(DSK)+"*.*";
  1422. 24210   GOSUB *MPLOOP2
  1423. 24220 *FSLCT_LOOP
  1424. 24230   GOSUB *MPLOOP1
  1425. 24240   Y=INT(MY/19)
  1426. 24250 IF PUSH=2 THEN FSLCT$="": GOTO *FSLCT_RET
  1427. 24260   IF  0<=MX AND 0<=MY AND MX<=16 AND MY<=16                                      THEN DSK=DSK-1: CLS 1: CL=5: GOSUB *FSLCT_PR: GOSUB *MPLOOP2
  1428. 24270   IF 48<=MX AND 0<=MY AND MX<=64 AND MY<=16                                      THEN DSK=DSK+1: CLS 1: CL=5: GOSUB *FSLCT_PR: GOSUB *MPLOOP2
  1429. 24280   IF 24<=MX AND 0<=MY AND MX<=40 AND MY<=16 GOTO *FSLCT_1
  1430. 24290 IF CL=5 GOTO *FSLCT_LOOP
  1431. 24300   IF 80<=MX AND 0<=MY AND MX<=80+8*LEN(PATH$(DSK))+15 AND MY<=16                 THEN GOSUB *FSLCT_PATH2: GOTO *FSLCT_1
  1432. 24310 IF MX<0 OR 380<MX OR Y<=1 OR YMAX-2<=Y GOTO *FSLCT_LOOP
  1433. 24320   FL1$="": FL2$="": FL3$=""
  1434. 24330   I=0
  1435. 24340   WHILE I<=7 AND SCREEN(I,Y)<>&H20
  1436. 24350     FL1$=FL1$+CHR$(SCREEN(I,Y)): I=I+1
  1437. 24360   WEND
  1438. 24370   I=0
  1439. 24380   WHILE I<=2 AND SCREEN(9+I,Y)<>0
  1440. 24390     FL2$=FL2$+CHR$(SCREEN(9+I,Y)): I=I+1
  1441. 24400   WEND
  1442. 24410   FOR I=0 TO 8
  1443. 24420     FL3$=FL3$+CHR$(SCREEN(16+I,Y))
  1444. 24430   NEXT I
  1445. 24440   IF INSTR(FL1$,".")<>0 OR INSTR(FL2$,".")<>0 THEN GOSUB *FSLCT_PATH1:                                                         GOTO *FSLCT_1
  1446. 24450   IF INSTR(FL3$,"DIR")<>0 THEN PATH$(DSK)=PATH$(DSK)+FL1$+"\":                   GOTO *FSLCT_1
  1447. 24460   FSLCT$=DSK$+PATH$(DSK)+FL1$+"."+FL2$
  1448. 24470 GOTO *FSLCT_RET
  1449. 24480 '
  1450. 24490 *FSLCT_PATH1
  1451. 24500   I=LEN(PATH$(DSK))-1: PATH$(DSK)=LEFT$(PATH$(DSK),I)
  1452. 24510   WHILE MID$(PATH$(DSK),I,1)<>"\"
  1453. 24520     I=I-1: PATH$(DSK)=LEFT$(PATH$(DSK),I)
  1454. 24530   WEND
  1455. 24540 RETURN
  1456. 24550 '
  1457. 24560 *FSLCT_PATH2
  1458. 24570   X=INT((MX-96)/8)+1
  1459. 24580 IF X<=1 THEN PATH$(DSK)="\": RETURN
  1460. 24590   FOR I=X TO LEN(PATH$(DSK))
  1461. 24600     IF MID$(PATH$(DSK),I,1)="\" THEN J=I: I=255
  1462. 24610   NEXT I
  1463. 24620   PATH$(DSK)=LEFT$(PATH$(DSK),J)
  1464. 24630 RETURN
  1465. 24640 '
  1466. 24650 *FSLCT_RET
  1467. 24660   CLS 4
  1468. 24670   PUT@A(0,0)-(380,479),FSLCT%
  1469. 24680   ERASE FSLCT%
  1470. 24690   GOSUB *MPLOOP2
  1471. 24700 RETURN
  1472. 24710 '
  1473. 24720 *FSLCT_INIT
  1474. 24730   DIM PATH$(16)
  1475. 24740   DSK=0: DSK$=CHR$(&H41+DSK)
  1476. 24750   FOR I=0 TO 16: PATH$(I)="\": NEXT I
  1477. 24760 RETURN
  1478. 24770 '
  1479. 24780 *FSLCT_PR
  1480. 24790   DSK=(DSK+17) MOD 17
  1481. 24800   DSK$=CHR$(&H41+DSK)+":"
  1482. 24810   CLS 2
  1483. 24820   LOCATE 0,0: PRINT "<    >";
  1484. 24830   COLOR,,,CL: LOCATE 3,0: PRINT DSK$;: COLOR ,,,4
  1485. 24840 RETURN
  1486. 24850 '
  1487. 24860 *FSLCT_ERR
  1488. 24870  CL=5: PATH$(DSK)="\"
  1489. 24880  IF ERR=63 THEN RESUME *FSLCT_1
  1490. 24890  BEEP
  1491. 24900  LOCATE 0,2: PRINT "File Access Error";
  1492. 24910 RESUME NEXT
  1493. 24920 '
  1494. 24930 *INP_INIT
  1495. 24940   IF IPC=1 GOSUB *INP_END
  1496. 24950   IA2$=IA$: IPC=1: IC=0: IP=0: IP2=IP: IXS=8*IM-1
  1497. 24960   DIM IA%(FNVRAM(IXS+8,15))
  1498. 24970   GET@A(IX,IY)-(IX+IXS+8,IY+15),IA%
  1499. 24980   GOSUB *INP_PR_2
  1500. 24990   WHILE INKEY$<>"": WEND
  1501. 25000 RETURN
  1502. 25010 '
  1503. 25020 *INP
  1504. 25030   IC=0
  1505. 25040   IF MOUSE(2,0)=-1 GOSUB *INP_MOUSE
  1506. 25050   I$=INKEY$
  1507. 25060   IF I$="" RETURN
  1508. 25070   J$=INKEY$
  1509. 25080   WHILE J$<>"": I$=J$: J$=INKEY$: WEND
  1510. 25090   IC=ASC(I$)
  1511. 25100   IF IC=&H1D THEN IP2=IP-1: GOSUB *INP_PR: RETURN              '←
  1512. 25110   IF IC=&H1C THEN IP2=IP+1: GOSUB *INP_PR: RETURN              '→
  1513. 25120   IF IC=&H08 AND 0<IP THEN IA2$=LEFT$(IA$,IP-1)+MID$(IA$,IP+1):                                        IP2=IP-1: GOSUB *INP_PR: RETURN     'BS
  1514. 25130   IF IC=&H7F THEN IA2$=LEFT$(IA$,IP)+MID$(IA$,IP+2):                                          IP2=IP: GOSUB *INP_PR: RETURN                'DEL
  1515. 25140   IF IC=&H05 THEN IA2$=LEFT$(IA$,IP): GOSUB *INP_PR:                                          IP2=IP: RETURN                               's^DEL
  1516. 25150   IF IC=&H1B THEN GOSUB *INP_ESC: RETURN                       'ESC
  1517. 25160   IF IC<=&H1F OR IMM<=LEN(IA$) RETURN
  1518. 25170   IA2$=LEFT$(IA$,IP)+I$+MID$(IA$,IP+1): IP2=IP+LEN(I$)
  1519. 25180   GOSUB *INP_PR
  1520. 25190 RETURN
  1521. 25200 '
  1522. 25210 *INP_MOUSE
  1523. 25220   MX=MOUSE(0)-IX: MY=MOUSE(1)-IY
  1524. 25230   IF MX<0 OR IXS<MX OR MY<0 OR 15<MY RETURN
  1525. 25240   MOUSE 4,IX,IY,IX+IXS,IY+15
  1526. 25250   IP2=(IP\IM)*IM+MX\8
  1527. 25260   IF MX<=0   AND 0<IP2     THEN IP2=(IP\IM-1)*IM: MOUSE 1,IX+IXS-1,,1
  1528. 25270   IF IXS<=MX AND IP2<IMM-1 AND IP2<LEN(IA2$)                                                           THEN IP2=(IP\IM+1)*IM: MOUSE 1,IX+1,,1
  1529. 25280   GOSUB *INP_PR
  1530. 25290 RETURN
  1531. 25300 '
  1532. 25310 *INP_PR
  1533. 25320   IF IP2<0 THEN IP2=0
  1534. 25330   IF LEN(IA2$)<IP2 THEN IP2=LEN(IA2$)
  1535. 25340   IF IMM<=IP2 THEN IP2=IMM-1
  1536. 25350   IF IP2=IP AND IA2$=IA$ THEN RETURN
  1537. 25360   IP=IP2: IA$=IA2$
  1538. 25370 *INP_PR_2
  1539. 25380   I=(IP\IM)*IM: J=IP MOD IM
  1540. 25390   PUT@A(IX,IY)-(IX+IXS+8,IY+15),IA%
  1541. 25400   SYMBOL(IX,IY),MID$(IA$,I+1,IM),1,1,%ICL
  1542. 25410   LINE(IX+8*J,IY)-STEP(1,15),PSET,2,B
  1543. 25420 RETURN
  1544. 25430 '
  1545. 25440 *INP_END
  1546. 25450   IF IPC=0 THEN RETURN
  1547. 25460   IPC=0
  1548. 25470   PUT@A(IX,IY)-(IX+IXS+8,IY+15),IA%
  1549. 25480   SYMBOL(IX,IY),MID$(IA$,1,IM),1,1,%ICL
  1550. 25490   ERASE IA%
  1551. 25500 RETURN
  1552. 25510 '
  1553. 25520 *INP_ESC
  1554. 25530   DIM IB%(FNVRAM(639,104))
  1555. 25540   GET@A(0,375)-(639,479),IB%
  1556. 25550   LINE(-1,375)-(640,480),PSET,0,BF,7
  1557. 25560   CONSOLE 20,4,1: COLOR 1,,,4: LOCATE 0,20
  1558. 25570   LINE INPUT I$
  1559. 25580   IF I$<>"" THEN IA2$=LEFT$(I$,IMM): IP2=0
  1560. 25590   CONSOLE 0,23,0: CLS 4
  1561. 25600   PUT@A(0,375)-(639,479),IB%
  1562. 25610   ERASE IB%
  1563. 25620   GOSUB *INP_PR
  1564. 25630 RETURN
  1565. 25640 '
  1566. 25650 *MOUSE_INIT
  1567. 25660   MS_INIT=0
  1568. 25670   RESTORE *MOUSE_INIT
  1569. 25680   DIM MS_A$(20),MS_D$(20),MS_X(20),MS_Y(20)
  1570. 25690   READ MS
  1571. 25700   WHILE MS<>-1
  1572. 25710     READ MS_X(MS),MS_Y(MS),A$,D$
  1573. 25720     MS_A$(MS)="":MS_D$(MS)=""
  1574. 25730     FOR J=0 TO 31
  1575. 25740       MS_A$(MS)=MS_A$(MS)+CHR$(VAL("&h"+MID$(A$,2*J+1,2)))
  1576. 25750       MS_D$(MS)=MS_D$(MS)+CHR$(VAL("&h"+MID$(D$,2*J+1,2)))
  1577. 25760     NEXT J
  1578. 25770     READ MS
  1579. 25780   WEND
  1580. 25790 RETURN
  1581. 25800 DATA  0, 0,0'INIT    BASIC標準
  1582. 25810 DATA 001F001F003F007F00FF007F003F001F080F1C073E03FF01FF80FFC1FFE3FFF7
  1583. 25820 DATA 00007FC07F807F007E007F007F8077C063E041F000F8007C003E001C00080000
  1584. 25830 'DATA  3, 0,0'YA4     FMBED標準
  1585. 25840 'DATA3FFF0FFF83FF80FFC03FC00FE003E000F001F007F807F807FC07FC7FFE7FFEFF
  1586. 25850 'DATA0000400030001C000F0017C00BF005FC02F0057002B001500100000000000000
  1587. 25860 DATA  4, 0,0'HAND4   指斜め
  1588. 25870 DATA BE9F180F00078003C003E003E003C003C003E001F000F800FF01FF83FFC7FFCF
  1589. 25880 DATA 0000416065B036D81B780DF806F81BF81DF80FFC07FC00F80070002000000000
  1590. 25890 DATA  7, 9,9'HAND2   押さえ手指
  1591. 25900 DATA FF7FFC1FF80FF807F803F803F803880300038003E003F003F807FC07F803F803
  1592. 25910 DATA 0000008002A002A002A802A802A803F873F81BF80FF807F803F001F000000000
  1593. 25920 DATA -1
  1594. 25930 '
  1595. 25940 *MOUSE_SET
  1596. 25950   MOUSE 2,MS_A$(MS),MS_D$(MS),MS_X(MS),MS_Y(MS)
  1597. 25960 RETURN
  1598. 25970 '
  1599. 25980 *WIN_ON
  1600. 25990   VIEW  (WX+5,WY+5)-(WX+WXS-10,WY+WYS-10)
  1601. 26000   WINDOW(WX+5,WY+5)-(WX+WXS-10,WY+WYS-10)
  1602. 26010 RETURN
  1603. 26020 '
  1604. 26030 *WIN_OFF
  1605. 26040   VIEW  (0,0)-(1023,511)
  1606. 26050   WINDOW(0,0)-(1023,511)
  1607. 26060 RETURN
  1608. 26070 '
  1609. 26080 *WIN_INIT
  1610. 26090   IF WPC=1 GOSUB *WIN_END
  1611. 26100   IF FRE(3)<(WXS+32)*WYS/2*2+WON*8 THEN ERRF=1: RETURN
  1612. 26110   WPC=1: WC=-2: WCL=10: I=1
  1613. 26120   DIM WA%(FNVRAM(WXS,WYS)),WB%(FNVRAM(WXS,WYS)),WOZ(WON,3)
  1614. 26130   IF 639<WX+WXS THEN WX=639-WXS
  1615. 26140   IF 479<WY+WYS THEN WY=479-WYS
  1616. 26150   GET@A(WX,WY)-(WX+WXS,WY+WYS),WA%
  1617. 26160   LINE(WX,WY)-(WX+WXS,WY+WYS),PSET,%7,BF
  1618. 26170   LINE(WX+3,WY+3)-(WX+WXS,WY+WYS),PSET,%8,BF
  1619. 26180   LINE(WX,WY)-(WX+WXS-3,WY+WYS-3),PSET,0,BF,7
  1620. 26190   WHILE I<=WON AND (WF AND 2)=0
  1621. 26200     FOR J=0 TO 3: READ WOZ(I,J): NEXT J
  1622. 26210     LINE(WX+WOZ(I,0),WY+WOZ(I,1))-(WX+WOZ(I,2),WY+WOZ(I,3)),PSET,0,B
  1623. 26220     I=I+1
  1624. 26230   WEND
  1625. 26240 RETURN
  1626. 26250 '
  1627. 26260 *WIN
  1628. 26270   IF MOUSE(2,0)=0 THEN WC=-2: RETURN
  1629. 26280   MX=MOUSE(0)-WX: MY=MOUSE(1)-WY
  1630. 26290   IF MX<0 OR MY<0 OR WXS<MX OR WYS<MY THEN WC=0: RETURN
  1631. 26300   WC=-3: I=1
  1632. 26310   WHILE I<=WON
  1633. 26320     IF WOZ(I,0)<=MX AND WOZ(I,1)<=MY AND                                           MX<=WOZ(I,2) AND MY<=WOZ(I,3) THEN WC=I: I=WON
  1634. 26330     I=I+1
  1635. 26340   WEND
  1636. 26350   IF 1<=WC OR (WF AND 1) THEN RETURN
  1637. 26360   WC=-1
  1638. 26370   X=MX: Y=MY: MX=WX: MY=WY
  1639. 26380   MOUSE 4,X,Y,639-WXS+X,479-WYS+Y
  1640. 26390   MS=7: GOSUB *MOUSE_SET
  1641. 26400   LINE(MX,MY)-STEP(WXS,WYS),XOR,%WCL,B
  1642. 26410   WHILE MOUSE(2,0)=-1
  1643. 26420     WHILE MOUSE(9)=0 AND MOUSE(10)=0 AND MOUSE(2,0)=-1: WEND
  1644. 26430     LINE(MX,MY)-STEP(WXS,WYS),XOR,%WCL,B
  1645. 26440     MX=MOUSE(0)-X: MY=MOUSE(1)-Y
  1646. 26450     LINE(MX,MY)-STEP(WXS,WYS),XOR,%WCL,B
  1647. 26460   WEND
  1648. 26470   LINE(MX,MY)-STEP(WXS,WYS),XOR,%WCL,B
  1649. 26480   GET@A(WX,WY)-(WX+WXS,WY+WYS),WB%
  1650. 26490   PUT@A(WX,WY)-(WX+WXS,WY+WYS),WA%
  1651. 26500   GET@A(MX,MY)-(MX+WXS,MY+WYS),WA%
  1652. 26510   PUT@A(MX,MY)-(MX+WXS,MY+WYS),WB%
  1653. 26520   MS=MS_INIT: GOSUB *MOUSE_SET
  1654. 26530   WX=MX: WY=MY
  1655. 26540 RETURN
  1656. 26550 '
  1657. 26560 *WIN_END
  1658. 26570   IF WPC=0 THEN RETURN
  1659. 26580   WPC=0
  1660. 26590   PUT@A(WX,WY)-(WX+WXS,WY+WYS),WA%
  1661. 26600   ERASE WA%,WB%,WOZ
  1662. 26610 RETURN
  1663. 26620 '
  1664. 26630 '
  1665. 26640 *FLCNV 'FL$>FL1$,FL2$,FL3$,FL4$
  1666. 26650   J=INSTR(FL$,":"): K=1: L=INSTR(FL$,".")
  1667. 26660   FOR I=1 TO LEN(FL$)
  1668. 26670     IF MID$(FL$,I,1)=":" OR MID$(FL$,I,1)="\" THEN K=I+1
  1669. 26680   NEXT I
  1670. 26690   IF L<>0 THEN FL3$=MID$(FL$,K,L-K): FL4$=MID$(FL$,L)                                 ELSE FL3$=MID$(FL$,K): IF MODE=4 THEN FL4$=".SND"                                                            ELSE FL4$=".PMB"
  1671. 26700   FL1$=LEFT$(FL$,J)
  1672. 26710   FL2$=MID$(FL$,J+1,K-(J+1))
  1673. 26720   FL$=FL1$+FL2$+FL3$+FL4$
  1674. 26730 RETURN
  1675. 26740 '
  1676.