[comp.sys.amiga.tech] Enhancing Amiga Fonts, Multiple Font Disks

svermeulen%Ins.MRC.AdhocNet.CA@UNCAEDU.BITNET (Steve Vermeulen) (05/17/88)

                                    REN

                        An Amiga Font Renaming Utility

                     Copyright 1988 By Stephen Vermeulen

                              3635 Utah Dr. N.W.
                              Calgary, Alberta,
                              CANADA, T2N 4A6
                              (403) 282-7990

                   -----------------------------------------
                   This program may be freely redistributed,
                   so long as this file is distributed with
                   the program and the Copyright notice in
                   the program remains intact.
                   -----------------------------------------


Introduction:

     REN is a CLI based utility program for the Amiga that exploits
     a little understood feature of the Amiga Font System to allow
     the font data files to be placed elsewhere than in the default
     FONTS: directory.  This capability even allows fonts to be spread
     across several disks.  There are several advantages to doing this:
     much needed space is freed up on the boot disk, many more fonts
     may be on line at once, the number of fonts is not restricted by
     the size of a single disk media, and the font directory scans
     faster.

Syntax:

     The syntax of REN is quite simple:

           REN filename.font newpath

     where

       filename.font   is the COMPLETE path to a ".font" file that needs
                       changing, and

       newpath         is the new path to the font data, this may be
                       relative to FONTS: (eg. Garnet) or may be
                       absolute (eg.  Font_1:Garnet).

Examples:

     To change the working name of the Garnet family of fonts to another
     name (let's use Xyzzy) several things must be done.  The following
     is the complete list of things that must be done:

          rename FONTS:Garnet FONTS:Xyzzy
          rename FONTS:Garnet.font FONTS:Xyzzy.font
          ren FONTS:Xyzzy.font Xyzzy

     This will just change the name of the Garnet font to be the Xyzzy
     font.  In order to put the data files that describe the characters
     of the Garnet font somewhere else (eg. on a disk named Font_1:)
     the following commands are used:

          makedir Font_1:Garnet
          copy FONTS:Garnet Font_1:Garnet all
          delete FONTS:Garnet all
          ren FONTS:Garnet.font Font_1:Garnet

     Now, whenever a program tries to open the Garnet font to use it
     the system will search through the FONTS: directory to find
     the Garnet.font file.  It will then look in this file to find out
     where the actual font data is stored.  This data is now on another
     disk named Font_1: (note that the FONTS: directory would normally
     be assigned to a completly different disk, normally the boot disk).
     If the disk Font_1: is not in a disk drive a standard system
     requester will appear asking you to insert the Font_1: disk into
     a drive.

     It should now be clear that the ONLY files that must be in the
     FONTS: directory are the filename.font files, since these files
     are used to locate the font data files.  The great benefit this
     provides is of almost entirely removing the limit to the number of
     fonts that may be accessed at any one time that the size of disk
     media imposes.  The filename.font files are very small so that
     even on a crowded boot disk there is usually room for many of these
     if the font data files can be moved elsewhere.

More Background:

     A note to beginners, the font data files are the files that are
     named by a number which indicates the height of the font.  For
     example doing a:

            dir FONTS:

     will produce a list of files with the ".font" suffix as well as a
     list of directories.  The directories are where the system usually
     stores the font data files.  To see the various data files for the
     Garnet font do a:

            dir FONTS:Garnet

     This should list two files: 9 and 16.  The file that is named
     "Garnet.font" in the FONTS: directory tells the system where
     to find the data files (the 9 and 16 files) that contain the
     bit patterns for the Garnet font.  The REN utility works its
     magic by exploiting a feature of the ".font" files that has
     not been used until now.

-------------------- Cut Here and Compile the Following -------------------

/*****************************************************
  ren.c

  This program allows one to rename the directory
  which contains the font data files.

  Copyright 1988 By Stephen Vermeulen

  This program may be freely redistributed so long as
  the Copyright messages remain intact and the program
  is distributed with the supplied documentation.

  syntax:

     ren thisfont.font path
******************************************************/

#include <stdio.h>

char newname[256], oldname[256];

main(argc, argv)
int argc;
char *argv[];
{
  FILE *font;
  long j, pos;
  short i, n;

  if (argc != 3)
  {
    printf("ren filename.font newpath\n");
    printf("Copyright 1988 By Stephen Vermeulen\n");
    printf("3635 Utah Dr. N.W.,  Calgary, Alberta, CANADA, T2N 4A6\n");
  }
  else
  {
    font = fopen(argv[1], "r+");
    if (font)
    {
      /********************************************
        now determine how many sizes this font has
      *********************************************/

      fread(&n, 2, 1, font);  /** throw away **/
      fread(&n, 2, 1, font);  /** number of sizes **/
      printf("Font %s has %d sizes\n", argv[1], n);
      for (i = 0; i < n; ++i)
      {
        /** for each size we rename it...
         **/

        fseek(font, 4L + 260L * i, 0);
        fread(oldname, 256, 1, font);
        printf("name was: %s ", oldname);
        for (j = 255; j > 0; --j)
          if (oldname[j] == '/') break;
        strcpy(newname, argv[2]);
        strcat(newname, oldname + j);
        fseek(font, 4L + 260L * i, 0);
        printf("now is: %s\n", newname);
        fwrite(newname, 256, 1, font);
      }
      fclose(font);
    }
  }
}

kodiak@amiga.UUCP (Robert R. Burns) (05/19/88)

In article <880516163456.013@Ins.MRC.AdhocNet.CA> svermeulen%Ins.MRC.AdhocNet.CA@UNCAEDU.BITNET (Steve Vermeulen) writes:
>     REN is a CLI based utility program for the Amiga that exploits
>     a little understood feature of the Amiga Font System to allow
>     the font data files to be placed elsewhere than in the default
>     FONTS: directory.

This is great.  I'm glad you took the opportunity to make use of the
obscure implications of the font contents file (the .font file).
There are a couple of things that come with 1.3 that y'all should
know about.  They do not adversly affect REN.

1.  The 1.3 disk contains the "FixFonts" utility, that will (with the
    1.3 diskfont.library), search drawers in the FONTS: drawer for
    valid fonts and build appropriate font contents files, so instead
    of...

>Examples:
>
>     To change the working name of the Garnet family of fonts to another
>     name (let's use Xyzzy) several things must be done.  The following
>     is the complete list of things that must be done:
>
>          rename FONTS:Garnet FONTS:Xyzzy
>          rename FONTS:Garnet.font FONTS:Xyzzy.font
>          ren FONTS:Xyzzy.font Xyzzy
>
>     This will just change the name of the Garnet font to be the Xyzzy
>     font.

    ...you can
	rename FONTS:garnet FONTS:xyzzy
	delete FONTS:garnet.font
	FixFonts
    
    Note that the capitalization of the font name will come from the
    directory name.  You could also, prior to FixFonts invocation, alter
    the contents of the font directory, e.g. delete some of the sizes,
    and FixFonts will create an appropriate .font file.

2.  Programmers have always been able to say
	OpenDiskFont("MyApp:fonts/myapp.font", &textAttr);
    For 1.2 and earlier, the file name in myapp.font that referred to
    the font file itself was opened relative to FONTS:.  For 1.3, it
    is opened relative to MyApp:fonts.

REN's capability to move the font directories elsewhere than the FONTS:
drawer is a feature not affected by or supplanted by 1.3 system tools.

- Kodiak