2015年7月16日木曜日

v3.00のバグと仕様について

X-BASIC for iOS v3.00には、以下のように不具合のように見える「仕様」があります。

(1)エラーをタップしてジャンプするとき、その行が画面に出てこない
これはiOS8のバグだと思います。
エラー行をUITextView:scrollRangeToVisible:というメッセージを使い画面内に入るように画面スクロールさせていますが、このスクロールが途中で止まってしまうことがあります。そうなった時はもう1回タップしてください。たいがいは2回もタップすると表示される範囲にスクロールされます。

(2)エディタの「編集」と「リスト」を切り替えた時、両者の表示位置が一致してない。
基本的にはUITextViewに自由に行スクロールする機能がないことが原因ですが、(1)のバグも一因ではあります。
UITextViewではないエディタモジュールがあればいいのですけど。まあ、エディタの問題は、これからはprogloaderがあるので、外部エディタを使っていただければとm(_ _)m。

(3)fopen()のリターン値がX-BASIC/68と異なる
X-BASIC/68のプログラムを移植した時、fopen()でエラーが出る場合の原因は間違いなくこれです。
iOS版は正常が>=1でエラーが0ですが、/68は正常が>=0でエラーが-1です。
開発時に参照した文献が間違っていたことと、その後テストのために移植したプログラムがリターン値でエラーチェックをしていなかったため発見が遅れ、その間にサンプルでこのリターン値で数多く作ってしまった為、現状そのままになってしまっています。
要望が多ければ/68に合わせますし、それはそれで移植したプログラムに不具合が出てきそうなので、fopenX68()を新設するかもしれません。->V3.10で/68に合わせて変更しました。


(4)ファイル名またはディレクトリ名にサロゲートペア文字を入れると正しく処理されない
Objective-Cライブラリの問題であり、表示と違ってめったにありえないことなので対処しないことにしました。おそらく、Mac/iOS上でフォルダの指定を可能にしているほとんどのプログラムが同様の問題を抱えていると思います。


以下は不具合です。すべてV3.10で修正済みです

(1)改行コードが&h0dのBASICプログラムが読み込めない。
テストしたファイルの中にこれがなかったので確認出来てませんでした。
XcodeというかMac上は&h0aだし、X68/Windowsは&h0d,&h0aなので。 X1で作られたものが&h0dのみでした。
とりあえずの回避方法は、何かしらのプログラムで改行コードを置き換えてください。 たいていのエディタは改行コード指定ができるでしょう。 V3.10で修正済みです。
なお、freads()はちゃんと&h0dに対応しています。

(2)freads()で、最大文字列長を超える文字列を読み込んだ時に落ちる(と思う)
(3)freads()で、EOF(&h1a)を読み込んでも読み取りが終了しない
         なので、&h1aの後ろにデータが有った場合、それも読み込んでいた。
    (&h1aは単なる1バイトデータとみなされていた。)
(4)freads()で改行なしでファイルが終了する場合のリターン値が/68と異なっていた
   「例」TEST&h1aというファイルを読んだ場合
     /68  st="TEST",リターン値=-1(エラーが返る)
        iOS  st="TEST",リターン値=4(読み込めた文字列長が返っていた)
       次回のfreads()で-1が返った。
  freads()は/68でも細かい仕様が未公開だったので、この際調べたら差異がありました。

(2)UTF16で4バイトになる文字が正常表示できない
これはiOSというかObjective-Cライブラリのバグに近い仕様が原因です。例えば
 ♣▒🐓🍅

という絵文字群は、UTF16で前2文字が2バイト、後ろ2文字が4バイトです。
(後ろ2文字は環境によっては表示されないかもしれません。)
(Objective-Cの内部文字コードはUTF16です。)

それぞれのlengthを取ると([@"〜" length]),全て1になるべきが、
文字lengthUTF8UTF16
1E2 99 A326 63
1E2 96 9225 92
🐓2F0 9F 90 93D8 3D DC 13
🍅2F0 9F 8D 85D8 3C DF 45
となります。後ろ2文字の長さが異常です。また、characterAtIndexで1文字取り出しても2バイトごとの取り出しになります。

これらはサロゲートペアという文字です。サロゲートペアは一部の文字を4バイトに拡張することで扱える文字範囲を拡大したものだそうです。先のlengthやcharacterAtIndex、substringWithRange:NSMakeRange(i, 1)はそれに対応できていません。

