第四十章 Caché 命令大全 PRINT ZPRINT 命令

2020-08-09  本文已影响0人  Cache技术分享

第四十章 Caché 命令大全 PRINT ZPRINT 命令

显示当前设备上当前例程的代码行。

重点

  1. 注意:PRINTZPRINT命令在功能上是相同的。
  2. 类文件不行,只能打印例程。

大纲

PRINT:pc lineref1:lineref2
ZP:pc lineref1:lineref2

参数

描述

PRINT命令显示当前加载的例程中的代码行。使用ZLOAD加载例程。 ZLOAD加载例程的INT代码版本。对于当前例程的名称,请访问$ZNAME特殊变量。

输出将发送到当前设备。从终端调用时,当前输出设备默认为终端。可以使用USE命令建立当前设备。对于当前设备的设备ID,请访问$IO特殊变量。

注意:PRINTZPRINT命令在功能上是相同的。

PRINT显示例程的INT代码版本。 INT代码不计算或不包含预处理程序语句。例程的MAC版本中的完全空白行(无论是在源代码中还是在多行注释中)都由编译器删除,因此在INT例程中既不显示也不计数。因此,PRINT在MAC例程中将以下多行注释显示为两行,而不是三行:

   /* This comment includes

      a blank line */ 

MAC代码中的#;##;///注释可能不会出现在INT代码中,因此可能会影响行数和偏移量。

PRINT将编辑指针设置为其打印的行的末尾。例如,指定PRINT,然后ZINSERT“ SET y = 2”将该行插入例程的末尾;指定PRINT +1:+4,然后ZINSERT“ SET y = 2”将该行插入为第5行。$TEXT函数从当前例程中打印一行,但不更改编辑指针。

PRINT有两种形式:

不带参数的PRINT显示当前加载的例程中的所有代码行。

带参数的PRINT显示指定的代码行。 PRINT lineref1显示由lineref1指定的行。PRINT lineref1:lineref2显示以lineref1开头并以lineref2(含端点)结尾的行范围。

lineref参数使用例程的INT代码版本对行和行偏移进行计数。修改例程后,必须重新编译PRINT例程,以正确计算与源(MAC)版本相对应的行和行偏移量。

可以使用$TEXT函数返回一行INT代码。

参数

pc

可选的后置条件表达式。如果后置条件表达式为true(计算为非零数值),则Caché执行PRINT命令。如果后置条件表达式为假(计算为零),则Caché不执行命令。

lineref1

要打印的行或要显示或打印的行范围中的第一行。可以用以下两种语法形式之一指定:

标签的长度可能超过31个字符,但在前31个字符内必须唯一。 PRINT仅匹配指定标签的前31个字符。标签名称区分大小写,并且可能包含Unicode字符。

lineref2

要显示的行范围中的最后一行。以与lineref1相同的方式进行指定。必须指定lineref1才能指定lineref2。 lineref1和lineref2用冒号(:)字符分隔。在冒号和lineref2之间可能没有空格。

如果lineref2在行序列中指定的标签或偏移量早于lineref1,则PRINT会忽略lineref2并显示由lineref1指定的单行代码。

如果lineref2指定不存在的标签或偏移量,则PRINT从lineref1显示到例程的末尾。

示例

给出以下代码行:

不带行引用参数的PRINT显示所有九行,包括注释行。

AviationLetters
Abc
    WRITE "A is Abel",!
    WRITE "B is Baker",!
    WRITE "C is Charlie",!
Def WRITE "D is Delta",!
    WRITE "E is Epsilon",!
    /* Not sure about E */
    WRITE "F is Foxtrot",!
    
    PRINT +0 
    PRINT +1
    PRINT +8 
    PRINT +10
    PRINT Def 
    PRINT Def+1
DHC-APP>d AviationLetters^PHA.TEST.Command
A is Abel
B is Baker
C is Charlie
D is Delta
E is Epsilon
F is Foxtrot
AviationLetters
         /* Not sure about E */
         PRINT +0
Def      WRITE "D is Delta",!
         WRITE "E is Epsilon",!

范围示例

AviationLetters
Abc
    WRITE "A is Abel",!
    WRITE "B is Baker",!
    WRITE "C is Charlie",!
Def WRITE "D is Delta",!
    WRITE "E is Epsilon",!
    /* Not sure about E */
    WRITE "F is Foxtrot",!

    PRINT +0:+3 
    PRINT +1:+3 
    PRINT +3:+3 
    PRINT +3:+1 
    PRINT +3:Abc+1 
    PRINT +3:abc+1 
    PRINT Abc+1:+4 
    PRINT Abc+1:Abc+2 
    PRINT Abc:Def 
    PRINT Abc+1:Def 
    PRINT Def:Abc 
DHC-APP>d AviationLetters^PHA.TEST.Command
A is Abel
B is Baker
C is Charlie
D is Delta
E is Epsilon
F is Foxtrot
AviationLetters
Abc
         WRITE "A is Abel",!
         WRITE "A is Abel",!
         WRITE "A is Abel",!
         WRITE "A is Abel",!
         WRITE "A is Abel",!
         WRITE "B is Baker",!
         WRITE "C is Charlie",!
Def      WRITE "D is Delta",!
         WRITE "E is Epsilon",!
         /* Not sure about E */
         WRITE "F is Foxtrot",!
         PRINT +0:+3
         PRINT +1:+3
         PRINT +3:+3
         PRINT +3:+1
         PRINT +3:Abc+1
         PRINT +3:abc+1
         PRINT Abc+1:+4
         PRINT Abc+1:Abc+2
         PRINT Abc:Def
         PRINT Abc+1:Def
         PRINT Def:Abc
abc()
         SET a=1,b=1,c=8
         WRITE "A is Abel",!
         WRITE "B is Baker",!
         WRITE "A is Abel",!
         WRITE "B is Baker",!
Abc
         WRITE "A is Abel",!
         WRITE "B is Baker",!
         WRITE "C is Charlie",!
Def      WRITE "D is Delta",!
         WRITE "A is Abel",!
         WRITE "B is Baker",!
         WRITE "C is Charlie",!
Def      WRITE "D is Delta",!
Def      WRITE "D is Delta",!
上一篇下一篇

猜你喜欢

热点阅读