Support This Project Get i5/OS Programmer's Toolkit at SourceForge.net. Fast, secure and Free Open Source software downloads

i5/OS Programmer's Toolkit: EMI (扩展i5/OS机器接口语言) 和 MIC (MI/EMI编译器)

返回 i5/OS Programmer's Toolkit 主页

本页的翻译:

MI (i5/OS Machine Interface)是i5/OS应用程序与Licensed Internal Code (LIC) 之间的逻辑接口层。MI存在2种变体: OMI (original MI) 和 NMI (new MI)。这里我们提到的MI指OMI。

EMI (Extended i5/OS Machine Interface Language) 是什么,不是什么

这里的内容

下载MIC

MIC及i5/OS Programmer's Toolkit所有子项目各版本的的代码, 文档及二进制组件可以由这里获取

EMI的Hello World!示例

假设程序员编写了下面的2个EMI源文件,分别保存为流文件 /home/ljl/tmp/hello.emi和源物理文件(Source PF)的成员 (Member),SRCLIB/MISRC(WORLD)。编译后,程序HELLO调用WORLD随机取得一种编 程语言的名字,然后调用builtin sendmsg()输出'Hello + 语言名'。

MIC命令接口描述

MIC支持以CL命令方式调用或以QShell命令方式调用。CL命令为I5TOOLKIT/MIC, QShell命令为/usr/bin/mic或/usr/bin。这里的内容

CL命令MIC

MIC的CL命令为I5TOOLKIT/MIC;使用时需要把库I5TOOLKIT添加到库列表中。 CL命令MIC参数如下:
参数名 含义
Program (PGM) 编译产出的程序对象名及库名;库名默认为*CURLIB,当前库
Source path name (SRCPATH) 源文件路径名,见注释1, 注释2
Text description (TEXT) 程序的文字描述
Output printer file (OUTPUT) 输出编译器列示信息时使用的打印文件(*PRTF);默认为*LIBL/QSYSPRT。见注释3
Public authority (AUT) 公共权限;默认为*ALL
Include directories (INCDIR) 包含路径,最多15个;可以指定库文件系统,流文件系统的绝对路径或相对路径
Compiler options (OPTION) 编译选项;参考IBM给出的i5/OS机器接口语言规格说明 Create Program (QPRCRTPG) API
注释1.MIC支持流文件系统源和数据库文件系统源。 对于流文件系统源,SRCPATH参数直接使用流文件(*STMF)的IFS路径名,如:/home/ljl/misrc/hello.emi; 当使用数据库文件系统存储源时,要使用源物理文件(source PF),指定路径时要使用 /qsys.lib 格式,如:/qsys.lib/srclib.lib/misrc.file/world.emi。 对源物理文件(source PF)使用CL命令DSPFD时,可以看到文件的File type (FILETYPE)为'*SRC'(而数据物理文件为'*DATA')。
注释2. MIC在定位源文件时支持绝对路径和相对路径。结合使用当前路径和 源文件相对路径名可以带来许多方便。通过QShell使用MIC时,当前路径为当前工作路径; 通过CL命令使用MIC时,可以用CL命令CHDIR或CHGCURDIR修改当前路径,可以用CL命令 DSPCURDIR查看当前路径。
注释3. 如果希望MIC输出编译列示信息需要指定*LIST选项。 编译列示信息输出为spooled file,spooled file名称为 OUTPUT参数指定的Printer File名称。

QShell命令mic

MIC的QShell接口为QShell命令/usr/bin/mic或/usr/bin。使用-h选项执行mic 可以显示简要帮助信息。
> mic -h                                          
  Usage: mic [options] file                       
  Options:                                        
          -v      Verbose
          -V      Show version information
          -h      Show help information           
          -o      Name of created program object
          -t      Text description                
          -l      Output printer file name        
          -a      Public authority                
          -I      Include path                    
          -q      Compiler options
          -L      Library name of created program object
                                                  
  Report bugs to junleili-cn@users.sourceforge.net

QShell命令mic的选项及含义如下:
选项名 含义
-h 显示帮助信息
-v verbose, 当指定了-q*list 显示编译列示信息
-V 显示版本信息
-o program-name 指定程序对象名;如不指定则使用输入文件名作为程序对象名
-t text 指定程序文字描述
-l printer-file 指定输出编译器列示信息时使用的打印文件(*PRTF);如不指定使用*LIBL/QSYSPRT。
-a public-authority 公共权限;默认为*ALL
-I include-path 包含路径;可以指定最多15个
-q compiler-option 编译选项;参考IBM给出的i5/OS机器接口语言规格说明 Create Program (QPRCRTPG) API
-L library-name 程序所在库名称。 如果环境变量OUTPUTDIR存在,使用OUTPUTDIR的值。 如果环境变量OUTPUTDIR不存在,使用作业当前库。

Remarks:
如果未指定source-file-name,MIC由标准输入读取源码。 由标准输入读取源码时,如果未指定-o选项,MIC使用a.out作为输出程序名。

MIC命令使用示例

更多示例请参考 Best Practices in Using MIC

使用相对路径指定源文件和包含路径
假设库文件系统源文件为 SRCLIB/MISRC(HELLO), 被包含库文件系统源文件为 SRCLIB/MISRC(UTIL_INC),CL命令MIC参数可以按如下指定:

> CHGCURDIR DIR('/qsys.lib/srclib.lib/misrc.file')                         
  Current directory changed.                                               
> MIC PGM(HELLO)
      SRCPATH(hello.mbr)  /* 相对路径名 */
      TEXT('using relative path name')
  mic:  -- program HELLO      is placed in library *CURLIB.                
上面的示例中MIC在当前路径 /qsys.lib/srclib.lib/misrc.file 下 定位到目的源文件hello.mbr时,以及被包含源文件util_inc.mbr。

混合使用库文件系统源文件和流文件系统源文件
假设目的源文件为库文件系统源文件为 SRCLIB/MISRC(HELLO), 被包含源文件分别在流文件系统目录 /home/ljl/mi-inc, /home/ljl/mi-inc/sub-dir 下,CL命令MIC参数可以按如下指定:

> CHDIR DIR('/home/ljl/mi-src')
  Current directory changed.   
> MIC PGM(HELLO)
      SRCPATH('/qsys.lib/srclib.lib/misrc.file/hello.mbr')
      INCDIR('sub-dir')
      OPTION(*REPLACE)                                            
  mic:  -- program HELLO      is placed in library *CURLIB.                
上面的示例中MIC在当前路径 /home/ljl/mi-src 和 /home/ljl/mi-inc/sub-dir 下定位到被包含源文件。

在QShell环境下输出编译列示信息
在QShell环境下输出编译列示信息,需要同时指定-v选项和-q*list选项,如

qsh
> mic -v -q*replace -q*list hello.emi

在QShell环境通过标准输入录入源
在QShell环境下调用mic命令,如果不指定输入源文件,MIC由标准输入 读取源。如果未指定-o选项,MIC使用a.out作为输出程序名。

> mic << eof
  >
> entry * ext;
  >
> dcl dd msg char(32) auto init('happy birthday:)');
  >
> dcl dd len bin(2) auto;
  >
>     triml len, msg, ' ';
  >
>     %sendmsg(msg, len);
  >
>     rtx *;
  >
> pend;
  >
> eof
  mic:  -- program A.OUT      is placed in library LSBIN
  $
> system "call a.out" # 执行程序A.OUT
         :
  happy birthday:)
  $

EMI语法规格说明

EMI支持i5/OS机器接口语言语法,并对i5/OS机器接口语言语法进行了扩展。 关于i5/OS机器接口语言语法,参考 IBM给出的i5/OS机器接口语言规格说明 Create Program (QPRCRTPG) API

相关读物及链接

联系我们

如果您对EMI/MIC或i5/OS Programmer's Toolkit项目的其他子项目及其产品 有改进建议,请通过以下方式告诉我们:

Support This Project
Generated on Mon Aug 1 22:50:22 2011 for i5/OS Programmer's Toolkit: MIC - The Machine Instruction Language Compiler by  doxygen 1.5.9