このため、それらを使って1文字づつ表示しようとしているX-BASICの内部処理では正常に表示できませんでした。

なお、X-BASIC for iOSのutf8Mid$()など文字列切り出し関数群やutf8Len()は正しく動作しています(これらは独自に開発した処理を使っている)。

(3)font()で等幅でないフォントを指定した時=全角を含め1文字1桁のとき、幅が広いフォントを表示した時文字が重なってしまう
サロゲートペアで表示される文字の中には、普通の文字に比べ幅広い文字が存在していました。最も幅の広そうなフォントで計算するようにしました。

(4)同指定時、文字を重ねた時に、前の文字の一部が残ることがある。
1文字分の領域幅を消さなければいけないのに、フォントの幅で処理してました。
ただし、縦幅に関してはV3.00で対応したディセンダーの問題でもあるので、width()でディセンダーを有効にすることで対処できます。
→これに関してはV3.10でも完全に修正しきれてません(横方向は直ったけど縦方向が)。(5)の修正を急ぐためです。

(5)RUN直後に落ちることがある
外部関数設定処理に問題があり、ワークを破壊してました。動いていたほうがむしろ奇跡です。次バージョン開発中にこれが顕著になり、散々調べた結果ようやく原因が特定出来ました。malloc()で確保したワーク内の破壊はProfileでもわからないので時間がかかりました。

(6)keyRepeatTime()でリピートなし及び即時リピートの設定ができない
引数の処理に問題がありました。

(7)font()でpointSizeの指定が無視されている
これも引数の処理に問題がありました。常に省略時と同じになってたはずです。

特に(5)が致命的なので、これを直した+αのV3.10を公開しました。また、fopen()のリターン値もX68に合わせて変更しました。fopen()を使ったプログラムを作成されている方は、ご注意ください(互換モードは用意してあります)。



2015年7月15日水曜日

サンプル:フラクタルグラフィック

氷山のようなフラクタルグラフィックを描画するサンプルです。
progloaderで「フラクタルグラフィック(一部未内蔵)」をダウンロードすると、
  fractalGraphics.bas
  TREE.bas
  fractal15.bas
  fractal16.bas
の4本が追加されます。
前2本が新規分です(後2本は内蔵サンプルと同じです)。
fractalGraphics.bas
乱数を使ってますので、毎回画像は変わります。

TREE.bas
こちらは毎回同じです。


ちなみに、以下は同プログラムのオリジナルのMZ-2500版での実行結果です(MZ-2500エミュレーター上での実行結果)。

オリジナルは雑誌I/Oの掲載されていたものですが、残念ながらそのページのコピーだけを持っていたので、何年何月号かは不明です。1985年頃だとは思うのですが。
X1-turbo/MZ-2500/PC-9801シリーズ「フラクタルグラフィック」江上邦博、下園真一
元があるので転載禁止です。

以下のリストはオリジナルのもの。動作確認はしてないので打ち込み間違いがあるかも。


