プチコンmkII

  1. ’DRAW EDITOR
  2. ’(C)SmileBoom Co.Ltd
  3. ’・テキストカ-ソルノヘンスウメイカフ゛リカイヒ
  4. CLEAR:ACLS:SPPAGE 1
  5. BGPAGE 1:BGCLR
  6. VISIBLE 1,1,1,1,1,1
  7. RECMAX=8000:HSIZE=256
  8. TXMAX=4:TXLEN=32
  9. _CMD=0:_TXY=1:_EXY=2:_MAX=3
  10. DIM B(RECMAX,_MAX)
  11. DIM TX$(TXMAX)
  12. FOR I=0 TO TXMAX-1
  13.  TX$(I)=” ”*TXLEN
  14. NEXT
  15. ’---
  16. DATA ”LINE  ”
  17. DATA ”CIRCLE”
  18. DATA ”BOX   ”
  19. DATA ”PAINT ”
  20. DATA ”PSET  ”
  21. DATA ”CLEAR ”
  22. DATA ”FILL  ”
  23. CMDMAX=7
  24. DIM C$(CMDMAX)
  25. FOR I=0 TO CMDMAX-1
  26.  READ C$(I)
  27. NEXT
  28. ’---
  29. N$=”SPS0”
  30. C$=”0”*8:Z$=C$*8
  31. B$=”F0000000”+C$*7
  32. CHRSET N$,0,B$
  33. CHRSET N$,1,Z$
  34. CHRSET N$,2,Z$
  35. CHRSET N$,3,Z$
  36. A$=”FFF00000”
  37. A$=A$+”F0F00000”+A$+C$*5
  38. CHRSET N$,4,A$
  39. CHRSET N$,5,Z$
  40. CHRSET N$,6,Z$
  41. CHRSET N$,7,Z$
  42. A$=”F0000000”+C$*7
  43. CHRSET ”BGU0”,1,A$
  44. A$=”E0E0E0E00E0E0E0E”*4
  45. CHRSET ”BGU0”,2,A$
  46. ’---
  47. SPMAX=88
  48. FOR I=0 TO SPMAX-1
  49.  SPSET I,0,0,0,0,0
  50.  SPOFS I,-16,-16
  51. NEXT
  52. ’---
  53. PNLTYPE”OFF”
  54. ICONPUSE=FALSE
  55. ICONCLR:ICONPMAX=3
  56. ’---
  57. FOR I=0 TO 3
  58.  BREPEAT I,20,4
  59. NEXT
  60. BREPEAT 7,20,2:’Y BUTTON
  61. ’---
  62. OLDCMD=-1:CMD=4
  63. DR=0:GR=1:TM=FALSE
  64. REC=0:COL=15:QT=0:WM=16
  65. MX=0:MY=0:MW=8:MB=-1:MC=0
  66. GOSUB @INIT
  67. ’========
  68. ’  main  
  69. ’========
  70. @MAIN
  71. OS=TS:TS=TCHST
  72. OB=BT:BT=BTRIG():BN=BUTTON()
  73. IF TM==FALSE THEN @MSKIP
  74. K$=INKEY$()
  75. GOSUB @TEXTSUB
  76. GOTO @MNEXT
  77. ’---
  78. @MSKIP
  79. GOSUB @BUTCTRL
  80. IF QT THEN @QUIT
  81. GOSUB @TOUCH
  82. ’---
  83. @MNEXT
  84. GOSUB @PUTCOL
  85. VSYNC 1
  86. GOTO @MAIN
  87. ’---
  88. @QUIT
  89. GPAGE 1:GCLS 0:
  90. GPAGE 0:GCLS 0
  91. CLS
  92. PRINT”オツカレサマ!”
  93. END
  94. ’==============
  95. ’  initialize
  96. ’==============
  97. @INIT
  98. CLS
  99. PRINT”DRAW EDITOR V1.1”
  100. PRINT”─”*32;
  101. COLOR 7
  102. FOR I=0 TO CMDMAX-1
  103.  PRINT ” ”+C$(I)
  104. NEXT
  105. ’---
  106. LOCATE 0,11
  107. PRINT”А:file К:grid”
  108. PRINT”Х:delete”
  109. PRINT
  110. PRINT”START:setting”
  111. PRINT” wait(   )”
  112. PRINT”  bgm(   )”
  113. ’---
  114. LOCATE 18,0
  115. PRINT”REC:     C:”
  116. ’---
  117. WX=0:WY=20
  118. LOCATE 0,WY-2:PRINT”Б:text”
  119. COLOR 0:PRINT ”─”*32;
  120. GFILL 0,(WY*8)-4,255,(WY+TXMAX)*8-1,255
  121. BGFILL 0,WX,WY,WX+31,WY+TXMAX-1,&H0002
  122. GOSUB @PUTST
  123. GOSUB @PUTREC
  124. ’---
  125. GPAGE 0:CX=15:CY=2
  126. LOCATE CX-1,CY-1
  127. PRINT”┬”+”─”*16+”┬”;
  128. FOR Y=0 TO 15
  129.  LOCATE CX-1,CY+Y
  130.  PRINT”│”+” ”*16+”│”;
  131.  FOR X=0 TO 15
  132.   TX=CX*8+X*8:TY=CY*8+Y*8
  133.   C=Y*16+X
  134.   GFILL TX,TY,TX+7,TY+7,C
  135.  NEXT
  136. NEXT
  137. LOCATE CX-1,CY+16
  138. PRINT”└”+”─”*16+”┘”;
  139. GPAGE 1
  140. GOSUB @PUTCOL0
  141. GOSUB @PUTGRID
  142. RETURN
  143. ’---
  144. @PUTGRID
  145. SC=&H0:IF GR THEN SC=&HE001
  146. BGFILL 1,0,0,31,23,SC
  147. RETURN
  148. ’================
  149. ’ button control
  150. ’================
  151. @BUTCTRL
  152. D=BT AND 15
  153. IF D THEN @BUTDIR
  154. IF BT==128 THEN @BUTY
  155. IF OB THEN RETURN
  156. IF BT==32 THEN @BUTB
  157. IF BT==64 THEN @BUTX
  158. IF BT==16 THEN @BUTA
  159. IF BT==512 THEN @BUTR
  160. IF BT==1024 THEN @BSTART
  161. RETURN
  162. ’---
  163. @BSTART
  164. VISIBLE 1,1,0,0,0,0:CLS
  165. INPUT”BGM(0-,-1=OFF)=”;MB
  166. INPUT”WAIT(0-)=”;MW
  167. BGMPLAY MB
  168. VISIBLE 1,1,1,1,1,1
  169. GOSUB @INIT
  170. RETURN
  171. ’---Б:text
  172. @BUTB
  173. TM=TRUE:TW=0:PNLTYPE”KYA”
  174. BGPAGE 0:DR=0
  175. RETURN
  176. ’---А:file menu
  177. @BUTA
  178. GOSUB @FILE
  179. GPAGE 0:GCLS 0:GPAGE 1
  180. GOSUB @INIT
  181. GOSUB @CLRCOL
  182. GOSUB @PUTREC
  183. GOSUB @REPLAY
  184. RETURN
  185. ’---К:grid
  186. @BUTR
  187. GR=GR XOR 1:DR=0
  188. GOSUB @PUTGRID
  189. RETURN
  190. ’---Х:delete
  191. @BUTY
  192. IF REC==0 THEN RETURN
  193. REC=REC-1:DR=0
  194. GOSUB @CLRCOL
  195. GOSUB @PUTREC
  196. GOSUB @REPLAY
  197. GOSUB @PUTST
  198. OLDCMD=-1
  199. RETURN
  200. ’---
  201. @GETVEC
  202. VX=0:VY=0
  203. IF D AND 1 THEN VY=-1
  204. IF D AND 2 THEN VY=1
  205. IF D AND 4 THEN VX=-1
  206. IF D AND 8 THEN VX=1
  207. RETURN
  208. ’---
  209. @BUTDIR
  210. GOSUB @GETVEC
  211. IF VX+VY==0 THEN @PUTCOL
  212. ’---
  213. @MOVCOL
  214. GOSUB @CLRCOL
  215. COL=COL+(VY*16)+VX
  216. COL=COL AND 255
  217. ’---
  218. @PUTCOL0
  219. LOCATE 29,0
  220. PRINT RIGHT$(” ”+STR$(COL),3);
  221. ’---
  222. @PUTCOL
  223. LOCATE CX+COL%16,CY+COL/16
  224. CC=RND(15)
  225. COLOR CC:PRINT”□”:COLOR 15
  226. RETURN
  227. ’---
  228. @CLRCOL
  229. LOCATE CX+COL%16,CY+COL/16
  230. PRINT” ”
  231. RETURN
  232. ’---Ф:command select
  233. @BUTX
  234. LOCATE 0,2+CMD:PRINT” ”
  235. VY=1:IF BN AND 256 THEN VY=-1
  236. CMD=CMD+VY
  237. IF CMD<0 THEN CMD=CMDMAX-1
  238. CMD=CMD%CMDMAX
  239. DR=0:GOSUB @PUTST
  240. RETURN
  241. ’=============
  242. ’ check touch 
  243. ’=============
  244. @TOUCH
  245. ON DR GOTO @L0,@L1,@L2
  246. RETURN
  247. ’---
  248. @L0
  249. IF TS==FALSE THEN RETURN
  250. TX=TCHX:TY=TCHY
  251. IF CMD==3 THEN @L0P
  252. IF CMD==5 THEN @L0CLS
  253. EX=TX:EY=TY:DR=1
  254. RETURN
  255. ’---
  256. @L0P
  257. N=GSPOIT(TX,TY)
  258. IF N==COL THEN RETURN
  259. GPAINT TX,TY,COL
  260. GOTO @LREC
  261. ’---
  262. @L0CLS
  263. IF OLDCMD==CMD THEN RETURN
  264. GCLS COL
  265. GOTO @LREC
  266. ’---
  267. @L1
  268. X=TX:Y=TY
  269. EX=TCHX:EY=TCHY
  270. GOSUB @GUIDE
  271. IF TS==0 THEN @L1SUB
  272. IF CMD==4 THEN @L1PS
  273. RETURN
  274. ’---
  275. @L1SUB
  276. ON CMD GOTO @L1L,@L1C,@L1B
  277. IF CMD!=6 THEN RETURN
  278. ’---
  279. GFILL TX,TY,EX,EY,COL
  280. GOTO @LREC
  281. ’---
  282. @L1B
  283. GBOX TX,TY,EX,EY,COL
  284. ’---
  285. @LREC
  286. GOSUB @CMDREC:DR=0
  287. RETURN
  288. ’---
  289. @L1C
  290. EX=R:GCIRCLE TX,TY,EX,COL
  291. GOTO @LREC
  292. ’---
  293. @L1L
  294. GLINE TX,TY,EX,EY,COL
  295. GOSUB @CMDREC
  296. TX=EX:TY=EY:DR=2
  297. RETURN
  298. ’---
  299. @L1PS
  300. GOSUB @L1L:DR=1
  301. RETURN
  302. ’---
  303. @L2
  304. IF TS==FALSE THEN RETURN
  305. TX=EX:TY=EY:DR=1
  306. RETURN
  307. ’========
  308. ’ record 
  309. ’========
  310. @CMDREC
  311. OLDCMD=CMD
  312. IF REC>=RECMAX THEN RETURN
  313. B(REC,_CMD)=CMD+(COL*256)
  314. B(REC,_TXY)=TX*256+TY
  315. B(REC,_EXY)=EX*256+EY
  316. REC=REC+1
  317. ’---
  318. @PUTREC
  319. LOCATE 22,0:R=RECMAX-REC
  320. PRINT RIGHT$(”   ”+STR$(R),4);
  321. RETURN
  322. ’---
  323. @PUTN
  324. PRINT RIGHT$(”  ”+STR$(N),3);
  325. RETURN
  326. ’============
  327. ’ text write
  328. ’============
  329. @TEXTSUB
  330. IF OB THEN @TXTOP
  331. IF BT!=32 THEN @TXTOP
  332. ’---Б:exit text
  333. PNLTYPE”OFF”
  334. BGPUT 0,MX+WX,MY+WY,1,0,0,0
  335. BGPAGE 1:TM=FALSE
  336. RETURN
  337. ’---
  338. @TXTOP
  339. GOSUB @TXIN
  340. GOSUB @TXCSR
  341. N=13:IF TW>=8 THEN N=0
  342. BGPUT 0,MX+WX,MY+WY,N,0,0,0
  343. TW=TW+1
  344. IF TW==16 THEN TW=0
  345. RETURN
  346. ’---
  347. @TXCSR
  348. D=BT:GOSUB @GETVEC
  349. IF VX+VY!=0 THEN @TXMOV
  350. RETURN
  351. ’---
  352. @BS
  353. VX=-1:VY=0:K$=” ”
  354. GOTO @TXIN2
  355. ’---
  356. @ENTER
  357. BGPUT 0,MX+WX,MY+WY,1,0,0,0
  358. MX=0:VY=1:GOTO @TXMOV
  359. ’---
  360. @TXIN
  361. IF KEYBOARD==15 THEN @BS
  362. IF KEYBOARD==60 THEN @ENTER
  363. IF K$==”” THEN RETURN
  364. VX=1:VY=0
  365. ’---
  366. @TXIN2
  367. TX$(MY)=SUBST$(TX$(MY),MX,1,K$)
  368. GOSUB @PUTST
  369. ’---
  370. @TXMOV
  371. BGPUT 0,MX+WX,MY+WY,1,0,0,0
  372. MX=MX+VX:M=TXLEN-1
  373. IF MX<0 THEN MX=M:VY=VY-1
  374. IF MX>M THEN MX=0:VY=VY+1
  375. MY=MY+VY
  376. IF MY>TXMAX-1 THEN MY=0
  377. IF MY<0 THEN MY=TXMAX-1
  378. W=0
  379. RETURN
  380. ’============
  381. ’ put status 
  382. ’============
  383. @PUTST
  384. LOCATE 0,2+CMD:PRINT”Ф”
  385. ’---
  386. FOR I=0 TO TXMAX-1
  387.  LOCATE WX,WY+I
  388.  PRINT TX$(I);
  389.  PNLSTR WX,WY+I,TX$(I)
  390. NEXT
  391. ’---
  392. LOCATE 6,15:N=MW:GOSUB @PUTN
  393. LOCATE 6,16:N=MB:GOSUB @PUTN
  394. RETURN
  395. ’============
  396. ’ guide line 
  397. ’============
  398. @GUIDE
  399. ON CMD GOTO @SPL,@SPC,@SPB
  400. IF CMD==6 THEN @SPB
  401. RETURN
  402. ’=============
  403. ’ sprite line 
  404. ’=============
  405. @SPL
  406. N=0:M=20:C=RND(16)
  407. GOSUB @SPLSUB
  408. GOTO @SPOFF
  409. ’---
  410. @SPLSUB
  411. VX=EX-X:SX=SGN(VX):AX=ABS(VX)
  412. VY=EY-Y:SY=SGN(VY):AY=ABS(VY)
  413. J=W:W=W+1:SMX=N+M
  414. IF AX>AY THEN @XLINE
  415. ’---
  416. IF AY==0 THEN RETURN
  417. VX=VX/AY
  418. FOR I=Y TO EY STEP SY
  419.  IF (J % WM) THEN @SKIPX
  420.  IF N>=SMX THEN @SKIPX
  421.  SPOFS N,X,I
  422.  SPCHR N,0,C,0,0,0
  423.  N=N+1
  424. @SKIPX
  425.  X=X+VX:J=J+1
  426. NEXT
  427. GOTO @ELINE
  428. ’---
  429. @XLINE
  430. IF AX==0 THEN RETURN
  431. VY=VY/AX
  432. FOR I=X TO EX STEP SX
  433.  IF (J % WM) THEN @SKIPY
  434.  IF N>=MX THEN @SKIPY
  435.  SPOFS N,I,Y:SPCHR N,0
  436.  SPCHR N,0,C,0,0,0
  437.  N=N+1
  438. @SKIPY
  439.  Y=Y+VY:J=J+1
  440. NEXT
  441. ’---
  442. @ELINE
  443. SPOFS N,EX-1,EY-1
  444. SPCHR N,1,C,0,0,0
  445. N=N+1
  446. RETURN
  447. ’===============
  448. ’ sprite circle 
  449. ’===============
  450. @SPC
  451. VX=ABS(EX-X)
  452. VY=ABS(EY-Y)
  453. R=SQR(VX*VX+VY*VY)
  454. M=20:ST=360/M
  455. J=W/ST:W=W+WM
  456. C=RND(16)
  457. FOR N=0 TO M-1
  458.  A=RAD(J%360):J=J+ST
  459.  OX=X+COS(A)*R
  460.  OY=Y+SIN(A)*R
  461.  SPOFS N,OX,OY
  462.  SPCHR N,0,C,0,0,0
  463. NEXT
  464. SPOFS M,X-1,Y-1
  465. SPCHR M,1,C,0,0,0
  466. RETURN
  467. ’============
  468. ’ sprite box 
  469. ’============
  470. @SPB
  471. TMPX=EX:TMPY=EY
  472. N=0:M=20:C=RND(16)
  473. X=TX:Y=TY:EY=Y
  474. GOSUB @SPLSUB
  475. X=EX:Y=TY:EY=TMPY
  476. GOSUB @SPLSUB
  477. X=EX:Y=EY:EX=TX
  478. GOSUB @SPLSUB
  479. X=TX:Y=EY:EX=X:EY=TY
  480. GOSUB @SPLSUB
  481. EX=TMPX:EY=TMPY
  482. ’---
  483. @SPOFF
  484. FOR I=N TO SPMAX-1
  485.  SPOFS I,-16,-16
  486. NEXT
  487. RETURN
  488. ’===========
  489. ’ file menu 
  490. ’===========
  491. @FILE
  492. CLS:GPAGE 0:GCLS 0
  493. GP=1:GPAGE GP
  494. GF$=”GRP”+STR$(GP)+”:”
  495. PRINT”FILE MENU”
  496. PRINT”=”*32;
  497. PRINT” L:キロクノヨミコミ”
  498. PRINT” S:キロクノカキコミ”
  499. PRINT”SG:カ゛ソ゛ウノカキコミ”
  500. PRINT” X:カ゛メンショウキョ”
  501. PRINT” Q:メニュ-ヲヌケル”
  502. PRINT” E:ツ-ルシュウリョウ”
  503. PRINT”=”*32;
  504. INPUT”ト゛ウスル”;K$
  505. IF K$==”S” THEN @SVREC
  506. IF K$==”L” THEN @LDREC
  507. IF K$==”SG” THEN @SVGRP
  508. IF K$==”E” THEN QT=1
  509. IF K$==”X” THEN @XCLS
  510. RETURN
  511. ’==========================
  512. @XCLS
  513. INPUT”ショウキヨシマスカ”;K$
  514. IF K$!=”Y” THEN @FILE
  515. REC=0
  516. RETURN
  517. ’==========================
  518. @GLNUM
  519. TOTAL=TOTAL+1
  520. IF Y>191 THEN @LDERR
  521. N=GSPOIT(X,Y)
  522. X=X+1:IF X<256 THEN RETURN
  523. X=0:Y=Y+1
  524. RETURN
  525. ’---
  526. @GLCHR
  527. GOSUB @GLNUM
  528. N$=CHR$(N):RETURN
  529. ’---
  530. @GLWORD
  531. GOSUB @GLNUM:W=N*256
  532. GOSUB @GLNUM:W=W+N
  533. RETURN
  534. ’---
  535. @LDERR
  536. PRINT”コノファィルハ、ツカエマセン”
  537. @LDLOOP
  538. IF INKEY$()==”” THEN @LDLOOP
  539. RETURN
  540. ’==========================
  541. @LDREC
  542. GPAGE 1:X=0:Y=0:TOTAL=0
  543. INPUT”ヨミコムファィルメイ”;K$
  544. LOAD GF$+K$
  545. IF RESULT!=TRUE THEN RETURN
  546. ’--- header
  547. GOSUB @GLCHR:C$=N$
  548. GOSUB @GLCHR:C$=C$+N$
  549. GOSUB @GLCHR:C$=C$+N$
  550. GOSUB @GLCHR:C$=C$+N$
  551. IF C$!=”DE1:” THEN @LDERR
  552. ’--- 
  553. GOSUB @GLWORD:H=W
  554. GOSUB @GLWORD:REC=W
  555. GOSUB @GLWORD:MW=W
  556. GOSUB @GLWORD:MB=W-1
  557. GOSUB @GLWORD
  558. GOSUB @GLWORD
  559. ’--- text
  560. FOR IX=0 TO TXMAX-1
  561.  TX$(IX)=””
  562.  FOR J=0 TO TXLEN-1
  563.   GOSUB @GLCHR
  564.   TX$(IX)=TX$(IX)+N$
  565.  NEXT
  566. NEXT
  567. ’--- skip
  568. FOR I=0 TO (HSIZE-TOTAL)-1
  569.  GOSUB @GLNUM
  570. NEXT
  571. ’--- command
  572. FOR I=0 TO REC-1
  573.  GOSUB @GLWORD:B(I,_CMD)=W
  574.  GOSUB @GLWORD:B(I,_TXY)=W
  575.  GOSUB @GLWORD:B(I,_EXY)=W
  576.  LOCATE 0,23
  577.  PRINT I;”/”;REC;
  578. NEXT
  579. RETURN
  580. ’==========================
  581. @GSNUM
  582. TOTAL=TOTAL+1
  583. IF Y>191 THEN RETURN
  584. GPSET X,Y,N
  585. X=X+1:IF X<256 THEN RETURN
  586. X=0:Y=Y+1
  587. RETURN
  588. ’---
  589. @GSWORD
  590. N=(W/256) AND 255
  591. GOSUB @GSNUM
  592. N=W AND 255
  593. GOSUB @GSNUM
  594. RETURN
  595. ’==========================
  596. @SVREC
  597. GPAGE 1:X=0:Y=0:TOTAL=0
  598. ’--- header
  599. N=ASC(”D”):GOSUB @GSNUM
  600. N=ASC(”E”):GOSUB @GSNUM
  601. N=ASC(”1”):GOSUB @GSNUM
  602. N=ASC(”:”):GOSUB @GSNUM
  603. ’--- length
  604. W=HSIZE:GOSUB @GSWORD
  605. W=REC:GOSUB @GSWORD
  606. W=MW:GOSUB @GSWORD
  607. W=MB+1:GOSUB @GSWORD
  608. W=0:GOSUB @GSWORD
  609. W=0:GOSUB @GSWORD
  610. ’--- text
  611. FOR IX=0 TO TXMAX-1
  612.  C$=TX$(IX)
  613.  FOR J=0 TO TXLEN-1
  614.   N=ASC(MID$(C$,J,1))
  615.   GOSUB @GSNUM
  616.  NEXT
  617. NEXT
  618. ’--- skip
  619. FOR I=0 TO (HSIZE-TOTAL)-1
  620.  N=0:GOSUB @GSNUM
  621. NEXT
  622. ’--- command
  623. LY=CSRY
  624. FOR I=0 TO REC-1
  625.  W=B(I,_CMD):GOSUB @GSWORD
  626.  W=B(I,_TXY):GOSUB @GSWORD
  627.  W=B(I,_EXY):GOSUB @GSWORD
  628. NEXT
  629. ’---
  630. INPUT”ホソ゛ンスルファィルメイ”;K$
  631. SAVE GF$+K$
  632. RETURN
  633. ’==========================
  634. @SVGRP
  635. GPAGE 1
  636. INPUT”カ゛ソ゛ウトシテホソ゛ンスルファィルメイ”;K$
  637. SAVE GF$+K$
  638. RETURN
  639. ’==========================
  640. @REPLAY
  641. GCLS 0
  642. FOR IX=0 TO REC-1
  643.  O=_TXY:GOSUB @GETCMD
  644.  TX=X:TY=Y
  645.  O=_EXY:GOSUB @GETCMD
  646.  EX=X:EY=Y
  647.  O=_CMD:GOSUB @GETCMD
  648.  GOSUB @CMDSUB
  649. NEXT
  650. RETURN
  651. ’---
  652. @GETCMD
  653. X=B(IX,O):Y=X AND &HFF
  654. X=(X AND &HFF00)/256
  655. RETURN
  656. ’---
  657. @CMDSUB
  658. ON Y GOTO @RL,@RC,@RB,@RP,@RL,@RX
  659. ’---
  660. GFILL TX,TY,EX,EY,X:RETURN
  661. ’---
  662. @RX
  663. GCLS X:RETURN
  664. ’---
  665. @RL
  666. GLINE TX,TY,EX,EY,X:RETURN
  667. ’---
  668. @RC
  669. GCIRCLE TX,TY,EX,X:RETURN
  670. ’---
  671. @RB
  672. GBOX TX,TY,EX,EY,X:RETURN
  673. ’---
  674. @RP
  675. GPAINT TX,TY,X:RETURN