jscript模拟的“控制台”程序

本文介绍了如何使用JScript创建一个模拟的控制台程序,提供了三个示例,分别演示了通过控制台输入两个数求和、统计字符类型和数量,以及支持命令输入和执行的功能。控制台类包括了输入输出流的模拟、键盘事件处理等,允许在网页中嵌入控制台窗口。
摘要由CSDN通过智能技术生成

无聊的时候想到用jscript模拟Console程序,结果试了一下,觉得还蛮好玩的:P

实现了一个jscript“控制台”类

在读代码前先放出三个Demo:

http://akira.bigwww.com/Silver%20Luna/Demos/ConsoleDemo.html
通过“控制台”输入两个数求和

http://akira.bigwww.com/Silver%20Luna/Demos/ConsoleDemo2.html
通过“控制台”输入一个句子,统计字符类型和数量

http://akira.bigwww.com/Silver%20Luna/Demos/ConsoleDemo3.html
一个可以通过键盘敲入命令回车执行的模拟,还支持
begin
Codes...
end
的模式 :)

下面是程序代码:

//控制台类,模拟运行在控制台上的程序,可以控制“标准输入输出流”(程序模拟)
//使用方法:在页面上包含Console.js文件,构造Console对象,定义Main()函数,在Main函数中写控制命令
//版本:1.00
//作者:Akira
//编写日期:2004-11-19

function Console(page, consoleName)
{
        //静态成员
        Console.KEY_ENTER = 13;           //回车键
        Console.KEY_RETURN = 13;         //回车
        Console.KEY_NEWLINE = 10;            //换行
        Console.KEY_TAB = 9;                                    //TAB键
        Console.KEY_BACKSPACE = 8;            //退格键
        Console.KEY_LEFT = 37;                        //左移
        Console.KEY_RIGHT = 38;                        //右移
        Console.KEY_UP = 39;                                        //上移
        Console.KEY_DOWN = 40;                        //下移

        //初始化Page
        if (page == null)
        {
                page = self;
        }
        if (page != self)
        {
                //do sth here...
                throw new Error("参数错误:目前版本不支持为其他窗体对象初始化控制台/n请使用self参数");
        }
        this.page = page;

        //输入输出流属性,用字符串数组模拟流
        this.stream = new Object();
        this.stream.stdin = new Array(); //标准输入流
        this.stream.stdout = new Array(); //标准输出流
        this.stream.stderr = new Array(); //标准错误流

        this.stream.stdin.opened = false; //判断当前输入流是否开启,开启=允许写入
        this.stream.stdin.ReadOffset = 0; //判断当前输入流偏置,Read()方法使用
        this.stream.semaphores = 0; //流信号量,用来控制输出流显示,当调用输入函数时,信号量增加,
                                                                                         //当信号量大于stdin成员数目的时候,抛出异常阻塞标准输出流,用以模拟输入等待

        Console.prototype.Signal = function()
        {
                if(this.stream.semaphores == this.stream.stdin.length)
                {
                        return true;
                }
                if(this.stream.semaphores > this.stream.stdin.length)
                {
                        throw new WaitForInput(); //抛出异常阻止程序往下执行,用以等待输入
                }
                return false;
        }

        this.body = page.document.body;

        if (this.body == null)
        {
                throw new Error("控制台缺初始化失败,检查主体文档是否缺少BODY标记");
        }

        this.page.document.title += "——Javascript控制台";
        this.page.PageLoadEventSender = this;
        this.body.onload = function(){this.PageLoadEventSender.PageLoad(this.PageLoadEventSender,this.PageLoadEventSender.page.event);}  //定义PageLoad事件
        this.page.ResizeEventSender = this;
        this.body.onresize = function(){this.ResizeEventSender.OnResize(this.ResizeEventSender,this.ResizeEventSender.page.event);}

        this.ConsoleMain = page.document.getElementById(consoleName);          //可以通过参数指定初始化对象TEXTAREA的名称,这样可以把控制台
                                                                                                                                                                                    

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值