皆さん、ありがとうございます。
プログラム本体だけでやるには、やはり原型から作るしかないんですね。
ということで、関数化してみました。どうでしょうか。
一応、期待した動作通りに動いたので、解決にしておきます。
#module
#define global ctype prompt(%1,%2=0) _prompt(%1,%2)
#defcfunc _prompt str message,int strmode,local mpos,local mid ;prompt(p1[,p2]) p1:表示するメッセージメッセージ p2:モード(0なら数値、1なら文字列、省略:0)
mysel=0 ;mysel 0なら未選択、1ならOK、2ならCANSEL
mid=ginfo(2) ;現在アクティブのウィンドウID(後で元に戻すため)
screen 26,400,150
if strmode:myvar=""
pos 10,10
color
mes message
pos 10,ginfo(23)+10
objsize 300
input myvar
mpos = ginfo(23)+10
pos 10,mpos
objsize 100
button gosub "OK(&O)",*_prompt_ok
pos 120,mpos
button gosub "CANSEL(&C)",*_prompt_cansel
repeat
gsel 26,1
wait 5
if mysel{
mref stt,64
if mysel=1:stt=0
if mysel=2:stt=1
break
}
loop
gsel 26,-1
if mid>0:gsel mid,1
return str(myvar)
*_prompt_ok
mysel=1
return
*_prompt_cansel
mysel=2
return
#global