summaryrefslogtreecommitdiff
path: root/systems/os2/dviware/hp-deskjet/fontfile.h
diff options
context:
space:
mode:
authorNorbert Preining <norbert@preining.info>2019-09-02 13:46:59 +0900
committerNorbert Preining <norbert@preining.info>2019-09-02 13:46:59 +0900
commite0c6872cf40896c7be36b11dcc744620f10adf1d (patch)
tree60335e10d2f4354b0674ec22d7b53f0f8abee672 /systems/os2/dviware/hp-deskjet/fontfile.h
Initial commit
Diffstat (limited to 'systems/os2/dviware/hp-deskjet/fontfile.h')
-rw-r--r--systems/os2/dviware/hp-deskjet/fontfile.h242
1 files changed, 242 insertions, 0 deletions
diff --git a/systems/os2/dviware/hp-deskjet/fontfile.h b/systems/os2/dviware/hp-deskjet/fontfile.h
new file mode 100644
index 0000000000..f86a2219c5
--- /dev/null
+++ b/systems/os2/dviware/hp-deskjet/fontfile.h
@@ -0,0 +1,242 @@
+ /* -*-C-*- fontfile.h */
+/*-->fontfile*/
+/**********************************************************************/
+/****************************** fontfile ******************************/
+/**********************************************************************/
+
+void
+fontfile(filelist,font_path,font_name,magnification)
+char *filelist[MAXFORMATS]; /* output filename list */
+char *font_path; /* host font file pathname */
+char *font_name; /* TeX font_name */
+int magnification; /* magnification value */
+{
+
+ /*
+ Given a TeX font_name and a magnification value, construct a list of
+ system-dependent host filenames, returning them in the first
+ argument. The files are not guaranteed to exist. The font names by
+ default contains names for the PK, GF, and PXL font files, but the
+ selection, and search order, may be changed at run time by defining
+ a value for the environment variable FONTLIST. See initglob() for
+ details.
+ */
+
+ register int m; /* index into filelist[] */
+ register INT16 k; /* loop index */
+ float fltdpi; /* dots/inch */
+ int dpi; /* dots/inch for filename */
+
+#if OS_VAXVMS
+ char *tcp; /* temporary character pointer */
+ char *tcp2; /* temporary character pointer */
+ char temp_name[MAXFNAME]; /* temporary filename */
+#endif
+
+ /*
+ We need to convert an old-style ROUNDED integer magnification based
+ on 1000 units = 200 dpi to an actual rounded dpi value.
+
+ We have
+ magnification = round(real_mag) = trunc(real_mag + 0.5)
+ which implies
+ float(magnification) - 0.5 <= real_mag < float(magnification) + 0.5
+
+ We want
+ dpi = round(real_mag/5.0)
+ which implies
+ float(dpi) - 0.5 <= real_mag/5.0 < float(dpi) + 0.5
+ or
+ 5.0*float(dpi) - 2.5 <= real_mag < 5.0*float(dpi) + 2.5
+
+ We can combine the two to conclude that
+ 5.0*float(dpi) - 2.5 < float(magnification) + 0.5
+ or
+ 5.0*float(dpi) - 3 < float(magnification)
+ which gives the STRICT inequality
+ float(dpi) < (float(magnification) + 3.0)/5.0
+ */
+
+ fltdpi = (((float)magnification) + 3.0)/5.0;
+ dpi = (int)fltdpi;
+ if (fltdpi == (float)dpi)
+ dpi--; /* enforce inequality */
+
+ for (k = 0; k < MAXFORMATS; ++k) /* loop over possible file types */
+ *filelist[k] = '\0'; /* Initially, all filenames are empty */
+
+ m = 0; /* index in filelist[] */
+ for (k = 0; k < MAXFORMATS; ++k) /* loop over possible file types */
+ {
+
+#if OS_TOPS20
+
+ /* Typical results:
+ texfonts:amr10.300gf
+ texfonts:amr10.300pk
+ texfonts:amr10.1500pxl
+ */
+
+ if (k == gf_index)
+ (void)sprintf(filelist[m++], "%s%s.%dgf",
+ font_path, font_name, dpi);
+ else if (k == pk_index)
+ (void)sprintf(filelist[m++], "%s%s.%dpk",
+ font_path, font_name, dpi);
+ else if (k == pxl_index)
+ (void)sprintf(filelist[m++], "%s%s.%dpxl",
+ font_path, font_name, magnification);
+
+#endif /* OS_TOPS20 */
+
+#if (OS_ATARI | OS_PCDOS | OS_IBMOS2)
+
+ /* Typical results:
+ d:\tex\fonts\300\amr10.gf
+ d:\tex\fonts\300\amr10.pk
+ d:\tex\fonts\1500\amr10.pxl
+ */
+
+ if (k == gf_index)
+ (void)sprintf(filelist[m++], "%s%d\\%s.gf",
+ font_path, dpi, font_name);
+ else if (k == pk_index)
+ (void)sprintf(filelist[m++], "%s%d\\%s.pk",
+ font_path, dpi, font_name);
+ else if (k == pxl_index)
+ (void)sprintf(filelist[m++], "%s%d\\%s.pxl",
+ font_path, magnification, font_name);
+
+#endif /* OS_PCDOS */
+
+#if OS_UNIX
+
+ /* Typical results (both naming styles are tried):
+ /usr/lib/tex/fonts/300/amr10.gf
+ /usr/lib/tex/fonts/amr10.300gf
+ /usr/lib/tex/fonts/300/amr10.pk
+ /usr/lib/tex/fonts/1500/amr10.pxl
+ /usr/lib/tex/fonts/amr10.1500pxl
+ /usr/lib/tex/fonts/amr10.300pk
+ */
+
+ if (k == gf_index)
+ {
+ (void)sprintf(filelist[m++], "%s%d/%s.gf",
+ font_path, dpi, font_name);
+ (void)sprintf(filelist[m++], "%s%s.%dgf",
+ font_path, font_name, dpi);
+ }
+ else if (k == pk_index)
+ {
+ (void)sprintf(filelist[m++], "%s%d/%s.pk",
+ font_path, dpi, font_name);
+ (void)sprintf(filelist[m++], "%s%s.%dpk",
+ font_path, font_name, dpi);
+ }
+ else if (k == pxl_index)
+ {
+ (void)sprintf(filelist[m++], "%s%d/%s.pxl",
+ font_path, magnification, font_name);
+ (void)sprintf(filelist[m++], "%s%s.%dpxl",
+ font_path, font_name, magnification);
+ }
+ /*(void)fprintf(stderr,"In fontfile: Path = %s\n",filelist[m - 1]);*/
+
+#endif /* OS_UNIX */
+
+
+#if OS_VAXVMS
+
+ /* Typical results (both naming styles are tried):
+ [tex.fonts.300]amr10.gf
+ [tex.fonts]amr10.300gf
+ [tex.fonts.300]amr10.pk
+ [tex.fonts]amr10.300pk
+ [tex.fonts.1500]amr10.pxl
+ [tex.fonts]amr10.1500pxl
+
+
+ We try a translation of a logical name here if what we have in
+ fontpath[] is not a directory specification like
+ "device:[tex.fonts]" or a rooted logical name like "tex_fonts:"
+ translating to something like "device:[tex.fonts.]"
+ */
+
+
+ /* Use a straightforward expansion first, in case fontpath is
+ a search list. */
+ if (k == gf_index)
+ {
+ (void)sprintf(filelist[m++], "%s[%d]%s.gf", fontpath,
+ dpi, font_name);
+ (void)sprintf(filelist[m++], "%s%s.%dgf", fontpath,
+ font_name, dpi);
+ }
+ else if (k == pk_index)
+ {
+ (void)sprintf(filelist[m++], "%s[%d]%s.pk", fontpath,
+ dpi, font_name);
+ (void)sprintf(filelist[m++], "%s%s.%dpk", fontpath,
+ font_name, dpi);
+ }
+ else if (k == pxl_index)
+ {
+ (void)sprintf(filelist[m++], "%s[%d]%s.pxl", fontpath,
+ magnification, font_name);
+ (void)sprintf(filelist[m++], "%s%s.%dpxl", fontpath,
+ font_name, magnification);
+ }
+
+ (void)strcpy(temp_name,fontpath);
+ tcp = strrchr(temp_name,']'); /* search for last right bracket */
+ if (tcp == (char *)NULL) /* then try logical name translation */
+ {
+ tcp = GETENV(fontpath);
+ if (tcp != (char *)NULL)
+ {
+ tcp2 = strrchr(tcp,']');
+ if (tcp2 == (char *)NULL)
+ tcp = (char *)NULL; /* translates to another logical name */
+ else
+ {
+ if (*(tcp2-1) == '.')
+ tcp = (char *)NULL; /* looks like rooted logical name */
+ else /* looks like directory name */
+ {
+ (void)strcpy(temp_name,tcp);
+ tcp = strrchr(temp_name,']');
+ }
+ }
+ }
+ }
+ if (tcp != (char *)NULL)
+ { /* fontpath is something like [tex.fonts] */
+ *tcp = '\0'; /* clobber right bracket */
+ if (k == gf_index)
+ {
+ (void)sprintf(filelist[m++], "%s.%d]%s.gf", temp_name,
+ dpi, font_name);
+ (void)sprintf(filelist[m++], "%s]%s.%dgf", temp_name,
+ font_name, dpi);
+ }
+ else if (k == pk_index)
+ {
+ (void)sprintf(filelist[m++], "%s.%d]%s.pk", temp_name,
+ dpi, font_name);
+ (void)sprintf(filelist[m++], "%s]%s.%dpk", temp_name,
+ font_name, dpi);
+ }
+ else if (k == pxl_index)
+ {
+ (void)sprintf(filelist[m++], "%s.%d]%s.pxl", temp_name,
+ magnification, font_name);
+ (void)sprintf(filelist[m++], "%s]%s.%dpxl", temp_name,
+ font_name, magnification);
+ }
+ }
+#endif /* OS_VAXVMS */
+ }
+
+}
+