我曾用C语言尝试过一点手。我想所有对C有一点了解的人都必须熟悉CLRSCR功能。C程序中的CLRSCR功能即C程序中的清除屏幕功能会清除之前的交互式显示,并在再次调用程序时抛出一个新的空白屏幕。
我一直想在iSeries上模拟它,并想知道它是否可以在iSeries上实现。答案是肯定是可能的。在iSeries上,该交互式显示是“显示程序消息”屏幕。
假设您正在运行RPG程序,并且想要检查控件是否到达程序中的特定子例程/语句no。您可以在RPG程序中使用DSPLY操作码进行检查。DSPLY操作码在“显示程序消息”屏幕上显示特定变量的值。
假设您有一个名为EMPINF的PF,其记录格式为REC,并且数据如下所示。
然后,您有一个RPG程序REMP,它从该文件中读取记录。您只想检查您的程序是否正在读取EMPINF文件中的所有记录。为此,您可以在Do While循环中使用因子1中的员工姓名字段(ENAME)的DSPLY操作码,如下所示。
CLRSCR是一个CL程序,如下所示:
首先,在RPG程序中注释掉CALL'CLRSCR'12中的语句,然后编译并运行该程序。您将看到所有员工的姓名都显示在“显示程序消息”屏幕上的物理文件EMPINF中。现在,再次运行RPG程序。您会注意到,所有员工的姓名再次显示在“显示程序消息”屏幕上的物理文件EMPINF中,但之前调用RPG程序显示的值仍显示在“显示程序消息”屏幕上。
但是你希望每次调用你的程序时,都应该刷新“显示程序消息”屏幕,即它应该被清除,并且不应该有先前程序调用抛出的任何值或消息。
你怎么做到这一点?
只需取消注释RPG程序中的CALL'CLRSCR'12语句,然后编译并运行该程序。现在,每次运行程序时,首先刷新“显示程序消息”屏幕,即没有先前的值或消息,您将看到所有员工的姓名都显示在物理文件EMPINF中目前的节目电话。
CL程序CLRSCR清除“显示程序消息”屏幕。实际上,“显示程序消息”屏幕显示发送到作业的所有值和消息(即您登录的会话)外部消息队列,即* EXT。当从RPG程序REMP调用CL程序CLRSCR时,它会清除作业的外部消息队列,因此每次显示Fresh“显示程序消息”屏幕时。
请注意,CL程序中使用的RMVMSG命令无法在命令行中输入,因为不允许以交互方式输入它。这就是我制作这个3行CL程序的原因。
787
158