Tivoli 服务台 6.0 开发工具包脚本语言参考
返回主页
调用程序。
FUNCTION SysCallProgram(VAL commandLine: STRING [VAL arg: STRING ... ]): INTEGER;
自变量名称 | 说明 |
commandLine | 字符串表达式,包含要调用的可执行程序的名称。如果该名称是非限定的,则将在 PATH 中搜索该程序。 |
arg | 被调用程序的命令行自变量。每个自变量都必须是 STRING 类型。 |
SysCallProgram 只能用于启动一个程序。
KNOWLEDGEBASE Make;
ROUTINES PROCEDURE MakeKB( VAL argList: LIST OF STRING );
PRIVATE ROUTINES
EVENT ErrorEvent IS ACTIONS WHEN $Event IS $MsgLabel THEN SysCallProgram( 'aseedit.exe', $EventParm( 2, STRING ) ); END; END;
PROCEDURE MakeKB( VAL argList: LIST OF STRING ) IS VARIABLES whdl: WINDOW; hdlSession: SESSION; fileName: STRING;
ACTIONS (* If no file is specified on the command line prompt for one *) IF ListLength( argList ) = 0 THEN IF WinFileDialog( $Desktop, fileName, '*.kb', 0, 0, 'File to parse?', $FileDlgCenter + $FileDlgOpen ) <1 THEN Exit; END; fileName := StrDelete( fileName, StrLength ( fileName )- 2, 3 ); ListInsert( argList, fileName ); END; FOR argList DO fileName := argList[ $CURRENT ]; (* Display Progress window *) WinCreateScrollWindow( $Desktop, whdl, $NullHandler, 0, 0, 30, 4, 'Parsing', $Helvetica, 14, BitOr($WinTitle, $WinBorder, $WinAutoPos,$WinSYsMenu )); WinWriteLN( whdl, fileName ); (* Create a session for the Application Software-Script Parser. The session is created invisible. An error file in the IDE format is requested *) SysCallProgram('kp.exe', '/IDE', '/e', fileName.&:ERR', fileName); SendMessage( whdl, $MsgClose ); IF FExists( fileName & '.ERR' ) THEN (* Test for error file *) WinCreateHyperViewer( $Desktop, whdl, '', ErrorEvent, 0, 0, 0, 0, fileName & '.ERR', BitOr($WinTitle, $WinBorder, $WinAutoPos, $WinAutoSize, $WinSysMenu, $WinReSize )); SendMessage( whdl, $MsgOpenFile, fileName & '.ERR', fileName, $HyperNoWordWrap ); WinWait( whdl ); END; END; END;
返回码 | 说明 |
1 | 成功 |
-2 | 未知值 |
-3 | 内存不足 |
在新会话中启动程序,该新会话是正调用的会话的子会话。
FUNCTION SysCreateSession(REF hdlSession: SESSION, VAL program, argList: STRING, VAL xLoc, yLoc, width, height, style: INTEGER): INTEGER;
注意:终止应用程序时,将终止该应用程序创建的所有会话。
自变量名称 | 说明 |
hdlSession | 返回新建会话的会话句柄。如果没有创建会话,将把句柄设置为 $Unknown。 |
program | 要执行的程序的名称。如果该程序不在 PATH 中,必须指定一个全限定的名称。 |
argList | 被调用程序的所有命令行自变量。 |
xLoc | 新会话左上角的横坐标。不是所有的程序都支持定位。 |
yLoc | 新会话左上角的纵坐标。不是所有的程序都支持定位。 |
width | 新会话的宽度。不是所有的程序都支持定位。 |
height | 新会话的高度。不是所有的程序都支持定位。 |
style | 控制新会话行为的样式标志。可以组合下列任何标志来形成样式:
|
要使该函数运行,必须知道自变量表。如果没有自变量,应当传送一个长度为 0 的字符串('')。
注:请不要传入 $Unknown。
在 OS/2 中,通过将 COMMAND.COM 指定为程序和将 /c win <progname> 指定为自变量,可以创建全屏幕 Windows 会话。
在 OS/2 中,许多显示管理器应用程序在启动时自行设置窗口大小。在这种情况下,将忽略 xLoc、yLoc、xLen 和 yLen 参数。
在 Windows 中不使用 xLoc、yLoc、xLen 和 yLen 参数。在 Windows 中,通过假定 $SessionAutoPosition 用于这些样式来创建所有的会话。
KNOWLEDGEBASE Make;
ROUTINES PROCEDURE MakeKB( VAL argList: LIST OF STRING );
PRIVATE ROUTINES
EVENT ErrorEvent IS ACTIONS WHEN $Event IS $MsgLabel THEN SysCallProgram( 'aseedit.exe', $EventParm( 2, STRING ) ); END; END;
PROCEDURE MakeKB( VAL argList: LIST OF STRING ) IS VARIABLES whdl: WINDOW; hdlSession: SESSION; fileName: STRING;
ACTIONS (* If no file is specified on the command line prompt for one *) IF ListLength( argList ) = 0 THEN IF WinFileDialog( $Desktop, fileName, '*.kb', 0, 0, 'File to parse?', $FileDlgCenter + $FileDlgOpen ) <1 THEN Exit; END; fileName := StrDelete( fileName, StrLength (fileName) - 2, 3 ); ListInsert( argList, fileName ); END; FOR argList DO fileName := argList[ $CURRENT ]; (* Display Progress window *) WinCreateScrollWindow( $Desktop, whdl, $NullHandler, 0, 0, 30, 4, 'Parsing', $Helvetica, 14, BitOr($WinTitle, $WinBorder, $WinAutoPos,$WinSYsMenu )); WinWriteLN( whdl,fileName ); (* Create a session for the Application Software-Script parser. The session is *) (* created invisibly. An error file in the IDE format *) (* is requested *) SysCreateSession( hdlsession, 'kp.exe','/IDE /e' & fileName & '.ERR ' & fileName, 0, 0, 0, 0, $SessionInvisible ); SysWaitSession( hdlSession );
(* Close progress window when parser is finished *) SendMessage( whdl, $MsgClose ); IF FExists( fileName & '.ERR' ) THEN (* Test for error file *) WinCreateHyperViewer( $Desktop, whdl, '', ErrorEvent, 0, 0, 0, 0, fileName & '.ERR', BitOr($WinTitle, $WinBorder, $WinAutoPos, $WinAutoSize, $WinSysMenu, $WinReSize )); SendMessage( whdl, $MsgOpenFile, fileName & '.ERR', fileName, $HyperNoWordWrap ); WinWait( whdl ); END; END; END;
返回码 | 说明 |
1 | 成功完成 |
-2 | 未知值 |
-4 | 不能创建会话 |
使执行暂停 n 毫秒。
FUNCTION SysDelay(VAL time: INTEGER): INTEGER;
自变量名称 | 说明 |
time | 以毫秒为单位的延迟持续时间 |
KNOWLEDGEBASE Tone;
ROUTINES PROCEDURE ToneExample;
PRIVATE ROUTINES PROCEDURE ToneExample IS
ACTIONS SysTone( 440, 100 ); SysDelay( 50 ); SysTone( 440, 100 ); SysDelay( 50 ); SysTone( 440, 100 ); SysDelay( 50 ); SysTone( 300, 400 ); END;
返回码 | 说明 |
1 | 成功完成 |
-2 | 未知值 |
从系统剪贴板上获取字符串。
FUNCTION SysGetClipboard(REF clipBoard: STRING): INTEGER;
自变量名称 | 说明 |
clipBoard | 返回系统剪贴板的值。如果剪贴板中没有文本,将把它设置成 $Unknown |
KNOWLEDGEBASE Clip;
CONSTANTS MENU_REFRESH IS 101; MENU_EXIT IS 102;
ROUTINES PROCEDURE ClipView;
PRIVATE CONSTANTS menuList IS { '~File', '~Refresh', 'e~xit', '' }: LIST OF
STRING;
ROUTINES (* ******** EDITOR EVENT HANDLER ******** *) EVENT ClipboardEvent( REF clipBoard: STRING ) IS ACTIONS WHEN $Event IS $MsgCreate THEN WinSetMenuBar( $Handle, menuList ); SysGetClipboard( clipBoard ); WinWrite( $Handle, clipBoard ); ELSWHEN $MsgMenu THEN (* Menu Message *) WHEN $MenuSelection IS MENU_REFRESH THEN SysGetClipboard( clipBoard ); WinCLear( $Handle ); WinWrite( $Handle, clipBoard ); ELSWHEN MENU_EXIT THEN SendMessage( $Handle, $MsgClose ); END; END; END;
PROCEDURE ClipView IS
VARIABLES whdl: WINDOW; result: INTEGER;
ACTIONS result := WinCreateScrollWindow( $Desktop, whdl, ClipboardEvent{''}, 0, 0, 0, 0, 'KML Clipboard viewer', '', 10, BitOr($WinBorder, $WinTitle, $WinResize, $WinSysMenu, $WinMenu, $WinAutoPos, $WinAutoSize, $WinVScroll, $WinHScroll, $WinTaskList )) IF result < 1 THEN WinMessageBox( $Desktop, 'Error', $mbok + $MBIconError, 'Open failed' & result ); END; WinWait( whdl ); END;
返回码 | 说明 |
1 | 成功完成 |
0 | 剪贴板为空 |
-3 | 内存不足 |
-10 | 访问剪贴板的操作系统调用之一失败 |
用当前操作环境的有关信息来填充被引用的上下文记录的字段。
FUNCTION SysGetContext (REF context: $SystemContext): INTEGER;
自变量名称 | 说明 |
context | $SystemContext 类型的自变量 |
$SystemContext 是在系统知识库 kml.kb 中声明的 RECORD 类型。$SystemContext 的声明是:
$SystemContext IS RECORD operatingSystem: String; ASEVersion: String; VendorOSName: String: VendorOSVersion: String; FreeMemory: Integer: FreeResources: Integer: NLSInfo: $SystemNlsInfo; END;
下面是与 $SystemContext 使用的字段的说明。
字段 | 说明 |
operatingSystem | Windows、OS/2 或 UNIX。 |
ASEVersion | 当前是 5.0。 |
VendorOSName | 工作站操作系统供应商的全名。该字段与 $SystemContext operatingSystem 字段有区别,因为它包含操作系统的实际名称(例如,“Microsoft Windows 95”),而不是标识符。 |
VendorOSVersion | 供应商的工作站操作系统版本号。如果发生下列情况之一,该字段有可能是未知的:
|
FreeMemory | 在进行 SysGetContext 调用时操作系统当前可用空闲内存 (物理的和虚拟的都包括)的大小估计。返回值的单位是千字节 (KB)。 |
FreeResources | 该字段包含进行 SysGetContext 调用时,操作系统当前可用空闲资源的大小估计。如果操作系统不(像在 OS/2 中那样)支持这一概念,该字段有可能是未知的。 |
NlsInfo | 国家语言支持信息。请参见下面的 $SystemNlsInfo 记录的说明。 |
SysGetContext 返回的记录包含下列国家语言支持(NLS)信息:
$SystemNlsInfo IS RECORD CountryCode: Integer; CurrencySymbol: String; CurrencyBefore: Boolean; DateFourDigitYear: Boolean; DateOrdering: String; DateSeparator: String; DecimalSeparator: String; DecimalLeadingZero: Boolean; NumCurrencyDecimalDigits: Integer; NumCurrencyExtraSpaces: Integer; NumericGroupSeparator: String; NumRealDecimalDigits: Integer; TimeSeparator: String;
字段 | 说明 |
CountryCode | 主机的国家代码 |
CurrencyBefore | 货币符号是显示在数字之前还是之后 TRUE - 货币符号位于数字之前 FALSE - 货币符号位于数字之后 |
CurrencySymbol | 主机的货币符号 |
DateFourDigitYear | 本地日期格式是用两位还是四位年份。 TRUE = 日期设置成像 1999 这样的格式 FALSE = 日期设置成像 99 这样的格式 |
DateOrdering | 类似 MM/DD/YY 的格式字符串 |
DateSeparator | 用于分隔日期中日、月和年的值的字符 |
DecimalSeparator | 用于将数字与小数部分分隔开的字符 |
DecimalLeadingZero | 在十进制数值小于 1 时是否在前加零(例如,0.123 或 .123) |
IntlCurrencySymbol | 在不能始终得到合适字符的地方使用的国际货币符号 |
LocaleId | 主机的当前语言环境 |
NumCurrencyDecimalDigit | 通常用于小数点左面的数字位数 |
NumCurrencyExtraSpaces | 在货币符号和数字之间插入的空格数 |
NumericGroupSeparator | 用于对大数字中的数位进行分组的字符(即,千位分隔符) |
NumRealDecimalDigits | 显示实数时显示的数字位数(例如,3.14159 或 3.14) |
TimeSeparator | 用于分隔小时、分钟和秒钟的字符 |
该函数使用的 $SystemContext RECORD 具有一个名为 GMTBias 的新字段。这是本地时间和相应的
GMT 时间相差的秒数。通常是从主机操作系统上检索该值,但也可以使用
SysSetGMTDiff 来手动设置它。
该对话框的文本框页包括一个标记为“转换到/自 GMT”的新复选框。只能为包含 Time 或 Date 模式的输入字段选择该框。选择该框,表示要 Tivoli 服务台开发工具包自动地本地化(请参见 SysLocalizeTime)提供的时间和日期。
该对话框的“栏”标签包括一个标记为“转换到/自 GMT”的新复选框。可以分别为
MCLB 中的各个栏单独设置该框。只能为将要包含 DATE 或 TIME 类型值的栏进行这种设置。
将“转换到/自 GMT”复选框用于输入字段和 MCLB 栏时(如上文所述),必须遵守一个简单的
命名约定才能进行这种转换。
对于每个已作 GMT 转换标记的时间字段,必须也标记相应的日期字段。必须使用命名约定来使这两个字段互相关联(其他信息,请参见 SysLocalizeTime 和 SysGlobalizeTime 的
文档)。
时间和日期字段必须分别具有以 “_TIME” 和 “_DATE” 结束的控件名。该名称的所有其他前置部分必须是完全相同的。现举例如下:
时间字段控件名 日期字段控件名 有效性
----------------------- ----------------------- --------
START_TIME START_DATE 正确
MY_BIRTH_TIME MY_BIRTH_DATE 正确
MYBIRTHTIME MYBIRTHDATE 不正确
THE_TIME_ENDS THE_DATE_ENDS 不正确
如果不正确地配对这两个字段,将不能进行转换。
返回码 | 说明 |
1 | 成功完成 |
-2 | 上下文参数包含无效的引用 |
SysGetEnvironment 函数在操作系统提供的环境列表中搜索与给定关键字相匹配的字符串。找到关键字后,SysGetEnvironment 返回与该关键字相关联的字符串。
FUNCTION SysGetEnvironment (VAL key: STRING): STRING;
自变量名称 | 说明 |
key | 要搜索的关键字 |
如果环境列表不包含与给定关键字相匹配的条目,将返回 $Unknown。
IF UNKNOWN (fileName := SysGetEnvironment ('CONFIG')) THEN CreateDefaultConfigFile;\ END; ConfigFile :=FOpen (fileName);
找到关键字后,SysGetEnvironment 返回与该关键字相关联的字符串。
在系统中查询所有活动任务的列表。
FUNCTION SysGetTaskList(REF taskList: LIST OF $TASKRECORD): INTEGER;
注:系统会话命令只能用于调用的会话所创建的会话。
OS/2 对发送到属于不同进程的窗口的消息加以限制。关于这些限制的其他信息,请参见 OS/2 系统程序设计文档。
自变量名称 | 说明 |
taskList | 该自变量必须是系统定义的记录类型 $TASKRECORD 的列表变量。$TASKRECORD 是在系统知识库 kml.kb 中按下述方式定义的:$TASKRECORD IS title: STRING; hWindow: WINDOW; hSession: SESSION; hProcess: PROCESS; END; |
SysGetTaskList 返回各个打开会话的任务记录,包括不是 TSD 脚本会话的会话。每个任务记录包含来自其相应会话的顶级窗口的标题文本。
KNOWLEDGEBASE Tasks;
ROUTINES FUNCTION SelectTask( VAL taskName: STRING ): BOOLEAN;
PRIVATE ROUTINES
FUNCTION SelectTask( VAL taskName: STRING ): BOOLEAN IS VARIABLES taskList: LIST OF $TASKRECORD; (* $TASKRECORD is system- defined *)
ACTIONS IF SysGetTaskList( taskList ) <= 0 THEN EXIT FALSE; END; FOR taskList DO (* Search list for task name *) IF taskList[ $CURRENT ].title = taskName THEN SysSelectTask (taskList[ $CURRENT ] ); EXIT TRUE; END; END; EXIT FALSE; END;
返回码 | 说明 |
任意值 | 返回各个打开会话的任务记录,包括不是 TSD 脚本会话的会话。每个任务记录包含来自其相应会话的顶级窗口的标题文本。请参见注释获取 OS/2 和 Windows 的差别。 |
-2 | 未知值。 |
-3 | 内存不足。 |
创建新的命令处理器会话。
FUNCTION SysOSShell(VAL commandLine: STRING): INTEGER;
在 OS/2 中,终止 TSD 脚本应用程序(父会话)时将终止 SysOSShell 启动的 shell。
自变量名称 | 说明 |
commandLine | 命令处理器执行的命令。空字符串创建新的命令提示。 |
在 OS/2 中,SysOSShell 启动的会话运行 COMSPEC 环境变量指定的 shell。 (这通常是 OS/2 命令处理器,cmd.exe。) SysOSShell 的自变量被传送给 shell 并用作其命令行。SysOSShell 启动的 shell 与调用进程的执行是异步的。
在 UNIX 中,作为自变量而给定的命令是按下列方式之一直接执行的:
SysOSShell 启动 /usr/bin/X11/xterm 程序(对 Sun 计算机,则为 /usr/openwin/bin/xterm)。通过为可在 PATH 环境中找到的程序或具有全限定路径的程序设置 SAI_XTERM 变量,可以超越这种规律。(在运行调用 SysOSShell 的 TSD 脚本程序之前,SAI_XTERM 必须处于用户环境中。)
在 Windows 中,SysOSShell 进行下列工作:
有两个自变量(/C 和 /K)用于在命令行中运行 shell。/C 执行命令并关闭 shell。/K 执行命令并使 shell 保持打开。不能将这些自变量应用于 UNIX。
KNOWLEDGEBASE OSShell;
ROUTINES PROCEDURE OSShellExample;
PRIVATE ROUTINES
PROCEDURE OSShellExample IS
ACTIONS (* /C or /K is required to run an external command for Windows or OS/2 *) SysOSShell( '/C aseedit' ); (* Child sessions end when parent session is terminated *) WinMessageBox( $Desktop, 'Cancel', $mbok, '' ); END;
返回码 | 说明 |
1 | 成功完成 |
-2 | 未知值 |
关于 cmd.exe 的其他信息,请参见 OS/2 文档。
关于 command.com 的其他信息,请参见 DOS 帮助系统。
选择会话并向其提供焦点。
FUNCTION SysSelectSession(VAL hdlSession: SESSION): INTEGER;
自变量名称 | 说明 |
hdlSession | 所选会话的句柄 |
OS/2 会话必须具有带 $WinTaskList 样式的窗口才能被选中。不能选择没有显示在任务列表中的会话。调用会话来创建会话。在 UNIX 中,该函数只返回 1(成功),而不尝试选择会话。
KNOWLEDGEBASE Make2;
ROUTINES PROCEDURE MakeKB( VAL argList: LIST OF STRING );
PRIVATE VARIABLES hdlSessionEdit: SESSION;
ROUTINES
EVENT ErrorEvent IS ACTIONS WHEN $Event IS $MsgLabel THEN IF SysSelectSession( hdlSessionEdit ) < 1 THEN SysCreateSession( hdlSessionEdit, 'vi.exe', $EventParm(2, STRING ), 0, 0, 0, 0, $SessionAutoPosition ); END; END; END;
PROCEDURE MakeKB( VAL argList: LIST OF STRING ) IS VARIABLES whdl: WINDOW; hdlSession: SESSION; fileName: STRING; ACTIONS (* If no file is specified on the command line prompt for one *) IF ListLength( argList ) = 0 THEN IF WinFileDialog( $Desktop, fileName, '*.kb', 0, 0, 'File to parse?', $FileDlgCenter + $FileDlgOpen ) <1 THEN Exit; END; fileName := StrDelete( fileName, StrLength (fileName) - 2, 3 ); ListInsert( argList, fileName ); END; FOR argList DO fileName := argList[ $CURRENT ]; (* Display Progress window *) WinCreateScrollWindow( $Desktop, whdl, $NullHandler, 0, 0, 30, 4, 'Parsing', $Helvetica, 14, BitOr($WinTitle, $WinBorder, $WinAutoPos, $WinSYsMenu )); WinWrIteLN( whdl, fileName ); (* Create a session for the Application Software-Script parser. The session is created invisible.An error file in the IDE format *) (* is requested *) SysCreateSession( hdlSession, 'kp.exe', '/IDE /e' & fileName & '.ERR ' & fileName, 0, 0, 0, 0, $SessionInvisible ); SysWaitSession( hdlSession ); (* Close progress window when parser is finished *) SendMessage( whdl, $MsgClose ); IF FExists( fileName & '.ERR' ) THEN (* Test for error file *) WinCreateHyperViewer( $Desktop, whdl, '', ErrorEvent, 0, 0, 0, 0, fileName & '.ERR', BitOr($WinTitle, $WinBorder, $WinAutoPos, $WinAutoSize, $WinSysMenu, $WinReSize )); SendMessage( whdl, $MsgOpenFile, fileName & '.ERR', fileName, $HyperNoWordWrap ); WinWait( whdl ); END; END; (* end of FOR*) END; (* end of make KB*)
返回码 | 说明 |
1 | 成功完成。 |
-2 | 未知值。 |
-369 | 会话句柄没有引用到有效的会话。 |
-460 | 该调用进程不是该会话的父会话。只有创建会话的进程才可以选择该会话。 |
激活已选择的任务。
FUNCTION SysSelectTask(VAL task: $TASKRECORD): INTEGER;
自变量名称 | 说明 |
task | 该自变量必须是系统定义的记录类型 $TASKRECORD。$TASKRECORD 是在系统知识库 kml.kb 中按下述方式定义的:$TASKRECORD IS title: STRING;hWindow: WINDOW; hSession: SESSION; hProcess: PROCESS; END; 必须先由 SysGetTaskList 设置该记录的字段。 |
KNOWLEDGEBASE Tasks;
ROUTINES FUNCTION SelectTask( VAL taskName: STRING ): BOOLEAN;
PRIVATE ROUTINES
FUNCTION SelectTask( VAL taskName: STRING ): BOOLEAN IS VARIABLES taskList: LIST OF $TASKRECORD; (* $TASKRECORD is system-defined *)
ACTIONS IF SysGetTaskList( taskList ) <= 0 THEN EXIT FALSE; END; FOR taskList DO (* Search list for task name *) IF taskList[ $CURRENT ].title = taskName THEN SysSelectTask (taskList[ $CURRENT ] ); EXIT TRUE; END; END; EXIT FALSE; END;
返回码 | 说明 |
1 | 成功完成。 |
-2 | 未知值。 |
-10 | 对执行函数所必需的操作系统服务的请求失败。可能的原因是供给语句的自变量值无效或系统资源有限。 |
设置系统剪贴板的字符串值。
FUNCTION SysSetClipboard(VAL clipBoard: STRING): INTEGER;
自变量名称 | 说明 |
clipBoard | 新的值将替换剪贴板中以前的任何值。 |
KNOWLEDGEBASE SetClip;
ROUTINES PROCEDURE SetClipBoard( VAL clipBoard: LIST OF STRING );
PRIVATE ROUTINES PROCEDURE SetClipBoard( VAL clipBoard: LIST OF STRING ) IS VARIABLES clipBoardString: STRING;
ACTIONS clipBoardString := ''; FOR clipBoard DO clipBoardString := clipBoardString & ' ' & clipBoard[ $CURRENT ]; END; SysSetClipboard( clipBoardString ); END;
返回码 | 说明 |
1 | 成功完成 |
-2 | 未知值 |
-3 | 内存不足 |
-10 | 访问剪贴板所需要的操作系统操作之一失败 |
向操作系统提供的环境列表添加条目(或改变其中的条目),以使新的值(如果有)与给定关键字关联。
FUNCTION SysSetEnvironment (VAL key: STRING [, VAL newValue: STRING]): INTEGER;
DOS 和 OS/2 不复制传送到环境列表的字符串。取而代之的是,它们直接使用传送到环境列表中的字符串。这将对内存的使用产生两种影响:
自变量名称 | 说明 |
key | 环境列表中的关键字字符串 |
newValue | 要与关键字关联的新的字符串 |
SysSetEnvironment 函数使新的值与环境列表中的给定关键字相关联,或在省略 newValue 自变量时删除给定关键字和与其相关联的值。
环境列表的具体性质取决于操作系统。不过,通常是将环境变量列表从父进程复制到子进程,并在子进程终止时将其损坏。
通过 SysSetEnvironment 设置的环境变量应返回新的值,而且应当将该环境变量复制到由调用、SysCallProgram、SysCreateSession 和 SysOSShell启动的子进程。不能将变量复制回启动 Tivoli 服务台开发工具包运行时系统的环境。
注:如果不提供 newValue,则“不会设置”指定的环境变量。
IF SQLSelectInto ('SELECT ICONS FROM DIRECTORIES', iconPATHPATHPATHPATH) >= 1 AND StrPos (globalPath := SysGetEnvironment ('PATH'), iconPath) = 0 THEN SysSetEnvironment ('PATH', globalPath & ';' & iconPath); END;
返回码 | 说明 |
1 | 成功完成 |
-10 | 操作系统调用失败 |
通常情况下,Tivoli 服务台开发工具包内部命令对主机操作系统进行查询,以获得本地时间和格林威治标准时间之差。该函数可以用于手动设置此差值和覆盖本地值。
FUNCTION SysSetGMTDiff( VAL NewDiff : Integer [, $Seconds | $Minutes | $Hours]) : INTEGER;
自变量 | 说明 |
NewDiff | 这是 GMT 和本地时间之间的新的差值。将指定数值添加到本地时间可得到 GMT 时间。例如,纽约与 GMT 的缺省差值是 +5 小时。开罗与 GMT 的差是 -2 小时。自变量的有效取值范围是 -12 小时 <= NewDiff <= +12 小时。 |
Units | 用于指定差值的单位。 |
返回码 | 说明 |
1 | 成功 |
-1 | 指定的差值无效 |
KNOWLEDGEBASE GMTTest; ROUTINES
Procedure Proc1;
PRIVATE ROUTINES
Procedure Proc1 IS
VARIABLES whdl : Window; r : $SystemContext; t : TIME; d : DATE; nRC : Integer;
ACTIONS WinCreateScrollWindow($Desktop, whdl, $NullHandler, 15,10,80,20, 'Stuff', $SystemMonospaced, 10, $WinDefaultStyle); --Set the GMT bias to something funky. This is the equivalent of --the GMT Moscow... nRC := SysSetGMTDiff(-3, $hours); WinWriteLn(whdl, 'SysSetGMTDiff returned: ' & nRC); --Retrieve the GMT bias which should now be -3 hours (but specified in --seconds) and display it SysGetContext(r); WinWriteLn(whdl, 'GMT Bias = ' & r.GMTBias); --I picked this time and date at random t := {01,07,07}:TIME; d := {07,07,1993}:DATE; WinWriteLn(whdl, 'Before globalization: ' & d & ' ' & t ); --Globalize the time and display it SysGlobalizeTime(t, d); WinWriteLn(whdl, 'After globalization: ' & d & ' ' & t ); --Localize it again and display it (this should be the same as ”before --globalization" SysLocalizeTime(t, d); WinWriteLn(whdl, 'After localization: ' & d & ' ' & t ); WinWait( whdl ); END;
设置成功退出时,TSD 脚本解释器返回给 UNIX 命令 shell 或 DOS 窗口的整数值。如果没有使用 SysSetReturnCode,解释器将返回 1。
FUNCTION SysSetReturnCode(VAL Code: INTEGER]):INTEGER;
注意:如果 TSD 脚本解释器遇到致命错误并退出,它将覆盖由 SysSetReturnCode 设置的任何值。
自变量名称 | 说明 |
code | 返回到命令 shell 或 DOS 窗口的代码 |
如果多次调用该函数,将使用最后一次调用传送的值。
注:请不要使 TSD 脚本 RETURN 语句与该函数相混淆,该语句设置 TSD 脚本函数返回的值。
PROCEDURE DeepThought IS ACTIONS SysDelay(1000000); SysSetReturnCode(42); END;
返回码 | 说明 |
1 | 成功完成 |
-10 | 操作系统调用失败 |
停止活动会话。
FUNCTION SysStopSession(VAL hdlSession: SESSION): INTEGER;
自变量名称 | 说明 |
hdlSession | 要停止的会话的句柄。必须由调用程序来启动会话 |
KNOWLEDGEBASE Make;
ROUTINES PROCEDURE SessionExp( VAL argList: LIST OF STRING );
PRIVATE ROUTINES
PROCEDURE MakeKB( VAL argList: LIST OF STRING ) IS VARIABLES whdl: WINDOW; hdlSession: SESSION; fileName: STRING;
ACTIONS SysCreateSession( hdlSession, argList[1], argList[2], 0, 0, 0, 0, $SessionAutoPos ); SysStopSession( hdlSession ); END;
返回码 | 说明 |
1 | 成功完成 |
-2 | 未知值 |
-369 | 句柄没有引用到有效的会话。会话可能已不存在 |
-460 | 该调用进程不是该会话的父会话。进程只能停止由它创建的会话 |
从系统扬声器发出声音。
FUNCTION SysTone(VAL frequency: INTEGER, VAL duration: INTEGER ): INTEGER;
自变量名称 | 说明 |
frequency | 所发声音的频率,以赫兹为单位 |
duration | 声音的持续时间,以毫秒为单位 |
在 Windows 98 中,持续时间和频率都默认地采用系统声音的值。
KNOWLEDGEBASE Tone;
ROUTINES PROCEDURE ToneExample;
PRIVATE ROUTINES PROCEDURE ToneExample IS
ACTIONS SysTone( 440, 100 ); SysDelay( 50 ); SysTone( 440, 100 ); SysDelay( 50 ); SysTone( 440, 100 ); SysDelay( 50 ); SysTone( 300, 400 ); END;
返回码 | 说明 |
1 | 成功完成 |
-2 | 未知值 |
等待会话终止。
FUNCTION SysWaitSession(VAL hdlSession: SESSION): INTEGER;
注意:会话等待堆栈。这意味着任何以前的调用返回之前,对 SysWaitSession 的最近一次调用必须返回,即使等待的会话已经终止。
自变量名称 | 说明 |
hdlSession | 所等待的会话的句柄。必须由调用进程来启动该会话 |
KNOWLEDGEBASE Make;
ROUTINES PROCEDURE MakeKB( VAL argList: LIST OF STRING );
PRIVATE ROUTINES
EVENT ErrorEvent IS ACTIONS WHEN $Event IS $MsgLabel THEN SysCallProgram( 'aseedit.exe', $EventParm( 2, STRING ) ); END; END;
PROCEDURE MakeKB( VAL argList: LIST OF STRING ) IS VARIABLES whdl: WINDOW; hdlSession: SESSION; fileName: STRING;
ACTIONS (* If no file is specified on the command line prompt for one *) IF ListLength( argList ) = 0 THEN IF WinFileDialog( $Desktop, fileName, '*.kb', 0, 0, 'File to parse?', $FileDlgCenter + $FileDlgOpen ) <1 THEN Exit; END; fileName := StrDelete( fileName, StrLength( fileName ) - 2, 3 ); ListInsert( argList, fileName ); END; FOR argList DO fileName := argList[ $CURRENT ]; (* Display Progress window *) WinCreateScrollWindow( $Desktop, whdl, $NullHandler, 0, 0, 30, 4, 'Parsing', $Helvetica, 14, BitOr($WinTitle, $WinBorder, $WinAutoPos, $WinSYsMenu )); WinWriteLN( whdl, fileName ); (* Create a session for the Application Software-Script parser. The session is created invisible. An error file in the IDE format is *) (* requested *) SysCreateSession( hdlSession, 'kp.exe', '/IDE /e' & fileName & '.ERR ' & fileName, 0, 0, 0, 0, $SessionInvisible ); SysWaitSession( hdlSession ); (* Close progress window when parser is finished *) SendMessage( whdl, $MsgClose ); IF FExists( fileName & '.ERR' ) THEN (* Test for error file *) WinCreateHyperViewer( $Desktop, whdl, '', ErrorEvent, 0, 0, 0, 0, fileName & '.ERR', BitOr($WinTitle, $WinBorder, $WinAutoPos, $WinAutoSize, $WinSysMenu, (* created invisible. An error file in the IDE format is requested *) $WinReSize )); SendMessage( whdl, $MsgOpenFile, fileName & '.ERR', fileName, $HyperNoWordWrap ); WinWait( whdl ); END; END; (* end of FOR*) END; (* end of make KB*)
返回码 | 说明 |
1 | 成功完成 |
-2 | 未知值 |
阻塞执行当前线程,直到调遣完队列中的所有消息时为止。
FUNCTION SysYield
如果应用程序接口需要反映由处理器加强函数生成的消息,SysYield 将很有用。
已知一个时间类型的变量作为本地时间,则该函数将它调整成相应的 GMT 时间。如果这种调整也影响到日期,则还必须提供一个日期。
FUNCTION SysGlobalizeTime(REF t : TIME, REF d : DATE) : INTEGER;
自变量 | 说明 |
t | 要全球化的时间 |
d | 必须提供此值。如果调整给定时间将使日期滚动到下一天(或前一天),则调整日期以反应此变化。 应当*始终*将 SysGlobalizeTime 用在日期/时间对上。 |
返回码 | 说明 |
1 | 成功 |
-1 | 提供的日期或时间未知 |
请参见 SysSetGMTDiff 实例。
已知一个时间类型的变量作为 GMT 时间,则该函数将它调整成相应的本地时间。如果这种调整也影响到日期,则还必须提供一个日期。
FUNCTION SysLocalizeTime(REF t : TIME, REF d : DATE) : INTEGER;
自变量 | 说明 |
t | 要本地化的时间 |
d | 必须提供此值。如果调整给定时间将是日期滚动到下一天(或前一天),则调整日期以反应此变化。应当*始终*将 SysLocalizeTime 用在日期/时间对上。 |
返回码 | 说明 |
1 | 成功 |
-1 | 提供的日期或时间未知 |
请参见 SysSetGMTDiff 实例。
Tivoli 服务台 6.0 开发工具包脚本语言参考