如何使用劳特巴赫练习脚本 return 来自被调用脚本的值

how to return a value from a called script with lauterbach practice scripts

我尝试遵循 lib.cmm 脚本,从第 210-214 行到 return 从 DO 调用脚本到我的调用脚本的值,但在我的调用脚本中得到 'stack underflow' RETURN xx 声明。我调用的脚本是 t32/demo/practice/dialogs/dialog_list.cmm.

的编辑版本

我想做的应该很简单,但我无法确定 how/why 我所做的不起作用,也无法确定它与 lib.cmm 中的 ENTERDLG 函数有何不同(在术语中return 个值)。

这是我的两个文件的内容:

来电者:

area.reset
LOCAL &GPU_choice
DO choose_CPU.cmm ENTERDLG
ENTRY %LINE &CPU_choice
print "cpu = &CPU_choice"

被叫方:

ENTERDLG:
LOCAL &CPU_choice

DIALOG
(&+
HEADER "Flash Programming"
POS 0. 0. 25. 1.
TEXT ""
POS 1. 0. 23. 1.
TEXT "CPU Type:"
POS 1. 1. 23. 3.

OptionA.SEL: LISTBOX "CPU1,CPU2" ""

;buttons OK (Default) and Cancel
POS 1. 11. 10. 1.
DEFBUTTON "OK" "CONTinue"

POS 14. 11. 10. 1.
BUTTON "Cancel" "GOTO cancel"

;define action when window is closed
CLOSE "GOTO cancel"
)

;set default selections
DIALOG.SET OptionA.SEL "CPU1"

;STOP command halts script execution
STOP

;script will continue here when "OK" button is clicked
;get selection
&CPU_choice=DIALOG.STRING(OptionA.SEL);

;close dialog window
DIALOG.END
RETURN &CPU_choice   <===============this line gives "stack underflow error"
ENDDO

;script continues here when Cancel is clicked"
cancel:
DIALOG.END
DIALOG.OK "Cancelled"

ENDDO

RETURN 用于 return 从在同一脚本中使用 GOSUB 调用的例程获取值。

给return一个值给脚本,它用DO调用当前脚本,你必须用ENDDO命令传递结果。

因此,在您的示例中,将“RETURN &CPU_choice”替换为:

ENDDO &CPU_choice

另见 https://www.lauterbach.com/reference_card_web.pdf(中间第 2 页)