1000 'program  Fractal graphics
1005 ' for MZ-2500 BASIC-M25 ; 4096色パレット版
1010 INIT "CRT2:640,400,16":CLS 3
1020 '
1030 DEFINT I-K,P,X-Z
1040 DIM X(2200),Y(2200),Z(2200),C$(9)
1050 DEF FNMAXIM(N) = N* ( N+1 )/2
1060 DEF FNMIN(N)=FNMAXIM(N-1)+1
1070 FOR I=1 to 14:COLOR=(I,I+1,I+1,I+1):NEXT
1080 '
1090 '
1100 PAL=15 'How many colors ?
1110 LX=.57735027:LY=.57735027:LZ=-.57735027
1120 '
1130 X(1)=320 :Y(1)=30  :Z(1)=0
1140 X(2)=50  :Y(2)=350 :Z(2)=300
1150 X(3)=590 :Y(3)=350 :Z(3)=300
1160 '
1170 NDIM=2:GOSUB 1700 '*LDRAW
1180 ' *MAIN
1190 FOR LEVEL=1 TO 6
1200 NDIM=NDIM*2-1:GOSUB 1290 '*CALC
1210 CLS 2
1220 LOCATE 0,2 :PRINT "level";LEVEL
1230 GOSUB 1700 '*LDRAW
1240 NEXT
1250 GOSUB 1800 '*PAINT
1260 END
1270 '
1280 '
1290 '*CALC   'calculate
1300 FOR I=NDIM TO 3 STEP -2
1310 FOR K=FNMIN(I) TO FNMAXIM(I) STEP 2
1320 PT1=FNMIN((I+1)/2) :PT2=FNMIN(I)
1330 X(K)=X(PT1+(K-PT2)/2)
1340 Y(K)=Y(PT1+(K-PT2)/2)
1350 Z(K)=Z(PT1+(K-PT2)/2)
1360 NEXT K
1370 FOR K=FNMIN(I)+1 TO FNMAXIM(I)-1   STEP 2
1380 X1=X(K-1) :X2=X(K+1)
1390 Y1=Y(K-1) :Y2=Y(K+1)
1400 Z1=Z(K-1) :Z2=Z(K+1)
1410 GOSUB 1610 '*FRAC_FUNC
1420 X(K)=X:Y(K)=Y:Z(K)=Z
1430 NEXT K
1440 NEXT I
1450 FOR I=NDIM-1 TO 2 STEP -2
1460 FOR K=FNMIN(I) TO FNMAXIM(I)-1
1470 X1=X(K+I) :X2=X(K-I+1)
1480 Y1=Y(K+I) :Y2=Y(K-I+1)
1490 Z1=Z(K+I) :Z2=Z(K-I+1)
1500 GOSUB 1610 '*FRAC_FUNC
1510 X(K)=X :Y(K)=Y :Z(K)=Z
1520 NEXT K
1530 X1=X(K+I+1) :X2=X(K-I)
1540 Y1=Y(K+I+1) :Y2=Y(K-I)
1550 Z1=Z(K+I+1) :Z2=Z(K-I)
1560 GOSUB 1610  '*FHAC_FUNC
1570 PT1=FNMAXIM(I):X(PT1)=X:Y(PT1)=Y:Z(PT1)=Z
1580 NEXT I
1590 RETURN
1600 '
1610 '*FRAC_FUNC    ' X,Y <  X1.Y1-X2,Y2
1620 DX=ABS(X1-X2)
1630 DY=ABS(Y1-Y2)
1640 DZ=ABS(Z1-Z2)
1650 X=(X1+X2)/2+DX*.3*(RND-.5)
1660 Y=(Y1+Y2)/2+DY*.7*(RND-.5)
1670 Z=(Z1+Z2)/2+DZ*.4*(RND-.5)
1680 RETURN
1690 '
1700 ' *LDRAW LINE DRAW
1710 FOR I=1 TO NDIM-1
1720    FOR K=FNMIN(I) TO FNMAXIM(I)
1730      LINE (X(K)  ,Y(K))  -(X(K+I)  ,Y(K+I  ))
1740      LINE (X(K)  ,Y(K))  -(X(K+I+1),Y(K+I+1))
1750      LINE (X(K+I),Y(K+I))-(X(K+1+I),Y(K+1+I))
1760    NEXT K
1770 NEXT I
1780 RETURN
1790 '
1800 ' PAINT
1810 FOR I=1 TO NDIM-1
1820    FOR K=FNMIN(I) TO FNMAXIM(I)
1830      X1=X(K)    :Y1=Y(K)    :Z1=Z(K) :X2=X(K+I):Y2=Y(K+I):Z2=Z(K+I)
1835      X3=X(K+I+1):Y3=Y(K+I+1):Z3=Z(K+I+1)
1840      GOSUB 1920
1850      IF K=FNMAXIM(I) THEN 1880   'next
1860      X1=X(K)  :Y1=Y(K)  :Z1=Z(K) :X2=X(K+I+1) :Y2=Y(K+I+1) :Z2=Z(K+I+1)
1865      X3=X(K+1):Y3=Y(K+1):Z3=Z(K+1)
1870      GOSUB 1920
1880    NEXT K
1890 NEXT I
1900 RETURN
1910 '
1920 '*TRIANGLE
1930 X=(X1+X2+X3)/3:Y=(Y1+Y2+Y3)/3:Z=(Z1+Z2+Z3)/3
1940 S = ABS(X1*(Y2-Y3)+X2*(Y3-Y1)+X3*(Y1-Y2))/2:IF S<3 THEN 2060
1950 LINE (X1,Y1)-(X2,Y2),15
1960 LINE (X2,Y2)-(X3,Y3),15
1970 LINE (X3,Y3)-(X1,Y1),15
1980 ' brightness calc.
1990 DAX=X2-X1:DAY=Y2-Y1:DAZ=Z2-Z1:DBX=X3-X1:DBY=Y3-Y1:DBZ=Z3-Z1
2000 VX=DAY*DBZ-DAZ*DBY:VY=DAZ*DBX-DAX*DBZ:VZ=DAX*DBY-DAY*DBX
2010 VNRM=SQR(VX*VX+VY*VY+VZ*VZ):NX!=VX/VNRM:NY!=VY/VNRM:NZ!=VZ/VNRM
2020 BR=LX*NX+LY*NY+LZ*NZ:COL=INT(BR*PAL)
2030 IF COL<0 THEN COL=0 ELSE IF COL>PAL-1 THEN COL=PAL-1
2040 PAINT (X,Y),15,15
2050 PAINT (X,Y),COL,NOT 15:'時々ここでNO MEMORYエラーが出るが、その時は図形が複雑すぎるということで、re-runして
2060 RETURN
2990'
3000 ' *DEF_pattern
3010 RESTORE 3100
3020 FOR I=0 TO 8
3030 FOR K=1 TO 6
3040 READ D$
3050 C$(I)=C$(I)+CHR$(VAL("&H"+D$) )
3060 NEXT K
3070 NEXT I
3080 RETURN
3090 ' Tile Pattern Data
3100 DATA  00,00,00,00,00,00
3110 DATA  88,00,00,22,00,22
3120 DATA  AA,00,00,55,00,55
3130 DATA  88,00,88,22,00,22
3140 DATA  AA,00,AA,55,00,55
3150 DATA  77,00,77,DD,00,DD
3160 DATA  FF,AA,FF,FF,55,FF
3170 DATA  FF,77,FF,FF,DD,FF
3180 DATA  FF,FF,FF,FF,FF,FF

X-BASIC for iOS V2.96のバグ

X-BASIC for iOS V2.96までで発見されたバグは、以下の通りです。
  1. E付き浮動小数点数数字をstr$()すると落ちることがある
  2. 文字列用usingの中に'.'があるとエラーが発生するか落ちる
  3. 文字列長が設定値−1文字までしか設定できない
  4. 長めの文字列にコード変換系関数を使った時、落ちることがある
  5. スプライトのパターン0を定義した時、画面左上に表示されてしまう(消せない)
  6. テキスト画面で属性付き表示をすると描画カスが残ることがある
  7. YES/NOを引数にする関数が、正しい値を受け取れてなかった(誤動作した)
  8. YES/NOをリターン値にする関数が、正しい値を返してなかった
  9. 実行時に0除算すると落ちる
  10. using "〜"の後ろに:なしに// または /*でコメントを記述した時usingフォーマットエラーになる
  11. 変数名がenum定数と同名の時にもエラーが発生しない
  12. 正のfloat値をprintした時、数値の前にスペースが入らない
  13. wait()中にBreakすると、次回RUN以後wait()がすぐ帰ってくるようになる 
  14. motionGetRotation()/compassGetData()が正しい値を引数の変数に返さない
  15. loadFromURL()でエラーが発生時の処理がおかしい
  16. エディタで行番号とソースがずれる
  17. iOS8でアクションシート表示中に設定を押すと、以後一切の操作ができなくなってしまう
  18. 「編集」「リスト」切り替えすると、ソースコードの最後に空行が+1行されてしまう
  19. 編集中のプログラムをリストから削除して、再起動した時に「新規作成」と表示されない
  20. iOS8で、再起動時、前回選択していたソースを忘れることがある
  21. iOS8(iOS7でもなるかも)で外部キーボードモードの時、検索のキャンセルを押しても検索枠が消えない
  22. 同一グラフィックページに対するbitmapImgLoad()を短期間に呼び出すと、描画が遅れるまたは欠けることがある
最後の1つ以外はV3.00で解決されました。
最後の1つは高速描画の弊害なので、今のところ解決手段が見つかってません。

