2017-01-16 13 views
1

Я новичок в скрипте T32 и задал вопрос о сценариях. Глядя в сценарий нашего проекта, я нашел код, как показано ниже:Использование сценария T32

A.cmm 
======================================================= 
.... 
    if (&AAA==TRUE()) 
    (
     do B.cmm F=test1 
     entry &detect 
    ) 
..... 
======================================================= 

B.cmm 
======================================================= 
....... 
test1: 
........ 
return TRUE() 
======================================================= 

Есть несколько вопросов: 1. функция входа используется для получения возвращаемого значения test1 подпрограммы, и поместить его в «обнаружить» макро ? 2. Любое значение "F ="? Разве мы не можем использовать test1 за командой? Спасибо!

ответ

2
DO <filename> [<parameter_list>] 

Это означает, что F = test1 является параметром, который должен быть оценен внутри B.cmm. B.cmm, кажется, использует F = функция, чтобы решить, какая функция внутри B.cmm называется. Существует, вероятно, какой-то код похож на это внутри B.cmm:

LOCAL &ARGS &ARG_FUNCTION 
ENTRY %LINE &ARGS 
&ARG_FUNCTION=STRing.SCANAndExtract("&ARGS","F=","") 

IF "&ARG_FUNCTION"!="" 
(
    PRIVATE &rval 
    GOSUB &ARG_FUNCTION 
    ENTRY &rval 
    ENDDO &rval 
) 
ENDDO 

ENTRY используется для получения параметров, а также получить возвращаемое значение. запись & обнаружения получает возвращаемое значение вызова B.cmm и сохраняет его в & обнаружить.

В новых версиях Trace32 вы можете также использовать ПАРАМЕТРЫ и RETURNVALUES вместо ВСТУПЛЕНИЯ. Однако с PARAMETERS/RETURNVALUES все аргументы должны быть переданы в двойных кавычках (например, DO B.cmm "F=test1"). Пример выше будет выглядеть так:

LOCAL &ARGS &ARG_FUNCTION 
PARAMETERS &ARGS 
&ARG_FUNCTION=STRing.SCANAndExtract("&ARGS","F=","") 

IF "&function"!="" 
(
    PRIVATE &rval 
    GOSUB &function "&args" 
    RETURNVALUES &rval 
    ENDDO "&rval" 
) 
ENDDO 
+0

Hi @ dev15: Удивительно! код действительно получил что-то вроде этого! – Nobody

+0

& FunctionName = STRing.SCANAndExtract ("& аргументы", "F =", "") , если ("& FunctionName" == "") ( & FunctionName = STRing.SCANAndExtract ("& аргументы", "F =", "") )) – Nobody

+0

У меня вопрос здесь, я думаю, что STRING.SCANAndExtract - извлечь все аргументы (так как мы используем% LINE) за командой xxx.cmm, правильно? И затем он будет искать символ «F =», и персонажам, следующим за этим «F =», будет присвоено значение & ARG_FUNCTION, поэтому в моем случае & ARG_FUNCTION = test1, правильно? – Nobody