“RUN” それは魔法の言葉

私とコンピュータの思い出を、だらだらと綴ります。最近はHSP3でのゲーム作り日記です

251.HSPでゲームを作ろう:たまねとりっぷ! その24

登録・編集の続き。
前回は、文字一覧を表示して、カーソルキーで文字カーソルを動かすところまで作った。
次は、文字の入力処理を作る。

表示している文字一覧と同じ構成で、余分なスペースを除いた文字列の配列を作り、カーソル座標値と合わせることで、選択中の文字を取得する方法を考えてみた。

ecsrx=0:ecsry=0 ;カーソルのXY座標変数

sdim charlist,13 ;文字列リスト配列
charlist(0)="あいうえおはひふへほ"
charlist(1)="かきくけこまみむめも"
charlist(2)="さしすせそや ゆ よ"
charlist(3)="たちつてとらりるれろ"
charlist(4)="なにぬねのわ を ん"
charlist(5)="ぁぃぅぇぉゃ ゅ ょ"
charlist(6)="゛゜ー"
charlist(7)="ABCDE12345"
charlist(8)="FGHIJ67890"
charlist(9)="KLMNO+-*/終"
charlist(10)="PQRST"
charlist(11)="UVWXY"
charlist(12)="Z@・.!"

この文字列の配列charlistの添え字をY座標にして、X座標のところの文字をstrmid命令で取得する。
これで行けると思ったのだが、strmid命令は、1バイト単位になっている。2バイト文字を処理しようと思ったら、2の倍数で指定が必要になる。

まぁいいかと、X座標を2倍した値の場所から2文字(2バイト)分、取得するように修正したが、将来的に1バイト文字との混在が発生したときに、面倒なことになる。
しかも、この後の処理で使う予定の、指定文字列内を検索して、その場所を返す、instr命令も1バイト単位。

これは面倒だと思っていたら、やっぱり先人方は、そんなところはとっくに通りすぎているのですよね。
mod_picmesでお世話になっている、しまくろねこさんが、すでにモジュールを作ってくれていた。

sites.google.com

このモジュールを使えば、見かけ上の文字数で扱えるように命令が用意されている。
strmidに相当するdstr_mid命令や、strlenに相当するdstr_len命令、instrに相当するdstr_instr命令がある。
これで、1バイト、2バイト文字が混在した文字列でも、単純に文字数を考えればよいことになる。

ユーザ関数で、BASICでいうLEFT$、RIGHT$相当の命令を定義していたので、ユーザ関数の中で使っているstrmiddstr_midに置き換えて、mod_dstrtベースの仕様に統一した。

これで、charlistの配列からカーソル位置の文字を取得できるようになったので、カーソル位置の文字を、編集中の名前の文字列の末尾に追加するのだが、これも単純にはいかない。

続く。