上記のバグのため動かないサンプルがありました。
 また、サンプル自体のバグも修正してあります。

・・・

V3.00では64ビット化に合わせてソース全体の見直しをしました(内部バッファー制御を一新しています)。またサンプルをもう一度全部実行しなおしていきました。SHARPのX-BASIC(/68) Ver2.0マニュアルも実家で発見したので、そこにあったサンプルも取り込みました。
その過程で多数のバグが発見されました。
すべてiOS版のみのバグです。

これで言語系のバグはほぼとれたのでは、と思います。まだ残ってましたのでV3.1で修正してます。

次バージョンではデバッグ系を強化したいと思ってます。
MZ-80K(SP-5030)レベルの簡易MMLも実装したいんだけど、出来るかどうか。

追伸:
X1-BASICからの移植をしやすいようにもしようかな思ってますが、 実家にあったはずのマニュアルが見当たりません。
「不要なのであげてもいいよ」という方がいらっしゃればお知らせください (PDFでも可)。

2015年7月13日月曜日

最新の取説


V3.20の取説の在処を掲載しておきます。
このサポートブログの前の方にV2.00時代のがありますが、だいぶ変わってますので。

X-BASIC for iOS 概要
ステートメント&関数説明書
iOS依存関数
X68互換関数/便利関数/カード関数
音楽関数(ただし、これは未公開のV3.5用)
スプライトおよびBG画面について
フォント名一覧
X-BASIC/68との違い

なお、iPadでは「ほぼ」すべて内蔵ヘルプから参照できます。

2015年7月10日金曜日

[重要]progloaderの使い方;今後サンプルの公開はこれで行います


progloaderはV3.00以降に内蔵されているサンプルプログラムです。
実はこのサンプルは極めて重要な意味を持っています。

プログラム自体は簡単です。
出てきたリストから選択し、「ダウンロード」を押すと・・・
そのプログラムがダウンロードされます。
その後progloaderを「終了」し、で閉じると、ダウンロードしたプログラムがプログラムリストで選択出来るようになります。
プログラムだけでなく、それに必要なデータファイルも入ります。

仕組みの詳細はあえて書きませんが「X-BASICのプログラムもデータと同じ」「.basという拡張子を持つデータがプログラム」ということです。

 Zipファイルはこちら : XBprogloader.zip
(下記リストファイルのサンプルを見るためのものです。プログラムそのものは内蔵されています。)


・・・仕組み・・・

この仕組みは、progloaderだけでは成り立ちません。

このプログラムを活用する=ユーザー自身が自分のプログラム(とデータ)をダウンロードで入れ込みたい場合は、以下の準備が必要になります。

・プログラムがダウンロードできるサーバーを用意する
 http(s)でプログラムがダウンロードできるように、どこかに置いておく必要があります。

・どのようなプログラムがあるかを記載したリストファイルを置く
 リストファイルは以下の書式をもつUTF8のテキストファイルです。

  プログラム名   zipファイル名

1行1プログラム分です。プログラム名はprogloader内で表示される名前で、zipファイル名は、それを選択した時にダウンロードされるzipファイルの名前です。X-BASICのプログラム選択で出てくる名前は、その中にある*.basのファイル名です。

それらの間は1つまたはそれ以上の半角スペースまたはタブで区切ります。
; で始まる行はコメントと見なされ、無視されます。

このリストファイルはサーバー側に置かれます。それはすなわち、progloaderを書き換えずとも、ダウンロードできるプログラムを増減できるということです。


・プログラムとデータを一緒に入れたzipファイルを置く
zipファイル内には通常*.basと必要なデータを入れておきます。
ディレクトリ構造付きでも構いません。その通りにX-BASIC for iOS内に展開されます。
なお、リストファイルとzipファイルは同じURLのフォルダ(?)に置きます。

・progloader.bas内にあるURLを書き換える
str baseURL="~"がそのURLです。


この説明を読んでも理解できない人は、使ってはいけません。


・・・注意・・・

これによって入れたプログラム本体は、プログラムリスト選択から「削除」出来ますが、
付随するデータは消されず、iOS内部に残り続けます=記憶容量を食います。
なので、別途プログラムを書いて自分で削除するか、内蔵サンプルのfiler.basを使って削除してください。

・・・念のため・・・

