美文网首页
第二十二章 Caché 变量大全 $X 变量

第二十二章 Caché 变量大全 $X 变量

作者: Cache技术分享 | 来源:发表于2021-02-03 06:50 被阅读0次

    第二十二章 Caché 变量大全 $X 变量

    包含光标的当前水平位置。

    大纲

    $X
    

    描述

    $X包含光标的当前水平位置。将字符写入设备时,Caché会更新$X以反映水平光标位置。

    输出的每个可打印字符将X加1。回车符(`ASCII 13`)或换页符(`ASCII 12`)将`X`重置为0(零)。

    $X是16位无符号整数。

    • 在非UNICODE系统上,当$X的值达到65536时,它会换行为0。换句话说,如果$X为65535,则下一个输出字符将其重置为0。
    • 在UNICODE系统上,$X在其值达到16384时换行为0(其余两位用于日语音调编码)。

    可以使用set命令为$X$Y赋值。例如,可以使用特殊的转义序列来改变物理游标位置,而不更新$X$Y的值。在这种情况下,在使用转义序列之后,使用set将正确的值分配给$X$Y

    注意

    NLS字符映射

    国家语言支持(NLS)实用程序$X/$Y选项卡定义当前区域设置的$X$Y光标移动字符。

    带终端I/O的$X

    下表显示了不同字符对$X的影响。

    Echoed Character ASCII Code Effect on $X
    <FORM FEED> 12 $X=0
    <RETURN> 13 $X=0
    <LINE FEED> 10 $X=$X
    <BACKSPACE> 8 $X=$X-1
    <TAB> 9 $X=$X+1
    任何可打印的ASCII字符 32-126 $X=$X+1
    不可打印的字符(如转义序列) 127-255 参考 Caché ObjectScript.

    OPENUSE命令的S(ECRET)协议关闭回显。它还可以防止$X在输入过程中被更改,因此它指示真实的光标位置。

    WRITE $CHAR() 更改$XWRITE *不会更改$X。例如,WRITE $X,"/",$CHAR(8),$X 执行退格(删除/字符)并相应地重置$X,返回01。相反,WRITE $X,"/",*8,$X 执行退格键(删除/字符),但不重置$X;它返回02。

    使用WRITE*,可以向终端发送控制序列,$X仍将反映真实光标位置。由于某些控制序列确实会移动光标,因此可以使用SET命令直接设置$X。例如,以下命令将光标移动到数字VT100终端(或等效终端)上的列20和行10,并相应地设置$X$Y

    /// d ##class(PHA.TEST.SpecialVariables).X()
    ClassMethod X()
    {
        SET dy=10,dx=20
        WRITE *27,*91,dy+1,*59,dx+1,*72
        SET $Y=dy,$X=dx
        w $Y,!,$X,!
    }
    
    
    DHC-APP>d ##class(PHA.TEST.SpecialVariables).X()
     
     
     
     
     
     
     
     
                        10
    0
     
    

    设备执行但不输出的ANSI标准控制序列(如转义序列)可能会在$X$Y值与真实光标位置之间产生差异。要避免此问题,请使用WRITE*(整数表达式)语法并指定字符串中每个字符的ASCII值。例如,不使用:

       WRITE !,$CHAR(27)_"[1m"
       WRITE !,$X
    

    使用此等效表:

       WRITE !,*27,*91,*49,*109
       WRITE !,$X
    

    通常,在显式移动光标的任何转义序列之后,应更新$X$Y以反映实际光标位置。

    可以使用%SYSTEM.Process类的dx()方法设置$X如何处理当前进程的转义序列。可以通过设置Config.Miscellous类的DX属性来建立系统范围的默认行为。

    $X,带TCP和进程间通信

    当使用WRITE命令向客户端或服务器TCP设备发送数据时,Caché首先将数据存储在缓冲区中。它还更新$X以反映缓冲区中的字符数。此计数中不包括ASCII字符<return><line feed>,因为它们被视为记录的一部分。

    如果使用写入刷新$X缓冲区!命令时,Caché会将$X重置为0,并将$Y值递增1。如果使用Write#命令刷新$X$Y缓冲区,则Caché会将ASCII字符作为单独的记录写入,并将$X$Y都重置为0。

    相关文章

      网友评论

          本文标题:第二十二章 Caché 变量大全 $X 变量

          本文链接:https://www.haomeiwen.com/subject/jtqptltx.html