HSPでリスト構造を作るために足りないもの

どうでもいいですが、稀にこのブログが、左端に移動してしまうのは、
私のブラウザだけですかね??
ドラッグしたりすると、そうなることがあるんですが。



やり方:
上の「<前の3日分」というところの左1cmあたりから、
本文の内容までを選択してみると・・・




※今日は、ほとんど自分用メモ書きです。面白くはありませんm(_ _)m




HSPでリスト構造みたいなプログラムを書きたいと思ったのですが、
どうも上手くいかない。どうしてだろうと考えたとき、
足りないものがあることに気がつきました。






それは、ずばり変数の動的確保の機能ではないでしょうか?



ちなみに、HSPでアドレスを扱うことは可能です。


p = varptr(a) ; 変数 a のアドレスを取得する
dupptr t, p, 16 ; アドレス p の領域を変数 t として割り当てる



この2つの命令を使えば、
nextのアドレスとprevのアドレスを持つようなリスト構造を持つプログラムが
書けそうです。



通常、Cでリスト構造にデータを追加しようと思ったら、以下のように書きます。



/* 双方向リストに要素を追加する */
void addlist(void)
{
struct LIST* p, *newcell;
int data;

/* 新しく追加する要素のためのメモリ領域を確保する */
newcell = malloc( sizeof(struct LIST) );

if( newcell == NULL )
{
printf "メモリ不足" );
return;
}

p = tail;
newcell->prev = p;
p->next = newcell;

...
}



ところが、このプログラムで、


/* 新しく追加する要素のためのメモリ領域を確保する */
newcell = malloc( sizeof(struct LIST) );

の部分が、HSPではどうしてもできない。



だから、リストに新たに追加するための要素が作れない。



HSPで、


alloc a,4
p1 = varptr(a)
alloc a,4
p2 = varptr(a)

mes "p1="+p1 +" p2="+p2


みたいにしても、 p1 と p2 は同じアドレスが表示されてしまう。
ここが、難しい。



あらかじめ、


dim a, 200
とかやって、すべてのアドレスを確保しても、
どの要素が空きなのかを探索する処理が必要になって効率が悪いです。
(というより、リスト構造にする意味がない)