中国DOS联盟论坛

中国DOS联盟

-- 联合DOS 推动DOS 发展DOS --

联盟域名:www.cn-dos.net  论坛域名:www.cn-dos.net/forum
DOS,代表着自由开放与发展,我们努力起来,学习FreeDOS和Linux的自由开放与GNU精神,共同创造和发展美好的自由与GNU GPL世界吧!

游客:  注册 | 登录 | 命令行 | 会员 | 搜索 | 上传 | 帮助 »
中国DOS联盟论坛 » DOS开发编程 & 发展交流 (开发室) » DOS下DIR命令的修改,那位高手帮帮忙啊
作者:
标题: DOS下DIR命令的修改,那位高手帮帮忙啊 上一主题 | 下一主题
飘水
初级用户




积分 109
发帖 3
注册 2004-6-14
状态 离线
『楼 主』:  DOS下DIR命令的修改,那位高手帮帮忙啊

遇到了一个问题,请教各位高手:如果我要修改DOS下的DIR命令。使用高级语言编写和调试一个MYDIR命令。要求是:在信息多屏时,信息满一屏自动停止;可以控制前后翻屏查看文件信息;保留DOS的DIR命令的全部参数功能。
哪位高手指点一二,不胜感激啊![em27]

2004-6-14 00:00
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复
晓欣
初级用户




积分 154
发帖 14
注册 2003-12-30
状态 离线
『第 2 楼』:  

为什么要自己写呢?本来就有一个外部命令MORE可以实现这个功能啊

2004-6-15 00:00
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复
bush
银牌会员




积分 2165
发帖 730
注册 2004-4-21
状态 离线
『第 3 楼』:  

可以考虑建一个字符串数组,大小为屏幕显示的行数的N倍,(recalloc函数解决)
信息满一屏,就保存到数组一次,前后翻屏时,就是重新显示若干行的字符串。
自动停止;可以控制前后翻屏查看文件信 就是一个读键盘输入函数,根据读入的值取上翻或下翻。

大概如此!

2004-6-15 00:00
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复
飘水
初级用户




积分 109
发帖 3
注册 2004-6-14
状态 离线
『第 4 楼』:  

请问晓欣,是哪个外部命令more实现这个功能,能具体点么?谢了

2004-6-15 00:00
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复
飘水
初级用户




积分 109
发帖 3
注册 2004-6-14
状态 离线
『第 5 楼』:  

请问bush,你所说的建一个字符串数组,就是用recalloc函数解决么?这是turbo c 的库函数么?你能不能具体指点一二。谢谢!

2004-6-15 00:00
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复
bush
银牌会员




积分 2165
发帖 730
注册 2004-4-21
状态 离线
『第 6 楼』:  try!

字符串数组:实际上是字符指针的指针。
因为字符型指针可以表示字符串,
字符型指针的指针就可以表示字符串数组了,
一屏显25行,因此可以定义大小为25的串数组
每增加一屏多25行,数组的大小也就增加25
realloc函数就是改变数组的大小,用法: void realloc (void* p,unsigned size) 把p指针所指的区域大小改为size;返回指向该内存区的指针。

不过,仔细想一下,这好像有点问题,过两天我写一试试看……


[此贴子已经被作者于2004-6-18 下午 11:40:10编辑过]




2004-6-18 00:00
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复
bush
银牌会员




积分 2165
发帖 730
注册 2004-4-21
状态 离线
『第 7 楼』:  

我用TC写了一个,mydir命令程序,只是大概演示了输出信息时上翻滚屏等操作,目前只能列表文件名,没有大小、时间等信息,(加上去并不难),
目前的问题是:
我是采用findfirst() findnext()两个函数来模仿DIR命令的作用的。
但是发现其局限性很大,也许是我的方法不对,还请各位点评一下。
#include
#include
int main(int argc,char*argv[])
{
unsigned short p,line,r,i,j,maxrow=20;
struct ffblk *fp;
char** row=(char**)malloc(20*4);
if(!row)
        {
        printf("out of memory!";
        exit(1);
        }
fp=(struct ffblk*)malloc(sizeof(struct ffblk));
if(!fp)
        {
        printf("out of memory!";
        exit(1);
        }
for(r=0;r<20;r++)
        {
        row[r]=(char*)malloc(80);
        if(!row[r])
                {
                printf("out of memory!";
                exit(1);
                }
        for(i=0;iff_name;i++)row[0]=fp->ff_name;
while(!findnext(fp))
        {
        if(r++==maxrow-1)
                {
                j=0;
                maxrow+=20;
                row=(char**)realloc(row,maxrow*4);
                if(!row)
                        {
                        printf("out of memory!";
                        exit(1);
                        }
                for(j=0;j<20;j++)
                        {
                        row[r+j]=(char*)malloc(80);
                        for(i=0;iff_name;i++)row[r]=fp->ff_name;

        }
p=maxrow/20;

for(j=0;j<p-1
        {
        printf("Display page: %d\n",j+1);
        for(i=0;i<20;i++)
                printf("%s\n",row[j*20+i]);
        printf("press U to uppage, E to end;other key continue..\n";
        switch(i=getch())
        {
        case 'U':
        case 'u':
                if(j)j--;
                break;
        case 'E':
        case 'e':
                j=p-1;break;
        default :
                j++;
        }
        }
line=r%20;
printf("Display page: %d\n",j+1);
for(i=0;i<=line;i++)
        printf("%s\n",row[j*20+i]);
printf("Total %d files in this folder.\n",r+1);
for(j=0;j<maxrow;j++)
        free(row[j]);
free(row);
free(fp);
return 0;
}



2004-6-19 00:00
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复

请注意:您目前尚未注册或登录,请您注册登录以使用论坛的各项功能,例如发表和回复帖子等。


可打印版本 | 推荐给朋友 | 订阅主题 | 收藏主题



论坛跳转: