home *** CD-ROM | disk | FTP | other *** search
/ Club Amiga de Montreal - CAM / CAM_CD_1.iso / files / 160.lha / Extract_Fonts / EXTRACTFONT.c < prev    next >
C/C++ Source or Header  |  1988-04-27  |  5KB  |  185 lines

  1. #include <exec/types.h>
  2. #include <graphics/text.h>
  3. #include <graphics/gfxbase.h>
  4. #include <functions.h>
  5. #include <stdio.h>
  6.  
  7. struct    GfxBase        *GfxBase = 0;
  8. struct    Library        *DiskfontBase = 0;
  9. struct    TextFont    *FontPtr = 0;
  10.  
  11. struct TextAttr NewFont = {
  12.     NULL,            /* Font Name        */
  13.     0,            /* Font Height        */
  14.     FS_NORMAL,        /* Style        */
  15.     FPF_DESIGNED };        /* Preferences        */
  16.  
  17.  
  18. char name[250];
  19.  
  20. main (argc, argv)
  21. int argc;
  22. char **argv;
  23. {
  24.     FILE *fp;
  25.     int i, j, count;
  26.     UWORD *w;
  27.     ULONG *l;
  28.  
  29.     if (argc != 4) {
  30.         printf ("Usage: %s fontname fontsize outfile\n",argv[0]);
  31.         printf ("(ie. %s diamond.font 20 DIAMOND.c)\n", argv[0]);
  32.         exit (0);
  33.     }
  34.  
  35.     NewFont.ta_Name = (STRPTR)argv[1];
  36.     NewFont.ta_YSize = atoi (argv[2]);
  37.  
  38.     if (( GfxBase = (struct GfxBase *)OpenLibrary ("graphics.library", LIBRARY_VERSION)) == NULL)
  39.         Quit ("Couldn't open graphics.library");
  40.  
  41.     if (( DiskfontBase = OpenLibrary ("diskfont.library", LIBRARY_VERSION)) == NULL)
  42.         Quit ("Couldn't open diskfont.library");
  43.  
  44.     if (( FontPtr = (struct TextFont *)OpenDiskFont (&NewFont)) == NULL)
  45.         Quit ("Couldn't open small.font");
  46.  
  47.     if (!( fp = fopen (argv[3], "w")))
  48.         Quit ("Couldn't open outfile");
  49.  
  50.     strcpy (name, "");
  51.     strncat (name, argv[1], strlen (argv[1]) - 5);
  52.     strcat (name, "Font");
  53.     name[0] = toupper (name[0]);
  54.  
  55.     fprintf (fp, "#include <graphics/text.h>\n\n");
  56.  
  57.     fprintf (fp, "extern char fontname[];\n");
  58.     fprintf (fp, "extern UWORD CharData[];\n");
  59.     fprintf (fp, "extern ULONG CharLoc[];\n");
  60.     fprintf (fp, "extern UWORD CharSpace[];\n");
  61.     fprintf (fp, "extern UWORD CharKern[];\n\n");
  62.  
  63.     fprintf (fp, "struct TextFont %s = {\n", name);
  64.     fprintf (fp, "\t{\t\t/* Message\t*/\n");
  65.     fprintf (fp, "\t\t{\t\t/* Node\t*/\n");
  66.     fprintf (fp, "\t\t\tNULL,\t\t/* ln_Succ\t*/\n");
  67.     fprintf (fp, "\t\t\tNULL,\t\t/* ln_Pred\t*/\n");
  68.     fprintf (fp, "\t\t\tNT_FONT,\t/* ln_Type\t*/\n");
  69.     fprintf (fp, "\t\t\t0,\t\t/* ln_Pri\t*/\n");
  70.     fprintf (fp, "\t\t\tfontname,\t/* ln_Name\t*/\n");
  71.     fprintf (fp, "\t\t},\n");
  72.     fprintf (fp, "\t\tNULL,\t\t\t/* mn_ReplyPort\t*/\n");
  73.     fprintf    (fp, "\t\tsizeof (%s) +\n", name),
  74.     fprintf    (fp, "\t\tsizeof (fontname) +\n"),
  75.     fprintf    (fp, "\t\tsizeof (CharData) +\n"),
  76.     fprintf    (fp, "\t\tsizeof (CharLoc) +\n"),
  77.     fprintf    (fp, "\t\tsizeof (CharSpace) +\n"),
  78.     fprintf    (fp, "\t\tsizeof (CharKern),\t/* mn_Length\t*/\n", name);
  79.     fprintf (fp, "\t},\n");
  80.     fprintf (fp, "\t%u,\t\t/* tf_YSize\t*/\n", FontPtr->tf_YSize);
  81.     fprintf (fp, "\t%u,\t\t/* tf_Style\t*/\n", FontPtr->tf_Style);
  82.     fprintf (fp, "\t%u,\t\t/* tf_Flags\t*/\n", FontPtr->tf_Flags);
  83.     fprintf (fp, "\t%u,\t\t/* tf_XSize\t*/\n", FontPtr->tf_XSize);
  84.     fprintf (fp, "\t%u,\t\t/* tf_Baseline\t*/\n", FontPtr->tf_Baseline);
  85.     fprintf (fp, "\t%u,\t\t/* tf_BoldSmear\t*/\n", FontPtr->tf_BoldSmear);
  86.     fprintf (fp, "\t0,\t\t/* tf_Accessors\t*/\n");
  87.     fprintf (fp, "\t%u,\t\t/* tf_LoChar\t*/\n", FontPtr->tf_LoChar);
  88.     fprintf (fp, "\t%u,\t\t/* tf_HiChar\t*/\n", FontPtr->tf_HiChar);
  89.     fprintf (fp, "\t(APTR)&CharData,/* tf_CharData\t*/\n");
  90.     fprintf (fp, "\t%u,\t\t/* tf_Modulo\t*/\n", FontPtr->tf_Modulo);
  91.     fprintf (fp, "\t(APTR)&CharLoc,\t/* tf_CharLoc\t*/\n");
  92.     fprintf (fp, "\t(APTR)&CharSpace,/*tf_CharSpace\t*/\n");
  93.     fprintf (fp, "\t(APTR)&CharKern,/* tf_CharKern\t*/\n");
  94.     fprintf (fp, "};\n\n");
  95.  
  96.     fprintf (fp, "char fontname[] = \"%s\";\n\n", argv[1]);
  97.  
  98.     fprintf (fp, "UWORD CharData[] = {\n");
  99.     w = (UWORD *)FontPtr->tf_CharData;
  100.     for (i=0; i<FontPtr->tf_YSize; i++) {
  101.         count = 0;
  102.         for (j = 0; j <FontPtr->tf_Modulo / 2; j++) {
  103.             if (count == 0) fprintf (fp, "\t");
  104.             fprintf (fp, "0x%04x,", *w++);
  105.             count++;
  106.             if (count == 8) {
  107.                 count = 0;
  108.                 fprintf (fp, "\n");
  109.             }
  110.         }
  111.         if (count) {
  112.             fprintf (fp, "\n");
  113.         }
  114.     }
  115.     fprintf (fp, "};\n\n");
  116.  
  117.     fprintf (fp, "ULONG CharLoc[] = {\n");
  118.     l = (ULONG *)FontPtr->tf_CharLoc;
  119.     count = 0;
  120.     for (i=FontPtr->tf_LoChar; i<=FontPtr->tf_HiChar; i++) {
  121.         if (count == 0) fprintf (fp, "\t");
  122.         fprintf (fp, "0x%08x,", *l++);
  123.         count++;
  124.         if (count == 4) {
  125.             count = 0;
  126.             fprintf (fp, "\n");
  127.         }
  128.     }
  129.     if (count) {
  130.         fprintf (fp, "\n");
  131.     }
  132.     fprintf (fp, "};\n\n");
  133.  
  134.     fprintf (fp, "UWORD CharSpace[] = {\n");
  135.     w = (UWORD *)FontPtr->tf_CharSpace;
  136.     count = 0;
  137.     for (i=FontPtr->tf_LoChar; i<=FontPtr->tf_HiChar; i++) {
  138.         if (count == 0) fprintf (fp, "\t");
  139.         fprintf (fp, "0x%04x,", *w++);
  140.         count++;
  141.         if (count == 8) {
  142.             count = 0;
  143.             fprintf (fp, "\n");
  144.         }
  145.     }
  146.     if (count) {
  147.         fprintf (fp, "\n");
  148.     }
  149.     fprintf (fp, "};\n\n");
  150.  
  151.     fprintf (fp, "UWORD CharKern[] = {\n");
  152.     w = (UWORD *)FontPtr->tf_CharKern;
  153.     count = 0;
  154.     for (i=FontPtr->tf_LoChar; i<=FontPtr->tf_HiChar; i++) {
  155.         if (count == 0) fprintf (fp, "\t");
  156.         fprintf (fp, "0x%04x,", *w++);
  157.         count++;
  158.         if (count == 8) {
  159.             count = 0;
  160.             fprintf (fp, "\n");
  161.         }
  162.     }
  163.     if (count) {
  164.         fprintf (fp, "\n");
  165.     }
  166.     fprintf (fp, "};\n");
  167.  
  168.     fclose (fp);
  169.  
  170.     Quit (NULL);
  171. }
  172.  
  173. Quit (message)
  174. char *message;
  175. {
  176.     if (FontPtr)        CloseFont (FontPtr);
  177.     if (DiskfontBase)    CloseLibrary (DiskfontBase);
  178.     if (GfxBase)        CloseLibrary (GfxBase);
  179.  
  180.     if (message)
  181.         printf ("error: %s\n", message);
  182.  
  183.     exit (0);
  184. }    
  185.