プチコンで遊ぼう! (はてなブログ版)

任天堂3DSのプチコンで遊ぼう! [twitter:@eida_s]

はてなダイアリーから移行しました。 はてなダイアリーのURLを開いても自動的にこちらにリダイレクトされますのでご了承ください。

SMILE BASIC 小技(2)

今回は結構実用的な技。

文字列を置き換えるSUBST$は、
SUBST$("文字列",開始位置,[文字数],"置換文字列")
として使う。

この時、置換文字列の長さ < 文字数 でも構わない。
これを使うと簡単に文字列の一部を削除できる。
具体的には、
SUBST$("文字列",削除開始位置,削除文字数,"")
とする。

例:

A$="ABCDEFG"
PRINT A$   'ABCDEFGと表示される
A$=SUBST$(A$,4,2,"")  '4の位置から2文字分を""で置き換える⇒削除
PRINT A$   'ABCDGと表示される

(追記)
OBONOさんのコメントを受けて試したところ、以下のようにもできることがわかりました。

A$="ABCDEFG"
PRINT A$   'ABCDEFGと表示される
A$=SUBST$(A$,4,0,"XYZ")  '4の位置から0文字分を"XYZ"で置き換える⇒挿入
PRINT A$   'ABCDXYZEFGと表示される

SMILE BASIC 小技(1)

覚え書きの文字列編でも書いた、文字変数に[]でアクセスすると任意の一文字を取り出せる技は、"でくくった文字列でも使える。

"文字列"[数字]

みたいに。
これを応用して、
"AB"[論理式]
のように書くと、
論理式が成立する時はBが、成立しない時はA
を取り出せる。

これを使ったカーソルの点滅の例:

VAR BLINK=0
WHILE 1
 LOCATE 0,CSRY
 PRINT "■_"[BLINK<30]  'BLINKが30未満の時は_を、30以上の時は■を表示
 BLINK=(BLINK+1) MOD 60
 VSYNC 1
WEND

漢字入力パネルEDKANJIPNL

漢字入力パネル。
(2016/10/29)変換結果をF1キーとクリップボードの両方に出力するようにした。また、LorR+Aキーで即終了かつクリップボード出力だけにした。
(2016/03/16)操作ガイドを付けました。辞書内に簡易ヘルプ(「へるぷ」を変換)を追加。他のプログラムに組み込みしやすい構造に修正。小さなバグを修正。
(2016/03/02)ローマ字の子音字にnpyとnbyを追加。モード毎にカーソルの色が変わるようにしました。
(2016/02/28)候補入力中にXボタンを押すとカタカナに変換するようにしました。また、ローマ字の子音字にVを追加しました(プチコン標準ではひらがなの「う゛」は表示されません。カタカナの「ヴ」はあります)。
(2016/02/24)ローマ字入力に対応しました!

ファイル名: EDKANJIPNL

公開キー: SE2452QV B25QV344
QR45S45D E283533E 73E3ED3Y

公開日: 2016/10/29 2016/03/16
2016/01/30 2016/02/24 2016/02/28 2016/03/02

バージョン: 0.10 0.09
0.01 0.04 0.05 0.06


すでに何人かの方が日本語入力環境を作られていますが、軽く使えることを主眼にして漢字入力プログラムを作りました。
元はSYS/KANJITBLの入力ヘルパーだったのが、結局、辞書型IMEに近いかたちになりました。
辞書は、りゅうまごさんの_JDATAをベースにさせていただきました。ここに感謝いたします。


【特徴】
・起動の速さを重視した作り
・1ファイル完結、外部ファイル読込なし
 (スマイルツールから起動すると、SLOT 0〜3を汚さない)
・タッチ操作とボタン入力を併用でき、タッチだけでもほぼ操作可能
・入力した結果はF1キーに登録される
・単語登録などのユーザーフレンドリーな機能はない
・変換時に常に最長一致する候補のみを表示するので、変換に融通がきかない

