大学四年总算是过去了,俺是学化学的可偏偏喜欢上了计算机(疯狂到连老婆都不要了,呵呵,有点夸张),现将2001年前部分DOS程序源码公开,如果有需要的这里留下Email,并给点IT就业、深造等方面的建议!

解决方案 »

  1.   

    代码描述:
    一.开发包的组成。
      1.readme.txt             本文
      2.pok                    可执行文件包
        pok\mouse.com          用于鼠标调用
        pok\Hzx12              通用12x12汉字库
        pok\64tu.exe           用于本开发包的图标设计
        pok\Menu.exe           用于本开发包的菜单及界面设计
        pok\Icon\*.*           用于64tu.exe,Menu.exe 的专用图标
        pok\buf\*.*            由64tu.exe 设计的专用图标例子
        pok\box\*.*            由Menu.exe 设计的专用界面例子
        pok\CHECKS.EXE         测试菜单设计效果的程序
      3.代码部分
        source\Box\Graph.h   图形部分
        source\Box\Mouse.h   鼠标部分
        source\Box\Chinese.h  图形界面下汉字处理部分
        source\Box\Sound.h   Pc Speaker的发声
        source\Box\ShowText.h  图形界面下的串输出
        source\Box\Tofile.h    图形界面下快保存到文件或快恢复部分
        source\Box\Copy.h      用于文件拷贝的程序函数
        source\Box\Winbox.h    菜单开发的基本单元部分
      source\Box\Init.h     基本数据类声明部分
      source\Key.h          键盘输入接受函数
      source\Win\Win.h      基本窗口函数  source\Win\Example.h   窗口开发的模板  source\libs\Svgacc.h   由Stephen L. Balkum等编写的Svga驱动库头文件
      source\libs\Svgacc.lib 由Stephen L. Balkum等编写的Svga驱动库
        source\prj\*.*     测试工程文件程序注释:
      由Pok\64tu.exe做的*.ico及Pok\Menu.exe做的*.hpp可在开发时调用,
    具体调用方法是Chkexam程序,编译时用Borland C++ 打开Chkexam.ide,
    其中Pok\Menu.exe做的*.hpp只是source\Win\Example.h的部分代码,
    即:窗口参数部分,可以自己设计任意窗口,后将得到的*.hpp文件的代码
    相应的拷贝到source\Win\Example.h中替代原有的部分即可. 
     
    二.声明:
      该开发包的源代码部分(除SVGACC.h)全部由李相斌编写及享有所有权力,
    您可以随意使用和修改。三.我的代码的不足之处
      1.代码段冗长
            可以看到,我写的代码 功能/长度 值太小,而且全程变量多,
        不利于代码移植,因为未经优化.但是可以进行优化.比如可以去
        掉一些无用的函数,如 Box\Init.h 修改及Win\*.h中相同函数的
        设计优化等.  2.临时文件:
            我写的程序代码经编译得到的程序(如:MENU.EXE,64TU.EXE)
        都有一些临时文件,名称为"$~TEMP~$XXXXXX".它们是用于各个窗
        口函数显示前保存原来的屏幕信息的.如果使用扩展内存申请,
      如编写XMS与MEM之间的相互转化调用函数,那么,就可以不用临
      时文件了.  3.程序专用文件:
        如:MENU.EXE,64TU.EXE用到的.ico图标,box,buf,并不是标准
       通用格式我嫌弃标准的ico文件太长,也是我不知道其文件格式.但
       可以只用一个文件来包含所有的图标或用通用图标或图象及动画文件
       格式,开发通用图象函数.  4.关于运行速度.
            在Dos下,程序MENU.EXE,64TU.EXE的运行速度很慢,有以下原
        因 :
            1. 显示窗口(包括恢复窗口)时对 Box\Winbox.h\DrawFigure(..)
        函数的频繁调用,汉字及英文显示对 Box\ShowText.h\ShowText(..)
        函数的频繁调用.可以发现,这两个函数几乎囊括了所有图形界面
        的全部显示功能,可是它们的效率却很低,这是原因之一.
            2. 技术问题.我写的代码并未用到太高的技术,只要对C++有
        一点了解的人都可以看懂.由于没掌握相关的图形编程技术,对于
        代码也就不斤斤计较了,所以不能达到理想的速度.四.关于代码速度的解决方案设想:    1.我看过一些关于 WINDOWS 技术的书籍,WINDOWS 之所以速度快
    两个突出的技术因素起了很大作用:
        (1).动态链接库(DLL)的运用.
      (2).基于多线程及多进程的任务处理.
      这两个技术中,第一个解决了程序的大量重复代码问题,同时突破
    Dos下不能超过基本64K的限制,API的调用也加快了运行速度.第二个
    技术使得 在进程间进行消息通讯 及 在进程内部进行消息处理 达
    到更理想的效果.  2.我的设想是:采用类似的功能调用实现以上两个功能.
      由于我并没有掌握此技术,说起来有些模糊.
      方案:
        A.对于不同进程:
             (1).开发COM模块.
             如同SPDOS或UCDOS,我们可开发服务部分.对于我的代码,
           主要是鼠标,显示,图象处理部分;对于RAV则可以是病毒查
           找,杀除,隔离系统部分等.
             (2).用EXE修改原有操作系统的中断调用,如21H等,比如:
           程序段:
                   #define Un unsigned
                   void interrupt new21h ( Un BP, Un SI, Un DS, Un ES,
                        Un DX, Un CX, Un BX, Un AX, Un IP, Un CS, 
                        Un FLAGS )
                   {
                        if ( _AH == 0x31 ) ...
                              .
                              .
                              .
                        }
               main()
                   {        .
                            .
                            .
                       setvect ( 0x21 , new21h ) ;
                            .
                            .
                            .          
                       }
                   通过这个方法也可以达到提高效率的作用.
             以上两个方法是很相似的的.
        B.对于一个程序内部:
              (1).采用多任务,同一.2的方法,但是这里涉及到不同
             变量及结构的信息传递过程,我想不是很容易.尤其是当
             消息循环启动时,由于计算机的速度快,因此用的不当可
             能得不到意想的结果,我没试过.如:在上程序setvect
          调用前加入
                   void interrupt ( * old21h )();
                   old21h = getvect ( 0x21 ) ;
                 .
                 .
                 .
            setvect ( 0x21 , old21h ) ;
              (2).采用结构或数组模拟中断调用,也可以用C++的class
             结构,但也很难,比如,该class的函数不能有等待部分
             应适合消息循环.等等.   3.以上设想我采用了B.(2)的方法,可以看到,\Pok\Menu.exe
     与\Pok\64tu.exe 虽然操作上相似,但细观察,处理消息
     的方法是不同的.\Pok\64tu.exe 在弹出窗口是是等待的,
     其实,用了一个 do - while 循环, 整个程序用了多个do-while,
      而 \Pok\Menu.exe则不是(输入部分除外,其实此部分也可不等待),
      当一个消息发生,如弹出窗口时,其它的消息同样可以进行,只是我
      将其结果屏蔽了,其实在\Pok\Menu.exe中只有一个do - while作为main
     的消息循环,从程序运行时时间的显示可以看到,除了输入部分,其他
     就不存在等待现象.五.结束语.
      我对于Dos32十分感兴趣,如Win95,Win98,WinNT的安装Setup.exe
    就十分诱人.听说MASM?.?中加入了WinAPI的调用,是吗?
        如果不涉及版权问题,请寄给我一个 Dos32 Lib .  以上是我的一些想法,不知到你们对我的程序有何看法,请来信告之,我期望
    你们的指导.
      来信请寄:
       [email protected]
      

  2.   

    [email protected]
    这为兄弟,谢谢了。
      

  3.   

    [email protected]
    哥么,想问一句,在windows下,对dos有必要精通么?不过我还是愿意了解了解
      

  4.   

    Y00Y
        呵呵,对我来说学习DOS下编程只不过是个过程,
    但确实受益匪浅,比如我现在做PDA 的SDK 有些方法还是用的着的,
    DOS吗,呵呵不能和UNIX与LINUX比。
      

  5.   

    [email protected]谢了!!!
      

  6.   

    请大家到下面下载:
    http://mail.sina.com.cn/cgi-bin/attachment.cgi/lxbdoc/application/x-msdownload/1024576561.9217.mail.sina.com.cn:2,S.a00.dat/sharing.zip