念の為に書いておきますと、X-BASIC'にはiOSのシステムをハッキングできるような関数は一切ありません。どのようなプログラムを書いても、そのような用途には使えません。


・・・実は・・・
実はこのプログラムはV2.96公開時に入れ込むつもりでした。いえ、仕組み的に(中で使われている関数)は入れられていましたが、progloader自体を作るのに実に1年以上かかってしまいました。
ちょいと色々ありすぎて、プログラムが組めない状況というか心境にあったからです。

V3.00の開発を始めた時には、Objective-Cどころかあらゆるプログラムをかけるかどうか解からないような状態でしたが、この開発を通じて何とか感を取り戻せたようです。気力もだいぶ回復し、見た目以上にV3.00は気合の入った出来とすることが出来ました。

外部からプログラムを入れる手段を用意出来たことで、X-BASIC'が、単なる学習ツールから、自分でちょっと使うプログラムならこれで書けるんじゃない?ってなぐらいにはなったのではないかと自画自賛しています。まあ、癖は強いと思いますが。

また、非力な内蔵エディタでは書きづらいプログラムも、MacやWindows上の自分の使い慣れたものが使えるようになるので、開発も楽になるでしょう。実際のところ、私自身もプログラムはXcodeや秀丸で書いてましたので。

となると、後はデバッグ機能をなんとかせんといかんところですが、それは「実用する人が増えたら」ということで。

まずは、ご意見ご感想お待ちしています。

・・・今後・・・

progloaderができたので、今後サンプルプログラムの公開をこれ経由で行います。
時々RUNすると、新しいプログラムが入っている事があります。

・・・ProgSaver・・・
最新のアーカイブにはprogSaver.basも含まれています。
これは、プログラムを圧縮して電子メールで送信するプログラムです。
自作プログラムを外部に保存する場合はこれを使ってください。

2015年5月28日木曜日

X-BASIC for iOS v3.00開発完了→発売中

X-BASIC for iOS v3.00の開発を開始しました。

わけあって、しばらくあらゆるプログラム開発から半年ほど離れていたので、リハビリを兼ねています。

今回は以下の予定です。
・64ビット環境対応
・よく使われる処理の内部関数化

メインは64ビット対応で、これが一番大変です。X-BASIC for iOSでは2つの点で引っかかります。

(1)データ読み書きの境界整合
X-BASIC for iOSは中間コードの管理方法がぺけ-BASICと同じで、ワークに対して.b/.w/.l単位での書き込みが混在しています(.bはワード境界整合させている)。ところがARMでは.w/.l単位の書き込みにおいて境界の制約があるのかそのままでは落ちてしまいます。なので、すべての書き込みを.w単位または.b単位に変換して行うように変更しようとしてます。もっといい方法があればいいのですが、思いつきません。
追記:
しかもこれ、シミュレーター上では発生しません。なぜなら、IntelCPUはどの境界からでもどのサイズでも書込みできてしまうからです。ARM CPUの実機でのみ発生するのです。だから、確認が極めて厄介なのです。

2015/06/03追記:
なんか、ARM実機でも落ちなくなってしました。OSレベルでトラップかけて対処されているのかもしれません。iOS6(32ビット)でも落ちないです。ひょっとしてこれはもう考えなくてもいいのかも。

(2)sizeof(long)が8バイトになってしまった
NSIntegerが64ビット環境下では8バイト=64ビットになるのは知ってましたが、まさかただのlongが8バイトに拡張されるとは思いませんでした。X-BASICは長い時間かけて開発した関係でintとlongがごっちゃになっている部分がものすごく多くあります。まあそれは型キャストかければ何とかなりますが、最大の問題はunionや構造体のサイズが変わってしまうことにあります。

X-BASIC for iOSはもともとアセンブラーで書かれていた処理をそのままCに直した部分も多いため、構造体のメンバーアクセスをメンバー名ではなくオフセットやサイズで直アクセスしている部分が多数存在します。このため、longやポインターを含む場合、全て変更が必要です。

また、ファイルのヘッダーを表す構造体は、メンバーサイズを変更してはいけません。X-BASIC for iOSはPIC他、多数のファイルフォーマットをサポートするため、その記述は注意が必要です。

さらに、定数LONG_MAXの値も変わっているため、それを参照している部分も修正が必要でした(これは盲点だった)。

