| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 1353 人关注过本帖
标题:KNOCKER进来
取消只看楼主 加入收藏
神vLinux飘飘
Rank: 13Rank: 13Rank: 13Rank: 13
来 自:浙江杭州
等 级:贵宾
威 望:91
帖 子:6140
专家分:217
注 册:2004-7-17
收藏
 问题点数:0 回复次数:3 
KNOCKER进来

他妈的KNOCKER。竟然将我的军,干嘛非得要今天晚上写出来。害得我累得趴在电脑前面睡着了。一觉起来竟然是5点了。赶紧爬起来写完了剩下的部分。

因为时间太紧了,根本没有时间来理顺思路,简直就是想到什么写什么。所以程序中有不妥当的地方请你多多多多指正。

#include <stdio.h> #include <dos.h> /*按键定义*/ #define RIGHT 0x4d00 #define LEFT 0x4b00 #define UP 0x4800 #define DOWN 0x5000 #define ESC 0x001b

static char texts[400][80]; /*文本记录。列、行*/

int presskey() /*有暂停按键判断函数*/ { unsigned key; key=bioskey(0); if(key<<8) key=key&0x00ff; return key; }

main() {

int i,line,x,y; unsigned key; FILE *fp; char fname[30];

textmode(2); /*定义显示模式*/ printf("\nPlease input FileName:"); scanf("%s",fname);

x=0;y=0;line=0; if((fp=fopen(fname,"r"))==NULL) exit(1); /*从文件中读取文本到texts*/ while((texts[y][x++]=fgetc(fp))!=EOF) { if(x==80) {x=0;y++;} if(texts[y][x-1]=='\n') { texts[y][x]=0; x=0;y++; } }

fclose(fp);

while((key=presskey())!=ESC) /*按键判断*/ { switch(key) { case UP : line--;break; case DOWN : line++;break; }

if(line<0) line=0; else if(line>y-24) line=y-24; else { clrscr(); for(i=line;i<line+24;i++) printf("%s",texts[i]); /*输出字符*/ }

}

}

好了,你看完我的程序了,把你的链表交出来吧,我想看看~~~

搜索更多相关主题的帖子: KNOCKER 
2004-09-01 05:45
神vLinux飘飘
Rank: 13Rank: 13Rank: 13Rank: 13
来 自:浙江杭州
等 级:贵宾
威 望:91
帖 子:6140
专家分:217
注 册:2004-7-17
收藏
得分:0 
我头好晕,想睡觉。.......

淘宝杜琨
2004-09-01 05:46
神vLinux飘飘
Rank: 13Rank: 13Rank: 13Rank: 13
来 自:浙江杭州
等 级:贵宾
威 望:91
帖 子:6140
专家分:217
注 册:2004-7-17
收藏
得分:0 

感谢大家对小弟的关心。现在才刚刚开学,很轻松的啦,昨天晚上我们还和四个舍友去女生宿舍门口数美女。

今天晚上舍友们又都出去开party了,就我一个没GF留在宿舍看门,正好有时间来整理下KNOCKER和我讨论的思路,个人觉得KNOCKER说得对,实现滚屏的确还是链表好操作一些。因为链表的特长就是很轻松的就可以实现插入和删除查找等等功能。所以我打算利用这段时间重新写过一个用链表来实现滚屏的程序。

界面我采用了80x25黑白显示(BW80)文本显示模式; 链表系统是用比较好操作的双向链表,每个链保存一行文字的信息。

这个程序的稳定性要比前一个大很多了,而且能支持较大的文本文件的显示,但是目前还没有左右滚屏的功能,所以一行显示的内容最好不超过80个字符,否则会折行显示。

如果大家想知道滚屏具体是如何实现的,就请发帖去问KNOCKER,他比我有空。


淘宝杜琨
2004-09-02 19:17
神vLinux飘飘
Rank: 13Rank: 13Rank: 13Rank: 13
来 自:浙江杭州
等 级:贵宾
威 望:91
帖 子:6140
专家分:217
注 册:2004-7-17
收藏
得分:0 

#include <stdio.h> #include <dos.h> #include <conio.h>

#define RIGHT 0x4d00 #define ENTER 0x000d #define LEFT 0x4b00 #define UP 0x4800 #define DOWN 0x5000 #define ESC 0x001b

int presskey() /*有暂停按键*/ { unsigned key; key=bioskey(0); if( key<<8 ) key=key&0x00ff; return key; }

struct lines { char *linetext; struct lines *prior; struct lines *next; }linex;

struct lines *start; struct lines *last;

void loadfile(char *fname); void show();

main() { char fname[30];

textmode(2); printf("\nPlese input FileName:"); scanf("%s",fname);

loadfile(fname); show(); getch(); }

void loadfile(char *fname) { char testtext[80]; struct lines *info,*i; FILE *fp;

if( (fp=fopen(fname,"r"))==NULL ) exit(1);

start=(struct lines *)malloc(sizeof(struct lines)); last =(struct lines *)malloc(sizeof(struct lines)); start->prior=NULL; start->next=last; last->next=NULL; last->prior=start; i=start;

for(;;) { info=(struct lines*)malloc(sizeof(struct lines)); if( fgets(testtext,80,fp)==NULL ) break; info->linetext=(char *)malloc(strlen(testtext)+1); strcpy(info->linetext,testtext);

info->next=i->next; i->next=info;

info->next->prior=info; info->prior=i; i=info; } fclose(fp); }

void show() { struct lines *beginline,*endline,*info; int i; unsigned key;

clrscr(); info=start->next; beginline=info; for(i=0;i<24;i++) { if(info->next==NULL) break; printf("%s",info->linetext); info=info->next; } endline=info->prior;

while( (key=presskey())!=ESC ) { switch(key) { case UP : { if( beginline->prior->prior==NULL ) break; _AH=7;_AL=1;_CH=0;_CL=0;_DH=24;_DL=79;_BH=143; geninterrupt(0x10); gotoxy(1,1); cprintf("%s",beginline->prior->linetext); beginline=beginline->prior; endline=endline->prior; break; }

case DOWN: { if( endline->next->next==NULL ) break; _AH=6;_AL=1;_CH=0;_CL=0;_DH=24;_DL=79;_BH=143; geninterrupt(0x10); gotoxy(1,24); cprintf("%s",endline->next->linetext); endline=endline->next; beginline=beginline->next; break; } } } }


淘宝杜琨
2004-09-02 19:18
快速回复:KNOCKER进来
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.023426 second(s), 8 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved