Chinaunix首页 | 论坛 | 博客
  • 博客访问: 67812
  • 博文数量: 15
  • 博客积分: 575
  • 博客等级: 中士
  • 技术积分: 160
  • 用 户 组: 普通用户
  • 注册时间: 2006-05-25 14:49
文章分类

全部博文(15)

文章存档

2011年(1)

2006年(14)

我的朋友

分类:

2006-05-29 15:19:59

第九章  定义命令

 

       一个CL命令是请求系统完成一定功能的语句,这个功能是在进入命令时由运行的程序完成的。CL命令允许你请求一个大范围的功能。使用这些命令就象它们是IBM提供的一样,也能修改由IBM提供的缺省值。这章介绍如何定义和生成自己的命令。

 

9.1  定义命令简介

       下面解释生成命令的步聚,接下来有文字介绍每步的作用。

 

   命令定义语句

 

 

 

 

 

 


生成命令

 命令

                  显示

 

 


                                                           

命令定义目标

 

命令处理程序

 

有效性

检查程序

提示替代程序

                                                             

 

 

 

 

 

有效性检查程序和提示替代程序是可选的。

 

9.1.1  各步说明

9.1.1.1  命令定义语句

命令定义语句包括对工作站用户输入的提示,检查输入的有效性,及在命令运行时传给被调用程序的值的定义。

       命令定义语句可以放在作为CRTCMD命令输入的任何文件中。例如,SEU源文件,软盘,及其它可以包括命令定义语句的设备文件中,它们通常是由SEU输入到源文件中。表9-1给出定义命令所用的语句。

 

 

       9-1定义CL命令的语句

       语句类型                     语句名           解释

       命令                            CMD             对命令名规定提示文本

       参数                            PARM            定义参数或键字参数

       元素                            ELEM            定义用作参数值的列表中的元素

       限定                            QUAL            定义用作参数的限定名

       关系                            DEP               定义参数之间的关系

       提示控制                     PMTCTL              定义提示参数的条件

 

9.1.1.2  CRTCMD命令

       它处理命令定义语句,生成命令定义目标,CRTCMD可在交互作业或批作业中运行。

 

9.1.1.3  命令定义目标

       命令定义目标是由系统程序检验的确保命令的有效性及输入适当的参数。

 

9.1.1.4  有效性检查

       系统对命令做有效性检查,你也可以自己写检查程序。

       由系统完成的有效性检查要保证:

              要输入必须的参数值

              每个参数值要附合规定的类型和长度

              每个参数值要附合在命令定义中规定的可选要求:

              —有效值列表

—值的范围

—值的关系比较

不能输入冲突的参数

       在下列时候,系统做有效性检查:

              从工作站交互地进入命令

              用假脱机从批输入流进入命令

              SEU把命令输入到数据库文件中

              由一个HLL调用把命令传给QCMDEXCQCMDCHKQCAPCMD

              生成CL模块或OPM程序

              CL过程或程序或REXX过程运行命令

              C语言系统功能运行命

       如果要做比系统做的多的检查,可以自己写程序(看9.11),或在命令处理程序中加上检验功能。在CRTCMD命令中规定命令处理程序的名字和检查程序的名字。

       如果自己写检查程序,那么命令的参数值要先传给有效性检查程序然后再给命令处理程序,在下列条件下要在对假脱机输入流做语法检查时运行写的程序:

              对命令所有参数用常量代替变量

              SEU把命令输入到CL数据库文件中

       在程序发现错误时,用户会接收到信息并允许立即改正错误。命令处理程序假定传给它的数据是正确的。要发送系统信息,有效性检查程序必须从信息队列接收信息,把它放在CPD0006的替换变量&2中,操作系统使用信息变量&1的头四个字符。

 

9.1.1.5  提示替代程序

       写一个提示替代程序在提示命令时提供参数缺省的当前值,详细内容请看9.6,这个程序是可选的。

 

9.1.1.6  对命令提供帮助信息

       可以使用帮助面板组为命令提供帮助信息。面板组是一个类型为*PNLGRP的目标。详细内容请看应用显示程序设计一书。

 

9.1.1.7  命令处理程序

       命令处理程序CPP是命令调用完成功能请求的程序。CPP可以是CLREXXHLL程序,它可以是命令调用的应用程序,也可以是CL程序或REXX过程。它包括系统命令和一系列命令。

 

9.1.2  定义命令需要的权限

       对要使用你生成的命令的用户,他们必须对命令有操作权,对命令处理程序和有效检查程序有数据数,对命令所在的库有读的权限,对命令处理程序和有效性检查程序有读的权限。如果命令处理程序或有效性检查程序引用任何服务程序,用户对服务程序及其所在的库要有执行权,用户对下面列出的程序要有执行权:

              命令处理程序(CPP

              有效性检查程序(VCP

              CPPVCP使用的任何服务程序

              CPPVCP和服务程序所在的库

       如果其它命令在命令处理程序中运行或打开文件,用户也必须对这些命令处理程序或文件有适当的权限。

 

9.1.3  生成命令的例子

       如果要生成一个命令,让系统操作员调用一个程序来启动系统。可以按下列步骤做:(此例假定使用IBM提供的源文件)

       1、往源文件QCMDSRC中的成员STARTUP输入源语句:

 

     CMD  PROMPT('S Command for STARTUP')

 

       2、用下列命令生成命令

 

     CRTCMD  CMD(S)  PGM(STARTUP)  SRCMBR(STARTUP)

 

       3、输入源语句命令处理程序

 

         PGM

         STRSBS QINTER

         STRSBS QBATCH

         STRSBS QSPL

         STRPRTWTR DEV(QSYSPRT) OUTQ(QPRINT) WTR(WTR)

         STRPRTWTR DEV(WSPR2) OUTQ(WSPRINT) WTR(WTR2)

         SNDPGMMSG MSG('STARTUP procedure completed') MSGTYPE(*COMP)

         ENDPGM

 

       4、用下列命令生成CL程序

 

         CRTBNDCL  STARTUP

 

       在上面例子中,S是新命令的名字(由CMD参数规定)。STARTUP是命令处理程序的名字(由PGM参数规定),也是包括命令定义语句的源成员名(由SRCMBR参数规定)。现在,系统操作员可以进入S来调用命令或用CALL STARTUP来调用命令处理程序。

 

9.2  定义命令

       要定义命令,首先要用命令定义语句定义命令。这些命令在CL参考一书中有详细介绍,以下介绍它的一般格式和编码原则。

       语句                     编码原则

       CMD             仅能用一个CMD语句,它可以放在源文件的任何地方

       PARM            最多允许75PARM,在源文件中PARM的顺序决定了在处理时的顺

序。每个参数都要有一个PARM,它要传给命令处理程序,要把一个参数规定为键字参数,必须在PARM中规定KEYPARM(*YES)。有键字定义的PARM个数由定义要修改的目标的唯一需要来限制。要使用键字参数,在生成命令时必须规定提示替代程序,它不允许与提示控制同用。

       ELEM            在一个列表中最多可有300ELEM,它在源文件中的顺序决定了列表

中元素的顺序。第一个ELEM语句必须有一个语句标号,它与在PARM

中的TYPE语句或列表中的ELEM语句的标号匹配。

       QUAL            对一个限定名最多有300个限定,它在源文件中的顺序决定了规定限定

的顺序和传送给命令处理程序和有效性检查程序的顺序。

       DEP               DEP语句必须放在它引用的所有PARM语句后边。这样,DEP语句通

常都放在源文件接近结束的地方。

       PMTCTL              必须放在它引用的所有PARM语句后边。这样,PMTCTL通常放在源文

件要结束的地方。

       在源文件中,至少要有一个PARM参数,它放在ELEMQUAL语句前。输入命令定义语句的源文件用做CRTCMD命令的源语句来生成命令。

 

9.2.1  使用CMD语句

       在定义一个命令时,在命令定义语句中必须要有一个且仅能有一个CMD语句。

       在定义一个命令时,可对用户提供命令提示说明。如果用户选择要提示代替整个命令的输入,那么可输入命令名然后按F4键,显示命令名,且在显示的第一行给出标题提示说明。可在CMD中用PROMPT语句来规定提示的标题,然后规定参数的提示,列表元素和限定,它们分别在PROMPT语句中用PARMELEMQUAL语句。

       PROMPT语句中,可规定最多30个字符的串做为提示标题说明,或者在信息描述中规定信息标识。在下例中,对命令ORDENTRY规定一个字符串:

 

     CMD PROMPT('Order Entry')

 

       在用户输入命令名且按F4键后,提示的第一行象下面那样:

 

     Order Entry (ORDENTRY)

 

       如果对定义的命令没规定提示说明,就可仅用CMD语句,也可在文本中用PROMPT键字来规定提示。

 

9.2.2  定义参数

       每个命令可最多定义75个参数,要定义参数,必须用PARM语句。

       在此语句中,可以规定以下内容:

              参数的键字名

              参数是否为键字参数

              要传送的参数值的类型

              值的长度

              如果需要,参数值的缺省值

       另外,在定义参数时,要考虑以下方面的事情:(括号中是PARM语句的参数):

              是否由命令处理程序返回值:如果规定RTNVAL(*YES),那么在调用命令时必

须要规定返回变量。如果没有规定返回变量,则给命令处理程序传送空指针

              参数是否不出现在用户提示中而做为常量传给命令处理程序(CONSTANT

              是否限制参数为某些值(VALUESSPCVALSNGVAL)。或可以是与参数类型、

长度、值范围或特定关系相匹配的值

              规定有效的参数值(VALUESSPCVALSNGVAL

确定参数是否要检查,要做什么样的检查(RELRANGE

              参数是必须的还是可选的(MIN

              在一个列表中,一个参数可以规定多少个值(MINMAX

              是否有不能打印的数据(ALWUNPRT

              参数值是否可为变量名(ALWVAR

              值是否为数据区名(DTAARA

              值是否为文件名(FILE

值是否必须是确定长度的(FULL

值的长度是否为给定值(VARY

值是否可为表达式(EXPR

传送给参数的值是否包括给出的属性信息(PASSATR

              如果没规定参数定义,是否向命令处理程序和有效性检查程序传送值(PASSVAL

              大小写值是否被保护或是否转换成大写(CASE

              在列表位移中的列表为二字节或四字节二进制数(LISTDSPL

              信息标识或提示说明(PROMPT

              在提示显示中可选字段的有效值(CHOICE

              选择值是否由程序提供(CHOICEPGM

              参数提示是否由另外的参数控制(PMTCTL

              PMTCTL的值是否由程序提供(PMTCTLPGM

              值是否在作业日志中或在提示命令中隐藏(DSPINPUT

 

9.2.2.1  命名参数的键字

       为参数选择的键字名要给出参数值所必须的信息。例如用户名用USER,比较值用CMPVAL,顺序项类型为OETYPE等。这些键字最多10个字母数字字符,第一个字符必须是字母。

 

9.2.2.2  参数类型

       基本的参数类型为:

       十进制(*DEC)。它做为压缩十进制数,用LEN中规定的长度传送给命令处理程

序。当给出值比定义值长时,发生截断。

逻辑值(*LGL)。“1”或“0”,做为长度为1的字符串(F1F0)传给命令处

理程序。

字符(*CHAR)。要放在引号中,用LEN中规定的长度传给命令处理程序。传送

时去掉引号,左对齐,用空格填充。

名字(*NAME)。字符串表示一个基本名,最大长度为256个字符。第一个字符

A-Z$#@,其余的除此之外可以是数字0-9- · 名字可用双引号括起,以LEN中规定的长度做字符串传送给命令处理程序,左对齐,空格填充,通常用它做目标名。如果参数的值为类似*LIBL*NONE,必须用SPCVAL参数说明这特殊值。这样如果用户把这些值做为名字参数值,则不管名字验证的原则。

       简单名(*SNAME)。字符串,规则与*NAME相同,但不允许有逗号。

              通讯名(*CNAME)。字符串,规则与*NAME相同,但不允许有逗号和-号。

路径名(*PNMAE)。字符串,用在LEN中规定的长度放在引号中以字符串传送

   给命令处理程序。传送时去掉引号,左对齐,空白填充。使用规则请看集成文件系统介绍一书。

类属名(*GENERIC)。它以*结尾。如果不这样,就假定它为完整的目标名,它

标识一组名字以*前所有字符组成的目标。它传给命令处理程序来找到名字以类属名字规定开头的那些目标。

日期(*DATE)。以字符串传给命令处理程序。字符串用cyymmdd格式传送。系

   统根据命令中的日期规定中的年来设置c,如果年为四位数,且

   19开头则c0,如果年为20开头则c 1。对二位数的年,

   如果yy40-99,则c0,若yy=00-39,则c=1。用户必须用

   作业属性中的DATFMT格式输入命令的日期参数。作业属性的

   DATSEP确定输入日期时的可选分隔符。用CHGJOB命令可以

   修改DATFMTDATSEP属性。程序用11940312039

   的范围读两位数字的年,四位数字年日期的范围要在8241928

   592071范围内。

       时间(*TIME)。用nnmmss格式的字符串传送给命令处理程序。

十六进制(*HEX)。规定的字符为0-F,做为十六进制的EBCDIC字符传给命令

处理程序(每字节十个十六进制数字)。右对齐,零填充。      

如果把值放在引号中,需要数字成对出现。

零元素(*ZEROELEM)。考虑做一系列零元素,即在命令中没有规定值。这个类

型用于避免通过命令输入命令处理程序希望的值。例  如,两个命令使用同一个命令处理程序,一个命令传送给它了一个参数列表,另一个命令就不用给命令处理程序传送任何值了,那么第二个命令的参数就可以规定TYPE(*ZEROELEM)

整数(*INT2*INT4)。做为二字节或四字节有符号的二进制数传给程序。CL

  程序不支持变量中用十进制数。

空(*NULL)。参数值为空指针,它做为一个空位传给命令处理程序,仅KWD

 MINMAX可用这个参数类型。

              命令串(*CMDSTR)。参数值命令,做为命令串传给命令处理程序,输入的CL

变量不允许此类型。

              语句标号。它指出一系列QUALELEM语句中的第一个语句,其后要进一步说

   明限定名或由PARM定义的混合列表。

       下面的参数类型仅适用于IBM提供的命令:

表达式(*X)。参数值为字符串,变量名或数值。如果它仅包括数字,+-号或

 小数点,则按数字值传送,否则,按字符串传送。

变量名(*VARNAME)。做为字符串传送命令处理程序。左对齐,空白填充。在

处理时它要引用一个实际的数据值,变量名最多长10位以&开头,后边第一个字符必须是字母数字。如果变量名不遵循AS/400系统的命令规则,必须用引号括起。

命令(*CMD)。参数值是命令。例如,CL命令IF有一个THEN的参数,它的值

  必须是另外的命令。

 

9.2.2.3  参数值的长度

       在下列类型的参数可以用LEN规定长度。日期型长度总为7而时间总为6。下表给出每种类型参数的最大长度和它的缺省长度。

 

数据类型

最大长度

缺省长度

*DEC

24 (9 位小数)

15 (5 位小数)

*LGL

1

1

*CHAR

5000

32

*NAME

256

10

*SNAME

256

10

*CNAME

256

10

*GENERIC

256

10

*HEX

256

1

*X

(256 24 9)

(1 15 5)

*VARNAME

11

11

*CMDSTR

20K

256

*PNAME

5000

32

 

       最大长度是指在命令运行时可给出的这类参数的最大允许长度。但在命令定义语句中允许的字符常量最多为32个字符。这个限制对CONSTANTDFTVALUESRELRANGESPCVALSNGVAL语句都有效。在提示CL命令时,输入字段是有特别规定的长度的,它们是1-2个字符以及1725325080132256512个字符。如果个别参数有不允许的长度,输入字段显示下一个长一点的字段长度,提示显示的512字符长的输入字段能比512个字符再长一些。

 

9.2.2.4  缺省值

       如果定义一个可选参数,也可用DFT定义一个值,以便在用户不给命令输入参数值时使用,这个值叫做缺省值。缺省值要附合对这个参数值规定的要求(例如类型、长度和特殊值)。如果没有规定可选的参数值,可用下面给出的缺省值:

 

 

数据类型

缺省值

*DEC

0

*INT2

0

*INT4

0

*LGL

'0'

*CHAR

空格

*NAME

空格

*SNAME

空格

*CNAME

空格

*GENERIC

空格

*DATE

('F0')

*TIME

('F0')

*ZEROELEM

0

*HEX

('00')

*NULL

*CMDSTR

空格

*PNAME

空格

 

 

9.2.2.5  定义参数的例子

       下例给出为命令定义OETYPE参数的例子:

 

     PARM   KWD(OETYPE)  TYPE(*CHAR)  RSTD(*YES) +

            VALUES(DAILY WEEKLY MONTHLY)  MIN(1) +

            PROMPT('Type of order entry:')

 

       OETYPE参数是必须的(MIN1)。它的值被限制为DAILYWEEKLYMONTHLYRSTD*YES)。PROMPT给出参数的提示说明。因为没有规定LENTYPE*CHAR,所用缺省长度32

 

9.3  数据类型和参数的限制

       下表给出根据参数类型确定的参数的有效组合。X指出组合是有效的,给出的数字说明列在表的下部的注中。

 

 

LE

RTNVA

CONSTANT

RST

VALUES

RE

RANG

SPCVA

SNGVA

*DEC

X

2

X

X

X

X

X

3

1

*LGL

X

2

X

X

X

 

 

3

1

*CHAR

X

2

X

X

X

X

X

3

1

*NAME

X

 

X

X

X

X

X

3

1

*SNAME

X

 

X

X

X

X

X

3

1

*CNAME

X

 

X

X

X

X

X

3

1

*PNAME

X

2

X

X

X

X

X

3

1

*GENERIC

X

 

X

X

X

X

X

3

1

*DATE

 

 

X

X

X

X

X

3

1

*TIME

 

 

X

X

X

X

X

3

1

*HEX

X

 

X

X

X

X

X

3

1

*ZEROELEM

 

 

 

 

 

 

 

 

 

*INT2

 

 

X

X

X

X

X

3

1

*INT4

 

 

X

X

X

X

X

3

1

*CMDSTR

X

 

X

 

 

 

 

 

 

*NULL

X

 

 

 

 

 

 

 

 

STMT LABEL

 

 

X

 

 

 

 

 

X

 

注:1、仅在MAX大于1时有效,在命令处理程序是REXX过程时忽略TO值。传送

REXX过程参数的是输入的值或缺省值。

       2、在命令处理程序是REXX过程时无效。

       3、在命令处理程序是REXX过程时忽略TO值,传送给REXX过程参数的值是

输入的值或缺省值。

 

 

MI

MA

ALWUNPRT

ALWVAR

PG

DTAARA

FIL

FULL

EXP

VAR

*DEC

X

X

 

X

 

X

 

 

 

 

*LGL

X

X

 

X

 

X

X

1

 

 

*CHAR

X

X

X

X

X

X

X

X

X

1

*NAME

X

X

 

X

X

X

X

X

X

1

7*SNAME

X

X

 

X

X

X

X

X

X

1

*CNAME

X

X

 

X

X

X

X

X

X

1

*PNAME

X

X

X

X

X

X

X

X

X

1

*GENERIC

X

X

 

X

X

X

X

X

X

1

*DATE

X

X

 

X

 

X

 

 

 

 

*TIME

X

X

 

X

 

 

 

 

X

 

*HEX

X

X

 

X

 

 

 

X

X

 

*ZEROELEM

X

X

 

 

 

 

 

 

 

 

*INT2

X

X

 

X

 

 

 

 

X

 

*INT4

X

X

 

X

 

 

 

 

X

 

*CMDSTR

2

3

 

4

 

 

 

 

 

1

*NULL

2

3

 

 

 

 

 

 

 

 

STMT LABEL

X

X

 

 

X

 

 

 

 

 

 

注:1、在命令处理程序是REXX时忽略参数。

       2TYPE*NULLMIN的值不能大于1

       3TYPE*NULL时或*CMDSTR时,MAX的值不能大于1

       4、这个类型忽略ALWVAR的值,在参数类型为*CMDSTR时不允许用CL变量。

 

 

PASA

PASSVCAS

LISTDS

DSPIN

CHOI

CHOICE

PMTC

PMTCTL

PRO

T

*DEC

1

X

3

X

X

X

X

X

X

X

*LGL

1

X

3

X

X

X

X

X

X

X

*CHAR

1

X

3

X

X

X

X

X

X

X

*NAME

1

X

3

X

X

X

X

X

X

X

*SNAME

1

X

3

X

X

X

X

X

X

X

*CNAME

1

X

3

X

X

X

X

X

X

X

*PNAME

1

X

3

X

X

X

X

X

X

X

*GENERI

1

X

3

X

X

X

X

X

X

X

*DATE

1

X

3

X

X

X

X

X

X

X

*TIME

1

X

3

X

X

X

X

X

X

X

*HEX

1

X

3

X

X

X

X

X

X

X

*ZEROEL

 

 

3

 

 

 

 

 

 

 

*INT2

1

X

3

X

X

X

X

X

X

X

*INT4

1

X

3

X

X

X

X

X

X

X

*CMDSTR

1

 

3

X

X

X

X

X

X

X

*NULL

 

 

 

 

 

 

 

 

 

 

STMT LABEL

 

2

3

 

 

X

X

X

X

X

 

注:1、在命令处理程序是REXX时忽略参数。

       2、在命令处理程序为REXX时,PASSVAL传送无空格的键字或放在引号中的字

符。

       3、仅在类型为*CHAR*PNAME时来允许CASE(*MIXED)

下表给出对PARMELEMQUAL语句的有效参数组合或限制。表中行、列交叉为空的则表示没有限制且组合是有效的。交叉中有数字,请看表后的注。

 

 

LE

RTNVA

CONSTANT

RST

DF

VALUE

RE

RANG

SPCVAL

SNGVA

LEN

 

 

 

 

 

 

 

 

 

 

RTNVAL

 

 

1

1

1

1

1

1

1

1

CONSTANT

 

1

 

 

4

 

 

 

 

16

RSTD

 

1

 

 

 

7

9

9

7

7

DFT

 

1

4

 

 

 

 

 

 

 

VALUES

 

1

 

7

 

 

 

 

 

 

REL

 

1

 

9

 

 

 

9

 

 

RANGE

 

1

 

9

 

 

9

 

 

 

SPCVAL

 

1

 

7

 

 

 

 

 

 

SNGVAL

 

1

21

7

 

 

 

 

 

 

MIN

 

 

 

 

8

 

 

 

 

 

MAX

 

2

2

 

 

 

 

 

 

10

ALWUNPRT

 

 

 

 

 

 

 

 

 

 

ALWVAR

 

12

 

 

 

 

 

 

 

 

PGM

 

1

 

 

 

 

 

 

 

 

DTAARA

 

1

 

 

 

 

 

 

 

 

FILE

 

1

 

 

 

 

 

 

 

 

FULL

 

1

 

 

 

 

 

 

 

 

EXPR

 

1

5

 

 

 

 

 

 

 

VARY

 

3

 

 

 

 

 

 

 

 

PASSATR

 

3

 

 

 

 

 

 

 

 

PASSVAL

 

13

 

 

 

 

 

11

 

 

CASE

 

 

 

 

 

 

 

 

 

 

LISTDSPL

 

 

 

 

 

 

 

 

 

 

CHOICE

 

 

14

 

 

 

 

 

 

 

CHOICEPGM

 

 

 

 

 

 

 

 

 

 

PMTCTL

 

 

15

 

 

 

 

 

 

 

PMTCTLPGM

 

 

15

 

 

 

 

 

 

 

PROMPT

 

 

管理员在2009年8月13日编辑了该文章文章。 -->
阅读(1921) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~