中国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命令的修改,那位高手帮帮忙啊 使用 LLM 解释/回答一下

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


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




积分 154
发帖 14
注册 2003-12-30
状态 离线
『第 2 楼』:   使用 LLM 解释/回答一下

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


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




积分 2165
发帖 730
注册 2004-4-21
状态 离线
『第 3 楼』:   使用 LLM 解释/回答一下

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

大概如此!


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




积分 109
发帖 3
注册 2004-6-14
状态 离线
『第 4 楼』:   使用 LLM 解释/回答一下

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


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




积分 109
发帖 3
注册 2004-6-14
状态 离线
『第 5 楼』:   使用 LLM 解释/回答一下

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


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




积分 2165
发帖 730
注册 2004-4-21
状态 离线
『第 6 楼』:  try! 使用 LLM 解释/回答一下

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

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




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




积分 2165
发帖 730
注册 2004-4-21
状态 离线
『第 7 楼』:   使用 LLM 解释/回答一下

我用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!"<img src="images/smilies/face-wink.png" align="absmiddle" border="0">;
exit(1);
}
fp=(struct ffblk*)malloc(sizeof(struct ffblk));
if(!fp)
{
printf("out of memory!"<img src="images/smilies/face-wink.png" align="absmiddle" border="0">;
exit(1);
}
for(r=0;r<20;r++)
{
row=(char*)malloc(80);
if(!row)
{
printf("out of memory!"<img src="images/smilies/face-wink.png" align="absmiddle" border="0">;
exit(1);
}
for(i=0;iff_name;i++)row=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!"<img src="images/smilies/face-wink.png" align="absmiddle" border="0">;
exit(1);
}
for(j=0;j<20;j++)
{
row=(char*)malloc(80);
for(i=0;iff_name;i++)row=fp->ff_name;

}
p=maxrow/20;

for(j=0;j<p-1<img src="images/smilies/face-wink.png" align="absmiddle" border="0">
{
printf("Display page: %d\n",j+1);
for(i=0;i<20;i++)
printf("%s\n",row);
printf("press U to uppage, E to end;other key continue..\n"<img src="images/smilies/face-wink.png" align="absmiddle" border="0">;
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);
printf("Total %d files in this folder.\n",r+1);
for(j=0;j<maxrow;j++)
free(row);
free(row);
free(fp);
return 0;
}




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

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


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



论坛跳转: