RESP 和 RESP2 选项

您可以将 RESP 选项用于任意命令,以测试在该命令执行期间是否引发了某个条件。 当某个条件可能由于多个原因引发时,如果您已指定 RESP,那么可以通过一些命令,使用 RESP2 选项来精确确定出现该条件的原因。

RESP (xxx)
xxx 是用户定义的全字二进制数据区。 从命令返回时,它包含与可能引发的条件或正常返回 (即 xxx = DFHRESP (NORMAL)) 相对应的值。 您可以通过 DFHRESP 测试此值,如下所示:
EXEC CICS WRITEQ TS FROM(abc)
                    QUEUE(qname)
                    NOSUSPEND
                    RESP(xxx)
                    RESP2(yyy)
   .
   .
IF xxx=DFHRESP(NOSPACE) THEN ...

此格式的 DFHRESP 同时适用于 COBOL 和 PL/I。

以下示例是 C 中的类似测试:
switch (xxx) {
  case DFHRESP(NORMAL) : break;
  case DFHRESP(INVREQ) : Invreq_Cond();
                         break;
  default              : Errors();
}
以下示例是汇编语言中的类似测试:
CLC   xxx,DFHRESP(NOSPACE)
转换程序将此代码更改为:
CLC   xxx,=F'18'

因为 RESP 的使用意味着 NOHANDLE ,所以在将 RESP 与 RECEIVE 命令配合使用时请小心。 NOHANDLE 覆盖了 HANDLE AID 和 HANDLE CONDITION 命令,结果将忽略 PF 键响应。

RESP2 (yyy)
yyy 是用户定义的全字二进制数据区。 从命令返回时,它包含进一步限定对特定命令的响应的值。 与 RESP 值不同, RESP2 值没有关联的符号名称,并且没有对应于 DFHRESP 的转换程序内置函数,因此您必须测试全字二进制值本身。