私の名前が出てきたので、ちょっと補足。
ネストがリセットされる条件は、マニュアルを読んだ限りだと
「button goto」「onkey goto」「onclick goto」「oncmd goto」
「onexit goto」「onerror goto」
による割り込みなので(いずれも"goto"の部分を省略した場合も含む)、
サブルーチン内でのgotoや、gosub系の割り込みだとリセットはされません。
以下のスクリプトで改めて検証してみましたが、onexit以外については
マニュアル通りの結果になりました。
(onexitについてはこのやり方が間違ってるのかもしれませんが)
#const WM_SIZE 0x0005
#const WM_SYSCOMMAND 0x0112
#const SC_RESTORE 0xF120
dim a
onkey *key
onclick *cli
oncmd *min,WM_SIZE
onexit *exit //onexit gotoではネストはリセットされない様子?
onerror *err2
objsize 120,30
button "終了",*halt //終了させるにはこのボタンで
button gosub "ネスト深める",*test
button "button goto テスト",*bg
button gosub "エラー発生",*error
button gosub "button gosub テスト",*bgs //button gosubではネストリセットされない
gosub *test
*test
gosub *view_nest
goto *test2 //サブルーチン内でgotoしてもネストはリセットされない
*test2
stop
*error
poke a,-1,1 //エラーを発生させる
return
*min
oncmd 0
sendmsg hwnd,WM_SYSCOMMAND,SC_RESTORE,0
oncmd 1
*err2
*key
*cli
*bg
*exit
gosub *view_nest
stop
*bgs
gosub *view_nest
return
*view_nest
title str(sublev)
return
*halt
oncmd 0
onexit 0
end