![]() |
中国DOS联盟-- 联合DOS 推动DOS 发展DOS --联盟域名:www.cn-dos.net 论坛域名:www.cn-dos.net/forum |
| 游客 | 登录 | 注册 | 会员 | 搜索 | 中国DOS联盟 |
|
中国DOS联盟论坛 现在时间是 2026-10-31 14:55 |
共 47,815 主题排行 / 349,930 发帖 / 今日 0 篇 / 48,290 会员排行 |
| DOS开发编程 & 发展交流 (开发室) » DOS下DIR命令的修改,那位高手帮帮忙啊 |
| 可打印版本 1,305 / 6 |
| 第1楼 飘水 | 发表于 2004-06-14 00:00 |
| 初级用户 发帖 3 积分 109 | |
|
DOS下DIR命令的修改,那位高手帮帮忙啊 遇到了一个问题,请教各位高手:如果我要修改DOS下的DIR命令。使用高级语言编写和调试一个MYDIR命令。要求是:在信息多屏时,信息满一屏自动停止;可以控制前后翻屏查看文件信息;保留DOS的DIR命令的全部参数功能。
哪位高手指点一二,不胜感激啊! |
|
| 第2楼 晓欣 | 发表于 2004-06-15 00:00 |
| 初级用户 发帖 14 积分 154 | |
|
为什么要自己写呢?本来就有一个外部命令MORE可以实现这个功能啊
|
|
| 第3楼 bush | 发表于 2004-06-15 00:00 |
| 银牌会员 发帖 730 积分 2,165 | |
|
可以考虑建一个字符串数组,大小为屏幕显示的行数的N倍,(recalloc函数解决)
信息满一屏,就保存到数组一次,前后翻屏时,就是重新显示若干行的字符串。 自动停止;可以控制前后翻屏查看文件信 就是一个读键盘输入函数,根据读入的值取上翻或下翻。 大概如此! |
|
| 第4楼 飘水 | 发表于 2004-06-15 00:00 |
| 初级用户 发帖 3 积分 109 | |
|
请问晓欣,是哪个外部命令more实现这个功能,能具体点么?谢了
|
|
| 第5楼 飘水 | 发表于 2004-06-15 00:00 |
| 初级用户 发帖 3 积分 109 | |
|
请问bush,你所说的建一个字符串数组,就是用recalloc函数解决么?这是turbo c 的库函数么?你能不能具体指点一二。谢谢!
|
|
| 第6楼 bush | 发表于 2004-06-18 00:00 |
| 银牌会员 发帖 730 积分 2,165 | |
|
try! 字符串数组:实际上是字符指针的指针。
因为字符型指针可以表示字符串, 字符型指针的指针就可以表示字符串数组了, 一屏显25行,因此可以定义大小为25的串数组 每增加一屏多25行,数组的大小也就增加25 realloc函数就是改变数组的大小,用法: void realloc (void* p,unsigned size) 把p指针所指的区域大小改为size;返回指向该内存区的指针。 不过,仔细想一下,这好像有点问题,过两天我写一试试看…… |
|
| 第7楼 bush | 发表于 2004-06-19 00:00 |
| 银牌会员 发帖 730 积分 2,165 | |
|
我用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=(char*)malloc(80); if(!row) { printf("out of memory!" ;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!" ;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 ![]() { 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" ;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; } |
|
|
[ 联系联盟系统管理团队 -
中国DOS联盟 -
标准版 ] Sponsored by ifanr Inc | © 2001–2023 |