なるほど、こちらこそ勉強になりますw
その方法使えば、ネストの問題は解決ですね。ありがとうございます。
標準命令をラップして、#defineで置き換えてみた
notesel2.as
//==================== notesel2.as ====================
#ifndef __notesel2__
#define global __notesel2__
#module notesel2_
#const _stack_max 20 //←ネスト可能最大値 (お好きな数をどうぞ)
#uselib "msvcrt.dll"
#func _memmove "memmove" int,int,int
#deffunc notesel@notesel2_ var _buf
if( vartype(stack) == 4 ) { sdim stack, 16*_stack_max }
_memmove varptr(stack)+16, varptr(stack), 16*(_stack_max-1)
mref hspctx, 68
memcpy stack, hspctx, 16, 0, 808
notesel@hsp _buf
return
#deffunc noteunsel@notesel2_
if( vartype(stack) == 4 ) { return }
mref hspctx, 68
memcpy hspctx, stack, 16, 808, 0
_memmove varptr(stack), varptr(stack)+16, 16*(_stack_max-1)
return
#global
#undef notesel
#define global notesel(%1) notesel@notesel2_ %1
#undef noteunsel
#define global noteunsel noteunsel@notesel2_
#endif
//=======================================================
使用例
#include "notesel2.as"
a = "A\nA\nA\nA\nA\nA" // 6行
b = "B\nB\nB\nB" // 4行
c = "C\nC" // 2行
d = "D\nD" // 2行
e = "E\nE" // 2行
notesel a
noteget s, 0 : mes s+" "+notemax
notesel b
noteget s, 0 : mes s+" "+notemax
notesel c
noteget s, 0 : mes s+" "+notemax
notesel d
noteget s, 0 : mes s+" "+notemax
notesel e
noteget s, 0 : mes s+" "+notemax
noteunsel
noteget s, 0 : mes s+" "+notemax
noteunsel
noteget s, 0 : mes s+" "+notemax
noteunsel
noteget s, 0 : mes s+" "+notemax
noteunsel
noteget s, 0 : mes s+" "+notemax
noteunsel