end 函数标记内存中程序结束的位置,并将主程序与(如果有)后续子程序分开。如果使用了 end,它必须是主程序中的最后一个函数。
如果执行了 end,它的行为与 stop 函数完全相同。如果程序在其他任何点停止执行,必须使用 stop 函数。
enter 函数使用自由字段格式从文件或设备中顺序输入数据。对于数据的镜像格式化,请参考 enter using 函数。
输入设备或文件在函数的 参数中指定。假设设备是文件系统的一部分。文件或设备可以通过其
或通过 assign to 函数与
关联的 @
来访问。如果使用
,文件或设备会在访问时打开,并在访问完成后关闭。如果使用 @
,文件或设备将在第一次分配@
时打开,然后保持打开状态以便顺序访问;也就是说,每次新访问文件或设备时,都从上次访问停止的地方开始。
输入数据按输入顺序分配给函数中列出的变量。输入数据必须逐项对应于列出变量的类型——数值或字符串。正如下面描述的那样,输入的数据项必须由分隔符分隔。
enter 函数顺序访问数据,从第一条记录开始,一条一条地读取数据。当数据被读取时,系统通过在数据中移动指针来跟踪其当前读取位置。假设文件未关闭,则下一次访问数据时,从指针的当前位置开始——即从下一条记录的开头。如果希望跳过指针一条记录,可以通过省略 enter 函数中的变量列表来实现。要将指针返回到第一条记录的开头,可以关闭文件或设备然后重新打开它。
适用于输入数据的规则如下所列。它们与 input 函数列出的规则相同,只是 input 必须在其变量列表中至少包含一项。
数值输入规则:
字符串输入规则:
字符串和数值输入:
当需要输入字符串和数字时,以上列出的规则适用。在输入过程中,如果一行中字符串后跟随数字,则字符串的长度必须与分配给它的字符串变量的设定长度相同。
语法:
enter <data source>
enter <data source>;<variable list>
enter <data source>,,<error variable>
enter <data source>,,<error variable>;<variable list>
<data source> 可以是:<name> 或 <file id>
<name> 是一个标签
<file id> 是一个字符串表达式
<error variable> 是一个数值变量
[注意 <error variable> 前面的双逗号]
<variable list> 可以是:<variable>;<variable>,<variable> 或 <variable>,<variable>, . . . <variable>
<variable> 可以是数字或字符串
[使用 <array id>(*) 来指定整个数组]
参数
<data source> 数据的输入源,可以是文件或设备。如果指定 \<file id>,文件或设备将打开读取数据,然后关闭,无论输入操作是成功还是失败。如果指定 @<name>,文件或设备将保持打开以便进一步访问。如果使用,必须事先分配 @<name>。
<error variable> 错误变量的标识符。
<variable list> 变量名列表,输入数据将被赋值给这些变量。列表中可以是任意类型的变量,包括子字符串。如果指定整个数组,每个元素将像单独的输入变量一样处理。
如果省略变量列表,将读取并丢弃一条记录的数据。
示例
enter "/dev/tape" ; A$, B
assign @Tape to "/dev/tape"
enter @Tape,,Failure; A$, B
enter @Tape ! 跳过一条记录
Data$ = "/b6903a/test_data"
enter Data$ ; A, Board$, Tests(*), R_values(*)
! 参见 input 函数的示例。
enter using 函数使得可以使用格式化输入从文件和设备顺序输入数据。对于数据的自由字段格式化,请参考 enter 函数。
输入设备或文件在函数的 参数中指定。假设设备是文件系统的一部分。文件或设备可以通过其
通过函数的
输入数据按顺序分配给函数中列出的变量。根据 image 规范格式化的输入数据必须逐项对应于列出变量的类型——数值或字符串,并且必须有足够的数据来填充所有列出的变量。
enter using 函数顺序访问数据,从第一条记录开始。除非使用了 image (/) 来使记录边界可以被跨越,否则只读取一条记录。如果在当前记录结束之前填满了所有列出的变量,那么数据继续读取直到读取到 EOR(记录结束)。但是,这些数据将被丢弃。如果输入来自 GPIB 设备,并且 image 规范中包含 inhibit-EOL spec (#),那么一旦填满所有列出的变量,读取将终止。
当数据被读取时,系统通过在数据中移动指针来跟踪其当前读取位置。假设文件或设备未关闭,下一次访问数据时从指针的当前位置开始;即从下一条记录的开头。如果希望跳过一个或多个记录,可以通过省略 enter using 函数中的变量列表来实现。除非使用 image 规范 (/) 来跳过多条记录,否则会跳过一条记录的数据。要将指针返回到第一条记录的开头,可以关闭文件或设备然后重新打开它。
输入数据必须遵循以下规则,任何违反都将导致执行错误:
每一项数据必须与其将要分配的变量类型(数值或字符串)相同。
数字必须只包含有效字符,并按正确顺序排列。
输入字符串不能长于分配给它的变量的设定长度。输入后,变量的实际长度与分配给它的字符串长度相同。(标准的字符串分配规则适用。)
输入中的分隔符(逗号等)将被忽略。image 规范决定了每个数据项的开始和结束。
输入数据可以跨记录边界,但单个项目不可以。
输入的数据必须足以填充变量列表中的所有变量。在这之后,数据将继续读取直到碰到 EOL(行结束),除非 image 规范中包含 suppress EOL (#)。
语法
enter <data source> using <image data>
enter <data source> using <image data>;<variable list>
enter <data source>,,<error variable> using <image data>
enter <data source>,,<error variable> using <image data>;<variable list>
<data source> 可以是:<name> 或 <file id>
<name> 是一个标签
<file id> 是一个字符串表达式
<image data> 可以是:<image id> 或 <image specifications>
<image id> 是一个标签
<image specifications> 是一个字符串表达式
<error variable> 是一个数值变量
[注意 <error variable> 前面的双逗号]
<variable list> 可以是:<variable>;<variable>,<variable> 或 <variable>,<variable>, . . . <variable>
<variable> 可以是数字或字符串
[使用 <array id>(*) 来指定整个数组]
参数
<data source>
数据的输入源,可以是文件或设备。如果指定 <file id>,文件或设备将打开读取数据,然后关闭,无论读取操作是否成功。如果指定 @<name>,文件或设备将保持打开以便进一步访问。如果使用,必须事先分配 @<name>。
<image id>
包含用于格式化输入数据的规范的 image 函数的标识符。
<image specifications>
用于格式化输入数据的规范列表。有关规范的完整描述,请参考 image 函数。
<error variable>
错误变量的标识符。
<variable list>
变量名列表,输入数据将被赋值给这些变量。列表中可以是任意类型的变量,包括子字符串。如果指定整个数组,必须提供足够的数据来填充该数组中的所有元素。
如果省略变量列表,读取指针前进一条或多条记录,具体由 image 规范决定。跳过期间的数据将被忽略。
示例
这些示例展示了编写 enter using 函数的不同方法。查看 image 函数以获取说明 image 规范如何格式化输入数据的示例。
enter "/dev/8" using L1; A,B,C ! 文件 ID 和 image 引用
L1: image dd.dd, sd.de, z.d ! image 函数
! A B C
! input = ‑1.42+4.234 2.1 ‑1.42 4.234 2.1
assign @Tape to "/dev/8"
enter @Tape using L1; A,B,C ! @ 和 image 引用
enter @Tape using "dd.dd, sd.de, z.d"; A,B,C ! 将 "image" 规范放在字符串表达式中
Form$ = "dd.dd, sd.de, z.d"
enter @Tape using Form$; A,B,C ! 与前一个示例相同
Input$ = "/dev/8"
enter Input$ using Form$; A,B,C
enter @Tape,,Failure using Form$; A,B,C ! 错误变量
L2: image 12a, 30(ddd), 30(sd.ddde)
enter @Tape using L2; Board$, Tests(*), R_values(*)
! 输入到数组中
errm$
函数返回一个包含系统错误消息简短版本的字符串,该消息与最近的运行时错误或特定的运行时错误编号相关。当运行 run 命令或编辑程序时,该函数会重置为零。errmlong$
函数返回错误消息的长版本。
语法
errm$
errm$ ( <error number> )
<error number> 所选运行时错误的错误编号。如果省略此参数,将默认为最近的运行时错误编号。
eg:
if errn <> 0 then print "Error: "; errm$
log is "/test/file3", Err
if Err <> 0 then print errm$
print errm$(248)
errmlong$
函数返回一个包含系统错误消息的长版本的字符串,该消息与最近的运行时错误或特定的运行时错误编号相关。当运行 run 命令或编辑程序时,该函数会重置为零。errm$
函数返回错误消息的简短版本。
语法
errmlong$
errmlong$ ( <error number> )
<error number>所选运行时错误的错误编号。如果省略此参数,将默认为最近的运行时错误编号。
eg:
if errn <> 0 then print "Error: "; errmlong$
log is "/test/file3", Err
if Err <> 0 then print errmlong$
print errmlong$(248)
errn
函数返回最近的运行时错误的错误编号。当运行 run 命令或编辑程序时,该函数会重置为零。
eg:
if errn=248 then print "操作员按下了停止键"
“execute” 函数用于在 BT-Basic 窗口内执行 BT-Basic 之外的命令(或可执行程序)。此函数可以通过以下两种方式使用:
在命令行上不带参数执行此函数会将当前窗口更改为 shell 窗口,您可以在其中执行 BT-Basic 之外的命令。这假设在您的 .hp3070 环境文件中的默认值是“nowindow”;如果默认值是“window”,则会打开一个新的 shell 窗口。使用完 shell 窗口后,输入“exit”以恢复 BT-Basic 窗口。
在命令行上执行此函数并指定 BT-Basic 之外的命令会导致执行指定的命令(取以下述选项的限制)。
语法:
execute
execute
execute,
execute ,
execute
eg:
! 调用一个 shell 窗口,您可以在其中执行 BT-Basic 之外的命令
execute! 在新窗口中执行 BT-Basic 之外的命令并立即返回到 BT-Basic
execute "rm my_file"; window! 在当前窗口中执行 BT-Basic 之外的命令,并且仅在命令失败时暂停;包括一个错误变量
execute "rmdir test", Error; failwait! 在当前窗口中执行 BT-Basic 之外的命令并暂停以显示结果
execute "ls"; wait
execute "ls"; append! “ls” 命令生成的目录列表将附加到当前 BT-Basic 窗口的工作区中。
当使用多个电路板版本时,“extract version” 允许您为某个版本的电路板创建一个单独的电路板目录。您可能希望这样做是为了保持版本分离或者创建一个新的基础电路板。此命令将创建新的电路板和 board_xy 文件,分别称为 board.ver 和 board_xy.ver,并且这些文件仅包含指定版本的信息。
语法
extract version ! 提取基础电路板到本地。
extract version " " ! 提取基础电路板到本地。
extract version <version label> ! 从本地提取指定的版本到本地。
extract version <version label> from <board file id>, <board_xy file id> ! 从其他位置提取指定的版本到本地。
extract version <version label> from <board file id>, <board_xy file id> to/over <board file id>, <board_xy file id> ! 从任何地方提取指定的版本到任何地方。
<version label>
要提取的版本的名称。
<board file id>
当此参数跟在“from”之后时,它指定要提取的电路板文件版本的位置;当它跟在“to/over”之后时,它指定目标 board.ver 文件的名称。
<board_xy file id>
当此参数跟在“from”之后时,它指定要提取的 board_xy 文件版本的位置;当它跟在“to/over”之后时,它指定目标 board_xy.ver 文件的名称。
eg:
extract version "version_3"
extract version "version_3" from "ABC/board", "ABC/board_xy"
extract version "version_3" from "ABC/board", "ABC/board_xy" to "DEF/board.ver", "DEF/board_xy.ver"