などなど。

欠点も数多いですが、起動の速さを生かして割り切って使うのが吉です。
長文の入力などには向かないので、他の日本語入力プログラムを使いましょう。
他の日本語入力プログラムの情報はここです。
http://d.hatena.ne.jp/eidaht/20150811/1439295090

【使い方】
大体は、普通の日本語IMEと同じです。
キーボードのかな、またはローマ字入力で、読み仮名を入力した後、変換(Aボタンorスペースキー)を実行すると、候補が表示されます。
候補を十字ボタンで選んで、Aボタンで確定です。
すべて確定済の状態でAボタンを押すと、テキスト確認ダイアログが出るので、さらにAボタンを押すと、F1キーに入力した文字列が登録されます。

ボタンの機能
X:モード切替
Y:一文字後退/候補入力中はカタカナに変換
A:変換/確定
B:無変換/戻る/テキスト確認

タッチ操作< > _ / = 左 右 下 上 に読み換え
SPACE = 右 に読み換え
? = Xボタンに読み換え
← = Yボタンに読み換え
ENTER = Aボタンに読み換え
UNDO = Bボタンに読み換え

候補選択中にXボタンを押すと、ダイアログモードに入ります。
ダイアログモードではキーリピートが効きませんが、下画面ダイアログの大きなフォントで文字を確認しながら候補を選択できます。

【その他のTIPS】
・「へるぷ」と入力して変換すると、簡易ヘルプが表示されます。
・「くれじっと」と入力して変換すると、クレジットが表示されます。
候補選択時に下画面の上部をタッチすると、およそのX座標が合う箇所の候補が選択できます。

EDSMILE補足

現状のEDSMILEは設定ファイルをエディタで書き換えないといけなくて、まだ使いやすいとは言えないけど、将来的にはGUI上で設定を変更できるようにする予定。
でもまだ、ファイル操作関連とか先にできてほしいことが多くあるので、GUIで設定できるようにするのはまだ先だと思います。

スマイルボタンに登録して使う便利ツールEDSMILE Ver1.50

■Ver1.50にアップデート!(2016/10/30)

スマイルボタンに登録して使う便利ツール。
るるるきゅーさんのツールに比べると画面がすごい地味(^^;)だけど一応公開。

f:id:eidaht:20161023013612j:plainスクショはVer1.40です。

ファイル名: EDSMILE

公開キー: 7S3EW3H4
ED3EN23E BE84VK4E 5K333KKE QRX3KX13 L2DV33K4

公開日: 2016/10/30
2014/12/06 2015/01/11 2015/01/12 2016/02/07 2016/10/22

バージョン: 1.50
1.00 1.10 1.11 1.30 1.40

【使い方】
■準備
自分の普段使うプロジェクトフォルダにこのファイルをコピーしておいてください。
スマイルボタンから呼ばれるプログラムに設定してください。

十字キーの右またはAボタンが「決定」、十字キーの左またはBボタンが「戻る」、になっています。

スロットを選んで「決定」するとSAVE、EXEC等のサブメニューが出るので機能を選んで「決定」で各種機能を実行できます。

最も使う操作は、編集中のプログラムの保存です。
スロットを選んで右→右とすると、SAVEできます。

プチコン3号のバージョン3.2からSAVE/LOADが簡単になったので、それ以外のことを便利にできるように方針が変わりました。(SAVE/LOADも相変わらずできます。)
それに伴い、メニューの先頭をSAVEでなく、EXECにしました。

すべての操作は、ボタンとタッチの両方に対応しています。

タッチ操作の場合、サブメニューはタッチを離した時のメニューが実行されます。
サブメニューより左にドラッグするか、サブメニューの外をタップで「戻る」となります。

画面左下のEXCMDは拡張メニューで、Yボタンかタッチで呼び出せます。
プログラムソースの@EXCMDの箇所にメニューと処理を追加すると、拡張メニューを簡単に追加できます。

