2012年1月10日投稿 2012年1月11日更新 / 投稿者 : 名無しさん / タグ : 投稿プログラム ツール 初代対応 QRコード
プチコン標準のキーボードではないソフトキーボードを実現します。
主な用途は、プチコン標準のものでは都合が悪い場合や、並びが気に入らない場合などになります。
今回のサンプルコードでは、一部PCGをひらがなに書き換え、ひらがなの入力ができるようになっています。
サンプルコードでは下画面にソフトキーボードを表示し、
入力した文字を、上画面の矩形領域内に64文字を折り返して表示します。
BSや上下左右で文字を消したりカーソル移動したりできます。
ENTER、ESCで終了。ENTERの場合は、入力した文字列がT$に格納され、ESCの場合はT$は空文字となります。
IX,IY,IMAX,ICPLを指定して@LINを呼ぶと、指定文字数の入力が可能になります。
IX,IYは入力した文字列の表示位置、IMAXは最大入力文字数、ICPLは折り返し文字数です。
また、@KEYCHKを呼ぶと、RETにキーコードが返ります。
(押されていない場合は0、特殊キーは256以上)
0は押されていない、
256未満の場合は、その文字コードの文字が入力されたものとして考え、
256以上の場合は、そのキーに応じた動作をさせてください。
サンプルコードでの特殊キーは以下のようになっています。
256 シフトキー 257 CAPS LOCK 258 Back Space 259 ESC 260 ↑ 261 ↓ 262 ← 263 → 264 英数キー 265 かなキー 266 カナキー 267 記号キー
267については定義のみで動作を実装していないので、機能しません。
それ以外は動作します。
サンプルコードのひらがなフォントは以下のフォントを使用しています。(ライセンスOK)
8*8ドット日本語フォント「美咲フォント」
なお、ひらがなフォントは134〜159(144を除く)および224〜253に設定されます。
(マまではカナ-32、ミ以降はカナ+32)
プチコンmkII 向けの QR コードは、作者サイトにて公開されています。
- CLEAR:GOSUB@CLRALL
- PNLTYPE”OFF”
- GOSUB@LDFONT
- GOSUB@LDSP
- GOSUB@LDKEYMAP
- GOSUB@DRAWKB
- TT=524287
- GBOX 63,63,193,97,11
- IX=8:IY=8:IMAX=64:ICPL=16
- GOSUB@LIN
- ?T$
- END
- @LIN
- T$=MID$(T$,0,IMAX):LENT=LEN(T$)
- SPC$=””
- FOR I=0 TO IMAX−1
- SPC$=SPC$+” ”
- NEXT
- ISP$=””:ILM=FLOOR(IMAX/ICPL)+(IMAX%ICPL!=0)
- FOR I=0 TO ICPL−1
- ISP$=ISP$+” ”
- NEXT
- GOSUB@PUTITXT
- SPSET 0,0,0,0,0,1
- GOSUB@PUTICUR
- GOSUB@DRAWKB
- TT=524287
- @LP
- VSYNC 1
- OB=B:B=BUTTON()
- PB=(OB XOR &HFFF)AND B
- OSF=SF:SF=SF OR((B AND 256)/256)
- IF(OB AND 256)!=0 AND(B AND 256)==0 THEN SF=0
- IF SF!=OSF THEN GOSUB@DRAWKB
- GOSUB@KEYCHK
- IF RET==0 THEN @LINK
- IF RET>255 THEN GOSUB @CNTLKEY:GOTO@LINK
- IF SF==1 THEN SF=(B AND 256)/256:GOSUB@DRAWKB
- IF RET==13 THEN @LINK
- T$=MID$(MID$(T$,0,CUR)+CHR$(RET)+MID$(T$,CUR,LENT−CUR)+SPC$,0,IMAX)
- LENT=LEN(T$):CUR=CUR+(CUR<LENT)*(CUR<IMAX−1)
- GOSUB@PUTITXT
- GOSUB@PUTICUR
- @LINK
- IF(PB AND 1)THEN RET=260:GOSUB@CNTLKEY:GOTO@LP
- IF(PB AND 2)/2THEN RET=261:GOSUB@CNTLKEY:GOTO@LP
- IF(PB AND 4)/4THEN RET=262:GOSUB@CNTLKEY:GOTO@LP
- IF(PB AND 8)/8THEN RET=263:GOSUB@CNTLKEY:GOTO@LP
- IF(PB AND 128)/128THEN RET=258:GOSUB@CNTLKEY:GOTO@LP
- IF(PB AND 1024)/1024THEN RET=13
- IF RET!=13 AND RET!=259 THEN @LP
- SPCLR 0:GPAGE 0:GCLS:CLS
- IF RET==259 THEN T$=””
- RETURN
- @CNTLKEY
- ON RET−256 GOTO @SF,@CL,@BS,@NOP,@UP,@DN,@LF,@RT,@CHGMD,@CHGMD,@CHGMD,@CHGMD
- @NOP
- RETURN
- @SF
- SF=SF−1:GOSUB@DRAWKB:RETURN
- @CL
- CL=CL−1:GOSUB@DRAWKB:RETURN
- @BS
- IF CUR<1 THEN RETURN
- T$=MID$(MID$(T$,0,CUR−1)+MID$(T$,CUR,LENT−CUR)+SPC$,0,IMAX)
- LENT=LEN(T$):CUR=CUR−1
- GOSUB@PUTITXT:GOSUB@PUTICUR
- RETURN
- @UP
- CUR=CUR−ICPL
- IF CUR<0 THEN CUR=0
- GOSUB@PUTICUR
- RETURN
- @DN
- CUR=CUR+ICPL
- IF CUR>=LENT THEN CUR=LENT
- IF CUR>=IMAX−1 THEN CUR=IMAX−1
- GOSUB@PUTICUR
- RETURN
- @LF
- CUR=CUR−(CUR>0)
- GOSUB@PUTICUR
- RETURN
- @RT
- CUR=CUR+(CUR<LENT)*(CUR<IMAX−1)
- GOSUB@PUTICUR
- RETURN
- @CHGMD
- MODE=MODE−264:SF=0:CL=0
- GOSUB@DRAWKB:RETURN
- @PUTITXT
- PN=FLOOR(LENT/ICPL)+(LENT%ICPL!=0)
- FOR Y=0 TO ILM−1
- LOCATE IX,IY+Y
- IF Y>=PN THEN ?ISP$;:GOTO@PTN
- ?MID$(MID$(T$,Y*ICPL,ICPL)+ISP$,0,ICPL);
- @PTN
- NEXT
- RETURN
- @PUTICUR
- SPANIM 0,2,30,0
- SPOFS 0,(IX+CUR%ICPL)*8,(IY+FLOOR(CUR/ICPL))*8
- RETURN
- @LDSP
- C$=””
- FOR I=0 TO 7
- C$=C$+”00000000”
- NEXT
- FOR I=1 TO 7
- CHRSET”SPU0”,I,C$
- NEXT
- C$=MID$(C$,0,56)+”CCCCCCCC”
- CHRSET”SPU0”,0,C$
- RETURN
- @KEYCHK
- RET=0
- IF 1−TCHST THEN RETURN
- OT=TT:TT=TCHTIME
- IF OT<TT THEN RETURN
- TCX=TCHX:TCY=TCHY
- TX=FLOOR(TCX/16)
- TY=FLOOR(TCY/16)
- TPOS=TX+TY*16
- GPAGE 1
- C=GSPOIT(TCX,TCY)
- GPAGE 0
- IF C<15 THEN RETURN
- TB=MODE*2+(SF XOR CL)
- RET=KM(TB,TPOS)
- RETURN
- @DRAWKB
- GPAGE 1
- TB=MODE*2+(SF XOR CL)
- FOR Y=0 TO 11
- FOR X=0 TO 15
- POS=X+Y*16
- K=KM(TB,POS)
- N=(X<15)*KM(TB,POS+1)
- GFILL X*16,Y*16,X*16+14+(N==K OR K==0),Y*16+14,15*(K>0)
- IF K==0 THEN @BN
- IF K>=256 THEN GOSUB@PUTSP:GOTO@BN
- GPUTCHR X*16+4,Y*16+4,”BGF0”,K,1,1:LSP=0
- @BN
- NEXT
- NEXT
- PNLSTR 0,0,”CAPS LOCK”,2−CL*2
- PNLSTR 0,1,”SHIFT”,2−SF*2
- GPAGE 0:RETURN
- @PUTSP
- IF K!=LSP THEN LSP=K:SC=0
- ON K−256 GOSUB @PSFT,@PCPL,@PBS,@PESC,@PUD,@PUD,@PLF,@PRT,@PALP,@PHG,@PKN,@PMK
- SC=SC+1:RETURN
- @PSFT
- IF MODE==0 AND SC<2 THEN GPUTCHR X*16+8*(SC==0),Y*16+4,”BGU0”,K−255+SC,1,1
- IF(FLOOR((MODE+1)/2)==1)AND SC<2 THEN GPUTCHR X*16+8*(SC==0),Y*16+4,”BGU0”,K−251+SC,1,1
- RETURN
- @PCPL
- IF SC<2 THEN GPUTCHR X*16+8*(SC==0),Y*16+4,”BGU0”,K−254+SC,1,1
- RETURN
- @PBS
- IF SC==0 THEN GPUTCHR X*16+8,Y*16+4,”BGF0”,66,1,1
- IF SC==1 THEN GPUTCHR X*16,Y*16+4,”BGF0”,83,1,1
- RETURN
- @PUD
- GPUTCHR X*16+4,Y*16+4,”BGF0”,K−230,1,1
- RETURN
- @PRT
- GPUTCHR X*16+4,Y*16+4,”BGF0”,28,1,1
- RETURN
- @PLF
- GPUTCHR X*16+4,Y*16+4,”BGF0”,29,1,1
- RETURN
- @PALP
- IF SC<2 THEN GPUTCHR X*16+8*(SC==0),Y*16+4,”BGU0”,K−257+SC,1,1
- RETURN
- @PKN
- IF SC==0 THEN GPUTCHR X*16+8,Y*16+4,”BGF0”,182,1,1
- IF SC==1 THEN GPUTCHR X*16,Y*16+4,”BGF0”,197,1,1
- RETURN
- @PHG
- IF SC==0 THEN GPUTCHR X*16+8,Y*16+4,”BGF0”,150,1,1
- IF SC==1 THEN GPUTCHR X*16,Y*16+4,”BGF0”,229,1,1
- RETURN
- @PMK
- IF SC<2 THEN GPUTCHR X*16+8*(SC==0),Y*16+4,”BGU0”,K−258+SC,1,1
- RETURN
- @PESC
- GPUTCHR X*16+4,Y*16+4,”BGU0”,11,1,1
- RETURN
- @LDKEYMAP
- DIM KM(8,193)
- RESTORE @KMAFIX
- FOR I=128 TO 191
- READ KM(0,I)
- FOR J=1 TO 7
- KM(J,I)=KM(0,I)
- NEXT
- NEXT
- RESTORE @KMA1
- FOR I=0 TO 127
- READ KM(0,I)
- NEXT
- RESTORE @KMA2
- FOR I=0 TO 127
- READ KM(1,I)
- NEXT
- RESTORE @KMK1
- FOR I=0 TO 127
- READ KM(4,I)
- K=KM(4,I)
- K=K+(K>191)*(K<222)*32
- K=K−(K>165)*(K!=176)*(K<192)*32
- KM(2,I)=K
- NEXT
- RESTORE @KMK2
- FOR I=0 TO 127
- READ KM(5,I)
- K=KM(5,I)
- K=K+(K>191)*(K<222)*32
- K=K−(K>165)*(K!=176)*(K<192)*32
- KM(3,I)=K
- NEXT
- RETURN
- @CLRALL
- CLS:COLOR 0:GPAGE 0
- ?”Now Initializing...”
- KEY 1,”FILES”+CHR$(13)
- KEY 2,”LOAD”+CHR$(34)
- KEY 3,”SAVE”+CHR$(34)
- KEY 4,”CONT”+CHR$(13)
- KEY 5,”RUN”+CHR$(13)
- FOR I=0 TO 255
- COLINIT ”BG”,I
- COLINIT ”SP”,I
- COLINIT ”GRP”,I
- NEXT
- FOR I=0 TO 1
- BGPAGE I:BGCLIP 0,0,31,23:BGOFS I,0,0
- FOR Y=0 TO 63
- FOR X=0 TO 63
- BGPUT 0,X,Y,0,0,0,0
- BGPUT 1,X,Y,0,0,0,0
- NEXT
- NEXT
- GPAGE I
- GCOLOR 0:GCLS
- SPPAGE I:SPCLR
- CHRINIT ”BGF0”
- CHRINIT”BGU0”
- CHRINIT”BGU1”
- CHRINIT”BGU2”
- CHRINIT”BGU3”
- NEXT
- GPAGE 0:BGPAGE 0:SPPAGE 0
- CHRINIT”SPU0”
- CHRINIT”SPU1”
- CHRINIT”SPU2”
- CHRINIT”SPU3”
- CHRINIT”SPU4”
- CHRINIT”SPU5”
- CHRINIT”SPU6”
- CHRINIT”SPU7”
- CHRINIT”SPS0”
- CLS
- RETURN
- @LDFONT
- DIM FNTM$(16)
- RESTORE @FONTM
- FOR I=0 TO 15
- READ FNTM$(I)
- NEXT
- RESTORE @HIRA
- FOR I=134 TO 159
- IF I==144 THEN I=I+1
- GOSUB@READCH
- BGPAGE 0:CHRSET ”BGF0”,I,C$
- BGPAGE 1:CHRSET ”BGF0”,I,C$
- NEXT
- FOR I=224 TO 253
- GOSUB@READCH
- BGPAGE 0:CHRSET ”BGF0”,I,C$
- BGPAGE 1:CHRSET ”BGF0”,I,C$
- NEXT
- RESTORE @SPKEY
- FOR I=1 TO 11
- GOSUB @READCH
- BGPAGE 0:CHRSET ”BGU0”,I,C$
- BGPAGE 1:CHRSET ”BGU0”,I,C$
- NEXT
- RETURN
- @READCH
- C$=””:READ H$
- FOR J=0 TO 15
- C$=C$+FNTM$(VAL(”&H”+MID$(H$,J,1)))
- NEXT
- RETURN
- @FONTM
- DATA”0000”,”000F”,”00F0”,”00FF”
- DATA”0F00”,”0F0F”,”0FF0”,”0FFF”
- DATA”F000”,”F00F”,”F0F0”,”F0FF”
- DATA”FF00”,”FF0F”,”FFF0”,”FFFF”
- @KMK1
- DATA 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
- DATA 0,256,256,0,220,215,212,207,202,197,192,187,182,177,0,0
- DATA 0,222,223,0, 0,216, 0,208,203,198,193,188,183,178,0,0
- DATA 0,162,163,0, 0,217,213,209,204,199,194,189,184,179,0,0
- DATA 0,176,165,0,166,218, 0,210,205,200,195,190,185,180,0,0
- DATA 0,164,161,0,221,219,214,211,206,201,196,191,186,181,0,0
- DATA 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
- DATA 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
- @KMK2
- DATA 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
- DATA 0,256,256,0,220,215,172,207,202,197,192,187,182,167,0,0
- DATA 0,222,223,0, 0,216, 0,208,203,198,193,188,183,168,0,0
- DATA 0,162,163,0, 0,217,173,209,204,199,175,189,184,169,0,0
- DATA 0,176,165,0,166,218, 0,210,205,200,195,190,185,170,0,0
- DATA 0,164,161,0,221,219,174,211,206,201,196,191,186,171,0,0
- DATA 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
- DATA 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
- @KMA1
- DATA 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
- DATA 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
- DATA 0, 49,50,51,52,53,54,55,56,57,48,45, 94,92,258,258
- DATA 0, 81,87,69,82,84,89,85,73,79,80,64, 91, 0,0,0
- DATA 257,257,65,83,68,70,71,72,74,75,76,59, 60,93,0,0
- DATA 256,256,90,88,67,86,66,78,77,44,46,47,127, 0,256,256
- DATA 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
- DATA 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
- @KMA2
- DATA 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
- DATA 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
- DATA 0, 33, 34, 35, 36, 37, 38, 39, 40, 41, 0,61,126,124,258,258
- DATA 0,113,119,101,114,116,121,117,105,111,112,96,123, 0,0,0
- DATA 257,257, 97,115,100,102,103,104,106,107,108,43, 42,125,0,0
- DATA 256,256,122,120, 99,118, 98,110,109, 60, 62,63, 95, 0,256,256
- DATA 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
- DATA 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
- @KMAFIX
- DATA 0,264,264,0,0,258,258, 0,32, 32,32, 32,0,0,0,0
- DATA 0,265,265,0,0, 0, 0, 0, 0, 0, 0, 0,0,0,259,259
- DATA 0,266,266,0,0,260, 0,261, 0,262, 0,263,0,0,0,0
- DATA 0,267,267,0,0, 0, 0, 0, 0, 0, 0, 0,0,0,13,13
- @SPKEY
- DATA”559595DD55559500”:’SHI
- DATA”7E44446444444400”:’FT
- DATA”648A8A8A8E8A6A00”:’CA
- DATA”C6A8A8A4C2828C00”:’PS
- DATA”2127AAAAAA216600”:’コモシ゛
- DATA”08FEAE84BE08D800”:’コモシ゛
- DATA”28FE2854FE10EE00”:’エイ
- DATA”AC76AA4AFA54EA00”:’スウ
- DATA”5EE2025E10D2DE00”:’キ
- DATA”3828FE203C040C00”:’コ゛ウ
- DATA”C99292DA8A8AD100”:’ESC
- ’−−−−−−−−−−−−−−−−−−−−−−−−−−−
- ’ MISAKI FONT
- ’ (C)2002−2008 Num Komada
- ’−−−−−−−−−−−−−−−−−−−−−−−−−−−
- @HIRA
- DATA”107C207698281E00
- DATA”00103C103C5A3200
- DATA”0000484444502000
- DATA”0038003844083000
- DATA”0038007810304C00
- DATA”0020742038642800
- DATA”00082C7214100800
- DATA”0010587454182000
- DATA”0008080C38483400
- DATA”0000001864041800
- DATA”207C203C6AB26400
- DATA”0088848282502000
- DATA”3C003C4202043800
- DATA”3C007C0818284600
- DATA”20F4223C62A26C00
- DATA”2020F42A4A48B000
- DATA”107C087E24403C00
- DATA”0408304030080400
- DATA”8888BE8888881000
- DATA”003C000020403E00
- DATA”08087E0424403C00
- DATA”2020202020221C00
- DATA”08FE182818081000
- DATA”2424FE242C201E00
- DATA”3C08107E10100C00
- DATA”20F02E4048508E00
- DATA”087E101C22021C00
- DATA”003CC202021C0000
- DATA”0E74081010080600
- DATA”2020261820403E00
- DATA”20F422449C261800
- DATA”809C808090A09E00
- DATA”08485C6AB2A65600
- DATA”202CF22266AA2400
- DATA”00385492A2441800
- DATA”8484BE849CA69800
- DATA”28E4264444443800
- DATA”100810104C4AB200
- DATA”0020508806000000
- DATA”80BE88BE88BCBA00
- DATA”087E087E087C7A00
- DATA”7010247CA6C41800
- DATA”20F42260A0623C00
- DATA”08485C6AB2A25400
- DATA”107C207C22221C00
- DATA”485CE22420101000
- DATA”10BCD292BC102000
- DATA”08080E08384C3200
- DATA”3008405C62023C00
- DATA”5864444404083000
- DATA”3C08103C42323C00
- DATA”202CF42464A42200
- DATA”3C08103C42023C00
- DATA”202CF22262A22C00
- DATA”1010202050528C00
この作品に対するコメントがあれば一言どうぞ。(作品に直接関係ない質問や雑談は掲示板へ)
表示モード : [ スマホ・3DS対応表示 | クラシック表示 ]
PukiWiki 1.4.7 Copyright © 2001-2006 PukiWiki Developers Team. License is GPL. Based on "PukiWiki" 1.3 by yu-ji
ページの処理時間 : 0.139 秒 | このページの最終更新 : 2022/09/20 (火) 12:44:13 (565d) | ログイン
Copyright(C) 2011-2014 プチコンまとめWiki ◆1sxkymI8ji30