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

投稿プログラム : プログラムのエクスポート

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

概要

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

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

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

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

使い方

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

注意

  • 途中で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.をやり忘れています。

スクリーンショット・動画

ありません。

プログラムリスト

ファンクションキーに必要な値を登録

  1. KEY 3,”DATA”+CHR$(34)
  2. KEY 4,CHR$(176)
  3. C$=CHR$(13)
  4. A$=   ”N=2:GPAGE 1:GCLS 0”+C$
  5. A$=A$+”READ P$”+C$
  6. A$=A$+”FOR I=1 TO P$!=CHR$(176)”+C$
  7. A$=A$+” I=0:L=LEN(P$)”+C$
  8. A$=A$+” FOR J=0 TO L−1”+C$
  9. A$=A$+”  C=ASC(MID$(P$,J,1))”+C$
  10. A$=A$+”  IF C==176 THEN C=34”+C$
  11. A$=A$+”  GPSET N%256,N/256,C”+C$
  12. A$=A$+”  N=N+1”+C$
  13. A$=A$+”NEXT J”+C$
  14. A$=A$+” GPSET N%256,N/256,13”+C$
  15. A$=A$+” N=N+1”+C$
  16. A$=A$+” READ P$”+C$
  17. A$=A$+”NEXT I:N=N−3”+C$
  18. A$=A$+”GPSET 0,0,N/256”+C$
  19. A$=A$+”GPSET 1,0,N%256”+C$
  20. A$=A$+C$
  21. KEY 1,A$

複数のQRコードに分割して逆順に表示

  1. CLEAR
  2. VER=10:ECL=2:MASK=6
  3. TOTAL=346:RSB=4:ECW=18
  4. DIM F(ECW)
  5. FOR I=0 TO ECW−1
  6.  READ F(I)
  7. NEXT
  8. DATA 215,234,158,94,184
  9. DATA 97,118,170,79,187
  10. DATA 152,148,252,179,5
  11. DATA 98,96,153
  12. VINF=&H0A4D3:APC=3
  13. DIM P(APC)
  14. FOR I=0 TO APC−1
  15.  READ P(I)
  16. NEXT
  17. DATA 6,28,50
  18. CCI=1+(VER>=10):SIZE=17+VER*4
  19. DW=FLOOR(TOTAL/RSB)−ECW
  20. MAG=FLOOR(192/(SIZE+8))
  21. OX=FLOOR((256−SIZE*MAG)/2)
  22. OY=FLOOR((192−SIZE*MAG)/2)
  23. DIM D(TOTAL−ECW*RSB+1),O(TOTAL),T(DW+ECW+1),BI(RSB)
  24. BI(0)=0:BIC=RSB−TOTAL%RSB
  25. FOR I=1 TO RSB−1
  26.  BI(I)=BI(I−1)+DW+(I−1>=BIC)
  27. NEXT
  28. DIM EI(255),IE(256)
  29. EI(0)=1
  30. FOR I=1 TO 254
  31.  EI(I)=EI(I−1)*2
  32.  IF EI(I)>=256 THEN EI(I)=(EI(I)−256) XOR &H1D
  33. NEXT
  34. FOR I=0 TO 254
  35.  IE(EI(I))=I
  36. NEXT
  37. COLOR 1:GPAGE 1
  38. TDW=TOTAL−ECW*RSB−CCI−1
  39. DATASIZE=GSPOIT(0,0)*256+GSPOIT(1,0)
  40. LAST=FLOOR((DATASIZE+TDW−1)/TDW)
  41. FOR CUR=LAST TO 1 STEP −1
  42. POS=(CUR−1)*TDW+2
  43. L=TDW
  44. IF CUR==LAST THEN L=DATASIZE−POS+2
  45. GPAGE 1
  46. D(0)=4
  47. D(1)=FLOOR(L/256)
  48. D(CCI)=L%256
  49. FOR I=0 TO L−1
  50.  C=GSPOIT(POS%256,POS/256)
  51.  IF C!=13AND(C<32OR 126<C)AND(C<161OR 223<C)THEN C=63
  52.  D(I+CCI+1)=C
  53.  POS=POS+1
  54. NEXT
  55. D(L+CCI+1)=0
  56. GPAGE 0
  57. FOR I=0 TO L+CCI
  58.  D(I)=(D(I)*16+FLOOR(D(I+1)/16))%256
  59. NEXT
  60. FOR I=1 TO TOTAL−ECW*RSB−L−CCI−1
  61.  D(L+I+CCI)=&H11+(I%2==1)*(&HEC−&H11)
  62. NEXT
  63. I=0
  64. FOR J=0 TO DW−1
  65.  FOR K=0 TO RSB−1
  66.   O(I)=D(BI(K)+J):I=I+1
  67.  NEXT
  68. NEXT
  69. FOR K=BIC TO RSB−1
  70.  O(I)=D(BI(K)+J):I=I+1
  71. NEXT
  72. FOR I=0 TO RSB−1
  73.  L=DW+(I>=BIC)
  74.  FOR J=0 TO L−1
  75.   T(J)=D(BI(I)+J)
  76.  NEXT
  77.  FOR J=0 TO ECW−1
  78.   T(J+L)=0
  79.  NEXT
  80.  FOR J=0 TO L−1
  81.   IF T(J)==0 GOTO @SKIP1
  82.   E=IE(T(J))
  83.   FOR K=0 TO ECW−1
  84.    T(J+K+1)=T(J+K+1) XOR EI((F(K)+E)%255)
  85.   NEXT
  86.   @SKIP1
  87.  NEXT
  88.  FOR J=0 TO ECW−1
  89.   O(TOTAL−(ECW−J)*RSB+I)=T(J+L)
  90.  NEXT
  91. NEXT
  92. VISIBLE 1,1,0,0,0,0
  93. GCLS &H1E
  94. GFILL OX,OY,OX+SIZE−1,OY+SIZE−1,&H0F
  95. GFILL OX  ,OY  ,OX+8,OY+8,&H1E
  96. GBOX  OX  ,OY  ,OX+6,OY+6,&H1F
  97. GFILL OX+2,OY+2,OX+4,OY+4,&H1F
  98. GFILL OX+SIZE−8,OY  ,OX+SIZE−1,OY+8,&H1E
  99. GBOX  OX+SIZE−7,OY  ,OX+SIZE−1,OY+6,&H1F
  100. GFILL OX+SIZE−5,OY+2,OX+SIZE−3,OY+4,&H1F
  101. GFILL OX  ,OY+SIZE−8,OX+8,OY+SIZE−1,&H1E
  102. GBOX  OX  ,OY+SIZE−7,OX+6,OY+SIZE−1,&H1F
  103. GFILL OX+2,OY+SIZE−5,OX+4,OY+SIZE−3,&H1F
  104. FOR I=8 TO SIZE−9
  105.  GPSET OX+I,OY+6,&H1E+(I%2==0)
  106.  GPSET OX+6,OY+I,&H1E+(I%2==0)
  107. NEXT
  108. GPSET OX+8,OY+SIZE−8,&H1F
  109. FOR I=0 TO APC−1
  110.  FOR J=0 TO APC−1
  111.   IF(I==0 AND J==0)OR(I==0 AND J==APC−1)OR(I==APC−1 AND J==0)GOTO @SKIP2
  112.   GBOX OX+P(I)−2,OY+P(J)−2,OX+P(I)+2,OY+P(J)+2,&H1F
  113.   GBOX OX+P(I)−1,OY+P(J)−1,OX+P(I)+1,OY+P(J)+1,&H1E
  114.   GPSET OX+P(I),OY+P(J),&H1F
  115.   @SKIP2
  116.  NEXT
  117. NEXT
  118. IF VER<7 GOTO @SKIP3
  119. D=VINF
  120. FOR I=0 TO 17
  121.  GPSET OX+SIZE−11+I%3,OY+I/3,&H1E+(D AND 1)
  122.  GPSET OX+I/3,OY+SIZE−11+I%3,&H1E+(D AND 1)
  123.  D=FLOOR(D/2)
  124. NEXT
  125. @SKIP3
  126. X=SIZE−2:Y=SIZE:F=1:D=−1
  127. FOR I=0 TO TOTAL−1
  128.  J=128
  129.  @LOOP1
  130.   @LOOP2
  131.    X=X+F*2−1:Y=Y+F*D:F=1−F
  132.    IF Y<0 THEN Y=0:X=X−2:D=1
  133.    IF Y>=SIZE THEN Y=SIZE−1:X=X−2:D=−1
  134.    IF X==6 THEN X=X−1
  135.   IF GSPOIT(OX+X,OY+Y)!=&H0F GOTO @LOOP2
  136.   IF O(I) AND J THEN GPSET OX+X,OY+Y,&H0E
  137.   J=J/2
  138.  IF J>=1 GOTO @LOOP1
  139. NEXT
  140. FOR I=0 TO SIZE−1
  141.  FOR J=0 TO SIZE−1
  142.   ON MASK GOSUB @0,@4,@2,@6,@1,@5,@3,@7
  143.   C=GSPOIT(OX+J,OY+I)
  144.   IF C<&H10 AND A THEN GPSET OX+J,OY+I,C XOR 1
  145.  NEXT
  146. NEXT
  147. D=MASK*4+ECL:T=D
  148. FOR I=0 TO 4
  149.  IF T AND 1 THEN T=T XOR &H765
  150.  T=T/2
  151. NEXT
  152. D=D+T*32 XOR &H2415
  153. X=0:Y=SIZE−1
  154. FOR I=0 TO 14
  155.  GPSET OX+X,OY+8,&H1E+(D AND 1)
  156.  GPSET OX+8,OY+Y,&H1E+(D AND 1)
  157.  X=X+1+(X==5):Y=Y−1−(Y==7)
  158.  IF X==8 THEN X=SIZE−8:Y=8
  159.  D=FLOOR(D/2)
  160. NEXT
  161. FOR I=SIZE−1 TO 0 STEP −1
  162.  Y=OY+I*MAG
  163.  FOR J=SIZE−1 TO 0 STEP −1
  164.   X=OX+J*MAG
  165.   GFILL X,Y,X+MAG−1,Y+MAG−1,GSPOIT(OX+J,OY+I)
  166.  NEXT
  167. NEXT
  168. VISIBLE 1,1,0,0,0,1:CLS
  169. ?MID$(”00”,0,3−LEN(STR$(CUR)));STR$(CUR)
  170. ?”−−−”
  171. ?MID$(”00”,0,3−LEN(STR$(LAST)));STR$(LAST)
  172. FOR I=0 TO 1:I=BUTTON()!=0:NEXT
  173. NEXT
  174. COLOR 0:CLS:GCLS 0:END
  175. @0
  176. A=(I+J)%2==0:RETURN
  177. @1
  178. A=I%2==0:RETURN
  179. @2
  180. A=J%3==0:RETURN
  181. @3
  182. A=(I+J)%3==0:RETURN
  183. @4
  184. A=(FLOOR(I/2)+FLOOR(J/3))%2==0:RETURN
  185. @5
  186. A=I*J%2+I*J%3==0:RETURN
  187. @6
  188. A=(I*J%2+I*J%3)%2==0:RETURN
  189. @7
  190. A=(I*J%3+(I+J)%2)%2==0:RETURN