■履歴
(Ver1.50での追加・変更点) 2016/10/30追記
・ボタンを離してから終了するようにした
・ツール起動時にACLSとBGMSTOPを実行できるようにした(EDSMILE.CFGファイルで設定)
・リストボックスでLorRを押しながら上下でページ送りするようにした

(Ver1.40での追加・変更点) 2016/10/22追記
・スロットのメニューにDEFJUMPを追加し、DEFおよび@ラベルへジャンプできるようにした

(Ver1.30での追加・変更点) 2016/02/07追記
・CONFIGファイルでスタートアップファイルを指定できるようにした
・CONFIGファイルでファンクションキー定義を5セットまで登録し、ツール中で呼び出してまとめて変更できるようした
・プロジェクト切り替えの入力補助を追加
・設定ファイル(EDSMILE.CFG)がない場合、起動時に作成を促されるようにした
・スロットメニューの順番を変更
・上下キーでスロットとお気に入りの間を移動できるようにした

(Ver1.10の追加機能) 2015/01/11追記
・SBSMILEへのリンクを追加
・タッチでEXITできるようにした
・お気に入り機能(簡易ランチャー)の追加

■プロジェクト切り替えの入力補助機能
デフォルトプロジェクトの切り替えを支援する機能です。以下の手順で操作してください。
(1)EXCMDのSETPROJECTを選びます。
(2)プロジェクト一覧からプロジェクト名を選んでください。
(3)ファンクションキー1に「PROJECT "プロジェクト名"」が登録されます。
(4)DIRECTモードにしてファンクションキー1をタッチすると、プロジェクトが切り替わります。

■スタートアップ機能の概要
設定ファイル(EDSMILE.CFG)に設定しておくことで、スロットが空の時に限り読み込むファイルを指定できます。
プチコン3号を起動した際にいつも使うファイルの読み込みに使うことができます。
また、EDSMILE起動の都度設定しなおすファンクションキー定義も決めておくことができます。
(EDSMILE起動毎に毎回設定されなおすので、以下のファンクションキー定義機能を使う場合は指定しない方がよいでしょう。)
設定ファイルの設定の仕方は、後述の「設定ファイルEDSMILE.CFGについて」をご覧ください。

■ファンクションキー定義機能の概要
スタートアップのファンクションキー定義とは別に、5セットまでのファンクションキー定義を登録しておき、EXCMDのFKEYから定義を呼び出すことができます。
この機能を使う場合は、スタートアップのファンクションキー定義は指定しないことをおすすめします。
設定ファイルの設定の仕方は、後述の「設定ファイルEDSMILE.CFGについて」をご覧ください。

■お気に入り機能(簡易ランチャー)の概要
EDSMILE.CFGという設定ファイルを置くと、そこから設定を読み込み、お気に入りを5つまで表示してくれます。
お気に入りは、タッチでそのファイルを即実行してくれます。
またはEXCMDのサブメニューからFAVORITEを選ぶと、カーソルがお気に入りに移動するので、選択して「決定」でも実行できます。
設定ファイルの設定の仕方は、後述の「設定ファイルEDSMILE.CFGについて」をご覧ください。

※注意:お気に入りの実行は、スマイルツールが実行されるスロット4で実行されますが、スロット4ではCOMMON DEFを含むプログラムは実行できないという制限があります。
お気に入り実行時にエラーになる場合は、実行先のプログラムにCOMMON DEFが含まれていないかを確認してください。


■設定ファイルEDSMILE.CFGについて

◆EDSMILE.CFGの作成
初回起動時にEDSMILE.CFGがない場合、作成するように促されますので、以下の手順に作成してください。

(1)EDSMILE.CFGがみつからない旨のダイアログが表示されますので「了解」をタッチします。
(2)EDSMILE.CFGのひな形をつくるか聞いてくるので「はい」をタッチします。
(3)するとファイル書き込みの確認が表示されるので「はい」をタッチします。
(4)書き込み完了の表示に対して「了解」をタッチします。
(5)EDSMILE.CFGをスロット3にロードするか尋ねてくるので「はい」をタッチします。
(6)スロット3を編集してお気に入りを追加してください。
(プロジェクト名を省略すると、EDSMILEの起動プロジェクト内を検索しますので、EDSMILEとは別のプロジェクトに置かれているファイルをお気に入りとして使いたい場合は、「プロジェクト名/ファイル名」のように指定してください。)
(7)スロット3をSAVEしてください。(スロット3の内容ではなく、EDSMILE.CFGファイルを読み込むため、SAVEしないと反映されません。)

◆EDSMILE.CFGの構成
EDSMILE.CFGの構成は以下のようになっています。
なお、#ではじまる行はコメント行です。コメント行は無視されます。

[STARTUP]
# スタートアップ
SLOT0=
SLOT1=
SLOT2=
SLOT3=
KEY1=
KEY2=
KEY3=
KEY4=
KEY5=
CLS=ACLS
BGMSTOP=ON

[FUNCKEY]
# ファンクションキー
FKEY11=FILES 
FKEY12=LOAD "
FKEY13=SAVE "
FKEY14=LIST ERR\n
FKEY15=RUN 

[FAVORITE]
# おきにいり
EDSMILE セーブ/ロードをかんたんにするツール

◆スタートアップの設定方法
[STARTUP] というセクション宣言を入れておいてください。
SLOT1=EDSMILE
のように記述するとそのスロットが空の時に限り、指定したファイルをスロットに読み込みます。
「SYS/SBSMILE」のように、「プロジェクト名/ファイル名」の形式でも指定できます。
また、
KEY1=ACLS
のように記述するとファンクションキーの割り当てを行います。(EDSMILEの起動の都度)
CLS=ACLS に設定しておくと、起動時にACLSを実行します。(GCLSにするとGCLSを実行します。)
BGMSTOP=ON に設定しておくと、起動時にBGMSTOPを実行します。

◆ファンクションキーの設定方法
[FUNCKEY] というセクション宣言を入れておいてください。
FKEY23=PROJECT "
のように記述しておくと、EXCMDのFKEYコマンドで、ファンクションキーの定義セットを呼び出すことができます。
ファンクションキーの定義セットは5セットまで登録可能です。
FKEYxxのxxの最初の数字はセット番号、2つめの数字はファンクションキーの番号を表します。
例えば、FKEY23は、セット番号2のファンクションキー3番を表します。

◆お気に入りの設定方法
[FAVORITE] というセクション宣言を入れておいてください。
「ファイル名 ファイルの説明」のように書いておくと、お気に入りには改行して説明も表示してくれます(ただし19文字まで)。

また、ファイル名にはプロジェクト名も含めることができ、その場合は「プロジェクト名/ファイル名」のように「/」で区切ってください。

[FAVORITE]
TOOLS/EDSMILE セーブ/ロードをかんたんにするツール

のように記述も有効です。

calc84maniacさんのRaycastingライブラリ(その2:使い方)

前回に引き続き、calc84maniacさんのRaycastingライブラリの使い方を書いてみる。

今回は実際の使い方。
Spooky Mazeから、視点移動に関する部分を抜粋したソースを作った。
なお、今回は簡単のため衝突判定を省いたので、壁の中にめり込むとエラーが発生してしまう。


8-9行目  ライブラリをロードして使用可能にしている。
12-14行目 テクスチャーはGRP4にある必要がある。ここでは、元画像(木の絵)をBGにして、BGからSPへ画像をコピーしている。
17-22行目 プレイヤー関連の変数。


26-28行目 1.ライブラリの初期化。RAYS%が横方向の分割数で、多くするほど細かくなる。
31-34行目 2.テクスチャー設定。ここでは2種類の木を設定。
37-49行目 3.マップ配列設定。MAP%は[行,列]の順になっている。@MAPDATAの定義の見た目そのまま。


52-54行目 PX,PY,PZがプレイヤー=カメラ位置。ANGLEがカメラ視点の角度。
角度は普通の数学の座標系とは反対周りで、時計周りの座標系となる。
58-62行目 ボタン入力。R,Lは横平行移動。
65-72行目 移動、および、視点の回転。


75-76行目 視点の上下移動。上下は角度でなく、ピクセル単位の平行移動。
79行目   4.カメラ設定。
82行目   5.CALL SPRITEで画面描画。

できあがりはこうなりました。↓
https://vine.co/v/iOVhDA3EhW9

calc84maniacさんのRaycastingライブラリ(その1:ライブラリ紹介)

calc84maniacさんが公開している「Spooky Maze」、DOOMのような画面を実現している。
最近ではバグタローさんの「GIVERS-P3D」にも驚いたが、この「Spooky Maze」もすごい。
(後々はP3Dライブラリの解説もしてみたいです。バグタローさんご本人が解説されなければ、ですが。)

ソースを読むとレイキャストアルゴリズムを使っているとあり、ゲーム本体と分離されたレイキャストライブラリが付いていた。
これは割と使うのが簡単そうなので、ライブラリのコメントを元に使い方を書いてみたい(自分で作ってみるのはまた今度)。

▼レイキャストアルゴリズムについて

レイキャストアルゴリズムとは、3次元視点を実現するアルゴリズムの一つで、簡単に言うと、二次元のマップ上に自分がいてどちらかを向いているとすると、その視点の方向にマップを検索していって、壁などにぶつかると、それが自分が視線上に見えるものである、という考え方で画面を描写するものだ。

プチコンでのレイキャストアルゴリズムに基づいた3次元のゲームは、実は初代プチコンの時代から存在したようだが、現在確認できるのはmkII用のもので、プチコンまとめwikiに掲載されている。
RAYCAST MAZE
もしプチコンmkIIを持っているようであればぜひQRコードを読み込んで遊んでみよう。当時からかなり高速な3次元視点ゲームが存在していたことに驚くと思う。

この作者(Hepebellさん)は丁寧にもレイキャストアルゴリズムの考え方を図で書いてくれている。非常に参考になる。
アルゴリズム解説

calc84maniacさんの実装も、アルゴリズムとしてはこの考え方に基づいているようだ。


▼calc84maniacさんのRaycastingライブラリ

まずはcalc84maniacさん作の「Spooky Maze」をダウンロードしてみよう。
Spooky Maze (Raycaster)

そして遊んでみよう。どんなものかわかったろうか。

これと同じような画面を付属のライブラリを使うと簡単に作れるようなのだ。
Raycastingライブラリは、ダウンロードされたプロジェクトの中で「RAYCAST.LIB」という名前で保存されている。
(現状はバージョン0.1.00 Alphaと書かれている。)

ライブラリ冒頭部分のコメントの意訳を以下に載せる。
(筆者には大した英語力はないので、その正確性は期待しないで自分で読んだ方がよい。)
なお、以下で「環境」という言葉で表されているのは壁などの静的なブロックで構成されたマップを表し、「オブジェクト」は猫やスケルトンなどのマップ上に位置するその他の物を表す。

概要:
 このライブラリは、2次元のマップ配列、テクスチャー、光源の色、カメラ位置/アングルといった情報に基づいて、ブロックで区切られた3次元環境を描画するものだ。
 また、この3次元世界にスプライトベースのオブジェクトを表示するユーティリティも含んでいる。

 その環境自体もスプライトによって構成されており、それらの描画処理は単純なCALL SPRITE命令を必要とする。
 描画速度と品質は、環境に配置されたスプライトの数に直接的に影響を受ける。
ライブラリの読み込み方:
 このライブラリはいずれかの好きなスロットにロードすることができる。
 例えば、スロット1に置いて使いたい場合は次のようにする:
  LOAD "PRG1:RAYCAST.LIB",FALSE
    USE 1
