Cobol动态调用如何使用组作为程序标识符?

时间:2012-02-13 10:38:09

标签: call cobol microfocus

我有以下呼叫声明:

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...

似乎使用的实际预测存储在:

  

XX00-S06

  

XX00-S02

我还有其他情况,其名称在3或4个字段上,并且预测长度不总是8。

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

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

2 个答案:

答案 0 :(得分:3)

COBOL中的动态调用规则非常简单。给出类似的东西:

    CALL WS-NAME USING...

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

WS-NAME的定义有多复杂或简单无关紧要。用于名称的总长度 是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 '(注意两个尾随空格)。在libary搜索期间 对于匹配的入口点名称,尾随空格并不重要,因此您可以使用CALL语句 之一:

  CALL WS-NAME

  CALL-WS-SHORT-NAME

他们将解决相同的切入点。

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

答案 1 :(得分:1)

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

fyi:PROGRAM-ID,ENTRY-POINTS限制为30-31个字符(请查看文档中的“系统限制和编程限制”部分。)