(3)ポインターが8バイトになった
(2)とほとんど同じですが、従来の処理ではvoid *をunsigned longに代入して処理している部分がかなり多くあるので、数値用longとポインター用longに厳密に区別して、前者は4バイトのまま、後者は8バイトに拡張して処理を書き換える必要があります。

最初は(1)だけの問題だと思ってましたが、(2)(3)の方が重大な感じです。数も非常に多いし。果たして対応しきれるどうか。

2015/06/03現在、一応ひと通りの対応コードを書き、 プログラムの動作テスト中です。まだ動かないプログラムが存在するので、変更が抜けている部分がありそうです。それでも最初はあまりの変更の多さに「不可能ではないか」と思っていたので、動き始めたことは、気持ちを維持する上でも極めて大きな意義があります。

速度は、ワークアクセスの負荷が増えるため理屈上少し落ちるはずですが、多くはコンパイル時なので、実行中は分からない程度におさまってくれると思います。 

・サンプルの追加
実用サンプルは1つだけ追加する予定です(テストは多数)。Appleに目をつけられると困るので詳細はまだ書けませんが、 あったらとても便利な機能です。あと、テスト的なものはいくつか追加されます。→結局2つ大物を追加。増えたので、次バージョンでは、内蔵サンプルも削除できるようにするか、リストから外すように出来るようにすると思う。


追伸:
SHARPのX-BASIC v2.0ユーザーリファレンスを公開できんもんでしょうか。なんとか了承が得られるといいのですが。まあ、for iOSでは使えない関数も多いのですが、やはりプロの書いた説明書はわかりやすいので。心当たりの方は教えていただけるとありがたいです(いえ、了解を取り付けていただけると感謝感激雨あられ)。手持ちの書籍版をPDF化したものはあるのですが、それをそのまま公開するとさすがにいかんと思うので。テキストで打ち込み直したらOK?

---------------------------
2015/06/26記述

開発を一応完了したのでV3.00の概要。
・64ビット環境対応;X-BASICのint自体は32ビットのままです
・iPhone6/Plus対応
・よく使われる処理を内部関数化;「X68互換関数」の実装(50以上!)
・他もちょっとだけ関数追加
・バグ取り(多数);関数、インタープリター部、エディター部
・エラーチェック強化
・取説の間違いを修正(文字列比較など)、旧バージョンに対する記述を削除
・SHIFT-JISで記述されたソースファイルを読み込んだときは自動的に強制SHIFT-JISモードになるようになるモードを追加
・サンプルのバグを修正、新関数対応。
・サンプル追加

X68互換関数は、X68とほぼ同じ動作をする関数群です。機種依存する関数は同名でも異なる動作をするものが多数でしたが、これを引数も含めほぼ同じにしています。関数名は違いますが。でも、X68上での動作のフローがわからない関数については推測で実装しているので完全に同じではないです。これはもう仕方ないということで。

思いの外大規模な変更になってしまいました。64ビット対応よりX68互換関数の追加が大きいです。さらに、バグもかなり直しました。よくもこんなに残ってたな、という感じです。サンプルプログラムは全部を再動作検証して全て書き換えました。

あとはアップルの審査が通るのを待つだけです。

お願いです。手元には64ビットの実機がありません。iPhone6や同plusもありません。なので、テストはシミュレーター上でしか行えていません。
インストールされた方で実機上で不具合が出る、という方は詳細な情報とともに、お知らせください。

---------------------------
2015/07/10記述
発売開始されました。
それに伴い、重要なサンプルの説明を公開しました。

2014年10月4日土曜日

V2.96審査待ち中→発売開始

V2.96を審査に出しました。→発売開始されました。

iOS8のiPadでAirPrintの印刷できないバグを修正しました。
それだけです。iPhone/iPod touchでは発生しません。

手習い君 V2.2の開発途中で見つかった問題です。
iOS8はiOS7に似てますが、細かい動作ではやはり違いがあります。
このAirPrintの問題は、AirPrintの隠れ仕様が変更によって表面化したものです。
詳しくは「うたくら情報編」で。

・・・ところで・・・

サンプルとして公開して欲しいプログラムをお持ちの方、お寄せください。
HPでお名前(リンク先)を公開する以上のお礼は出来ませんが、
良ければ次のバージョンで内蔵させていただきます。