プチコンまとめWiki (初代/mkII)

Toukou/プログラムのエクスポート の変更点


#title(投稿プログラム : プログラムのエクスポート)
#contents
/////////////////////////////////
// 適当にタグをつけることができます。半角のコンマ区切りで複数つけられます。
// タグをつけると、同じタグが付いたページを検索することができます。

2011年05月03日投稿
/ 投稿者 : 名無しさん
/ &tag(投稿プログラム,実用ツール,初代対応);

/////////////////////////////////
// ここに概要とか書きます。

* 概要 [#s9616a23]
''このプログラムは、プログラムの書き出し機能の無かった初代プチコン用のプログラムです。mkIIでは「SDメモリーカード書き込み」をご利用ください。''

2ちゃんねる プチコンスレ その3 >>362 のエクスポート処理を実装してみました。(投稿者と>>362氏とは別人です)~
2ちゃんねる プチコンスレ その3 >>362 のエクスポート処理を実装してみました。(投稿者と>>362は別人です)~
ただし、BEEPではなくQRコードで出力しています。

QRコードの作成には、以前投稿した[[Toukou/QRコード作成]]の処理を流用していますが、それなりに差分があるため、改めて全体を載せています。

''※ サーバ障害以前にこのプログラムを入力された方へ''~
1つ目のプログラムの13行目にある&basic{NEXT};の前のスペースを削除してください。~
(Ver1.1のFOR文のバグ回避のため)

** 使い方 [#gd268da7]
+ 最初のプログラムを実行(ファンクションキーに必要な値を登録)
+ 書き出したいプログラムをロード
+ 書き出したいプログラムのすべての行頭にF3(DATA")を挿入
+ 書き出したいプログラム中のすべてのダブルクォーテーションをF4(-)に置き換える
+ 書き出したいプログラムの先頭にF1(GRP1に書きだすコード)を挿入
+ 書き出したいプログラムの末尾にF3+F4(DATA"-)を挿入
+ 書き出したいプログラムを実行
+ 2つ目のプログラムを実行(複数のQRコードに分割して逆順に表示)~
QRコード表示中になにかボタンを押すと、次のQRコードが表示される

** 注意 [#g5be4d0a]
- 途中でGRP1に書き出す関係で、このプログラムで書き出せる文字数の最大は、49150文字(256*192-2)になります。
- F4の値は、マイナス記号ではなく、キーボードからは直接入力できない長音記号を使用しています。
- 携帯などで読み込んだ際の文字化けを避けるため、プチコン特有の記号はすべて"?"に置き換えて書きだしています。~
置き換えが必要なければ、53行目を削除してください。
- QRコードを読めるものが古い携帯しかなかったため、QRコードを小さめのサイズで作成しています。~
そのため、大量のソースを変換すると、QRコードの分割数が多くなります。(2つ目のプログラムで15分割程度)~
より大きなQRコードを読めるようであれば、[[Toukou/QRコード作成]]のページを参考にパラメータを修正してください。
- 携帯でQRコードの内容をコピーして、メールの本文の先頭に貼り付けるという手順を繰り返すことを想定しているため、QRコードを逆順で生成するようになっています。~
逆順にする必要がなければ、43行目のFOR文の順番を変えてください。
- 使い方の7.でSyntax errorが出る場合は、多分使い方の4.をやり忘れています。(逆に4.をやらずに7.をやって、エラーの出る箇所のみ置き換えるという手もあります)
- 使い方の7.でOut of DATAが出る場合は、多分使い方の6.をやり忘れています。

/////////////////////////////////

* スクリーンショット・動画 [#ma2ab500]
ありません。

// ページを作成すると、画像の添付ができるようになります。(作成する前はできません)
// 画像を添付したら、以下の書式でページ内に貼り付けられます。
// #ref(添付ファイル名)

// 以下の書式で、動画を貼り付けられます。
// #youtube(0HWX7kovgY8)
// #nicovideo(sm13684820)

/////////////////////////////////

* プログラムリスト [#o9b14c6e]
ファンクションキーに必要な値を登録
#basic{{
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コードに分割して逆順に表示
#basic{{
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コードのサイズの変更 [#u084b7cc]
QRコードのサイズを変更したい場合は、2〜17行を以下で置き換えてください。~
サイズが大きくなれば、分割数が減って取り込みが楽になるので、読める範囲でできるだけ大きなサイズにすることをお勧めします。

バージョン17、誤り訂正レベルL(2倍に拡大される最大サイズ)
#basic{{
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
#basic{{
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
#basic{{
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コード最大のサイズ)
#basic{{
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
}}

/////////////////////////////////
// コメントを募集したくないなら、ここから下は削除してください

* CHECKER FLAG (ひとことコメント) [#mad5b137]
- この作品に対するコメントがあれば一言どうぞ。(作品に直接関係ない質問や雑談は[[掲示板>Board]]へ)
- ''名無しさん'' : 投稿に使えそうでうれしいけど、分割数が多くて厳しいな。どう修正すれば大きなQRコードになるのかな? (&new{2011/05/06 (金) 13:14:02};)
- ''投稿者'' : とりあえず、こちらで検証用に作っておいた設定を載せておきます。 (&new{2011/05/06 (金) 21:33:57};)
- ''投稿者'' : 「QRコード作成」のページに設定方法を書いておいたので、上記以外の大きさにしたい場合は参考にしてください。 (&new{2011/05/06 (金) 23:22:09};)
- ''投稿者'' : こちらの環境でバージョン20まで読めることが確認できたので、その設定を追加しておきます。 (&new{2011/05/08 (日) 13:36:41};)
- ''名無しさん'' : Ver.1.1のバグのため、改行のみの行の処理時に、一つ目のリストの8行目のforがエラーになります。 (&new{2011/07/17 (日) 14:57:15};)
- ''投稿者'' : ここに載せるに当たり、そのバグは回避してあります(13行目の先頭のスペースを削除)。 (&new{2011/07/18 (月) 20:46:36};)
- ''投稿者'' : サーバ障害以前にこのプログラムを入力された方が、修正されていることに気づかないというのも問題なので、注意書きを追加しました。 (&new{2011/07/18 (月) 22:05:29};)
- ''プチコンまとめWiki管理人'' : ページを作り直していただくことで大変お手数をおかけしてしまいました。復旧された[[サーバダウン前のページのソース:http://wiki.hosiken.jp/petc/?plugin=attach&pcmd=open&file=oldsource.txt&refer=Toukou%2F%A5%D7%A5%ED%A5%B0%A5%E9%A5%E0%A4%CE%A5%A8%A5%AF%A5%B9%A5%DD%A1%BC%A5%C8]]を添付させていただきました。 (&new{2011/07/30 (土) 13:35:49};)
- ''名無しさん'' : 勝手に復旧してしまい、かえって手間をかけさせてしまって申し訳ありません。こちらでマージさせて頂きました。 (&new{2011/07/30 (土) 14:03:32};)
- ''プチコンまとめWiki管理人'' : いえいえとんでもないです! ご対応ありがとうございました! (&new{2011/07/30 (土) 14:06:03};)
- ''名無しさん'' : QRコードをはってください!! (&new{2013/01/17 (木) 20:37:58};)
- ''名無しさん'' : mkIIならこのプログラムは不要では? (&new{2013/01/17 (木) 20:54:24};)
- ''道産子の初心者'' : ↑同感です。 (&new{2013/01/17 (木) 21:01:05};)
- ''名無しさん'' :   このプログラムは、プログラムの書き出し機能の無かった初代プチコン用のプログラムです。mkIIでは「SDメモリーカード書き込み」をご利用ください。この言葉が目に入らないの? (&new{2013/01/17 (木) 21:56:54};)
- ''道産子の初心者'' : 投稿者さんへ プチコントーナメントで、初代プチコンの人向けとして掲載させていただきました。 (&new{2013/02/16 (土) 18:14:18};)

#comment

表示モード : [ スマホ・3DS対応表示 | クラシック表示 ]
PukiWiki 1.4.7 Copyright © 2001-2006 PukiWiki Developers Team. License is GPL. Based on "PukiWiki" 1.3 by yu-ji
ページの処理時間 : 0.005 秒 | ログイン
Copyright(C) 2011-2014 プチコンまとめWiki ◆1sxkymI8ji30