2011年05月03日投稿 / 投稿者 : 名無しさん / タグ : 投稿プログラム 実用ツール 初代対応
このプログラムは、プログラムの書き出し機能の無かった初代プチコン用のプログラムです。mkIIでは「SDメモリーカード書き込み」をご利用ください。
2ちゃんねる プチコンスレ その3 >>362 のエクスポート処理を実装してみました。(投稿者と>>362は別人です)
ただし、BEEPではなくQRコードで出力しています。
QRコードの作成には、以前投稿したToukou/QRコード作成の処理を流用していますが、それなりに差分があるため、改めて全体を載せています。
※ サーバ障害以前にこのプログラムを入力された方へ
1つ目のプログラムの13行目にあるNEXTの前のスペースを削除してください。
(Ver1.1のFOR文のバグ回避のため)
ありません。
ファンクションキーに必要な値を登録
- KEY 3,”DATA”+CHR$(34)
- KEY 4,CHR$(176)
- C$=CHR$(13)
- A$= ”N=2:GPAGE 1:GCLS 0”+C$
- A$=A$+”READ P$”+C$
- A$=A$+”FOR I=1 TO P$!=CHR$(176)”+C$
- A$=A$+” I=0:L=LEN(P$)”+C$
- A$=A$+” FOR J=0 TO L−1”+C$
- A$=A$+” C=ASC(MID$(P$,J,1))”+C$
- A$=A$+” IF C==176 THEN C=34”+C$
- A$=A$+” GPSET N%256,N/256,C”+C$
- A$=A$+” N=N+1”+C$
- A$=A$+”NEXT J”+C$
- A$=A$+” GPSET N%256,N/256,13”+C$
- A$=A$+” N=N+1”+C$
- A$=A$+” READ P$”+C$
- A$=A$+”NEXT I:N=N−3”+C$
- A$=A$+”GPSET 0,0,N/256”+C$
- A$=A$+”GPSET 1,0,N%256”+C$
- A$=A$+C$
- KEY 1,A$
複数のQRコードに分割して逆順に表示
- CLEAR
- VER=10:ECL=2:MASK=6
- TOTAL=346:RSB=4:ECW=18
- DIM F(ECW)
- FOR I=0 TO ECW−1
- READ F(I)
- NEXT
- DATA 215,234,158,94,184
- DATA 97,118,170,79,187
- DATA 152,148,252,179,5
- DATA 98,96,153
- VINF=&H0A4D3:APC=3
- DIM P(APC)
- FOR I=0 TO APC−1
- READ P(I)
- NEXT
- DATA 6,28,50
- CCI=1+(VER>=10):SIZE=17+VER*4
- DW=FLOOR(TOTAL/RSB)−ECW
- MAG=FLOOR(192/(SIZE+8))
- OX=FLOOR((256−SIZE*MAG)/2)
- OY=FLOOR((192−SIZE*MAG)/2)
- DIM D(TOTAL−ECW*RSB+1),O(TOTAL),T(DW+ECW+1),BI(RSB)
- BI(0)=0:BIC=RSB−TOTAL%RSB
- FOR I=1 TO RSB−1
- BI(I)=BI(I−1)+DW+(I−1>=BIC)
- NEXT
- DIM EI(255),IE(256)
- EI(0)=1
- FOR I=1 TO 254
- EI(I)=EI(I−1)*2
- IF EI(I)>=256 THEN EI(I)=(EI(I)−256) XOR &H1D
- NEXT
- FOR I=0 TO 254
- IE(EI(I))=I
- NEXT
- COLOR 1:GPAGE 1
- TDW=TOTAL−ECW*RSB−CCI−1
- DATASIZE=GSPOIT(0,0)*256+GSPOIT(1,0)
- LAST=FLOOR((DATASIZE+TDW−1)/TDW)
- FOR CUR=LAST TO 1 STEP −1
- POS=(CUR−1)*TDW+2
- L=TDW
- IF CUR==LAST THEN L=DATASIZE−POS+2
- GPAGE 1
- D(0)=4
- D(1)=FLOOR(L/256)
- D(CCI)=L%256
- FOR I=0 TO L−1
- C=GSPOIT(POS%256,POS/256)
- IF C!=13AND(C<32OR 126<C)AND(C<161OR 223<C)THEN C=63
- D(I+CCI+1)=C
- POS=POS+1
- NEXT
- D(L+CCI+1)=0
- GPAGE 0
- FOR I=0 TO L+CCI
- D(I)=(D(I)*16+FLOOR(D(I+1)/16))%256
- NEXT
- FOR I=1 TO TOTAL−ECW*RSB−L−CCI−1
- D(L+I+CCI)=&H11+(I%2==1)*(&HEC−&H11)
- NEXT
- I=0
- FOR J=0 TO DW−1
- FOR K=0 TO RSB−1
- O(I)=D(BI(K)+J):I=I+1
- NEXT
- NEXT
- FOR K=BIC TO RSB−1
- O(I)=D(BI(K)+J):I=I+1
- NEXT
- FOR I=0 TO RSB−1
- L=DW+(I>=BIC)
- FOR J=0 TO L−1
- T(J)=D(BI(I)+J)
- NEXT
- FOR J=0 TO ECW−1
- T(J+L)=0
- NEXT
- FOR J=0 TO L−1
- IF T(J)==0 GOTO @SKIP1
- E=IE(T(J))
- FOR K=0 TO ECW−1
- T(J+K+1)=T(J+K+1) XOR EI((F(K)+E)%255)
- NEXT
- @SKIP1
- NEXT
- FOR J=0 TO ECW−1
- O(TOTAL−(ECW−J)*RSB+I)=T(J+L)
- NEXT
- NEXT
- VISIBLE 1,1,0,0,0,0
- GCLS &H1E
- GFILL OX,OY,OX+SIZE−1,OY+SIZE−1,&H0F
- GFILL OX ,OY ,OX+8,OY+8,&H1E
- GBOX OX ,OY ,OX+6,OY+6,&H1F
- GFILL OX+2,OY+2,OX+4,OY+4,&H1F
- GFILL OX+SIZE−8,OY ,OX+SIZE−1,OY+8,&H1E
- GBOX OX+SIZE−7,OY ,OX+SIZE−1,OY+6,&H1F
- GFILL OX+SIZE−5,OY+2,OX+SIZE−3,OY+4,&H1F
- GFILL OX ,OY+SIZE−8,OX+8,OY+SIZE−1,&H1E
- GBOX OX ,OY+SIZE−7,OX+6,OY+SIZE−1,&H1F
- GFILL OX+2,OY+SIZE−5,OX+4,OY+SIZE−3,&H1F
- FOR I=8 TO SIZE−9
- GPSET OX+I,OY+6,&H1E+(I%2==0)
- GPSET OX+6,OY+I,&H1E+(I%2==0)
- NEXT
- GPSET OX+8,OY+SIZE−8,&H1F
- FOR I=0 TO APC−1
- FOR J=0 TO APC−1
- IF(I==0 AND J==0)OR(I==0 AND J==APC−1)OR(I==APC−1 AND J==0)GOTO @SKIP2
- GBOX OX+P(I)−2,OY+P(J)−2,OX+P(I)+2,OY+P(J)+2,&H1F
- GBOX OX+P(I)−1,OY+P(J)−1,OX+P(I)+1,OY+P(J)+1,&H1E
- GPSET OX+P(I),OY+P(J),&H1F
- @SKIP2
- NEXT
- NEXT
- IF VER<7 GOTO @SKIP3
- D=VINF
- FOR I=0 TO 17
- GPSET OX+SIZE−11+I%3,OY+I/3,&H1E+(D AND 1)
- GPSET OX+I/3,OY+SIZE−11+I%3,&H1E+(D AND 1)
- D=FLOOR(D/2)
- NEXT
- @SKIP3
- X=SIZE−2:Y=SIZE:F=1:D=−1
- FOR I=0 TO TOTAL−1
- J=128
- @LOOP1
- @LOOP2
- X=X+F*2−1:Y=Y+F*D:F=1−F
- IF Y<0 THEN Y=0:X=X−2:D=1
- IF Y>=SIZE THEN Y=SIZE−1:X=X−2:D=−1
- IF X==6 THEN X=X−1
- IF GSPOIT(OX+X,OY+Y)!=&H0F GOTO @LOOP2
- IF O(I) AND J THEN GPSET OX+X,OY+Y,&H0E
- J=J/2
- IF J>=1 GOTO @LOOP1
- NEXT
- FOR I=0 TO SIZE−1
- FOR J=0 TO SIZE−1
- ON MASK GOSUB @0,@4,@2,@6,@1,@5,@3,@7
- C=GSPOIT(OX+J,OY+I)
- IF C<&H10 AND A THEN GPSET OX+J,OY+I,C XOR 1
- NEXT
- NEXT
- D=MASK*4+ECL:T=D
- FOR I=0 TO 4
- IF T AND 1 THEN T=T XOR &H765
- T=T/2
- NEXT
- D=D+T*32 XOR &H2415
- X=0:Y=SIZE−1
- FOR I=0 TO 14
- GPSET OX+X,OY+8,&H1E+(D AND 1)
- GPSET OX+8,OY+Y,&H1E+(D AND 1)
- X=X+1+(X==5):Y=Y−1−(Y==7)
- IF X==8 THEN X=SIZE−8:Y=8
- D=FLOOR(D/2)
- NEXT
- FOR I=SIZE−1 TO 0 STEP −1
- Y=OY+I*MAG
- FOR J=SIZE−1 TO 0 STEP −1
- X=OX+J*MAG
- GFILL X,Y,X+MAG−1,Y+MAG−1,GSPOIT(OX+J,OY+I)
- NEXT
- NEXT
- VISIBLE 1,1,0,0,0,1:CLS
- ?MID$(”00”,0,3−LEN(STR$(CUR)));STR$(CUR)
- ?”−−−”
- ?MID$(”00”,0,3−LEN(STR$(LAST)));STR$(LAST)
- FOR I=0 TO 1:I=BUTTON()!=0:NEXT
- NEXT
- COLOR 0:CLS:GCLS 0:END
- @0
- A=(I+J)%2==0:RETURN
- @1
- A=I%2==0:RETURN
- @2
- A=J%3==0:RETURN
- @3
- A=(I+J)%3==0:RETURN
- @4
- A=(FLOOR(I/2)+FLOOR(J/3))%2==0:RETURN
- @5
- A=I*J%2+I*J%3==0:RETURN
- @6
- A=(I*J%2+I*J%3)%2==0:RETURN
- @7
- A=(I*J%3+(I+J)%2)%2==0:RETURN
QRコードのサイズを変更したい場合は、2〜17行を以下で置き換えてください。
サイズが大きくなれば、分割数が減って取り込みが楽になるので、読める範囲でできるだけ大きなサイズにすることをお勧めします。
バージョン17、誤り訂正レベルL(2倍に拡大される最大サイズ)
- VER=17:ECL=2:MASK=6
- TOTAL=815:RSB=6:ECW=28
- DIM F(ECW)
- FOR I=0 TO ECW−1
- READ F(I)
- NEXT
- DATA 168,223,200,104,224
- DATA 234,108,180,110,190
- DATA 195,147,205,27,232
- DATA 201,21,43,245,87
- DATA 42,195,212,119,242
- DATA 37,9,123
- VINF=&H1145D:APC=4
- DIM P(APC)
- FOR I=0 TO APC−1
- READ P(I)
- NEXT
- DATA 6,30,54,78
バージョン20、誤り訂正レベルL
- VER=20:ECL=2:MASK=6
- TOTAL=1085:RSB=8:ECW=28
- DIM F(ECW)
- FOR I=0 TO ECW−1
- READ F(I)
- NEXT
- DATA 168,223,200,104,224
- DATA 234,108,180,110,190
- DATA 195,147,205,27,232
- DATA 201,21,43,245,87
- DATA 42,195,212,119,242
- DATA 37,9,123
- VINF=&H149A6:APC=4
- DIM P(APC)
- FOR I=0 TO APC−1
- READ P(I)
- NEXT
- DATA 6,34,62,90
バージョン30、誤り訂正レベルL
- VER=30:ECL=2:MASK=6
- TOTAL=2185:RSB=15:ECW=30
- DIM F(ECW)
- FOR I=0 TO ECW−1
- READ F(I)
- NEXT
- DATA 41,173,145,152,216
- DATA 31,179,182,50,48
- DATA 110,86,239,96,222
- DATA 125,42,173,226,193
- DATA 224,130,156,37,251
- DATA 216,238,40,192,180
- VINF=&H1ED75:APC=6
- DIM P(APC)
- FOR I=0 TO APC−1
- READ P(I)
- NEXT
- DATA 6,26,52,78,104,130
バージョン40、誤り訂正レベルL(QRコード最大のサイズ)
- VER=40:ECL=2:MASK=6
- TOTAL=3706:RSB=25:ECW=30
- DIM F(ECW)
- FOR I=0 TO ECW−1
- READ F(I)
- NEXT
- DATA 41,173,145,152,216
- DATA 31,179,182,50,48
- DATA 110,86,239,96,222
- DATA 125,42,173,226,193
- DATA 224,130,156,37,251
- DATA 216,238,40,192,180
- VINF=&H28C69:APC=7
- DIM P(APC)
- FOR I=0 TO APC−1
- READ P(I)
- NEXT
- DATA 6,30,58,86,114,142,170
表示モード : [ スマホ・3DS対応表示 | クラシック表示 ]
PukiWiki 1.4.7 Copyright © 2001-2006 PukiWiki Developers Team. License is GPL. Based on "PukiWiki" 1.3 by yu-ji
ページの処理時間 : 0.136 秒 | このページの最終更新 : 2022/09/20 (火) 12:43:58 (565d) | ログイン
Copyright(C) 2011-2014 プチコンまとめWiki ◆1sxkymI8ji30