QRコードのサイズの変更

QRコードのサイズを変更したい場合は、2〜17行を以下で置き換えてください。
サイズが大きくなれば、分割数が減って取り込みが楽になるので、読める範囲でできるだけ大きなサイズにすることをお勧めします。

バージョン17、誤り訂正レベルL(2倍に拡大される最大サイズ)

  1. VER=17:ECL=2:MASK=6
  2. TOTAL=815:RSB=6:ECW=28
  3. DIM F(ECW)
  4. FOR I=0 TO ECW−1
  5.  READ F(I)
  6. NEXT
  7. DATA 168,223,200,104,224
  8. DATA 234,108,180,110,190
  9. DATA 195,147,205,27,232
  10. DATA 201,21,43,245,87
  11. DATA 42,195,212,119,242
  12. DATA 37,9,123
  13. VINF=&H1145D:APC=4
  14. DIM P(APC)
  15. FOR I=0 TO APC−1
  16.  READ P(I)
  17. NEXT
  18. DATA 6,30,54,78

バージョン20、誤り訂正レベルL

  1. VER=20:ECL=2:MASK=6
  2. TOTAL=1085:RSB=8:ECW=28
  3. DIM F(ECW)
  4. FOR I=0 TO ECW−1
  5.  READ F(I)
  6. NEXT
  7. DATA 168,223,200,104,224
  8. DATA 234,108,180,110,190
  9. DATA 195,147,205,27,232
  10. DATA 201,21,43,245,87
  11. DATA 42,195,212,119,242
  12. DATA 37,9,123
  13. VINF=&H149A6:APC=4
  14. DIM P(APC)
  15. FOR I=0 TO APC−1
  16.  READ P(I)
  17. NEXT
  18. DATA 6,34,62,90

バージョン30、誤り訂正レベルL

  1. VER=30:ECL=2:MASK=6
  2. TOTAL=2185:RSB=15:ECW=30
  3. DIM F(ECW)
  4. FOR I=0 TO ECW−1
  5.  READ F(I)
  6. NEXT
  7. DATA 41,173,145,152,216
  8. DATA 31,179,182,50,48
  9. DATA 110,86,239,96,222
  10. DATA 125,42,173,226,193
  11. DATA 224,130,156,37,251
  12. DATA 216,238,40,192,180
  13. VINF=&H1ED75:APC=6
  14. DIM P(APC)
  15. FOR I=0 TO APC−1
  16.  READ P(I)
  17. NEXT
  18. DATA 6,26,52,78,104,130

バージョン40、誤り訂正レベルL(QRコード最大のサイズ)

  1. VER=40:ECL=2:MASK=6
  2. TOTAL=3706:RSB=25:ECW=30
  3. DIM F(ECW)
  4. FOR I=0 TO ECW−1
  5.  READ F(I)
  6. NEXT
  7. DATA 41,173,145,152,216
  8. DATA 31,179,182,50,48
  9. DATA 110,86,239,96,222
  10. DATA 125,42,173,226,193
  11. DATA 224,130,156,37,251
  12. DATA 216,238,40,192,180
  13. VINF=&H28C69:APC=7
  14. DIM P(APC)
  15. FOR I=0 TO APC−1
  16.  READ P(I)
  17. NEXT
  18. DATA 6,30,58,86,114,142,170

CHECKER FLAG (ひとことコメント)

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

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