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

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

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

SMILE BASIC 小技(6)

INC,SHIFT,UNSHIFT,PUSH,POPは文字列にも使うことができる。

VAR A$="ABC",C$

INC A$,"DEF"   '文字列の最後に追加
PRINT A$       'ABCDEF
C$=SHIFT(A$)   '文字列の先頭の一文字を取る
PRINT C$,A$    'A   BCDEF
UNSHIFT A$,"Z" '文字列の先頭に文字を付け加える
PRINT A$       'ZBCDEF
PUSH A$,"G"    '文字列の最後に文字を加える
PRINT A$       'ZBCDEFG
C$=POP(A$)     '文字列の最後の一文字を取る
PRINT C$,A$    'G   ZBCDEF

DECは文字列には使えない模様。(使い方を知ってたら教えてください。)

なお、これらの命令・関数は、文字列を参照型として扱う。
参照型とは何かをここで詳しく書くことはできないが、
概ね以下のように思っていただければよい。

通常、
VAR A$="ABC"
A$=A$+"D"
のようにすると、"ABC"とあったメモリの場所とは別の場所に”ABCD"という文字列が作成され、A$はそこを指すようになる。
これが普通の文字列の動作。

しかし、上記の参照型の命令(例えばINC)の場合、"ABC"とあったメモリの位置に"D"が追加されて、結果として"ABCD"になる。

これはPRINT命令でA$を表示した結果は同じなので、まったく同じことのようだが、別の変数に参照を代入した場合に違いが出てくる。

VAR A$="ABC"
VAR B$=A$
A$=A$+"D"
PRINT A$  'ABCD
PRINT B$  'ABC
VAR A$="ABC"
VAR B$=A$
INC A$,"D"
PRINT A$  'ABCD
PRINT B$  'ABCD

ここで詳しく説明できないので、詳細は別項を立てる。

3号プログラミング 覚え書き(6) スマイルボタン編

・スマイルボタンに設定したプログラムはSLOT 4で実行される。
 SLOT 4には他のスロットにはない特有の制限、機能がある。

・スマイルボタンに設定したプログラムからスロット指定なしでEXECされたプログラムもSLOT 4で実行される。
 この時、読み込まれたファイルはSLOT 4で実行されるので、SLOT 4の制限が課される。
 ただし、SLOT 0〜3にLOADして、EXEC スロット番号とする場合はこの限りではない。SLOT 0〜3に読み込まれたライブラリも同様。EXEC "PRGスロット番号:ファイル名"もスロットにロードしてからEXECするので同様。

 スマイルボタンに設定されたプログラム、および、そのプログラムからスロット指定なしでEXECされたプログラムは、いずれも動作が同じになるので、以下では「SLOT 4で実行されるプログラム 」ということにする。

・COMMON DEFが使えない
 SLOT 4で実行されるプログラム中にCOMMON DEFがあると、「Can't use in tool program」というエラーになる。

・SLOT 4でのみ、他のプロジェクトのファイルをEXECで直接実行できる
 SLOT 4で実行されるプログラムについてのみ、EXEC "プロジェクト名/ファイル名" とすると、他のプロジェクトのファイルを直接実行できる。

 なお、SLOT 0〜3でEXEC "プロジェクト名/ファイル名"を実行するとIllegal function callになる。

CHKFILEで指定するファイル名に必ずファイル種別を付ける必要がある
 以前はSLOT 4で実行する場合はファイル種別を付ける必要があったが、現在(Ver.3.2.1で確認)ではSLOT 0〜3と同様につける必要がなくなった。