⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 bdf2h.c

📁 zgv-5.6,一个Linux系统下的图片浏览器(VGA/SVGA)
💻 C
字号:
/* Zgv v5.1 - GIF, JPEG and PBM/PGM/PPM viewer, for VGA PCs running Linux. * Copyright (C) 1993-2000 Russell Marks. See README for license details. * * bdf2h.c - convert BDF font file to header for inclusion in zgv. * * note that this hardly does any error-checking or anything, * and may not necessary work for all fonts (though in practice, * it should work for all sane ones which define all the ASCII * chars). * * You're welcome to nick this and font.c for other programs etc. * (A load-font-at-runtime version should be possible too, BTW.) * Note that (IIRC) BDF fonts aren't distributed in binary releases of * XFree86, and you'll have to get a copy of the source to get them. * Getting a copy on CD is probably the best idea - the source is fairly * massive, even compressed. * * FWIW, the fonts used in zgv are from xc/fonts/bdf/100dpi. * (Yes, 75dpi would make more sense, but these ones just fitted better.) */#include <stdio.h>#include <string.h>#include <stdlib.h>#include <ctype.h>int main(int argc,char *argv[]){FILE *in=stdin;static char buf[128];int f,g;int c=0,w=0,i,mask;int fw,fh,fox,foy,width,height,x,y,wcount;int maxy=-999;int ofs=0;int ofstbl[128];char *fontdesc="unnamed";if(argc==2) fontdesc=argv[1];/* we explicitly specify `signed char' where it needs to be. * I guess it doesn't matter 'cos it'll always be compiled on * a compiler where signed is the default, but what the hell. */printf("#ifndef DEFINED_STRUCT_FONTINFO_TAG\n");printf("#define DEFINED_STRUCT_FONTINFO_TAG 1\n");printf("\struct fontinfo_tag  {  signed char *data;  int table[96];  int yofs,fh,oy;  };");printf("#endif\n\n");/* generate font data */printf("static signed char font%sdat[]={\n\n",fontdesc);printf("/* data for each char is ox oy w h dwidth, then data */\n\n");while(fgets(buf,sizeof(buf),in)!=NULL)  {  if(strncmp(buf,"FONTBOUNDINGBOX ",16)==0)    sscanf(buf+16,"%d %d %d %d",&fw,&fh,&fox,&foy);  else if(strncmp(buf,"ENCODING ",9)==0)    c=atoi(buf+9);  else if(strncmp(buf,"DWIDTH ",7)==0)    w=atoi(buf+7);  else if(strncmp(buf,"BBX ",4)==0)    {    sscanf(buf+4,"%d %d %d %d",&width,&height,&x,&y);    }  else if(strcmp(buf,"BITMAP\n")==0)    {    if(c<32 || c>127) continue;    ofstbl[c]=ofs;    printf("/* `%c' */\n",c);    printf("%d,%d,%d,%d,%d,\n",x,y,width,height,w);    ofs+=5;    if(y+height-foy>maxy) maxy=y+height-foy;    while(fgets(buf,sizeof(buf),in)!=NULL && strcmp(buf,"ENDCHAR\n")!=0)      {      i=0;      wcount=width;      for(f=0;f<strlen(buf)-1;f++)        {        c=toupper(buf[f])-48; if(c>9) c-=7;        if(c<0 || c>15)          fprintf(stderr,"error in font - bad hex!\n"),exit(1);        else          {          i=i*16+c;          if(f&1)            {            for(g=0,mask=128;g<8 && wcount--;g++,ofs++,mask>>=1)              putchar((i&mask)?'1':'0'),putchar(',');            i=0;            }          }        }      if(f&1)        {        for(g=0,mask=128;g<8 && wcount--;g++,ofs++,mask>>=1)          putchar((i&mask)?'1':'0'),putchar(',');        }      putchar('\n');      }    putchar('\n');    }  }printf("};\n\n");printf("static struct fontinfo_tag font%s={\n",fontdesc);printf("font%sdat,\n{",fontdesc);/* lookup table for each char (32..127) */ofstbl[127]=0;		/* well, ok, no char 127 :-) */for(f=32;f<128;f++)  {  if((f&7)==0) putchar('\n');  printf("%d,",ofstbl[f]);  }printf("},\n");/* yofs, fh, oy */printf("%d, %d, %d\n};\n\n\n",fh-maxy,fh,foy);exit(0);}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -