home *** CD-ROM | disk | FTP | other *** search
/ Power-Programmierung / CD1.mdf / acad / c / hrsh2acd / fontdemo.c < prev    next >
Text File  |  1988-07-15  |  4KB  |  150 lines

  1. /* --- FONTDEMO.C -- Displays compiled Hershey Font files *.XSH ------------
  2.  |    There is no documentation on the format of *.XSH files.
  3.  |    Please read the code in this file for details.
  4.  |    This program need a hardware/C compiler-dependent graphics routines.
  5.  |    IBM PC CGA/EGA driver for MS C compiler is provided as CXYIBMPC.C.
  6.  |    For other hardware/compiler write routines cxy_init(), cxy_close(),
  7.  |    cxy_move(x,y,color), cxy_lineto(x,y,color).
  8.  |
  9.  |    Author:     Wayne C. Crawford. 7-8-88 Starting
  10.  |    Modified by Izumi Ohzawa for standard graphics adapters. 7-15-88
  11.  * ------------------------------------------------------------------------- */
  12.  
  13. #include <stdio.h>
  14.  
  15. #define XCMIN    2        /* minimum X coordinate */
  16. #define YCMIN    5
  17. #define YBUMP    33        /* line spacing */
  18. #define XCMAXCG    290        /* maximum X for char's left side for CGA */
  19. #define YCMAXCG    199
  20. #define XCMAXEG    600        /* for EGA */
  21. #define YCMAXEG 349
  22. #define EGACOLOR  7
  23. #define CGACOLOR  1
  24.  
  25. FILE *fpdatain;
  26. unsigned int ptarray[128];
  27. unsigned int fontarray[6000];
  28. int xpen, ypen, corigx, corigy;
  29. int pendowner;
  30. char string[128];
  31. int count = 1;          /* position of array that we are presently in */
  32. int ignore = 0;
  33. char out_line[] = "ABCDEFGHIJKLMNOPQRSTUVWXYZ abcdefghijklmnopqrstuvwxyz\
  34. 0123456789.,;:'`~!@#$%^&*()-[]{}<>|?" ;
  35.  
  36. main(argc,argv)
  37. int argc;
  38. char *argv[];
  39. {
  40. register int i;
  41.  
  42.     if( argc != 2)
  43.     {
  44.         printf("Usage: FONTDEMO FONTNAME.XSH\n");
  45.         exit(1);
  46.     }
  47.  
  48.     for( i = 0; i < 128; i++)
  49.         ptarray[i] = 0;          /* Initialize pointer array */
  50.     rd_fontfile(argv[1]);          /* Read in compiled font file */
  51.     printf("count = %d\n",count);
  52.     cxy_init();              /* Initialize graphics */
  53.     show_the_font();          /* Show the font on screen */
  54.     getch();              /* pause until key press */
  55.     cxy_close();              /* Close out graphics mode */
  56. }    
  57.  
  58. cxy_init()
  59. {
  60.         cxy_videomode(5);
  61.     /*    cxy_videomode(16); */
  62. }
  63.  
  64. cxy_close()
  65. {
  66.     cxy_videomode(3);    /* reset to text screen */
  67. }
  68.  
  69. /****************************************************************************/
  70.  
  71. /* ----- Read compiled font file ---------------------------------- */
  72. rd_fontfile(readfile)
  73. char *readfile;
  74. {
  75. int numread;
  76. int *fontptr;
  77.  
  78.     fpdatain = fopen(readfile, "rb");
  79.     if (fpdatain == NULL)
  80.     {
  81.         printf("Compiled font file: %s does not exist.\n",readfile);
  82.         exit(2);
  83.     }
  84.     /* OK file found, first read the size of the font array*/
  85.         numread = fread( (char *)&count, sizeof(unsigned), 1, fpdatain);
  86.         numread = fread( (char *)ptarray, sizeof(unsigned), 128, fpdatain);
  87.     numread = fread( (char *)fontarray, sizeof(unsigned), count+2, fpdatain);
  88.     if( numread != (count+ 2))
  89.     {
  90.         printf("Can't read font file fully.\n");
  91.     }
  92.     fclose(fpdatain);
  93. }
  94.  
  95. /****************************************************************************/
  96.  
  97. show_the_font()
  98. {
  99. register int i;
  100. char *character;
  101. int arrayloc;
  102.  
  103.     corigy = YCMIN;
  104.     corigx = XCMIN;        /* set starting point */
  105.     i = -1;
  106.     while (out_line[++i] != '\0')
  107.     {
  108.         arrayloc = ptarray[(int)out_line[i]];
  109.         if (arrayloc == 0)
  110.         {
  111.         printf("No existing character for that.\n");
  112.         }
  113.         while (fontarray[arrayloc] != 0x4000)
  114.         strip_font(fontarray[arrayloc++]);
  115.         corigx = xpen;
  116.         corigy = ypen;
  117.         if(corigx > XCMAXCG )
  118.         {
  119.         corigx = XCMIN;        /* carriage return */
  120.         corigy += YBUMP;    /* line feed */
  121.         }
  122.     }
  123.     return(0);
  124. }
  125.  
  126.  
  127.  
  128. strip_font(value)
  129. int value;
  130. {
  131.  
  132.     if (value & 0x2000)
  133.     {
  134.         pendowner = (value & 0x1000);
  135.     }
  136.     else
  137.     {
  138.         xpen = ( ((value >>6) & 0x3f)-20 ) +corigx;
  139.         ypen = ( (value & 0x3f)-20) +corigy;
  140.         if (pendowner)
  141.             cxy_lineto(xpen, YCMAXCG-ypen, CGACOLOR);
  142.         else
  143.             cxy_move(xpen, YCMAXCG-ypen );
  144.     }
  145.     return(0);
  146. }
  147.  
  148.  
  149.  
  150.