MAPPINGDEV 设施
最低 BMS 功能假定任务的主要设施是映射设备,该设备对 TCTTE(终端控制表条目)中定义的功能和状态执行输入和输出映射操作。
使用 BMS 函数的事务的主体设施应该具有 BMS 支持的设备类型。 但是, MAPPINGDEV 设施是最小 BMS 的扩展,允许您对不是主体设施的设备执行映射操作。 当 MAPPINGDEV 请求完成时,映射的数据将返回到应用程序。 BMS 与 MAPPINGDEV 设备没有任何通信。
可以在 RECEIVE MAP 命令和 SEND MAP 命令上指定 MAPPINGDEV 选项,但不能在任何其他 BMS 命令上指定。
MAPPINGDEV 选项中指定的 TERMID 必须表示 BMS 支持的 3270 系列中的设备。 如果设备已分区,那么假定它处于基本状态。 将忽略外部格式化。
数据的映射方式与最小 BMS 相同,因此无需更改映射集定义或重新生成映射集。
带有 MAPPINGDEV 选项的 SEEND MAP
具有 MAPPINGDEV 选项的 SEND MAP 命令还必须指定 SET 选项。 (SET 选项为 BMS 提供一个指针,用于设置包含映射输出数据流的存储区的地址。)
如果您具有活动的存储器保护,那么将在事务定义的 TASKDATAKEY 选项中指定的键中的存储器中返回数据。 根据您指定的事务定义的 TASKDATALOC 选项,存储器位于该行上方或下方。
存储区域位于任务相关的用户存储器中,但格式为 TIOA (终端输入/输出区域)。 应用程序可以使用 DFHTIOA 副本来引用存储区域。 偏移量为 8 的 TIOATDL 字段包含存储区中从偏移量为 12 的 TIOADBA 处开始的数据流的长度。 在 TIOATDL 中放置的长度值不包括 4 字节页面控制区域的长度,该区域包含诸如已在数据流中使用的扩展属性之类的信息,并且可以使用 DFHPGADS 副本进行引用。
存储区域通常具有大于数据流的长度,因为在确定输出数据流的确切长度之前会分配该存储区域。 此存储区域的格式可以在 SEND TEXT MAP 命令中使用。
如果您熟悉在不使用 MAPPINGDEV 选项的情况下使用 SET 选项,那么知道数据流将通过页面列表间接返回到应用程序。 但是,当指定 MAPPINGDEV 时,会将指向包含数据流的存储区域的直接指针返回到应用程序。
当 SEND MAP MAPPINGDEV 命令完成其处理时,存储区域由应用程序控制,并且保持分配状态直到事务结束,除非应用程序使用 FREEMAIN 请求释放该存储区域。 对于长时间运行的事务,建议使用 FREEMAIN 请求来释放这些存储区域,但当任务终止时, CICS® 会释放这些区域。
具有 MAPPINGDEV 选项的 RECEIVE MAP
在 RECEIVE MAP 命令上使用 MAPPINGDEV 选项时,必须指定 FROM 选项。 BMS 需要 FROM 选项来提供与通过终端控制 RECEIVE 命令返回的数据流 (即正常输入 3270 数据流) 一致的格式化 3270 输入数据流。 唯一的区别是它不以 AID 和输入光标地址开头,因为此信息由终端控制从输入数据流中除去,但 RECEIVE MAP 命令上有一些选项允许您在指定 MAPPINGDEV 选项时指定 AID 值和输入光标位置。 如果数据流包含 AID 和输入游标地址,那么 BMS 将忽略这些地址。
如果未指定任何选项,那么 BMS 将假定输入数据操作已使用 ENTER 键终止,并从 EIBAID 字段向应用程序返回相应的 AID 值。 BMS 还假定输入光标位于主地址,并从 EIBCPOSN 字段向应用程序返回值 0。
RECEIVE MAP 命令的新 AID 选项允许应用程序指定 AID 值,如果指定了该值,那么将覆盖缺省值 ENTER。 无论由应用程序提供,还是由 BMS 提供缺省值,您建立的 AID 值都会导致将控制权传递给应用程序发出的先前 HANDLE AID 请求所注册的例程 (如果适用)。
RECEIVE MAP 命令的新 CURSOR 选项允许应用程序指定输入光标位置,如果指定了该位置,那么将覆盖缺省值零。 无论由应用程序提供还是由 BMS 缺省提供,当您使用 CURSLOC=YES 定义映射时,都将在游标位置处理中使用输入游标值。
与最小 BMS RECEIVE MAP 命令一样,映射的数据将通过 INTO 或 SET 选项返回到应用程序。 如果未指定任何选项,那么 CICS 转换程序会尝试通过将字符 "I" 附加到映射名称来应用缺省 INTO 选项。
当您将 SET 选项与 MAPPINGDEV 选项配合使用时,它必须提供一个指针变量, BMS 使用包含映射输入数据流的存储区的地址来设置该变量。 将在与任务相关的用户存储器中返回数据。 如果存储器保护处于活动状态,那么将在事务定义的 TASKDATAKEY 选项指定的键中的存储器中返回数据。 根据事务定义的 TASKDATALOC 选项,存储器位于该行上方或下方。
当 RECEIVE MAP MAPPINGDEV 命令成功完成其处理时,存储区将由 SET 选项返回并由应用程序控制,并且将一直分配到事务结束,除非您的应用程序使用 FREEMAIN 请求释放该存储区。 建议通过对长时间运行的事务使用 FREEMAIN 请求来释放这些存储区域,但当任务终止时, CICS 会释放这些区域。