【问题标题】:The mouse pointer manipulating code [closed]鼠标指针操作代码[关闭]
【发布时间】:2017-07-03 01:48:16
【问题描述】:

假设,我在 1950 年代或 1960 年代。我在可用的编程语言中没有太多可用的工具,例如 PASCAL 或 FORTRAN 或 ALGOL,并且直到最近才引入和发明了“计算机鼠标”,并且直到最近它们才与计算机一起提供并连接到我电脑的一个特定端口我可以在电脑屏幕上看到一个“小箭头”(让它甚至是一个 CRT 屏幕,希望你会因为与实际年表不同步而放松一下)按照我移动的方式移动老鼠 。

现在我想拥有可以控制屏幕上鼠标指针的计算机程序。假设我想编写一个计算机程序,它将鼠标指针的移动方向与我移动鼠标的方向相反,或者一个计算机程序将指针在鼠标屏幕上冻结几秒钟,或者一个计算机程序来改变当鼠标移动到屏幕的特定部分时鼠标指针的形状。

鉴于此要求,我的语言将如何与系统交互以控制鼠标指针。是否会更改我的语言的编译器以添加更多指令(或方法或函数),从而产生控制鼠标指针的机器代码?

【问题讨论】:

  • 在 50 年代和 60 年代没有 Pascal,Algol 也没有在 50 年代,更少使用 方法 的 OOP。它们也远离我们现在所知道的个人电脑、鼠标指针和图形。撇开所有这些错误:不清楚你想问什么。如果您能指出处理鼠标事件的 x86 指令,也许会有所帮助。指令集文档是免费提供的。
  • 鼠标指针通常由操作系统管理,它是对鼠标输入事件做出反应并根据需要绘制指针的操作系统。因此,要影响指针运动,您只需要重写鼠标处理程序。万一你有一个奇怪的硬件鼠标光标,它必须支持你想要的功能,并且必须有一种方法来请求这样的服务。您将使用您已有的与设备通信的常规方法来实现这一点,无需更改编译器。
  • @Jester:错了。大多数操作系统不关心鼠标,这留给了 GUI。只有单一的、破碎的操作系统才能以这种方式将控制台应用程序与 GUI 的东西组合在一起。 Clean OS 允许在没有 GUI 的情况下运行,例如用于服务器应用程序和其他无头用途(例如嵌入式)。
  • 关键是,鼠标设备只发送软件然后处理的事件,以最终在适当的时候绘制指针。因此,要改变这种行为,您只需在两者之间更改软件,并且该软件已经使用普通可用工具编写。
  • @Jester:但操作系统本身是用某种语言编写的计算机程序。我的目的是了解高级计算机语言如何缓慢地提出使用户能够控制某些外部物理设备的指令。所以我想追溯这些步骤。

标签: assembly embedded


【解决方案1】:

假设,我在这一年...... 1950 年代或 1960 年代。
我没有太多可用的编程语言工具。
现在我想拥有可以控制鼠标指针的计算机程序

...我的语言将如何与系统交互以控制鼠标?
是否会更改我的语言的编译器以添加更多指令...?

我认为是的。

那些年计算机比今天更“刚性”;例如,您不能从供应商处购买计算机,并在其上连接另一供应商的硬盘。为计算机提供的编程语言或多或少遵循相同的方法;简而言之,计算机是硬件和软件的“独特部分”,因此所需的一切都已经存在于“独特部分”中。

我认为这意味着,如果 50 年代的计算机有鼠标,那么它所使用的编程语言会有特殊的指令来处理它。

例如,如果我们查看 BASIC 语言,我们可以看到最初 PRINT 指令可以以“电传”方式打印内容。当电传打字机被 CRT 终端(带有视频的,可能 25 行 80 列字符)取代时,出现了“光标”、“清屏”、“闪烁字符”等新概念。开发了管理这些新功能的不同方法:从 POKEing 值到操作系统(或固件)位置(低级),到使用转义序列(今天仍在使用),但最终现代 BASIC 在语言中包括对它们的本机支持,例如 LOCATE 和 CLS 指令、FLASH 修饰符和类似的东西。

为机器 X 编写一个用 BASIC 编写的程序,并让它在机器 Y 上运行并不总是微不足道的:BASIC 的太多变体和周围的许多不同机器使事情变得复杂。无论如何,这与我的第一句话是一致的:语言是为给定的硬件量身定制的,并试图为该硬件提供功能。

幸运的是,事情在发展。现在,您可以从供应商处购买硬盘或鼠标,并将其连接到其他供应商的计算机上。由于标准化,这是可能的。语言也是如此 - 现在没有人试图开发一种语言来支持计算机的特定功能。相反,语言(和操作系统)倾向于实现各种协议(或标准),使它们能够与其他软件(软件库、驱动程序、操作系统服务)互操作)。现代语言专注于定义良好的语法、模型、概念,并且在每种情况下都趋于相同。也许第一个(使用和成功的)以这种方式制作的语言是 C。在这种语言中,语言本身甚至没有指定 I/O:C 中没有 PRINT 指令;相反,您有一个标准化的库,其实现因系统而异,但语言没有。

总之,现代语言不与鼠标或其他硬件交互,它们具有让它们与其他软件交互的功能。相反,在 50 年代,语言的规划与今天不同。

PS:如果有人认为我使用的英语可以改进,请随时编辑

【讨论】:

    【解决方案2】:

    你有它,而不是错误的方式。鼠标硬件和鼠标指针之间没有直接的硬件链接 - 必须已经有软件渲染指针以响应鼠标运动。如果您希望指针表现不同,那只是不同软件而不是另一个软件层。

    软件编写的语言在很大程度上是无关紧要的,但系统级代码通常是用系统级语言编写的。在您讨论的时代,这通常是汇编代码/机器代码。当时任何有用的高级语言都可以调用机器代码子例程来支持可扩展性。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2010-12-22
      • 1970-01-01
      • 1970-01-01
      • 2020-09-27
      相关资源
      最近更新 更多