HSP version White Space 001 stack module

自分は以前、WhiteSpaceをHSPに移植しようとして挫折したんですけどw
それからしばらくして上手く行きそうな気がしてきまして
再挑戦企画です
とりあえず、以前は型の違うデータを格納するstackとか作ろうとして
理解しにくい形になったんですが
本家WhiteSpaceもstackに入れれるのは数値だけで
簡単な配列で表現してるし
今回はちょこっと数値配列表現の(moduleですがw)
stackを書いてみまして
本家の仕様に近い形でやれば、なんかやれそうな気がしてきた
今日なのです

#ifndef HSPWS_DEFINE
#define HSPWS_DEFINE

#define STACK_MEMBERS 			1024
#define HEAP_MEMBERS 			1024
#define MAX_LABELS 			200
#define MAX_LABEL_LENGTH 		500
#define MAX_INSTRUCTIONS 		30
#define MAX_INSTRUCTION_LENGTH 	        10
#define MAX_NESTED_SUBROUTINES	        20
#endif

#module stack_model m_size,m_current,m_contents
#modinit int p_size
	m_size=p_size
	m_current=p_size
	dim m_contents,p_size
	return
#modcfunc stack_push int p_val
	if m_current >= 1 {
		m_current--
		m_contents.m_current = p_val
		return 1
	}
	return -1
#modcfunc stack_pop
	if m_current < m_size
		m_current++
		return m_contents(m_current-1)
	return 0
#modcfunc stack_peak int p_depth
	if (m_current+p_depth) < m_size{
		return m_contents(m_current + p_depth)
	}
	return 0
#global
#if 1
newmod stack,stack_model,STACK_MEMBERS
#endif

#if 1
er=stack_push(stack,100)
er=stack_push(stack,200)
er=stack_push(stack,300)
er=stack_push(stack,400)
er=stack_push(stack,500)
er=stack_push(stack,600)
er=stack_push(stack,700)
er=stack_push(stack,800)
mes "peak 2:"+stack_peak(stack,2)
mes "peak 3:"+stack_peak(stack,3)
mes "pop:"+stack_pop(stack)
mes "pop:"+stack_pop(stack)
mes "peak 2:"+stack_peak(stack,2)
mes "peak 3:"+stack_peak(stack,3)
#endif

コメントをどうぞ

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です