CLEAR语句是否有第一个参数?

时间:2018-12-08 06:48:41

标签: qbasic gw-basic quickbasic

在GW-BASIC和QuickBASIC中,语句都是传递的参数,其中一些是可选的,根据语句可以省略:

REM Move the text cursor to the specified column and row.
LOCATE row%, column%

REM Move the text cursor to the specified column without changing the row.
LOCATE , column%

在GW-BASIC中,CLEAR语句很不寻常,因为它的第一个“参数”始终被省略:

CLEAR , basicMem
CLEAR , basicMem, basicStack
CLEAR , , basicStack

在QuickBASIC中,由于解释器/运行时管理其自身的内存,basicMem参数成为可选参数:

CLEAR , , basicStack

我想知道的是,第一个“参数”是否曾用于GW-BASIC之前的任何东西,即实际上是否有用:

CLEAR missingArg, basicMem, basicStack
REM   ^^^^^^^^^^
REM      here

也就是说,在第一个逗号之前是否存在有目的的非空参数?

如果有人有什么想法,我很想知道!

1 个答案:

答案 0 :(得分:6)

  

我想知道的是,第一个“参数”是否曾经用于   GW-BASIC之前的任何东西,即实际上是这样的东西   有用:

CLEAR missingArg, basicMem, basicStack
REM   ^^^^^^^^^^
REM      here
     

也就是说,在   第一个逗号?

是的,有第一个参数,但是从来没有真正使用它的三参数形式。

Microsoft(最初是Micro-Soft)创建了Altair BASIC。它具有一个CLEAR命令,该命令不带参数,将所有程序变量都设置为零。 4K版本没有字符串,因此不需要管理字符串空间。但是,8K,扩展和磁盘版本具有CLEAR命令,该命令也接受格式为CLEAR x的单个参数。值x指定可用的最大字符串空间量(以字节为单位),直到BASIC加载时,默认值在8K版本中为50字节,在Extended和Disk版本中为200字节,直到更改为止{{3} }。那就是缺少的第一个参数的来源以及它最初的用途。但是,当时只有一个论点是有效的。

Microsoft继续为多个系统开发了一个名为“ BASIC-80”的派生产品,特别是Intel ISIS-II,CP / M和TEKDOS操作系统。还创建了BASIC-80的“独立磁盘BASIC”版本,可以在“几乎任何没有操作系统的基于8080或Z80的磁盘硬件上”运行。没有4K版本的BASIC-80,因此,可以合理地假设所有版本的BASIC-80都可以使用Altair BASIC的8K版本提供的字符串。结果,需要管理该字符串空间。但是,[source]是在BASIC-80中:

CLEAR [expression![,address]]

expression!是一个指定字符串空间量的表达式,例如在8K(Altair)BASIC中,而address是BASIC可用的最大地址,即BASIC可用的内存量,就像GW-BASIC中第一个逗号之后的参数一样。

最终,BASIC-80版本5.0正式发布,并且a second argument was added

CLEAR [,[expression1][,expression2]]

expression1是BASIC可用的最大内存,而expression2是堆栈空间量。 it featured the odd syntax instead解释了为什么删除第一个参数的原因:

  
      
  1. 字符串空间是动态分配的,并且两个参数CLEAR语句中的第一个参数将被忽略。
  2.   

换句话说,CLEAR strSpace!,maxMem将忽略BASIC-80版本5.0中的strSpace!参数,因此语法变为CLEAR [,[maxMem][,maxStack]]

QuickBASIC最终将语法进一步更改为CLEAR [,,stack]。  令人困惑的是,QuickBASIC 4.5的在线帮助系统显示以下内容:

 Note: Two commas are used before stack to keep QuickBASIC compatible
       with BASICA. BASICA included an additional argument that set the
       size of the data segment. Because QuickBASIC automatically manages
       the data segment, the first parameter is no longer required.

提到的“第一个参数”是maxMem,因为BASICA(和GW-BASIC)使用了BASIC-80版本5.0可用的语法,而不是之前版本中同样缺少的strSpace!参数BASIC-80的5.0版本。