環境を描画するには:
 ライブラリの準備のために以下の4つのステップを必要とする:

 1. INITRAYLIB命令
   この命令は、スプライト管理番号の開始番号と終了番号を引数としてレンダラーに設定する。
   また表示するウィンドウの座標も引数とし、全てのスプライトが表示される範囲を限定する。
   (訳注:SPCLIPの座標を指定するということ。)

 2. SETTEX命令
   この命令は、ブロックのテクスチャーがあるスプライトページ上のU,V,W,H座標を格納した2次元配列が引数となる。
   配列は [テクスチャ数,4] で宣言する。
   この配列においてブロック#1のテクスチャーは0番からとなる。なぜなら、マップ上での 0(ゼロ) は何もない場所を表しているからだ。
   この配列の中身は、再度SETTEX命令を呼び出すことなく、修正してもよい。

 3. SETMAP命令
   この命令は、マップデータを格納した2次元配列と、配列の幅と高さを引数とする。
   マップデータは行が先に来る形式であることに注意する。すなわち、1次元目が行(y座標)を表し、2次元目が列(x座標)を表す。
   0以外の値はテクスチャー番号に対応するブロックを表す。0は何もない空間を表す。
   マップは、その外側が見えないように、ブロックで囲われていなければならない。
   この配列の中身は、再度SETMAP命令を呼び出すことなく、修正してもよい。

 4. SETCAM命令
   この命令は、カメラの(X,Y,Z)位置を引数とし、(X,Y)はマップ内の位置、Zは0〜1の範囲の値をとる。
   さらに、視点の角度(ラジアン指定)、視点の上下移動量(ピクセル指定)、視野角(ラジアン指定)も引数とする。
   カメラ位置を変更したフレームには、CALL SPRITEの前に、必ずこの命令を呼ぶ必要がある。

 最後に、これらのステップが実行された後に、描画のために CALL SPRITE を実行する。

(訳注:各命令を再度呼び出すことなく配列の値を更新してもよい、と書かれているのは、各命令では配列の値をコピーしているのではなく、配列の参照をコピーしているから。)
スプライトベースオブジェクトを描画するには:
 ライブラリは、カメラ位置に基づいた3次元空間上に、スプライトを位置設定・縮尺設定・ライティングするコールバック命令を提供する。

 スプライトの位置と縮尺を設定するには、SPOFSとSPSCALEを使う代わりに、SPVARでスプライト変数に設定する。
 変数0,1,2はX,Y,Z位置をそれぞれ表し、変数3はスプライトの高さ(1.0がマップ上のブロックのいっぱいの高さである)を表す。
 変数4〜7はあなたが自由に使える。

 スプライトのホーム位置は設定済のものが使われることに注意すること。
 2048番以降のスプライト定義は、センタリングされたホーム位置になっていることが多いので、それをそのまま使うか、あるいは自分でSPHOMEを使って設定すること。

 もしライティング処理を書き換えたい場合には、色の設定はSPANIMを使うとよい。

 管理番号がSP%であるスプライトにこの機能を適用するには、単に SPFUNC SP%,"SPWORLD" を実行すればよく、すると、CALL SPRITEが実行された時に自動的にスプライトの位置が再設定される。
 もしあなたがすでに自作のスプライト関数(訳注:スプライト関数=SPFUNCでスプライトに割り当てた関数)を使っている場合には、その関数の中で直接SPWORLDを呼び出すようにしてもよい。
