[comp.sources.x] v12i021: tgif, Part05/23

william@CS.UCLA.EDU (William Cheng) (03/11/91)

Submitted-by: william@CS.UCLA.EDU (William Cheng)
Posting-number: Volume 12, Issue 21
Archive-name: tgif/part05

---------------------------------> cut here <---------------------------------
#! /bin/sh
# This is a shell archive.  Remove anything before this line, then unpack
# it by saving it into a file and typing "sh file".  To overwrite existing
# files, type "sh file -c".  You can also feed this as standard input via
# unshar, or by typing "sh <file", e.g..  If this archive is complete, you
# will see the following message at the end:
#		"End of archive 5 (of 23)."
# Contents:  font.c frontend.c
# Wrapped by william@oahu on Wed Mar  6 09:57:12 1991
PATH=/bin:/usr/bin:/usr/ucb ; export PATH
if test -f 'font.c' -a "${1}" != "-c" ; then 
  echo shar: Will not clobber existing file \"'font.c'\"
else
echo shar: Extracting \"'font.c'\" \(40471 characters\)
sed "s/^X//" >'font.c' <<'END_OF_FILE'
X/*
X * Author:	William Chia-Wei Cheng (william@cs.ucla.edu)
X *
X * Copyright (C) 1990, 1991, William Cheng.
X */
X#ifndef lint
Xstatic char RCSid[] =
X      "@(#)$Header: /tmp_mnt/n/kona/tangram/u/william/X11/TGIF2/RCS/font.c,v 2.0 91/03/05 12:47:17 william Exp $";
X#endif
X
X#include <X11/Xlib.h>
X#include "const.h"
X#include "types.h"
X
X#include "choice.e"
X#include "color.e"
X#include "drawing.e"
X#include "mark.e"
X#include "menu.e"
X#include "obj.e"
X#include "pattern.e"
X#include "raster.e"
X#include "select.e"
X#include "setup.e"
X#include "text.e"
X
X#define FONTS_PER_DPI (((MAXFONTS-1)*MAXFONTSTYLES+1)*MAXFONTSIZES)
X#define FONTTABLESIZE (MAXFONTDPIS*FONTS_PER_DPI)
X
X#define COUR8R_75  FontIndex(FONT_DPI_75,FONT_COU,0,STYLE_NR)
X#define COUR10R_75 FontIndex(FONT_DPI_75,FONT_COU,1,STYLE_NR)
X#define COUR12R_75 FontIndex(FONT_DPI_75,FONT_COU,2,STYLE_NR)
X#define COUR14R_75 FontIndex(FONT_DPI_75,FONT_COU,3,STYLE_NR)
X#define COUR18R_75 FontIndex(FONT_DPI_75,FONT_COU,4,STYLE_NR)
X#define COUR24R_75 FontIndex(FONT_DPI_75,FONT_COU,5,STYLE_NR)
X
X#define COUR11R_100 FontIndex(FONT_DPI_100,FONT_COU,0,STYLE_NR)
X#define COUR14R_100 FontIndex(FONT_DPI_100,FONT_COU,1,STYLE_NR)
X#define COUR17R_100 FontIndex(FONT_DPI_100,FONT_COU,2,STYLE_NR)
X#define COUR20R_100 FontIndex(FONT_DPI_100,FONT_COU,3,STYLE_NR)
X#define COUR25R_100 FontIndex(FONT_DPI_100,FONT_COU,4,STYLE_NR)
X#define COUR34R_100 FontIndex(FONT_DPI_100,FONT_COU,5,STYLE_NR)
X
Xstruct MyFontRec {
X   XFontStruct	* xfs;
X   int		valid;
X};
X
XXFontStruct	* canvasFontPtr;
Xint	canvasFontHeight;
Xint	canvasFontAsc;
Xint	canvasFontDes;
X
Xint	canvasFontIndex;
X
XXFontStruct	* rulerFontPtr;
Xint	rulerFontWidth;
Xint	rulerFontHeight;
Xint	rulerFontAsc;
Xint	rulerFontDes;
X
XXFontStruct	* defaultFontPtr;
Xint	defaultFontWidth;
Xint	defaultFontHeight;
Xint	defaultFontAsc;
Xint	defaultFontDes;
X
Xint	* pointSize;
Xint	curFont = FONT_COU;
Xint	curSize = 4;
Xint	curStyle = STYLE_NR;
Xint	curFontDPI = FONT_DPI_75;
Xint	curRotate = ROTATE0;
X
Xint	pointSize75[] = { 8, 10, 12, 14, 18, 24 };
Xint	pointSize100[] = { 11, 14, 17, 20, 25, 34 };
X
Xstatic struct MyFontRec	myFontInfo[FONTTABLESIZE];
X
Xstatic char	* fontMenuStr[] =
X{
X   "Times", "Courier", "Helvetica", "NewCentury", "Symbol"
X};
Xstatic char	* fontDPIMenuStr[] = { "75dpi", "100dpi" };
Xstatic char	* * sizeMenuStr;
Xstatic char	* sizeMenuStr75[] =
X{
X   "8  #0",
X   "10 #1",
X   "12 #2",
X   "14 #3",
X   "18 #4",
X   "24 #5"
X};
Xstatic char	* sizeMenuStr100[] =
X{
X   "11 #0",
X   "14 #1",
X   "17 #2",
X   "20 #3",
X   "25 #4",
X   "34 #5"
X};
Xstatic char	* styleMenuStr[] =
X{
X   "Roman      ^#O",
X   "Bold       ^#B",
X   "Italic     ^#T",
X   "BoldItalic ^#P",
X   "--------------",
X   "Left       ^#L",
X   "Center     ^#C",
X   "Right      ^#R"
X};
X
Xstatic char	* fontNameStr[] =
X{
X/* 75 dpi fonts */
X  "-adobe-times-medium-r-normal--8-80-75-75-p-44-iso8859-1",
X  "-adobe-times-medium-r-normal--10-100-75-75-p-54-iso8859-1",
X  "-adobe-times-medium-r-normal--12-120-75-75-p-64-iso8859-1",
X  "-adobe-times-medium-r-normal--14-140-75-75-p-74-iso8859-1",
X  "-adobe-times-medium-r-normal--18-180-75-75-p-94-iso8859-1",
X  "-adobe-times-medium-r-normal--24-240-75-75-p-124-iso8859-1",
X  "-adobe-times-bold-r-normal--8-80-75-75-p-47-iso8859-1",
X  "-adobe-times-bold-r-normal--10-100-75-75-p-57-iso8859-1",
X  "-adobe-times-bold-r-normal--12-120-75-75-p-67-iso8859-1",
X  "-adobe-times-bold-r-normal--14-140-75-75-p-77-iso8859-1",
X  "-adobe-times-bold-r-normal--18-180-75-75-p-99-iso8859-1",
X  "-adobe-times-bold-r-normal--24-240-75-75-p-132-iso8859-1",
X  "-adobe-times-medium-i-normal--8-80-75-75-p-42-iso8859-1",
X  "-adobe-times-medium-i-normal--10-100-75-75-p-52-iso8859-1",
X  "-adobe-times-medium-i-normal--12-120-75-75-p-63-iso8859-1",
X  "-adobe-times-medium-i-normal--14-140-75-75-p-73-iso8859-1",
X  "-adobe-times-medium-i-normal--18-180-75-75-p-94-iso8859-1",
X  "-adobe-times-medium-i-normal--24-240-75-75-p-125-iso8859-1",
X  "-adobe-times-bold-i-normal--8-80-75-75-p-47-iso8859-1",
X  "-adobe-times-bold-i-normal--10-100-75-75-p-57-iso8859-1",
X  "-adobe-times-bold-i-normal--12-120-75-75-p-68-iso8859-1",
X  "-adobe-times-bold-i-normal--14-140-75-75-p-77-iso8859-1",
X  "-adobe-times-bold-i-normal--18-180-75-75-p-98-iso8859-1",
X  "-adobe-times-bold-i-normal--24-240-75-75-p-128-iso8859-1",
X
X  "-adobe-courier-medium-r-normal--8-80-75-75-m-50-iso8859-1",
X  "-adobe-courier-medium-r-normal--10-100-75-75-m-60-iso8859-1",
X  "-adobe-courier-medium-r-normal--12-120-75-75-m-70-iso8859-1",
X  "-adobe-courier-medium-r-normal--14-140-75-75-m-90-iso8859-1",
X  "-adobe-courier-medium-r-normal--18-180-75-75-m-110-iso8859-1",
X  "-adobe-courier-medium-r-normal--24-240-75-75-m-150-iso8859-1",
X  "-adobe-courier-bold-r-normal--8-80-75-75-m-50-iso8859-1",
X  "-adobe-courier-bold-r-normal--10-100-75-75-m-60-iso8859-1",
X  "-adobe-courier-bold-r-normal--12-120-75-75-m-70-iso8859-1",
X  "-adobe-courier-bold-r-normal--14-140-75-75-m-90-iso8859-1",
X  "-adobe-courier-bold-r-normal--18-180-75-75-m-110-iso8859-1",
X  "-adobe-courier-bold-r-normal--24-240-75-75-m-150-iso8859-1",
X  "-adobe-courier-medium-o-normal--8-80-75-75-m-50-iso8859-1",
X  "-adobe-courier-medium-o-normal--10-100-75-75-m-60-iso8859-1",
X  "-adobe-courier-medium-o-normal--12-120-75-75-m-70-iso8859-1",
X  "-adobe-courier-medium-o-normal--14-140-75-75-m-90-iso8859-1",
X  "-adobe-courier-medium-o-normal--18-180-75-75-m-110-iso8859-1",
X  "-adobe-courier-medium-o-normal--24-240-75-75-m-150-iso8859-1",
X  "-adobe-courier-bold-o-normal--8-80-75-75-m-50-iso8859-1",
X  "-adobe-courier-bold-o-normal--10-100-75-75-m-60-iso8859-1",
X  "-adobe-courier-bold-o-normal--12-120-75-75-m-70-iso8859-1",
X  "-adobe-courier-bold-o-normal--14-140-75-75-m-90-iso8859-1",
X  "-adobe-courier-bold-o-normal--18-180-75-75-m-110-iso8859-1",
X  "-adobe-courier-bold-o-normal--24-240-75-75-m-150-iso8859-1",
X
X  "-adobe-helvetica-medium-r-normal--8-80-75-75-p-46-iso8859-1",
X  "-adobe-helvetica-medium-r-normal--10-100-75-75-p-56-iso8859-1",
X  "-adobe-helvetica-medium-r-normal--12-120-75-75-p-67-iso8859-1",
X  "-adobe-helvetica-medium-r-normal--14-140-75-75-p-77-iso8859-1",
X  "-adobe-helvetica-medium-r-normal--18-180-75-75-p-98-iso8859-1",
X  "-adobe-helvetica-medium-r-normal--24-240-75-75-p-130-iso8859-1",
X  "-adobe-helvetica-bold-r-normal--8-80-75-75-p-50-iso8859-1",
X  "-adobe-helvetica-bold-r-normal--10-100-75-75-p-60-iso8859-1",
X  "-adobe-helvetica-bold-r-normal--12-120-75-75-p-70-iso8859-1",
X  "-adobe-helvetica-bold-r-normal--14-140-75-75-p-82-iso8859-1",
X  "-adobe-helvetica-bold-r-normal--18-180-75-75-p-103-iso8859-1",
X  "-adobe-helvetica-bold-r-normal--24-240-75-75-p-138-iso8859-1",
X  "-adobe-helvetica-medium-o-normal--8-80-75-75-p-47-iso8859-1",
X  "-adobe-helvetica-medium-o-normal--10-100-75-75-p-57-iso8859-1",
X  "-adobe-helvetica-medium-o-normal--12-120-75-75-p-67-iso8859-1",
X  "-adobe-helvetica-medium-o-normal--14-140-75-75-p-78-iso8859-1",
X  "-adobe-helvetica-medium-o-normal--18-180-75-75-p-98-iso8859-1",
X  "-adobe-helvetica-medium-o-normal--24-240-75-75-p-130-iso8859-1",
X  "-adobe-helvetica-bold-o-normal--8-80-75-75-p-50-iso8859-1",
X  "-adobe-helvetica-bold-o-normal--10-100-75-75-p-60-iso8859-1",
X  "-adobe-helvetica-bold-o-normal--12-120-75-75-p-69-iso8859-1",
X  "-adobe-helvetica-bold-o-normal--14-140-75-75-p-82-iso8859-1",
X  "-adobe-helvetica-bold-o-normal--18-180-75-75-p-104-iso8859-1",
X  "-adobe-helvetica-bold-o-normal--24-240-75-75-p-138-iso8859-1",
X
X  "-adobe-new century schoolbook-medium-r-normal--8-80-75-75-p-50-iso8859-1",
X  "-adobe-new century schoolbook-medium-r-normal--10-100-75-75-p-60-iso8859-1",
X  "-adobe-new century schoolbook-medium-r-normal--12-120-75-75-p-70-iso8859-1",
X  "-adobe-new century schoolbook-medium-r-normal--14-140-75-75-p-82-iso8859-1",
X  "-adobe-new century schoolbook-medium-r-normal--18-180-75-75-p-103-iso8859-1",
X  "-adobe-new century schoolbook-medium-r-normal--24-240-75-75-p-137-iso8859-1",
X  "-adobe-new century schoolbook-bold-r-normal--8-80-75-75-p-56-iso8859-1",
X  "-adobe-new century schoolbook-bold-r-normal--10-100-75-75-p-66-iso8859-1",
X  "-adobe-new century schoolbook-bold-r-normal--12-120-75-75-p-77-iso8859-1",
X  "-adobe-new century schoolbook-bold-r-normal--14-140-75-75-p-87-iso8859-1",
X  "-adobe-new century schoolbook-bold-r-normal--18-180-75-75-p-113-iso8859-1",
X  "-adobe-new century schoolbook-bold-r-normal--24-240-75-75-p-149-iso8859-1",
X  "-adobe-new century schoolbook-medium-i-normal--8-80-75-75-p-50-iso8859-1",
X  "-adobe-new century schoolbook-medium-i-normal--10-100-75-75-p-60-iso8859-1",
X  "-adobe-new century schoolbook-medium-i-normal--12-120-75-75-p-70-iso8859-1",
X  "-adobe-new century schoolbook-medium-i-normal--14-140-75-75-p-81-iso8859-1",
X  "-adobe-new century schoolbook-medium-i-normal--18-180-75-75-p-104-iso8859-1",
X  "-adobe-new century schoolbook-medium-i-normal--24-240-75-75-p-136-iso8859-1",
X  "-adobe-new century schoolbook-bold-i-normal--8-80-75-75-p-56-iso8859-1",
X  "-adobe-new century schoolbook-bold-i-normal--10-100-75-75-p-66-iso8859-1",
X  "-adobe-new century schoolbook-bold-i-normal--12-120-75-75-p-76-iso8859-1",
X  "-adobe-new century schoolbook-bold-i-normal--14-140-75-75-p-88-iso8859-1",
X  "-adobe-new century schoolbook-bold-i-normal--18-180-75-75-p-111-iso8859-1",
X  "-adobe-new century schoolbook-bold-i-normal--24-240-75-75-p-148-iso8859-1",
X
X  "-adobe-symbol-medium-r-normal--8-80-75-75-p-51-adobe-fontspecific",
X  "-adobe-symbol-medium-r-normal--10-100-75-75-p-61-adobe-fontspecific",
X  "-adobe-symbol-medium-r-normal--12-120-75-75-p-74-adobe-fontspecific",
X  "-adobe-symbol-medium-r-normal--14-140-75-75-p-85-adobe-fontspecific",
X  "-adobe-symbol-medium-r-normal--18-180-75-75-p-107-adobe-fontspecific",
X  "-adobe-symbol-medium-r-normal--24-240-75-75-p-142-adobe-fontspecific",
X
X/* 100 dpi fonts */
X  "-adobe-times-medium-r-normal--11-80-100-100-p-54-iso8859-1",
X  "-adobe-times-medium-r-normal--14-100-100-100-p-74-iso8859-1",
X  "-adobe-times-medium-r-normal--17-120-100-100-p-84-iso8859-1",
X  "-adobe-times-medium-r-normal--20-140-100-100-p-96-iso8859-1",
X  "-adobe-times-medium-r-normal--25-180-100-100-p-125-iso8859-1",
X  "-adobe-times-medium-r-normal--34-240-100-100-p-170-iso8859-1",
X  "-adobe-times-bold-r-normal--11-80-100-100-p-57-iso8859-1",
X  "-adobe-times-bold-r-normal--14-100-100-100-p-76-iso8859-1",
X  "-adobe-times-bold-r-normal--17-120-100-100-p-88-iso8859-1",
X  "-adobe-times-bold-r-normal--20-140-100-100-p-100-iso8859-1",
X  "-adobe-times-bold-r-normal--25-180-100-100-p-132-iso8859-1",
X  "-adobe-times-bold-r-normal--34-240-100-100-p-177-iso8859-1",
X  "-adobe-times-medium-i-normal--11-80-100-100-p-52-iso8859-1",
X  "-adobe-times-medium-i-normal--14-100-100-100-p-73-iso8859-1",
X  "-adobe-times-medium-i-normal--17-120-100-100-p-84-iso8859-1",
X  "-adobe-times-medium-i-normal--20-140-100-100-p-94-iso8859-1",
X  "-adobe-times-medium-i-normal--25-180-100-100-p-125-iso8859-1",
X  "-adobe-times-medium-i-normal--34-240-100-100-p-168-iso8859-1",
X  "-adobe-times-bold-i-normal--11-80-100-100-p-57-iso8859-1",
X  "-adobe-times-bold-i-normal--14-100-100-100-p-77-iso8859-1",
X  "-adobe-times-bold-i-normal--17-120-100-100-p-86-iso8859-1",
X  "-adobe-times-bold-i-normal--20-140-100-100-p-98-iso8859-1",
X  "-adobe-times-bold-i-normal--25-180-100-100-p-128-iso8859-1",
X  "-adobe-times-bold-i-normal--34-240-100-100-p-170-iso8859-1",
X
X  "-adobe-courier-medium-r-normal--11-80-100-100-m-60-iso8859-1",
X  "-adobe-courier-medium-r-normal--14-100-100-100-m-90-iso8859-1",
X  "-adobe-courier-medium-r-normal--17-120-100-100-m-100-iso8859-1",
X  "-adobe-courier-medium-r-normal--20-140-100-100-m-110-iso8859-1",
X  "-adobe-courier-medium-r-normal--25-180-100-100-m-150-iso8859-1",
X  "-adobe-courier-medium-r-normal--34-240-100-100-m-200-iso8859-1",
X  "-adobe-courier-bold-r-normal--11-80-100-100-m-60-iso8859-1",
X  "-adobe-courier-bold-r-normal--14-100-100-100-m-90-iso8859-1",
X  "-adobe-courier-bold-r-normal--17-120-100-100-m-100-iso8859-1",
X  "-adobe-courier-bold-r-normal--20-140-100-100-m-110-iso8859-1",
X  "-adobe-courier-bold-r-normal--25-180-100-100-m-150-iso8859-1",
X  "-adobe-courier-bold-r-normal--34-240-100-100-m-200-iso8859-1",
X  "-adobe-courier-medium-o-normal--11-80-100-100-m-60-iso8859-1",
X  "-adobe-courier-medium-o-normal--14-100-100-100-m-90-iso8859-1",
X  "-adobe-courier-medium-o-normal--17-120-100-100-m-100-iso8859-1",
X  "-adobe-courier-medium-o-normal--20-140-100-100-m-110-iso8859-1",
X  "-adobe-courier-medium-o-normal--25-180-100-100-m-150-iso8859-1",
X  "-adobe-courier-medium-o-normal--34-240-100-100-m-200-iso8859-1",
X  "-adobe-courier-bold-o-normal--11-80-100-100-m-60-iso8859-1",
X  "-adobe-courier-bold-o-normal--14-100-100-100-m-90-iso8859-1",
X  "-adobe-courier-bold-o-normal--17-120-100-100-m-100-iso8859-1",
X  "-adobe-courier-bold-o-normal--20-140-100-100-m-110-iso8859-1",
X  "-adobe-courier-bold-o-normal--25-180-100-100-m-150-iso8859-1",
X  "-adobe-courier-bold-o-normal--34-240-100-100-m-200-iso8859-1",
X
X  "-adobe-helvetica-medium-r-normal--11-80-100-100-p-56-iso8859-1",
X  "-adobe-helvetica-medium-r-normal--14-100-100-100-p-76-iso8859-1",
X  "-adobe-helvetica-medium-r-normal--17-120-100-100-p-88-iso8859-1",
X  "-adobe-helvetica-medium-r-normal--20-140-100-100-p-100-iso8859-1",
X  "-adobe-helvetica-medium-r-normal--25-180-100-100-p-130-iso8859-1",
X  "-adobe-helvetica-medium-r-normal--34-240-100-100-p-176-iso8859-1",
X  "-adobe-helvetica-bold-r-normal--11-80-100-100-p-60-iso8859-1",
X  "-adobe-helvetica-bold-r-normal--14-100-100-100-p-82-iso8859-1",
X  "-adobe-helvetica-bold-r-normal--17-120-100-100-p-92-iso8859-1",
X  "-adobe-helvetica-bold-r-normal--20-140-100-100-p-105-iso8859-1",
X  "-adobe-helvetica-bold-r-normal--25-180-100-100-p-138-iso8859-1",
X  "-adobe-helvetica-bold-r-normal--34-240-100-100-p-182-iso8859-1",
X  "-adobe-helvetica-medium-o-normal--11-80-100-100-p-57-iso8859-1",
X  "-adobe-helvetica-medium-o-normal--14-100-100-100-p-78-iso8859-1",
X  "-adobe-helvetica-medium-o-normal--17-120-100-100-p-88-iso8859-1",
X  "-adobe-helvetica-medium-o-normal--20-140-100-100-p-98-iso8859-1",
X  "-adobe-helvetica-medium-o-normal--25-180-100-100-p-130-iso8859-1",
X  "-adobe-helvetica-medium-o-normal--34-240-100-100-p-176-iso8859-1",
X  "-adobe-helvetica-bold-o-normal--11-80-100-100-p-60-iso8859-1",
X  "-adobe-helvetica-bold-o-normal--14-100-100-100-p-82-iso8859-1",
X  "-adobe-helvetica-bold-o-normal--17-120-100-100-p-92-iso8859-1",
X  "-adobe-helvetica-bold-o-normal--20-140-100-100-p-103-iso8859-1",
X  "-adobe-helvetica-bold-o-normal--25-180-100-100-p-138-iso8859-1",
X  "-adobe-helvetica-bold-o-normal--34-240-100-100-p-182-iso8859-1",
X
X  "-adobe-new century schoolbook-medium-r-normal--11-80-100-100-p-60-iso8859-1",
X  "-adobe-new century schoolbook-medium-r-normal--14-100-100-100-p-82-iso8859-1",
X  "-adobe-new century schoolbook-medium-r-normal--17-120-100-100-p-91-iso8859-1",
X  "-adobe-new century schoolbook-medium-r-normal--20-140-100-100-p-103-iso8859-1",
X  "-adobe-new century schoolbook-medium-r-normal--25-180-100-100-p-136-iso8859-1",
X  "-adobe-new century schoolbook-medium-r-normal--34-240-100-100-p-181-iso8859-1",
X  "-adobe-new century schoolbook-bold-r-normal--11-80-100-100-p-66-iso8859-1",
X  "-adobe-new century schoolbook-bold-r-normal--14-100-100-100-p-87-iso8859-1",
X  "-adobe-new century schoolbook-bold-r-normal--17-120-100-100-p-99-iso8859-1",
X  "-adobe-new century schoolbook-bold-r-normal--20-140-100-100-p-113-iso8859-1",
X  "-adobe-new century schoolbook-bold-r-normal--25-180-100-100-p-149-iso8859-1",
X  "-adobe-new century schoolbook-bold-r-normal--34-240-100-100-p-193-iso8859-1",
X  "-adobe-new century schoolbook-medium-i-normal--11-80-100-100-p-60-iso8859-1",
X  "-adobe-new century schoolbook-medium-i-normal--14-100-100-100-p-81-iso8859-1",
X  "-adobe-new century schoolbook-medium-i-normal--17-120-100-100-p-92-iso8859-1",
X  "-adobe-new century schoolbook-medium-i-normal--20-140-100-100-p-104-iso8859-1",
X  "-adobe-new century schoolbook-medium-i-normal--25-180-100-100-p-136-iso8859-1",
X  "-adobe-new century schoolbook-medium-i-normal--34-240-100-100-p-182-iso8859-1",
X  "-adobe-new century schoolbook-bold-i-normal--11-80-100-100-p-66-iso8859-1",
X  "-adobe-new century schoolbook-bold-i-normal--14-100-100-100-p-88-iso8859-1",
X  "-adobe-new century schoolbook-bold-i-normal--17-120-100-100-p-99-iso8859-1",
X  "-adobe-new century schoolbook-bold-i-normal--20-140-100-100-p-111-iso8859-1",
X  "-adobe-new century schoolbook-bold-i-normal--25-180-100-100-p-148-iso8859-1",
X  "-adobe-new century schoolbook-bold-i-normal--34-240-100-100-p-193-iso8859-1",
X
X  "-adobe-symbol-medium-r-normal--11-80-100-100-p-61-adobe-fontspecific",
X  "-adobe-symbol-medium-r-normal--14-100-100-100-p-85-adobe-fontspecific",
X  "-adobe-symbol-medium-r-normal--17-120-100-100-p-95-adobe-fontspecific",
X  "-adobe-symbol-medium-r-normal--20-140-100-100-p-107-adobe-fontspecific",
X  "-adobe-symbol-medium-r-normal--25-180-100-100-p-142-adobe-fontspecific",
X  "-adobe-symbol-medium-r-normal--34-240-100-100-p-191-adobe-fontspecific"
X};
X
XXFontStruct * GetFontStruct (font_index)
X   register int	font_index;
X{
X   return (myFontInfo[font_index].xfs);
X}
X
Xint FontIndex (dpi_index, font_index, size_index, style_index)
X   register int	dpi_index, font_index, size_index, style_index;
X{
X   if (font_index == FONT_SYM)
X      return (size_index+MAXFONTSIZES*(MAXFONTSTYLES*font_index) +
X            dpi_index*FONTS_PER_DPI);
X   else
X      return (size_index+MAXFONTSIZES*(style_index+MAXFONTSTYLES*font_index) +
X            dpi_index*FONTS_PER_DPI);
X}
X
Xvoid SetCanvasFont ()
X{
X   register int	index, old_index;
X
X   index = FontIndex (curFontDPI, curFont, curSize, curStyle);
X   if (!myFontInfo[index].valid)
X   {
X      if ((myFontInfo[index].xfs =
X            XLoadQueryFont (mainDisplay, fontNameStr[index])) == NULL)
X      {
X         old_index = index;
X         curFontDPI = (curFontDPI==FONT_DPI_75) ? FONT_DPI_100 : FONT_DPI_75;
X         index = FontIndex (curFontDPI, curFont, curSize, curStyle);
X         if ((myFontInfo[index].xfs =
X               XLoadQueryFont (mainDisplay, fontNameStr[index])) == NULL)
X         {
X            printf ("Can not open '%s' nor\n\t'%s'!  Tgif aborted!\n\n",
X                  fontNameStr[old_index], fontNameStr[index]);
X            exit (-1);
X         }
X         printf ("Warning:  can not open '%s' font,\n\tuse '%s' instead.\n",
X               fontNameStr[old_index], fontNameStr[index]);
X         SetFileModified (TRUE);
X      }
X      myFontInfo[index].valid = TRUE;
X   }
X
X   canvasFontIndex = index;
X
X   canvasFontPtr = myFontInfo[index].xfs;
X   canvasFontAsc = canvasFontPtr->max_bounds.ascent;
X   canvasFontDes = canvasFontPtr->max_bounds.descent;
X   canvasFontHeight = canvasFontAsc + canvasFontDes;
X
X   XSetFont (mainDisplay, drawGC, canvasFontPtr->fid);
X
X   textCursorH = canvasFontHeight;
X
X   pointSize = (curFontDPI==FONT_DPI_75) ? pointSize75 : pointSize100;
X   sizeMenuStr = (curFontDPI==FONT_DPI_75) ? sizeMenuStr75 : sizeMenuStr100;
X}
X
Xvoid InitFonts ()
X{
X   register int	i;
X   int		ruler_index, default_index;
X   int		old_ruler_index, old_default_index, len, dpi;
X   char		* s;
X
X   for (i = 0; i < FONTTABLESIZE; i++) myFontInfo[i].valid = FALSE;
X
X   curFont = FONT_COU;
X   curStyle = STYLE_NR;
X   curSize = 4;
X   curFontDPI = FONT_DPI_75;
X
X   if ((s = XGetDefault (mainDisplay, TOOL_NAME, "InitialFontDPI")) != NULL)
X   {
X      dpi = atoi (s);
X      switch (dpi)
X      {
X         case 75: curFontDPI = FONT_DPI_75; curSize = 4; break;
X         case 100: curFontDPI = FONT_DPI_100; curSize = 2; break;
X         default:
X            printf ("Warning:  can not set InitialFontDPI to '%s'\n", s);
X            break;
X      }
X   }
X
X   default_index = FontIndex(curFontDPI, curFont, curSize, curStyle);
X   if ((myFontInfo[default_index].xfs =
X         XLoadQueryFont (mainDisplay, fontNameStr[default_index])) == NULL)
X   {
X      old_default_index = default_index;
X      curSize = 2;
X      curFontDPI = FONT_DPI_100;
X      default_index = FontIndex(curFontDPI, curFont, curSize, curStyle);
X      if ((myFontInfo[default_index].xfs =
X            XLoadQueryFont (mainDisplay, fontNameStr[default_index])) == NULL)
X      {
X         printf ("Can not open '%s' nor\n\t'%s'!  Tgif aborted!\n\n",
X               fontNameStr[old_default_index], fontNameStr[default_index]);
X         exit (-1);
X      }
X   }
X   myFontInfo[default_index].valid = TRUE;
X
X   ruler_index = FontIndex(FONT_DPI_75, curFont, 1, curStyle);
X   if ((myFontInfo[ruler_index].xfs =
X         XLoadQueryFont (mainDisplay, fontNameStr[ruler_index])) == NULL)
X   {
X      old_ruler_index = ruler_index;
X      ruler_index = FontIndex(FONT_DPI_100, curFont, 0, curStyle);
X      if ((myFontInfo[ruler_index].xfs =
X            XLoadQueryFont (mainDisplay, fontNameStr[ruler_index])) == NULL)
X      {
X         printf ("Can not open '%s' nor\n\t'%s'!  Tgif aborted!\n\n",
X               fontNameStr[old_ruler_index], fontNameStr[ruler_index]);
X         exit (-1);
X      }
X   }
X   myFontInfo[ruler_index].valid = TRUE;
X
X   defaultFontPtr = myFontInfo[default_index].xfs;
X   defaultFontWidth = defaultFontPtr->max_bounds.width;
X   defaultFontAsc = defaultFontPtr->max_bounds.ascent;
X   defaultFontDes = defaultFontPtr->max_bounds.descent;
X   defaultFontHeight = defaultFontAsc + defaultFontDes;
X
X   rulerFontPtr = myFontInfo[ruler_index].xfs;
X   rulerFontWidth = rulerFontPtr->max_bounds.width;
X   rulerFontAsc = rulerFontPtr->max_bounds.ascent;
X   rulerFontDes = rulerFontPtr->max_bounds.descent;
X   rulerFontHeight = rulerFontAsc + rulerFontDes;
X
X   pointSize = (curFontDPI==FONT_DPI_75) ? pointSize75 : pointSize100;
X   sizeMenuStr = (curFontDPI==FONT_DPI_75) ? sizeMenuStr75 : sizeMenuStr100;
X
X   if ((s = XGetDefault (mainDisplay, TOOL_NAME, "InitialFont")) != NULL)
X   {
X      for (i = 0; i < MAXFONTS; i++)
X         if (strcmp (s, fontMenuStr[i]) == 0)
X            break;
X      if (i != MAXFONTS)
X         curFont = i;
X      else
X         printf ("Warning:  can not set InitialFontDPI to '%s'\n", s);
X   }
X   if ((s = XGetDefault (mainDisplay, TOOL_NAME, "InitialFontStyle")) != NULL)
X   {
X      len = strlen (s);
X      if (len < strlen (styleMenuStr[0]))
X      {
X         for (i = 0; i < MAXFONTSTYLES; i++)
X            if (strncmp (s, styleMenuStr[i], len) == 0)
X               break;
X         if (i != MAXFONTSTYLES)
X            curStyle = i;
X         else
X            printf ("Warning:  can not set InitialFontStyle to '%s'\n", s);
X      }
X      else
X         printf ("Warning:  can not set InitialFontStyle to '%s'\n", s);
X   }
X   if ((s = XGetDefault (mainDisplay, TOOL_NAME, "InitialFontJust")) != NULL)
X   {
X      len = strlen (s);
X      if (len < strlen (styleMenuStr[0]))
X      {
X         for (i = MAXFONTSTYLES+1; i < MAXFONTSTYLES+1+MAXJUSTS; i++)
X            if (strncmp (s, styleMenuStr[i], len) == 0)
X               break;
X         if (i != MAXFONTSTYLES+1+MAXJUSTS)
X            textJust = i-MAXFONTSTYLES-1;
X         else
X            printf ("Warning:  can not set InitialFontJust to '%s'\n", s);
X      }
X      else
X         printf ("Warning:  can not set InitialFontJust to '%s'\n", s);
X   }
X   if ((s = XGetDefault (mainDisplay,TOOL_NAME,"InitialFontSizeIndex")) != NULL)
X   {
X      if (atoi (s) < MAXFONTSIZES)
X         curSize = atoi (s);
X      else
X         printf ("Warning:  can not set InitialFontSizeIndex to '%s'\n", s);
X   }
X}
X
Xstatic
Xint ChangeObjTextStyle (ObjPtr, StyleIndex)
X   register struct ObjRec	* ObjPtr;
X   register int			StyleIndex;
X{
X   register struct ObjRec	* obj_ptr;
X   register int			changed = FALSE;
X
X   for (obj_ptr = ObjPtr; obj_ptr != NULL; obj_ptr = obj_ptr->prev)
X      switch (obj_ptr->type)
X      {
X         case OBJ_TEXT:
X            if (obj_ptr->detail.t->style != StyleIndex)
X            {
X               obj_ptr->detail.t->style = StyleIndex;
X               UpdTextBBox (obj_ptr);
X               changed = TRUE;
X            }
X            break;
X
X         case OBJ_GROUP:
X         case OBJ_SYM:
X            if (ChangeObjTextStyle (obj_ptr->detail.r->last, StyleIndex))
X            {
X               changed = TRUE;
X               AdjObjBBox (obj_ptr);
X            }
X            break;
X      }
X   return (changed);
X}
X
Xstatic
Xint ChangeObjTextJust (ObjPtr, JustIndex)
X   register struct ObjRec	* ObjPtr;
X   register int			JustIndex;
X{
X   register struct ObjRec	* obj_ptr;
X   register int			changed = FALSE;
X
X   for (obj_ptr = ObjPtr; obj_ptr != NULL; obj_ptr = obj_ptr->prev)
X      switch (obj_ptr->type)
X      {
X         case OBJ_TEXT:
X            if (obj_ptr->detail.t->just != JustIndex)
X            {
X               obj_ptr->detail.t->just = JustIndex;
X               UpdTextBBox (obj_ptr);
X               changed = TRUE;
X            }
X            break;
X
X         case OBJ_GROUP:
X         case OBJ_SYM:
X            if (ChangeObjTextJust (obj_ptr->detail.r->last, JustIndex))
X            {
X               changed = TRUE;
X               AdjObjBBox (obj_ptr);
X            }
X            break;
X      }
X   return (changed);
X}
X
Xvoid ChangeFontJust (JustIndex)
X   int JustIndex;
X{
X   register struct SelRec	* sel_ptr;
X   register struct ObjRec	* obj_ptr;
X   int				ltx, lty, rbx, rby;
X   int				text_obj_created, text_cursor_shown;
X   int				changed = FALSE;
X
X   if (JustIndex == INVALID) return;
X
X   if (topSel == NULL)
X   {
X      text_cursor_shown = textCursorShown;
X      text_obj_created = TieLooseEnds ();
X      textJust = JustIndex;
X      ShowJust ();
X      if (!text_obj_created && curChoice == DRAWTEXT && text_cursor_shown)
X      {
X         NewCurText ();
X         RedrawCurText ();
X      }
X      else
X         textCursorShown = FALSE;
X      return;
X   }
X
X   HighLightReverse ();
X   for (sel_ptr = botSel; sel_ptr != NULL; sel_ptr = sel_ptr->prev)
X   {
X      obj_ptr = sel_ptr->obj;
X      switch (obj_ptr->type)
X      {
X         case OBJ_TEXT:
X            if (obj_ptr->detail.t->just != JustIndex)
X            {
X               obj_ptr->detail.t->just = JustIndex;
X               UpdTextBBox (obj_ptr);
X               changed = TRUE;
X            }
X            break;
X         case OBJ_GROUP:
X         case OBJ_SYM:
X            if (ChangeObjTextJust (obj_ptr->detail.r->last, JustIndex))
X            {
X               changed = TRUE;
X               AdjObjBBox (obj_ptr);
X            }
X            break;
X      }
X   }
X
X   if (changed)
X   {
X      ltx = selLtX; lty = selLtY; rbx = selRbX; rby = selRbY;
X      UpdSelBBox ();
X      RedrawAreas (botObj, ltx-(1<<zoomScale), lty-(1<<zoomScale),
X            rbx+(1<<zoomScale), rby+(1<<zoomScale), selLtX-(1<<zoomScale),
X            selLtY-(1<<zoomScale), selRbX+(1<<zoomScale),
X            selRbY+(1<<zoomScale));
X      SetFileModified (TRUE);
X   }
X   HighLightForward ();
X}
X
Xvoid ChangeFontStyle (StyleIndex)
X   int	StyleIndex;
X{
X   register struct SelRec	* sel_ptr;
X   register struct ObjRec	* obj_ptr;
X   int				ltx, lty, rbx, rby, text_obj_created;
X   int				changed = FALSE, text_cursor_shown;
X
X   if (StyleIndex == INVALID) return;
X
X   if (topSel == NULL)
X   {
X      text_cursor_shown = textCursorShown;
X      text_obj_created = TieLooseEnds ();
X      curStyle = StyleIndex;
X      SetCanvasFont ();
X      if (!text_obj_created && curChoice == DRAWTEXT && text_cursor_shown)
X      {
X         NewCurText ();
X         RedrawCurText ();
X      }
X      else
X         textCursorShown = FALSE;
X      ShowCurFont ();
X      return;
X   }
X
X   HighLightReverse ();
X   for (sel_ptr = botSel; sel_ptr != NULL; sel_ptr = sel_ptr->prev)
X   {
X      obj_ptr = sel_ptr->obj;
X      switch (obj_ptr->type)
X      {
X         case OBJ_TEXT:
X            if (obj_ptr->detail.t->style != StyleIndex)
X            {
X               obj_ptr->detail.t->style = StyleIndex;
X               UpdTextBBox (obj_ptr);
X               changed = TRUE;
X            }
X            break;
X         case OBJ_GROUP:
X         case OBJ_SYM:
X            if (ChangeObjTextStyle (obj_ptr->detail.r->last, StyleIndex))
X            {
X               changed = TRUE;
X               AdjObjBBox (obj_ptr);
X            }
X            break;
X      }
X   }
X
X   if (changed)
X   {
X      ltx = selLtX; lty = selLtY; rbx = selRbX; rby = selRbY;
X      UpdSelBBox ();
X      RedrawAreas (botObj, ltx-(1<<zoomScale), lty-(1<<zoomScale),
X            rbx+(1<<zoomScale), rby+(1<<zoomScale), selLtX-(1<<zoomScale),
X            selLtY-(1<<zoomScale), selRbX+(1<<zoomScale),
X            selRbY+(1<<zoomScale));
X      SetFileModified (TRUE);
X   }
X   HighLightForward ();
X}
X
Xvoid StyleMenu (X, Y)
X   int  X, Y;
X{
X   register int	index;
X   int		* fore_colors, * valid;
X
X   DefaultColorArrays (MAXFONTSTYLES+MAXJUSTS+1, &fore_colors, &valid);
X   index = TextMenuLoop (X, Y, styleMenuStr, MAXFONTSTYLES+MAXJUSTS+1,
X         fore_colors, valid, SINGLECOLOR);
X
X   if (index == INVALID) return;
X
X   if (index < MAXFONTSTYLES)
X      ChangeFontStyle (index);
X   else if (index > MAXFONTSTYLES)
X      ChangeFontJust (index - MAXFONTSTYLES - 1);
X}
X
Xstatic
Xint ChangeObjTextSize (ObjPtr, SizeIndex)
X   register struct ObjRec	* ObjPtr;
X   register int			SizeIndex;
X{
X   register struct ObjRec	* obj_ptr;
X   register int			changed = FALSE;
X
X   for (obj_ptr = ObjPtr; obj_ptr != NULL; obj_ptr = obj_ptr->prev)
X      switch (obj_ptr->type)
X      {
X         case OBJ_TEXT:
X            if (obj_ptr->detail.t->size != SizeIndex)
X            {
X               obj_ptr->detail.t->size = SizeIndex;
X               UpdTextBBox (obj_ptr);
X               changed = TRUE;
X            }
X            break;
X
X         case OBJ_GROUP:
X         case OBJ_SYM:
X            if (ChangeObjTextSize (obj_ptr->detail.r->last, SizeIndex))
X            {
X               changed = TRUE;
X               AdjObjBBox (obj_ptr);
X            }
X            break;
X      }
X   return (changed);
X}
X
Xvoid ChangeFontSize (SizeIndex)
X   int	SizeIndex;
X{
X   register struct SelRec	* sel_ptr;
X   register struct ObjRec	* obj_ptr;
X   int				ltx, lty, rbx, rby, text_obj_created;
X   int				text_cursor_shown, changed = FALSE;
X
X   if (SizeIndex == INVALID) return;
X
X   if (topSel == NULL)
X   {
X      text_cursor_shown = textCursorShown;
X      text_obj_created = TieLooseEnds ();
X      curSize = SizeIndex;
X      SetCanvasFont ();
X      if (!text_obj_created && curChoice == DRAWTEXT && text_cursor_shown)
X      {
X         NewCurText ();
X         RedrawCurText ();
X      }
X      else
X         textCursorShown = FALSE;
X      ShowCurFont ();
X      return;
X   }
X
X   HighLightReverse ();
X   for (sel_ptr = botSel; sel_ptr != NULL; sel_ptr = sel_ptr->prev)
X   {
X      obj_ptr = sel_ptr->obj;
X      switch (obj_ptr->type)
X      {
X         case OBJ_TEXT:
X            if (obj_ptr->detail.t->size != SizeIndex)
X            {
X               obj_ptr->detail.t->size = SizeIndex;
X               UpdTextBBox (obj_ptr);
X               changed = TRUE;
X            }
X            break;
X      
X         case OBJ_GROUP:
X         case OBJ_SYM:
X            if (ChangeObjTextSize (obj_ptr->detail.r->last, SizeIndex))
X            {
X               changed = TRUE;
X               AdjObjBBox (obj_ptr);
X            }
X            break;
X      }
X   }
X
X   if (changed)
X   {
X      ltx = selLtX; lty = selLtY; rbx = selRbX; rby = selRbY;
X      UpdSelBBox ();
X      RedrawAreas (botObj, ltx-(1<<zoomScale), lty-(1<<zoomScale),
X            rbx+(1<<zoomScale), rby+(1<<zoomScale), selLtX-(1<<zoomScale),
X            selLtY-(1<<zoomScale), selRbX+(1<<zoomScale),
X            selRbY+(1<<zoomScale));
X      SetFileModified (TRUE);
X   }
X   HighLightForward ();
X}
X
Xvoid SizeMenu (X, Y)
X   int  X, Y;
X{
X   register int			index;
X   int				* fore_colors, * valid;
X
X   DefaultColorArrays (MAXFONTSIZES, &fore_colors, &valid);
X
X   index = TextMenuLoop (X, Y, sizeMenuStr, MAXFONTSIZES, fore_colors, valid,
X         SINGLECOLOR);
X   ChangeFontSize (index);
X}
X
Xstatic
Xint ChangeObjTextFont (ObjPtr, FontIndex)
X   register struct ObjRec	* ObjPtr;
X   register int			FontIndex;
X{
X   register struct ObjRec	* obj_ptr;
X   register int			changed = FALSE;
X
X   for (obj_ptr = ObjPtr; obj_ptr != NULL; obj_ptr = obj_ptr->prev)
X      switch (obj_ptr->type)
X      {
X         case OBJ_TEXT:
X            if (obj_ptr->detail.t->font != FontIndex)
X            {
X               obj_ptr->detail.t->font = FontIndex;
X               UpdTextBBox (obj_ptr);
X               changed = TRUE;
X            }
X            break;
X
X         case OBJ_GROUP:
X         case OBJ_SYM:
X            if (ChangeObjTextFont (obj_ptr->detail.r->last, FontIndex))
X            {
X               changed = TRUE;
X               AdjObjBBox (obj_ptr);
X            }
X            break;
X      }
X   return (changed);
X}
X
Xvoid ChangeFont (FontIndex)
X   int	FontIndex;
X{
X   register struct SelRec	* sel_ptr;
X   register struct ObjRec	* obj_ptr;
X   int				changed = FALSE, text_cursor_shown;
X   int				ltx, lty, rbx, rby, text_obj_created;
X
X   if (FontIndex == INVALID) return;
X
X   if (topSel == NULL)
X   {
X      text_cursor_shown = textCursorShown;
X      text_obj_created = TieLooseEnds ();
X      curFont = FontIndex;
X      SetCanvasFont ();
X      if (!text_obj_created && curChoice == DRAWTEXT && text_cursor_shown)
X      {
X         NewCurText ();
X         RedrawCurText ();
X      }
X      else
X         textCursorShown = FALSE;
X      ShowCurFont ();
X      return;
X   }
X
X   HighLightReverse ();
X   for (sel_ptr = botSel; sel_ptr != NULL; sel_ptr = sel_ptr->prev)
X   {
X      obj_ptr = sel_ptr->obj;
X      switch (obj_ptr->type)
X      {
X         case OBJ_TEXT:
X            if (obj_ptr->detail.t->font != FontIndex)
X            {
X               obj_ptr->detail.t->font = FontIndex;
X               UpdTextBBox (obj_ptr);
X               changed = TRUE;
X            }
X            break;
X
X         case OBJ_GROUP:
X         case OBJ_SYM:
X            if (ChangeObjTextFont (obj_ptr->detail.r->last, FontIndex))
X            {
X               changed = TRUE;
X               AdjObjBBox (obj_ptr);
X            }
X            break;
X      }
X   }
X
X   if (changed)
X   {
X      ltx = selLtX; lty = selLtY; rbx = selRbX; rby = selRbY;
X      UpdSelBBox ();
X      RedrawAreas (botObj, ltx-(1<<zoomScale), lty-(1<<zoomScale),
X            rbx+(1<<zoomScale), rby+(1<<zoomScale), selLtX-(1<<zoomScale),
X            selLtY-(1<<zoomScale), selRbX+(1<<zoomScale),
X            selRbY+(1<<zoomScale));
X      SetFileModified (TRUE);
X   }
X   HighLightForward ();
X}
X
Xvoid FontMenu (X, Y)
X   int  X, Y;
X{
X   register int			index;
X   int				* fore_colors, * valid;
X
X   DefaultColorArrays (MAXFONTS, &fore_colors, &valid);
X   index = TextMenuLoop (X, Y, fontMenuStr, MAXFONTS, fore_colors, valid,
X         SINGLECOLOR);
X   ChangeFont (index);
X}
X
Xstatic
Xint ChangeObjTextFontDPI (ObjPtr, FontDPIIndex)
X   register struct ObjRec	* ObjPtr;
X   register int			FontDPIIndex;
X{
X   register struct ObjRec	* obj_ptr;
X   register int			changed = FALSE;
X
X   for (obj_ptr = ObjPtr; obj_ptr != NULL; obj_ptr = obj_ptr->prev)
X      switch (obj_ptr->type)
X      {
X         case OBJ_TEXT:
X            if (obj_ptr->detail.t->dpi != FontDPIIndex)
X            {
X               obj_ptr->detail.t->dpi = FontDPIIndex;
X               UpdTextBBox (obj_ptr);
X               changed = TRUE;
X            }
X            break;
X
X         case OBJ_GROUP:
X         case OBJ_SYM:
X            if (ChangeObjTextFontDPI (obj_ptr->detail.r->last, FontDPIIndex))
X            {
X               changed = TRUE;
X               AdjObjBBox (obj_ptr);
X            }
X            break;
X      }
X   return (changed);
X}
X
Xvoid ChangeFontDPI (FontDPIIndex)
X   int	FontDPIIndex;
X{
X   register struct SelRec	* sel_ptr;
X   register struct ObjRec	* obj_ptr;
X   int				changed = FALSE, text_cursor_shown;
X   int				ltx, lty, rbx, rby, text_obj_created;
X
X   if (FontDPIIndex == INVALID) return;
X
X   if (topSel == NULL)
X   {
X      text_cursor_shown = textCursorShown;
X      text_obj_created = TieLooseEnds ();
X      curFontDPI = FontDPIIndex;
X      SetCanvasFont ();
X      if (!text_obj_created && curChoice == DRAWTEXT && text_cursor_shown)
X      {
X         NewCurText ();
X         RedrawCurText ();
X      }
X      else
X         textCursorShown = FALSE;
X      ShowCurFont ();
X
X      pointSize = (curFontDPI==FONT_DPI_75) ? pointSize75 : pointSize100;
X      sizeMenuStr = (curFontDPI==FONT_DPI_75) ? sizeMenuStr75 : sizeMenuStr100;
X      return;
X   }
X
X   HighLightReverse ();
X   for (sel_ptr = botSel; sel_ptr != NULL; sel_ptr = sel_ptr->prev)
X   {
X      obj_ptr = sel_ptr->obj;
X      switch (obj_ptr->type)
X      {
X         case OBJ_TEXT:
X            if (obj_ptr->detail.t->dpi != FontDPIIndex)
X            {
X               obj_ptr->detail.t->dpi = FontDPIIndex;
X               UpdTextBBox (obj_ptr);
X               changed = TRUE;
X            }
X            break;
X
X         case OBJ_GROUP:
X         case OBJ_SYM:
X            if (ChangeObjTextFont (obj_ptr->detail.r->last, FontDPIIndex))
X            {
X               changed = TRUE;
X               AdjObjBBox (obj_ptr);
X            }
X            break;
X      }
X   }
X
X   if (changed)
X   {
X      ltx = selLtX; lty = selLtY; rbx = selRbX; rby = selRbY;
X      UpdSelBBox ();
X      RedrawAreas (botObj, ltx-(1<<zoomScale), lty-(1<<zoomScale),
X            rbx+(1<<zoomScale), rby+(1<<zoomScale), selLtX-(1<<zoomScale),
X            selLtY-(1<<zoomScale), selRbX+(1<<zoomScale),
X            selRbY+(1<<zoomScale));
X      SetFileModified (TRUE);
X   }
X   HighLightForward ();
X}
X
Xvoid FontDPIMenu (X, Y)
X   int  X, Y;
X{
X   register int			index;
X   int				* fore_colors, * valid;
X
X   DefaultColorArrays (MAXFONTDPIS, &fore_colors, &valid);
X   index = TextMenuLoop (X, Y, fontDPIMenuStr, MAXFONTDPIS, fore_colors, valid,
X         SINGLECOLOR);
X   ChangeFontDPI (index);
X}
X
Xstatic int	savedFont, savedSize, savedStyle, savedDPI;
Xstatic int	savedJust, savedRotate, savedPen;
X
Xvoid SaveCurFont ()
X{
X   savedFont = curFont;
X   savedSize = curSize;
X   savedStyle = curStyle;
X   savedDPI = curFontDPI;
X   savedJust = textJust;
X   savedRotate = curRotate;
X   savedPen = penPat;
X}
X
Xvoid RestoreCurFont ()
X{
X   curFont = savedFont;
X   curSize = savedSize;
X   curStyle = savedStyle;
X   curFontDPI = savedDPI;
X   textJust = savedJust;
X   curRotate = savedRotate;
X   penPat = savedPen;
X
X   SetCanvasFont ();
X}
X
Xstatic int	pushedFont, pushedSize, pushedStyle, pushedDPI, pushedJust;
Xstatic int	pushedColorIndex, pushedRotate, pushedPen;
X
Xvoid PushCurFont ()
X{
X   pushedFont = curFont;
X   pushedSize = curSize;
X   pushedStyle = curStyle;
X   pushedDPI = curFontDPI;
X   pushedJust = textJust;
X   pushedRotate = curRotate;
X   pushedPen = penPat;
X   pushedColorIndex = colorIndex;
X}
X
Xvoid PopCurFont ()
X{
X   curFont = pushedFont;
X   curSize = pushedSize;
X   curStyle = pushedStyle;
X   curFontDPI = pushedDPI;
X   textJust = pushedJust;
X   curRotate = pushedRotate;
X   penPat = pushedPen;
X   colorIndex = pushedColorIndex;
X
X   SetCanvasFont ();
X}
X
Xvoid CleanUpFonts ()
X{
X   register int	i;
X
X   for (i = 0; i < FONTTABLESIZE; i++)
X      if (myFontInfo[i].valid)
X      {
X         XFreeFont (mainDisplay, myFontInfo[i].xfs);
X         myFontInfo[i].valid = FALSE;
X      }
X}
X
X/* The following procedure is used to generate pdrawFontAsc[] and */
X/*    pDrawFontDes[], to be used in ``prtgif.c''.  It is supposed */
X/*    to be called within dbx and not tgif.                       */
X
X/*
X * static
X * void GenerateFontInfo ()
X * {
X *    register int	i, j, num_rows;
X * 
X *    for (i = 0; i < FONTTABLESIZE; i++)
X *       if (!myFontInfo[i].valid)
X *       {
X *          if ((myFontInfo[i].xfs =
X *                XLoadQueryFont (mainDisplay, fontNameStr[i])) == NULL)
X *          {
X *             printf ("Can not open %s.  Abort.\n\n", fontNameStr[i]);
X *             exit (-1);
X *          }
X *          myFontInfo[i].valid = TRUE;
X *       }
X * 
X *    num_rows = FONTTABLESIZE / MAXFONTSIZES;
X *    printf ("short\tpDrawFontAsc[] =\n{\n");
X *    for (i = 0; i < num_rows; i++)
X *    {
X *       printf ("   ");
X *       for (j = 0; j < MAXFONTSIZES; j++)
X *          if (i == num_rows-1 && j == MAXFONTSIZES-1)
X *             printf ("%2d ",
X *                   (myFontInfo[i*MAXFONTSIZES+j].xfs)->max_bounds.ascent);
X *          else
X *             printf ("%2d, ",
X *                   (myFontInfo[i*MAXFONTSIZES+j].xfs)->max_bounds.ascent);
X *       printf ("\n");
X *    }
X *    printf ("};\n\n");
X * 
X *    printf ("short\tpDrawFontDes[] =\n{\n");
X *    for (i = 0; i < num_rows; i++)
X *    {
X *       printf ("   ");
X *       for (j = 0; j < MAXFONTSIZES; j++)
X *          if (i == num_rows-1 && j == MAXFONTSIZES-1)
X *             printf ("%2d ",
X *                   (myFontInfo[i*MAXFONTSIZES+j].xfs)->max_bounds.descent);
X *          else
X *             printf ("%2d, ",
X *                   (myFontInfo[i*MAXFONTSIZES+j].xfs)->max_bounds.descent);
X *       printf ("\n");
X *    }
X *    printf ("};\n");
X * }
X */
END_OF_FILE
if test 40471 -ne `wc -c <'font.c'`; then
    echo shar: \"'font.c'\" unpacked with wrong size!
