-1

我有以下调用语句:

038060     CALL        PROG USING
038070                 DFH
038080                 L000
038090                 ZONE-E
038100                 ZONE-S.

此调用是动态的并使用PROG

PROG是一组定义为:

018630 01                 XX00.
018640        10          PROG.
018650         15         XX00-S06  PICTURE X(6)
018660                         VALUE  SPACE.
018670         15         XX00-S02  PICTURE X(2)
018680                         VALUE  SPACE.
018690        10          XX00-S92  PICTURE 9(02)
018700                         VALUE  ZERO.
018710        10          XX00-S91  PICTURE 9(1)
018720                         VALUE  ZERO.
018730        10          XX00-S9Z PICTURE 9(1)
018740                         VALUE  ZERO.
018750        10          XX00-9B0 PICTURE X(05)
018760                         VALUE  SPACE.
018770        10          XX00-0B0 PICTURE X(02)
018780                         VALUE  SPACE.
018790        10          XX00-BB1 PICTURE X(01)
018800                         VALUE  SPACE.
018810        10          XX00-SFN PICTURE X(07)
I cut here but there is a lot of field after...

似乎要使用的实际 progname 存储在:

XX00-S06

XX00-S02

我还有其他情况,其中名称位于 3 或 4 个字段上,并且 progname 长度并不总是 8。

所以我的问题是Cobol 如何知道在组中的哪里选择好的程序名称?解决规则是什么?

配置:我使用 Microfocus Net Express 编译器,环境是 UniKix。

4

2 回答 2

3

COBOL 中的动态调用规则相当简单。给定类似的东西:

    CALL WS-NAME USING...

WS-NAMECOBOL 将基于线性搜索根据可用的加载模块库解析当前存储的程序名称。使用第一个匹配的加载模块入口点名称WS-NAME

不管是多么复杂或简单,WS-NAMEis 的定义。用于名称的总长度是任何长度WS-NAME。例如:

   01 WS-NAME.
      05 WS-NAME-FIRST-PART     PIC X(3).
      05 WS-NAME-MIDDLE-PART    PIC X(2).
      05 WS-NAME-LAST-PART      PIC X(3).

WS-NAME由 3 个从属字段组成,总共 8 个字符。您可以单独填充这些内容,也可以将某些WS-NAME内容作为一个整体进行填充。如果 的长度WS-NAME小于 8 个字符,则在任何接收字段上将尾随字符设置为空格。例如:

  01 WS-SHORT-NAME.
     05 WS-SHORT-NAME-FIRST-PART          PIC X(4) VALUE 'AAAA'.
     05 WS-SHORT-NAME-LAST-PART           PIC X(2) VALUE 'BB'.

这里WS-SHORT-NAME只有 6 个字符长。MOVING WS-SHORT-NAME到任何更长PIC X的类型变量,如:

  MOVE WS-SHORT-NAME TO WS-NAME

将导致 WS-NAME 采用值 'AAAABB bb '(注意两个尾随空格)。在库搜索匹配的入口点名称期间,尾随空格不重要,因此在 CALL 语句中您可以使用:

  CALL WS-NAME

或者

  CALL-WS-SHORT-NAME

他们将解析到相同的入口点。

我不确定 MicroFocus COBOL 的长度规则是什么,但是对于 IBM z/os 动态调用的程序名称不能超过 8 个字符(如果超过,名称将被截断为 8 个字符)。

于 2012-02-13T15:28:24.913 回答
1

我将向 NeilB 添加更多关于 Micro Focus COBOL 的具体信息。

仅供参考:PROGRAM-ID、ENTRY-POINTS 限制为 30-31 个字符(检查文档中的“系统限制和编程限制”部分)。

于 2012-04-20T08:21:46.527 回答