📄 scroll.c
字号:
#include <stdlib.h>#include <vga.h>#include <vgagl.h>#include <unistd.h>#include <fcntl.h>#include <stdio.h>#include <unistd.h>#define FONT_HEIGHT 8#define FONT_WIDTH 8#define LEN sizeof(unsigned char)void prepare_font(void);void draw_text(int x,int y,unsigned char *ch);int main(){ vga_init(); vga_setmode(G800x600x256); gl_setcontextvga(G800x600x256); int x,n=2,i,j,m; char *p; unsigned char a[100000],b[100],c[2]; FILE *fp; if((fp=fopen("aaa","r"))==NULL) { printf("wrong!\n"); exit(1); } for(i=0;;i++) { if(feof(fp)) break; fread(&a[i],LEN,1,fp); } j=strlen(a); if(j<100) { for(i=0;i<100;i++) b[i]=a[i]; for(m=0;;m++) { for(x=800;x>=0;x-=8) { draw_text(x,100,(unsigned char *)b); if(m==0) gl_fillbox(0,100,x,100,0); gl_fillbox(0,100,16,100,0); usleep(100000); gl_clearscreen(0); } } } else { bbb: for(i=0;i<100;i++) b[i]=a[i]; for(x=800;x>=0;x-=8) { if(x<17) { aaa: for(x=16;x>=0;x-=8) { draw_text(x,100,(unsigned char *)b); gl_fillbox(0,100,16,100,0); usleep(100000); gl_clearscreen(0); } for(i=0;i<100;i++) b[i]=a[i+n]; if((i+n)>=j) { for(m=0;m<50;m++) { for(x=16;x>=0;x-=8) { draw_text(x,100,(unsigned char *)b); gl_fillbox(0,100,16,100,0); usleep(70000); gl_clearscreen(0); } for(i=0;i<98;i++) b[i]=b[i+2]; b[i]=c[0]; b[i+1]=c[1]; } // goto bbb; } else { n+=2; goto aaa; } } else { draw_text(x,100,(unsigned char *)b); gl_fillbox(0,100,x,100,0); usleep(100000); gl_clearscreen(0); } } goto bbb; } vga_getch(); gl_clearscreen(0); vga_setmode(TEXT); return EXIT_SUCCESS;}void draw_text(int x,int y,unsigned char *ch){ int i,j,k,c,l; unsigned char mat[16][2]; unsigned char mat1[16]; char *p; FILE *hzk,*ywk; vga_setcolor(1); hzk=fopen("hzk16","rb"); ywk=fopen("asc16","rb"); if (hzk==NULL) { perror("Open hzk16 file error"); exit(1); } if(ywk==NULL) { perror("Open asc16 file error"); exit(1); } l=strlen(ch); vga_setrgbcolor(251,251,0); for(c=0;c<l;c++) { if(ch[c]>127) { i=ch[c]-0xa0;j=ch[c+1]-0xa0; fseek(hzk,(94*(i-1)+(j-1))*32,SEEK_SET); fread(mat,32,1,hzk); for(i=0;i<16;i++) for(j=0;j<2;j++) for(k=0;k<8;k++) if(mat[i][j]&(0x80>>k)) vga_drawpixel(x+c*8+8*j+k,y+i); c++; } else { fseek(ywk,ch[c]*16,SEEK_SET); fread(mat1,16,1,ywk); for(i=0;i<16;i++) for(k=0;k<8;k++) if(mat1[i]&(0x80>>k)) vga_drawpixel(x+c*8+k,y+i); } }}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -