自分は以前、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