上級者向け機能/命令について:
 * SETLIGHT命令
  この命令はRGB値を引数として、環境およびオブジェクトへカメラからの距離に応じた配色を行う。
  SPCOLORの制限によって、#WHITEを引数として送ったとしても、元の色よりも明るくすることはできない。

 * BEEP3DおよびSPBEEP3D命令
  カメラとの相対位置に応じた効果音を発生する。
  BEEP3D命令はX,Y,Z座標を引数とし、SPBEEP3D命令はスプライト座標を使用する。
  その他に、BEEP命令における効果音番号、周波数、ボリュームを引数とする。
  実際のボリュームとパンポットは、カメラから座標までの相対位置によって補正される。

 * MAPCHK関数
  この関数を使うと、out-of-boundsエラーを心配することなく、正方形領域とマップの衝突を簡単に検出できる。
  関数名、3D位置、正方形領域の半径(訳注:正方形の一辺の長さの半分のことだと思われる)を渡すと、マップ配列、整数化されたX/Y、およびZを引数として、必要な回数だけ関数を呼び出してくれる。
  このライブラリのサンプルに含む関数COLLIDEを使ってブロックとの衝突数をカウントするには、以下のように書く。
   COUNT=MAPCHK("COLLIDE",X,Y,Z,R)
  (訳注:この説明を読むより、ライブラリのMAPCHKの箇所を読む方が何をやりたいかわかりやすいと思う)

 * SETVIEWCALLBACK関数
  この命令は、マップ上のブロックが画面上に表示される度に呼び出したい命令名を引数として取る。
  この命令はマップ配列とX,Y座標もまた引数として取る。
  この命令を使うと、ミニマップを自動生成するのに便利である。
  ただし、この命令はフレーム毎に何度も呼び出されるので、呼び出される命令においてブロックを処理するのに時間がかかるようであれば、すでに見たブロックは無視するようすることをおすすめする。

 * RAYCAST命令
  この命令はこのライブラリの中核となるものである。
  X,Yおよび向きで与えられる位置から光線を発して、マップ上の非0であるブロックに当たるまで伸ばしていく。そして、衝突した点とブロック面の位置(左から右に向かって0〜1の値をとる)を返す。
  このスライスの戻り値は、テクスチャーマッピング以外の用途ではあまり有効ではないので、通常の使い方においては無視して構わない。

 * CANSEE関数
  RAYCASTを使った有用な例。
  この関数は、与えられた位置が、他のもう一つの位置から見えるかを、レイキャストに基づいて判定する。

実際に使ってみるのはまた次回以降です!

文字列関係操作ライブラリ

だいぶ前に文字列関係操作ライブラリを作ってたんだけど、ツイートだけではてなの方には記事として上げてなかったので上げておきます。

えいだ on Twitter: "よく使いそうなものを実装した文字列操作ライブラリSTRLIBです。
とりあえず使い方はコメントをご覧ください。
ファイル名:STRLIB 公開キー: 4V4E34J
#petitcom #sbkey"

ファイル名: STRLIB

公開キー: 4V4E34J

公開日: 2015/01/12

バージョン: 1.00

v1.00 初公開

【ライブラリの使い方】

(1)スロット0〜3のいずれかにこのライブラリをロードする。
(2)呼び出し側プログラムの先頭に「USE 置いたスロット」を書く。
(3)関数毎の使用方法で呼び出す。

【簡易リファレンス】
READLINE テキストを1行読み込む
TRIM$ 文字列の先頭・末尾の空白を取り除く
LTRIM$ 文字列の先頭の空白を取り除く
RTRIM$ 文字列の末尾の空白を取り除く
UPPERCASE$ アルファベットの小文字を大文字にする
LOWERCASE$ アルファベットの大文字を小文字にする
SPLIT$ 空白で区切り文字として、分割して文字列配列にする
SPLIT2$ 指定の文字を区切り文字として、分割して文字列配列にする
REPLACE$ 指定の文字列を検索し、別の文字列に置き換える
CONSISTS 文字列が、指定の文字列からだけなるかを調べる
CHECKPROJECTNAME プロジェクト名が有効な名前か調べる
CHECKFILENAME ファイル名が有効な名前か調べる
VALIDFILENAME$ プロジェクト名/ファイル名 が有効な名前か調べる
FILENAMEPART$ プロジェクト名/ファイル名 のファイル名部分を取り出す