易码技术论坛

 找回密码
 加入易码
搜索
查看: 181169|回复: 8

[原创][分享]让INPUT下岗吧

[复制链接]
发表于 2006-1-27 16:59:00 | 显示全部楼层
不错是不错,但有一个关键问题:太长了。

做小文件没问题,但是要做一个16K左右的大BAS,还是INPUT来得方便。
 楼主| 发表于 2006-1-27 18:13:00 | 显示全部楼层
不长吧??关键代码没几行

做成子程序就可以了
发表于 2006-1-27 20:54:00 | 显示全部楼层
    George,建议你修改一下GVBASIC的解释器,把上面的代码做成一个库函数(比如叫INPUTF什么的),这样就更方便了!!
发表于 2006-1-29 21:58:00 | 显示全部楼层
是也是也,GOSUB语句很容易“OUY OF ……”,所以子程序少用的好~~~
发表于 2006-1-30 11:18:00 | 显示全部楼层
GOSUB不会很容易就OUT OF MEMORY的。。。。。。

只要多注意一下尽量与RETURN和POP结合就可以了。。。。。

楼主的这个不就是WQX的输入中断吗?


 楼主| 发表于 2006-1-30 12:04:00 | 显示全部楼层
是啊,只是没人做罢了。
发表于 2006-1-30 13:11:00 | 显示全部楼层
我现在还不知道输入的数据是否在某一段内存中(搜了一遍但没搜到),因此换了种方式即PEEK字符缓存获取信息。


这个中断本来就是要从字符缓存读信息的。
 楼主| 发表于 2006-1-30 18:50:00 | 显示全部楼层
明白了,谢谢啊
 楼主| 发表于 2006-1-27 13:00:53 | 显示全部楼层 |阅读模式
本程序适用于3K,其它机型须改变相应中断.
其实很简单,但就没有人去做
请看下面的程序
10 DATA 162,00,160,16,0,6,203,96
20 FOR X =15000  TO 15007: READ D: POKE X,D: NEXT
30 POKE 4096,31: POKE 4097,2: POKE 4098,17
50 PRINT "Current Volume:  "; PEEK(1001)
60 PRINT "Set Volume:"
70 CALL 15000
80 IF PEEK(199) <>13  THEN POKE 199,141: END
90 A% =PEEK(704 +31) -48:B% =PEEK(704 +32) -48
95 IF (A% =-48  AND B% =-48) THEN POKE 199,141: END
100 IF B% =-48  THEN C% =A%:110
105 C% =A% *10 +B%
110 IF C% >14  THEN POKE 199,141: END
120 POKE 1001,C%
130 LOCATE 3,1: PRINT "Done.": END
随便编的一个,调音量的。
但你会发现只能输数字,且最多输两位,但用INPUT却无法做到。
看10行.前四个数是输入参数地址,不说那么多了.这里的参数地址就是00+16*256=4096.
0,6,203是人机交互中断(INT $CB06).相当于INPUT,注意这里是3K的,其它机型可能不一样,只要修改一下就可适用于其它机型了.
看30行,这里是参数,刚才的参数地址就是指向这里的。第一位31指缓存偏移,即光标位置,形象一下:如LOCATE 3,3 这时偏移就是(3-1)*20+3=43.第二位是输入长度,这里是2,就是两位数字.第三位是样式,这里是17,表示仅输入数字,修改此位可以控制输入类型,大家下去试试吧~ ∶).
我现在还不知道输入的数据是否在某一段内存中(搜了一遍但没搜到),因此换了种方式即PEEK字符缓存获取信息。
这样我们就能更好的控制输入了,INPUT可以下岗了…
您需要登录后才可以回帖 登录 | 加入易码

本版积分规则

Archiver|手机版|小黑屋|EMAX Studio

GMT+8, 2024-6-4 22:47 , Processed in 0.009413 second(s), 18 queries .

Powered by Discuz! X3.4

© 2001-2017 Comsenz Inc.

快速回复 返回顶部 返回列表