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でお名前(リンク先)を公開する以上のお礼は出来ませんが、
良ければ次のバージョンで内蔵させていただきます。


2014年9月16日火曜日

X-BASIC for iOS v2.95 発売開始



X-BASIC for iOS v2.95が発売開始されました。
主な変更点は以下のとおりです。


・iOS7.1/iOS8正式対応(32bit動作のみ)
 iOS7.0以前はサポートしなくなりました。デバッグ時間を短縮するためです。
 特にiOS7.0はバグが多すぎて、サポートするには苦労が多すぎますので。
 iPhone6/Plusでも動作しますが、画面サイズはiPhone5と同じになります。
 これはiOS8の制約です(現状では回避策不明)。

・iOS7.1.2でプログラムリストが正常表示されないのを修正
 iOS7のバグ回避コードがiOS7.1でかえってバグの元になってました。

・実行画面表示ができなくなっていたのを修正
 何故かソースが消えてました。

・プログラム選択画面の変更
 ピッカーからテーブルに作りなおしました。
 これに伴い、削除の仕方が変更になってます。

・細かいバグの修正


この他、内部的には画面のつながり部分を大幅に手を入れています。
今回はBASICそのものには一切手を入れてませんので、言語としての追加変更はありません。そのバージョンも変わっていません。

サンプルを長らく放置していたので、外部から入れ込む方法も含め整備したいと思ってますが、先に他のアプリのiOS7&8をしますので、暫く掛かるかもしれません。


・・・追記・・・
V2.95でもiOS7でリストが表示されないという報告が上がっていますが、当方では全く再現しません。
「自分のところでも起こっている」という方は、iOSのバージョン、機種、表示されないソースをお知らせください。

2014年8月28日木曜日

公開を延長します。

X-BASIC for iOSを始めとするAIG-Softとしてのアプリ公開ですが、とりあえずもう1年は継続することにしました。

幾人かの方からご意見を頂いたこと、少数ではありますが月々継続して売れていて、お陰でとりあえず年間登録料はなんとか捻出できそうだからです。

加えて、最近になってぷろぐらま~ず電卓にバグが報告されるなど、改良すべき点も残されているうちに撤退するのもよろしくないとも思いました。X-BASICで外部からプログラムをダウンロードする方法もまだ未公開でしたし。

公開中止を決めた時に比べ、自分の置かれている環境が改善されたわけではなく、相変わらず時間も気力も極めて少ない状況ですが、なんとか続ける所存ですので、温かいご支援などいただけたら幸いです。





2014年4月19日土曜日

公開停止のお知らせ->とりあえずもう1年継続します。

X-BASIC for iOSを初め、AIG-SoftのすべてのiOSアプリケーションは、
8月頃をもってすべて公開を終了する予定です。
(Apple developer programの次年度更新をしないと言うことです。)

理由は「サポートしている時間がない」というが大きいですが、それ以上に「何のご意見も来ないので使っている人も居ないと考える」と言うことです。
お金の問題ではありません。

 ということで、興味のある方は今のうちにご購入いただけると幸いです。
 もしくは「継続して欲しい」という奇特な方がいらっしゃればお知らせください。

 なお、 ここのサポートページは当面残す予定。

・・・

仕事が忙しくても、やる気さえ維持出来ればやるんだけど、
いろいろありすぎて、今はそれなりに生きていくだけで精一杯で。
やっぱり、やる気を鼓舞してくれる誰かが一緒にいないとだめやね。


2014年3月6日木曜日

サンプルのごめんなさい→ダウンロード可能になりました。progloaderを実行してください。

V2.9からはZipでのインポートができなくなったのに、公開しているサンプルの最近のもののほとんどが(ソースが大きいので)Zipのみ公開のままになってました。

BASICソースだけならzipを開いてソーステキストをカットアンドペーストで貼り付けていただければ入りますが、付随データファイルもあるので、それだけではうまく動きません。

あまりの忙しさにすっかり忘れてました。
すみません。

近日中に「代替案」を公開しますので、しばらくお待ちください。


2014/03/12追記:
またもや仕事忙しい、と言うか、通勤時間がそれまでの倍近くになってしまって全然時間が取れません。一応プログラムは書いたのですが、全然検証出来ない状態です。
すみません。

→ダウンロード可能になりました。progloaderを実行してください。