MARS用户输入:如何从用户输入回显星号?

时间:2019-05-05 23:17:55

标签: assembly terminal echo mips mars-simulator

我想从MARS中的用户输入中保存某种类型的密码。当用户键入内容时,我希望它显示*而不是键入的字符。

随着用户的输入,我会将每个字符保存到一个数组中。我已经有了将每个字符保存到缓冲区中的代码,但是我很难弄清楚如何隐藏用户键入的内容。

我该怎么做?

1 个答案:

答案 0 :(得分:-1)

据我所知,MARS不可能做到这一点。玩具系统所提供的功能甚至不允许您移动光标位置或启用/禁用终端回波。 / p>

(它确实具有“位图图形”模式,所以我想您可以在读取键盘输入时在该显示器上手绘*字形。但是它没有在位图中绘制文本的功能。)< / p>


在文本终端上的POSIX中,您可以通过禁用TTY回显并将终端置于原始模式(通过ioctl系统调用来实现)。

然后,read()系统调用将在任何输入准备就绪而不是整行时立即返回,因此您将在读取字符后使程序打印*。 (而且您必须手动支持退格行编辑)。


我在其系统调用列表中看不到MARS支持任何  http://courses.missouristate.edu/KenVollmar/mars/Help/SyscallHelp.html

您必须添加新的系统调用:http://courses.missouristate.edu/KenVollmar/mars/Help/MarsHelpTools.html介绍了如何编写Java类来处理新的系统调用并将其挂钩到MARS。

SPIM确实具有MMIO access to a "terminal" device,您可以在其中单独读取键盘输入,而不必在屏幕上回显它,但是MARS并没有记录这样的内容。我认为MARS键盘/屏幕我/ O仅可通过系统调用来使用,而文档中所涵盖的完整设置不允许。


看来,打印'\b'(ASCII退格)字符无法将光标向后移动到用户键入的内容上。您只会得到一个带有黑色轮廓的白框。

如果您是在Linux桌面或MacOS X终端窗口的XTerm(或Gnome-terminal或Konsole)中通过命令行在非GUI模式下运行MARS, 您可以将MARS输出发送到处理光标移动转义序列和代码的终端。

(我没有尝试过)最后的希望是,如果回车符(\r)将字符移动到行的开头而不前进到下一行。在这种情况下,您可以通过重新打印整行*个字符来打印用户键入的内容。

但是,即使这样行​​之有效,它也可能会按照键入的内容在屏幕上闪烁,至少在程序覆盖它之前会暂时消失。