HSP/バイナリあれこれ

へっぽこプログラマーもどきもどきのサドです。
例によってあほクセェ備忘録です。


(2018-6-02追記)
この記事はhsp3.4を対象としたものです。
hsp3.5が出ていることに気がつきましたが、どうやらバッファサイズを取得する関数を標準サポートしたらしいです。
「変数が格納しているデータのバッファサイズを調べるvarsize関数を追加しています」(公式サイトHSPTV!より)
(追記おわり)


とりあえず掲示板とかかから拾ってきた奴。
変数のメモリサイズ?バッファサイズ?を取得する関数と、
数値、整数の循環を行う関数


#module
;バッファサイズ取得
#defcfunc bufsize var p1,local a
dupptr a,varptr(p1)-16,4,4
return a
;数値の循環
#defcfunc limitloop int p1,int min,int max
if min==max : return min
if min<=p1 & p1<=max : return p1
if p1max : return min+(p1-max-1)\(max-min+1)
return
#global
整数の循環はあれ、
シフト鍵暗号とかメニュー画面のカーソルで使える。


HSPだとNull文字をテキストデータ及びバイナリデータの
「最後」と認識するようで、mesやstr系がもろ影響受ける。
pokeで何byteかNull部分を飛ばして書き込もうとしても、
確かエラッたと思う。
そういう時は、memsetで$01か何かで予め上書きしなきゃいけない。


あとはアレかな、保存したいデータが4649byteあったとして、
str系やmesで利用したいのならば、
Null文字分も含めて4649+1byte確保しないと困ったことになるとか。
64byte未満は、HSPでは何があっても確保できないという制限も。