c - 按回车键在多个显示记录格式之间切换

标签 c ibm-midrange rpgle

最近发现了ILE C source之类的通过多记录显示文件读写物理文件的东西,所以尝试自己创建一个。

输入来源为 herehere

因此,有可能用 RPG 和某些指标来做到这一点。

看起来像:

C                   Exfmt     Screen
C                   If        *In25 = *Off
C                     ...enter key pressed
C                   Else
C                     ...function key pressed
C                   EndIf

我们在哪里

d  Cmd_Enter      c                   Const(x'F1')

Source

但是,当我尝试用 C 做完全相同的事情时,编译失败了。

这里是示例的一部分:

#define ENTER   0xF1; 

...

_SYSindara indicator_area;
do
{ 
    if(somevar != NULL)
    {

    indicator_area[ENTER] == IND_OFF;

    //do stuff

    if (indicator_area[EXIT] == IND_ON)
    {
        break;
     }
}
while(indicator_area[ENTER] != IND_ON); 

我在包含 ENTER 的每一行上都遇到了错误:

MYLIB/PGMSRC(SRC),113.27:CZM0275(30) 意外文本“;”遇到了。

我尝试将 ENTER 定义为 0xD(输入 ASCII 码)、0xF124( *in25 就像在上面的源代码中一样)- 没有任何帮助使此代码正常工作。

欢迎任何提示。

最佳答案

在我看来,您的困惑在于您正在尝试使用 AID 字节 x'F1' 的 ENTER 值来索引您定义的 indicator_area

_SYSindara indicator_area;

这将不起作用,因为 _SYSindara 被定义为 char[99]。您可以将显示文件中的指示器区域检索到那里,但是您将看不到驻留在显示文件 I/O 反馈区域中的 AID 字节。这是使用

检索的
#include <xxfdbk.h>

_XXIOFB_T *iofb;          /* Pointer to the file's feedback area */
_XXIOFB_DSP_ICF_T *dspfb; /* Pointer to display file specific feedback area */

iofb = _Riofbk ( fp );
dspfb = iofb + iofb->file_dep_fb_offset;

if (dspfb->AID_byte_indic == ENTER) {
  // do something
}

您可以找到更多信息herehere在 IBM i 的 IBM 知识中心。在 IBM i 上的 QSYSINC/H(XXFDBK.C) 中。

关于c - 按回车键在多个显示记录格式之间切换,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50157055/

相关文章:

ibm-midrange - 如何以编程方式确定 IFS 中文件的 CCSID?

c# - 如何使用 cwbx.dll 和 AS400System 类从 C# 到 IBM i (iSeries) 设置库列表

c - 为什么 strstr() 搜索空字符串总是返回 true?

io - 使用 CL As400 命令抑制文件 IO

c - restrict 关键字有多严格?

sql - 对于 AS400 中的空字符串是否有类似于 COALESCE 的函数

将文件放到 iSeries 上时 Python ftplib 错误 426

ibm-midrange - CL 命令如何构建其确切的参数列表?

c - 如何显示这些小三角形或快速识别它们?

c - 当条件满足时,While 循环继续