fi
# end of 'font.c'
fi
if test -f 'frontend.c' -a "${1}" != "-c" ; then 
  echo shar: Will not clobber existing file \"'frontend.c'\"
else
echo shar: Extracting \"'frontend.c'\" \(330 characters\)
sed "s/^X//" >'frontend.c' <<'END_OF_FILE'
X/*
X * Author:	William Chia-Wei Cheng (william@cs.ucla.edu)
X *
X * Copyright (C) 1990, 1991, William Cheng.
X */
X#ifndef lint
Xstatic char RCSid[] =
X      "@(#)$Header: /tmp_mnt/n/kona/tangram/u/william/X11/TGIF2/RCS/frontend.c,v 2.0 91/03/05 12:47:22 william Exp $";
X#endif
X
Xint	lastFile;
Xshort	* pDrawFontAsc;
Xshort	* pDrawFontDes;
END_OF_FILE
if test 330 -ne `wc -c <'frontend.c'`; then
    echo shar: \"'frontend.c'\" unpacked with wrong size!
fi
# end of 'frontend.c'
fi
echo shar: End of archive 5 \(of 23\).
cp /dev/null ark5isdone
MISSING=""
for I in 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 ; do
    if test ! -f ark${I}isdone ; then
	MISSING="${MISSING} ${I}"
    fi
done
if test "${MISSING}" = "" ; then
    echo You have unpacked all 23 archives.
    rm -f ark[1-9]isdone ark[1-9][0-9]isdone
else
    echo You still need to unpack the following archives:
    echo "        " ${MISSING}
fi
##  End of shell archive.
exit 0
---------------------------------> cut here <---------------------------------
-- 
Bill Cheng // UCLA Computer Science Department // (213) 206-7135
3277 Boelter Hall // Los Angeles, California 90024 // USA
william@CS.UCLA.EDU      ...!{uunet|ucbvax}!cs.ucla.edu!william