[comp.sources.amiga] v90i097: PrintFonts 1.10 - print and demonstrate the fonts in FONTS:, Part01/01

Amiga-Request@cs.odu.edu (Amiga Sources/Binaries Moderator) (03/04/90)

Submitted-by: davids@ucscb.UCSC.EDU (60116000)
Posting-number: Volume 90, Issue 097
Archive-name: util/prtfonts1.10

[ uuencoded executable included.  ...tad ]

     PrintFonts will print out a list of all the fonts in your FONTS:
directory, with each font's name being printed in the font itself.  This
is meant to give you something that you can use as a sort of quick
reference guide to your fonts, i.e. you look at the printout to get an
idea of what font(s) you're interested in for a particular task, then
you use something like ShowFont to see all the characters in that font.

#!/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 1 (of 1)."
# Contents:  PrintFonts.c PrintFonts.doc PrintFonts.uu setup.h
# Wrapped by tadguy@xanth on Sat Mar  3 22:20:53 1990
PATH=/bin:/usr/bin:/usr/ucb ; export PATH
if test -f 'PrintFonts.c' -a "${1}" != "-c" ; then 
  echo shar: Will not clobber existing file \"'PrintFonts.c'\"
else
echo shar: Extracting \"'PrintFonts.c'\" \(9961 characters\)
sed "s/^X//" >'PrintFonts.c' <<'END_OF_FILE'
X/*PrintFonts V1.10 (c)1989,1990 by Dave Schreiber.  All rights reserved*/
X/*Must be freely distributed, except for shipping, copying, media, and*/
X/*related costs.*/
X/*V1.00 finished August 30, 1989*/
X/*V1.10 finished January 21, 1990*/
X
X/*    New features:  can print in more than one column
X                     can determine the maximum number of columns to use
X                     can print an alternate description of a font
X                        (good for use with unreadable fonts like
X                        Cairo or Music).
X*/
X
X/*Compiled using Lattice C V5.04*/
X
X#include "setup.h"
X
X
Xint InterpretArgs();
XWORD PrintPage();
Xvoid DumpWindowToPrinter();
X
Xmain(argc,argv)
Xint argc;
Xchar *argv[];
X{
X   struct AvailFontsHeader *afh;
X   ULONG afhsize; /*Size of AvailFontsHeader buffer*/
X   ULONG numfonts,curfont;
X   BYTE max,readable,both;
X   WORD columns;
X   WORD maxlen;
X   struct AvailFonts *af;
X   
X   if(argc==2 && argv[1][0]=='?')   /*User wants help*/
X   {
X      puts("PrintFonts V1.10");
X      puts("(c)1989, 1990 by Dave Schreiber.  All rights reserved.");
X      puts("Format for use:");
X      puts("  1>  PrintFonts [options]");
X      puts("Where options are any of the following:");
X      puts("  -r:  Print each font's name in a readable format");
X      puts(" -c#:  Use # number of columns");
X      puts("  -m:  Determine the max number of columns that can be");
X      puts("       used and do not print.");
X      puts("  -b:  Determines the maximum number of columns and");
X      puts("       prints using that number of columns");
X      exit(0);
X   }
X   
X      /*Parse the command line arguments and set the appropriate flags*/
X   if(!InterpretArgs(argc,argv,&max,&readable,&columns,&both))
X      exit(1000);
X
X   if(columns<1)
X   {
X      puts("You must have at least one column!");
X      exit(2000);
X   }
X   
X   startup();  /*Open Libraries, etc.*/
X   afhsize=AvailFonts(NULL,NULL,AFF_MEMORY|AFF_DISK);
X   
X   afh=(struct AvailFontsHeader *)AllocMem(afhsize,MEMF_CLEAR); 
X      /*Gets a buffer large enough to hold all the font information*/
X      /*(AvailFonts(0,0,[type]) returns the amount of memory needed*/
X      /*to hold the information for all the fonts of type [type])  */
X
X   if(afh==NULL)  /*Could't allocate the memory*/
X   {
X      closeup();
X      ExitProg("Couldn't allocate enough memory!");
X   }
X   
X   AvailFonts(afh,afhsize,0xff); /*Get the info for fonts*/
X
X   TopazAttr.ta_Name="topaz.font"; /*Topaz is used if the user wants*/
X   TopazAttr.ta_YSize=8;           /*'readable' font names*/
X   TopazAttr.ta_Style=0;
X   TopazAttr.ta_Flags=FPF_ROMFONT|FPF_DISKFONT;
X   
X   if((Topaz=(struct TextFont *)OpenFont(&TopazAttr))==NULL)
X   {
X      FreeMem(afh,afhsize);
X      closeup();
X      ExitProg("Can't open Topaz 8 point font!!!!!!!!!!!!");
X   }
X    
X   numfonts=afh->afh_NumEntries;  /*Get the number of fonts*/
X   curfont=1;                     /*First font*/
X   af=(struct AvailFonts *)&afh[curfont];
X   while(curfont <= numfonts)
X      maxlen=PrintPage(&curfont,numfonts,af,columns,max,readable);
X         
X   maxlen=MAX_X/maxlen;
X   if(maxlen < 1)
X      maxlen=1;
X      
X   if(max)  /*If just finding the max length*/
X   {
X      printf("These fonts can be printed in %d column",maxlen);
X      if(maxlen==1)
X         printf(".\n");
X      else
X         printf("s.\n");
X   }
X   
X   if(both) /*If -b switch, do it again, but print this time*/
X   {
X      curfont=1;
X      af=(struct AvailFonts *)&afh[curfont];
X      while(curfont <= numfonts)
X         PrintPage(&curfont,numfonts,af,maxlen,FALSE,readable);
X   }
X
X   FreeMem(afh,afhsize);    /*Free up the allocated memory*/
X
X   CloseFont(Topaz);
X   closeup();
X}
X
Xint InterpretArgs(argc,argv,max,readable,cols,both)
Xint argc;
Xchar *argv[];
XBYTE *max,*readable,*both;
XWORD *cols;
X{
X   BYTE c;
X   int columns;
X   
X   *cols=1;    /*Load in some defaults*/
X   *max=FALSE;
X   *readable=FALSE;
X   *both=FALSE;
X   
X   for (c=1;c<argc;c++)    /*For each argument*/
X      switch(argv[c][1])   /*Letter after the slash*/
X      {
X         case 'b':      /*For -b switch, set both*/
X         case 'B':
X            *both=TRUE; /*AND max*/
X         case 'm':   /*Max columns mode*/
X         case 'M':   /*Just in case the user typed -T instead of -t*/
X            *max=TRUE;
X            break;
X         case 'r':   /*Readable*/
X         case 'R':
X            *readable=TRUE;
X            break;
X         case 'c':   /*Number of columns*/
X         case 'C':
X            if(argv[c][2]==NULL)
X               break;
X            stcd_i(&argv[c][2],&columns); /*Convert text to #*/
X            *cols=columns;
X            break;
X         default:
X            puts("I don't understand option:");
X            puts(argv[c]);
X            return(FALSE);
X      }
X   return(TRUE);
X}
X
X   /*Setup and print a page of fonts*/
XWORD PrintPage(curfont,numfonts,af,cols,findmax,readable)
XULONG *curfont;
XULONG numfonts;
Xstruct AvailFonts *af;
XBYTE findmax,readable;
XWORD cols;
X{
X   
X#define FLAGS af->af_Attr.ta_Flags
X#define Rp Wdw->RPort
X
X   BYTE Full=FALSE;
X   USHORT TextY=STARTINGROW;        /*Current Y coordinate*/
X   USHORT LastY;                    /*Last Y coordinate*/
X   static WORD max=0;
X   WORD length;
X   WORD column,StartX;
X   WORD ColWidth;
X   
X   char Master[256],fontstr[256],SizeStr[6],*string;
X   struct TextFont *tf;
X   struct TextAttr TFont;
X
X   ColWidth=MAX_X/cols; /*Get the # of pixels in each column*/
X   
X   string = (char *)&Master[1]; /*Initialize a pointer and*/
X   Master[0]='(';       /*a string*/
X   
X   SetAPen(Rp,0);
X   RectFill(Rp,0,0,MAX_X-1,MAX_Y-1);
X   SetAPen(Rp,1);
X   ClearScreen(Rp);     /*Clear the bitmap*/
X   af+=(*curfont-1);
X   
X   
X   for(column=StartX=0;column<cols && *curfont <= numfonts;
X         StartX=(++column*ColWidth)) /*Loop for each column*/
X   {
X      TextY=STARTINGROW;
X      Full=FALSE;
X      
X      while(!Full && (*curfont <= numfonts))
X      {      
X         /*If the font is:  not removed, goes from left to right*/
X         /*and is EITHER a disk or memory font, do nothing.*/
X         /*(This is partly from the RKM)*/
X         if((af->af_Attr.ta_Style==0) &&
X         !( ((FLAGS & FPF_REMOVED)||(FLAGS & FPF_REVPATH) ||
X               ((FLAGS & FPF_DISKFONT) && (af->af_Type & AFF_MEMORY))) ) )
X            if((af->af_Attr.ta_YSize) < (MAX_Y-(4+TextY))) /*If it'll fit...*/
X            {
X            
X               TFont.ta_Name=(char *)af->af_Attr.ta_Name;  /*Get the name*/
X               TFont.ta_YSize=af->af_Attr.ta_YSize; /*Get the size*/
X               TFont.ta_Style=af->af_Attr.ta_Style; /*Plain style*/
X               TFont.ta_Flags=FPF_ROMFONT|FPF_DISKFONT|
X                     FPF_PROPORTIONAL|FPF_DESIGNED;  /*Straight from RKM*/
X            
X               if((tf=(struct TextFont *)OpenDiskFont(&TFont))!=NULL)
X               {
X                     /*Position 'cursor' at baseline*/
X                  TextY+=(LastY=(tf->tf_Baseline));
X                  strcpy(fontstr,af->af_Attr.ta_Name);
X                  strcpy(string,fontstr);  /*Get font name*/
X                  string[strlen(string)-5]=NULL;
X                  strcat(string," ");      /*Tack on a space*/
X                  stcu_d(SizeStr,af->af_Attr.ta_YSize); /*Get the size in chars*/
X                  strcat(string,SizeStr);
X                  strcat(string," ");
X                  
X                  Move(Rp,StartX,TextY);               
X                  SetFont(Rp,tf);      /*Set the font*/
X                  Text(Rp,string,strlen(string));  /*Print the font info*/
X               
X                        /*Get the length of the text string in pixels*/
X                  length=TextLength(Rp,string,strlen(string));
X                  
X                  if(readable) /*If -r switch...*/
X                  {
X                     Master[strlen(Master)-1]=')';
X                     SetFont(Rp,Topaz);
X                     Text(Rp,Master,strlen(Master));
X                     length+=TextLength(Rp,Master,strlen(Master));
X                  }
X                  
X                  if(length > max)
X                     max=length; /*And store in max if the biggest*/
X   
X                     /*Add decender area to height*/
X                  TextY+=(LastY=(tf->tf_YSize-tf->tf_Baseline+2));
X                  CloseFont(tf);   /*Close the font*/
X               }
X               (*curfont)++;
X               af++;
X            }
X            else
X               Full = TRUE;
X         else     
X         {
X            (*curfont)++;
X            af++;
X         }  
X      }
X   }
X   
X   if(!findmax)   /*Print fonts if -m switch isn't set*/
X      DumpWindowToPrinter(Wdw,printerMsg,
X            (TextY+LastY>MAX_Y ? MAX_Y : TextY+LastY));
X   /*Add a little for serifs, but not more than MAX_Y*/
X   return(max); /*And return the max text length*/
X}
X
Xvoid DumpWindowToPrinter(Wdw,request,LastY)
Xstruct Window *Wdw;
Xunion printerIO *request;
XUSHORT LastY;
X{
X   struct ViewPort *Vp;
X   char FormFeed[2];
X   FormFeed[0]=0x0c;       /*Form feed character*/
X   FormFeed[1]=NULL;       /*NULL terminator*/
X   Vp=&Wdw->WScreen->ViewPort;
X   /*Set up for dumping the rastport*/
X   request->iodrp.io_Command=PRD_DUMPRPORT;
X   request->iodrp.io_RastPort=Rp;
X   request->iodrp.io_ColorMap=Vp->ColorMap;
X   request->iodrp.io_Modes=Vp->Modes;
X   request->iodrp.io_SrcX=0;
X   request->iodrp.io_SrcY=0;
X   request->iodrp.io_SrcWidth=MAX_X;
X   request->iodrp.io_SrcHeight=MAX_Y;
X   request->iodrp.io_DestCols=0;
X   request->iodrp.io_DestRows=0;
X   request->iodrp.io_Special=SPECIAL_FULLCOLS|
X            SPECIAL_FULLROWS;
X   DoIO(request); /*Do the actual dump*/
X   
X   /*Do a form feed*/
X   /*Perhaps this extra step is unnecessary, but I find it works better*/
X   /*with my setup (DeskJet+ and Epson LX-800) than leaving out this and*/
X   /*the SPECIAL_NOFORMFEED switch above*/
X#ifdef FFEW
X   request->ios.io_Command=CMD_WRITE;
X   request->ios.io_Data=(APTR)FormFeed;
X   request->ios.io_Length=-1;  /*-1 == NULL terminated string*/
X   DoIO(request); /*Do the form feed*/
X#endif
X}
X
END_OF_FILE
if test 9961 -ne `wc -c <'PrintFonts.c'`; then
    echo shar: \"'PrintFonts.c'\" unpacked with wrong size!
fi
# end of 'PrintFonts.c'
fi
if test -f 'PrintFonts.doc' -a "${1}" != "-c" ; then 
  echo shar: Will not clobber existing file \"'PrintFonts.doc'\"
else
echo shar: Extracting \"'PrintFonts.doc'\" \(2061 characters\)
sed "s/^X//" >'PrintFonts.doc' <<'END_OF_FILE'
X-----------------------------PrintFonts V1.10------------------------------
X
XPrintFonts V1.10 is Copyright (c)1989, 1990 by Dave Schreiber.  All rights
Xreserved.  PrintFonts is freely distributable, and must be distributed
Xwithout cost, except for costs related to copying, media, labels, taxes,
Xand shipping/handling.
X
X     PrintFonts will print out a list of all the fonts in your FONTS:
Xdirectory, with each font's name being printed in the font itself.  This
Xis meant to give you something that you can use as a sort of quick
Xreference guide to your fonts, i.e. you look at the printout to get an
Xidea of what font(s) you're interested in for a particular task, then
Xyou use something like ShowFont to see all the characters in that font.
X
X     PrintFonts' command line goes something like this:
X     
X       1> PrintFonts [options] 
X
Xwhere the options are:
X
X       -c# -- Print the fonts in # columns.
X       
X       -m  -- Goes through the fonts and determines the maximum number of
X              columns that can be printed on one page, but doesn't print
X              them.
X              
X       -b  -- Combines both -m and -c, i.e. figures out how many columns
X              can be printed on one page, then print out all the fonts
X              using that many columns.
X
X       -r  -- Print out each font's name twice.  First in the font itself,
X              then in Topaz.  This is so that if you have fonts that don't
X              use Roman letters (such as Cairo, Music, etc.), you'll still
X              be able to tell what they are.  Note that this reduces the
X              number of columns PrintFonts will be able to squeeze onto
X              each page.
X              
X'1> PrintFonts ?' will give you a summary of these options.
X
X     That's it.  Any questions, comments, praise, etc. can be sent to me
Xat the address(es) below.  Enjoy.
X
X-Dave Schreiber
X
Xdavids@slugmail.ucsc.edu (prefered, but flakey.  If it doesn't work, try:
Xdavids@ucscb.ucsc.edu (school year) or
Xdavids@cup.portal.com (summer, school vacations, etc))
X
X              
END_OF_FILE
if test 2061 -ne `wc -c <'PrintFonts.doc'`; then
    echo shar: \"'PrintFonts.doc'\" unpacked with wrong size!
fi
# end of 'PrintFonts.doc'
fi
if test -f 'PrintFonts.uu' -a "${1}" != "-c" ; then 
  echo shar: Will not clobber existing file \"'PrintFonts.uu'\"
else
echo shar: Extracting \"'PrintFonts.uu'\" \(17391 characters\)
sed "s/^X//" >'PrintFonts.uu' <<'END_OF_FILE'
Xbegin 664 PrintFonts
XM```#\P`````````'``````````8```8#```"G0```E0````,````*0```%4`+
XM```>```#Z0``!@,D2"0`2?D`````1_D```:4<@`@/````*]@`B;!4<C__"QX]
XM``0I3@;,*4\&U$*L!M`F;@$4<``B/```,`!.KO[.*6L`F`;(2JL`K&<``'`@D
XM#Y"O``0&@````(`I0`:880`!+B!K`*S1R-'((F@`$-/)T\D@`G(`$ADI20;<]
XMT(%2@$)G4H`"0/_^G\!5@$)W"``@`E.`U($?L@``(`!3@E'(__8?O``@(`!3>
XM@A^Q(``@`%'*__@B3R\)8```>"EK`#H&F'!_4H#1K`:880``PD'K`%Q.KOZ`2
XM0>L`7$ZN_HPI0`;0+P`D0"`J`"1G$BQL"4`@0"(H```I00;(3J[_@B(J`"!G:
XM&B0\```#[4ZN_^(I0`;89PKEB"!`)V@`"`"D(&P&T"\(2&P&E"!H`"0I:``$O
XM!MQ.N@!X3KH%.'``8`0@+P`$+P`@+`;`9P0@0$Z03KH5I"QX``0B;`E`3J[^R
XM8DZZ`$Y*K`;09QHB+`;89P1.KO_<+'@`!$ZN_WPB;`;03J[^AB`?+FP&U$YUL
XM<&1@M$/Z`!!P`$ZN_=@I0`E`9^Q.=61O<RYL:6)R87)Y`$YU3G5(YP<P+B\`P
XM&"9O`!PL+P`@+P=.NA006$\D0"`*9@1P_V`V""H``P`#9Q!(>``"0J<O!TZZB
XM#:Q/[P`,+P8O"R\J``1.N@\83^\`#"H`2JP&K&<$</]@`B`%3-\,X$YU````5
XM``````!P84Y5_\1(YR<P)F\`7"1O`&!^`'P`>@!P`!M\`"#_^W(`*T'_]G3_\
XM*T+_\D'M_]`;0/_Q&T#__"M!_^0K0?_H*TC_S$H39T)P`!`3<AA=06LXL'L0[
XM"&;V3OL0!``C8```(``@8```%@`K8```#``M8````GX!8`Y\`6`*>@%@!AM\L
XM``'__%*+8+H0$W(PL`%F!E*+&T'_^W`JL!-F$"!20^@`!"2)*U#_]E*+8`Y(L
XM;?_V+PM.N@I,4$_7P!`3<BZP`68F4HMP*K`39A`@4D/H``0DB2M0__)2BV`.E
XM2&W_\B\+3KH*'E!/U\`0$W)LL`%F"AM\``'_\5*+8`AR:+`!9@)2BQ`;<@`2T
XM`!M`__!P,%U`:P`"5+)[``AF]$[[``0`8V```BH`<V```>@`6&```7X`>&``>
XM`7@`<&```5X`;V```0P`=6```.(`9&````)*+?_Q9PP@4D/H``0DB2`08`H@C
XM4D/H``0DB2`0*T#_[&P*<@%$K?_L*T'_Z$JM_^AG!'`M8`I*!F<$<"M@`G`@D
XM&T#_T'``$`8B+?_H@H!P`!`%@H!G"%*M_\Q2K?_D+RW_["\M_\Q.N@BN4$\K`
XM0/_(("W_\DJ`:@9R`2M!__(@+?_((BW_\I*`2.T``O_$;RX@;?_,(DC3P6`"$
XM$MA3@&3Z<``0+?_[(BW_Q"!M_\Q@`A#`4X%D^B`M__(K0/_(T:W_Y$'M_]`K)
XM2/_,2@=G``%0&WP`(/_[8``!1DHM__%G#"!20^@`!"2)(!!@"B!20^@`!"2)$
XM(!`K0/_L8`#_8DHM__%G#"!20^@`!"2)(!!@"B!20^@`!"2)(!`K0/_L2BW_3
XM_&<2(&W_S!#\`#!R`2M!_^0K2/_,+P`O+?_,3KH("%!/*T#_R&``_R@;?``P6
XM__L@+?_R2H!J!G`(*T#_\DHM__%G#"!20^@`!"2)(!!@"B!20^@`!"2)(!`KQ
XM0/_L2BW__&<6(&W_S!#\`#`0_`!X<@(K0?_D*TC_S"\`+RW_S$ZZ!^103RM`&
XM_\AP6+`M__!F`/Z^2&W_T$ZZ!H183V``_K`@4D/H``0DB2)0*TG_S&8(0?H`P
XMW"M(_\P@;?_,2AAF_%.(D>W_S"M(_^0@+?_R2H!K*K'`;R8K0/_D8"!P`2M`]
XM_^0@4D/H``0DB2`0&T#_T$(M_]%@!G``8```C"`M_^0B+?_VLH!L"'0`*T+_&
XM]F`$D:W_]DH'9S93K?_D;1AP`"!M_\P0&"\`*TC_S"!M`!!.D%A/8.)3K?_V9
XM;4AP`!`M__LO`"!M`!!.D%A/8.A3K?_V;1)P`!`M__LO`"!M`!!.D%A/8.A3\
XMK?_D;1AP`"!M_\P0&"\`*TC_S"!M`!!.D%A/8.(@"TS?#.1.74YU``!.5?_VB
XM2.<!,"9O`!XD;P`B*VT`$/_V'AI*!V<T<"6^`&8BL!)F!%**8!HO"TAM__8OY
XM"F$`^\Q/[P`,*T#_^F<$)$!@TG``$`<O`$Z36$]@QDS?#(!.74YU3E7_\$CGK
XM(3(F;P`L#*P````@"*YL``"&$!-R(+`!9PQR";`!9P9R"K`!9@12BV#H2A-G&
XM:"`L"*[E@%*L"*Y![`BVT<`D2'`BL!-F)E*+)(M*$V<*<"*P$V<$4HM@\DH3R
XM9@Q(>``!3KH/R%A/8)Y"&V":)(M*$V<8$!-R(+`!9Q!R";`!9PIR"K`!9P12]
XMBV#D2A-F`F`&0AM@`/]R2JP(KF8&(&P&T&`$0>P(MBE("+)*K`BN9GQ!^@$D*
XM0^P(="+8(M@BV"+8,I`B;`;0(&D`)$AX`"@O*``$2&P(=$ZZ!)I/[P`,0>P(^
XM="(()#P```/N+&P)0$ZN_^(I0`<X*4`'0'($*4$'/"E`!T@I00=$Y8"3R2QXZ
XM``0K0/_P3J[^VB!M__`B0"-H``@`I'X`*T#_]&`J+&P)0$ZN_\HI0`<X3J[_V
XMQ"E`!T!!^@"F(@@D/````^U.KO_B*4`'2'X$(`<`0(`!@:P'-"`'`$"``H&L,
XM!SP`K```@`,'1$JL!/AG!'``8`8@/```@``N`$*L!*P@!P!```$I0`2H<`$IO
XM0`3.(`<`0``"*4`$RG`"*4`$\"`'`$``@"E`!.Q!^@ON*4@&Q"\L"+(O+`BN6
XM3KH`,D*73KH(>$SM3(3_W$Y=3G5C;VXZ,3`O,3`O,S(P+S@P+P`J````````,
XM`````````$[Y```"8````````````````````````````````'!A+PLF;P`(1
XM2JL`%&<,""L``P`;9@1P`&`V+RP&D$ZZ!_I83R=```0G0``02H!F"G`,*4`)H
XM/'#_8!8G;`:0`!1P\\&K`!AP`"=```PG0``()E].=0``````````````````?
XM3E7_[$CG+Q`N+P`T)F\`."@'<#'`JP`89P9P_V```G`(*P`'`!I6P$0`2(!(9
XMP"P`2JL`%&8``(0(*P`"`!MF>G``)T``#'+_OH%G``)"+PM.NO].6$]*@&<,`
XM".L`!0`;</]@``(J".L``0`;2@9G#B`K`!0B`$2!)T$`#&`(("L`%"=```Q3I
XMJP`,;18@:P`$0^@``2=)``0@!Q"`<@`2`&`2(`=R`!(`+PLO`6$`_U)03R(`>
XM(`%@``'6""L``@`;9UAP_[Z`9@9P`&```<(@!QM`__]*!F<B<@J^@68<<@(O,
XM`4AZ`;(O*P`<*T'_\$ZZ]]1/[P`,*@!@&G(!+P%(;?__+RL`'"M!__!.NO>XF
XM3^\`#"H`?O]@``#@".L``0`;2@9G4G#_OH!G3%2K``QR"KZ!9B8@:P`$0^@`U
XM`2=)``00O``-(BL`#$J!:PHO"R\`80#^KE!/4JL`#"!K``1#Z``!)TD`!"`';
XM$(`B*P`,2H%K``$<?O\@*P`$D*L`$"M`__!G<@@K``8`&F=22'@``D*G+RL`7
XM'$ZZ!0Q/[P`,*T#_[$H&9SA3K?_L;3)"IR\M_^PO*P`<3KH$[$AX``%(;?_]>
XM+RL`'$ZZ`ZA/[P`82JP&K&8*$"W__7(:L`%GR"\M__`O*P`0+RL`'$ZZ]MA/,
XM[P`,*@!@`GH`</^Z@&8(".L`!0`;8`RZK?_P9P8(ZP`$`!M*!F<.(BL`%"0!W
XM1((G0@`,8!@(*P`"`!MG"'(`)T$`#&`((BL`%"=!``P@:P`0)T@`!+Z`9RY3)
XMJP`,;18@:P`$0^@``2=)``0@!Q"`<@`2`&`2(`=R`!(`+PLO`6$`_9!03R(`:
XM<##`JP`89P1P_V`,</^X@&8$<`!@`B`$3-\(]$Y=3G4-"@`````N;`;43KH&>
XM\DAY````%$ZZ!2```````````'!A2.<@,"9O`!`D2TH29R1P`!`20>P%C0@P(
XM``$(`&<*<@`2`'0@DH)@!'(`$@`4@5**8-@@"TS?#`1.=0``````````<&%._
XM5?_X2.<#,"9O`"`D;P`D+B\`*"!*2AAF_%.(D<HL""!+2AAF_%.(D<L@"")+R
XMT\`K2?_XO(=C`BP'(`8@2F`"$MA3@&3Z(&W_^$(P:``@"TS?#,!.74YU(&\`C
XM!"`(2AAF_%-(D<`@"$YU```@;P`((F\`!"`)$MAF_$YU(F\`""!O``0@"$H8A
XM9OQ3B!#99OQ.=0``("\`""!O``1.5?_T(D]R"DZZ!O@&00`P$L%*@&;P(`D0A
XMX;_)9OI"$)"/3EU.=0``("\`""!O``1.5?_T(D\B``)!``<&00`P$L'FB&;P3
XM(`D0X;_)9OI"$)"/3EU.=0``,#$R,S0U-C<X.6%B8V1E9B`O``@@;P`$0^\`?
XM!#(``D$`#Q+[$-SHB&;R(`DB#UB!$.&RB6;Z0A"0@4YU(&\`!")(<@!P`"\"^
XM#!``*V<&#!``+68"4D@0&`0``#!M$@P```EN#"0!Y8'2@M*!TH!@Y@P1`"UFC
XM`D2!)!\@"%.`(&\`"""!D(E.=4Y5_^A(YP$R+B\`-$J';@9P_V```-)P"+Z`R
XM9`(N`"`'5H`N``)'__PD;0`((&T`"-''WZP$C$/L!(@F42M(__`K2?_T(`MGQ
XM``"0($L@*P`$T<`K2/_L(FW_\+?)8Q`DBR5'``0L;?_T+(IP`&!XM\EF&BQ32
XM)(X@*P`$(@#2AR5!``0L;?_T+(IP`&!:M<AD")^L!(QP_V!.M<AF+$J39PX@T
XM4[/(8PB?K`2,</]@.-^K``1*DV<.L]-F"B`I``31JP`$)I%P`&`>*TO_]"MMD
XM_^S_Z"938`#_;B!M__0@BD*2)4<`!'``3-],@$Y=3G4``````````'!A2.<'B
XM,"XO`!@F;P`<+"\`("\'3KH'9%A/)$`@"F8$</]@'B\&+PLO*@`$3KH#3$_OG
XM``PJ`$JL!JQG!'#_8`(@!4S?#.!.=0``2.<!$"9O``Q^`!X;2H=G,E.L!+YM)
XM%B!L!+9#Z``!*4D$MB`'$(!R`!(`8-P@!W(`$@!(;`2R+P%.NOH.4$\B`&#&G
XM4ZP$OFT6(&P$MD/H``$I202V<`H0@'(`$@!@$$AL!+)(>``*3KKYX%!/(@`@6
XM`4S?"(!.=0``+P<N+P`(4JP).%.L!+YM%B!L!+9#Z``!*4D$MB`'$(!R`!(`N
XM8!0@!W(`$@!(;`2R+P%.NOF<4$\B`"X?3G5.50``+PLF;P`,0JP).$AM``PO$
XM"TAZ_ZQ.NO:D2&P$LDAX__].NOEL("P)."9M__Q.74YU``!(YP\0+B\`&"PO6
XM`!PJ+P`@+P=.N@8P6$\F0"`+9@1P_V`>+P4O!B\K``1.N@&<3^\`#"@`2JP&R
XMK&<$</]@`B`$3-\(\$YU``````````!P84CG`S`N+P`42H=N!G``8```I'`('
XMOH!D`BX`(`=6@"X``D?__$7L!(@F4B`+9T`@*P`$L(=M,K"'9@P@4R2(GZP$$
XMC"`+8&X@*P`$D(=R"+"!918@2]'')(@D2"23)4``!)^L!(P@"V!,)$LF4V"\"
XM(`<B+`3\T(%3@$ZZ`OHB+`3\3KH"TBP`4(8@!E:`+``"1O_\+P9.N@:N6$\FR
XM0"`+9Q(O!B\+3KK\WBZ'80#_5%!/8`)P`$S?#,!.=0``````````<&$O!RXOM
XM``@O!TZZ_S)83RX?3G4``$CG`Q`N+P`01^P$D"`+9S0(*P`"`!MF*`@K``$`\
XM&V<@("L`!)"K`!`L`$J&9Q(O!B\K`!`O*P`<3KKPOD_O``PF4V#(+P=.N@6@*
XM6$],WPC`3G4``$CG-Q`N+P`<)F\`("PO`"1*K`;$9P1.N@3X0JP&K"(')`LF-
XM!BQL"4!.KO_0*@!P_[J`9@Y.KO]\*4`&K'`%*4`)/"`%3-\([$YU``!(YS\`C
XM+B\`'"PO`"`J+P`D2JP&Q&<$3KH$K$*L!JP@!5.`(@<D!B8`+&P)0$ZN_[XHG
XM`'#_N(!F#DZN_WPI0`:L<!8I0`D\(`4,@`````)G%@R``````6<(2H!F&"`&[
XM8!0@!-"&8`XB!W0`=@`L;`E`3J[_ODS?`/Q.=0``2.<W$"XO`!PF;P`@+"\`R
XM)$JL!L1G!$ZZ!#!"K`:L(@<D"R8&+&P)0$ZN_]8J`'#_NH!F#DZN_WPI0`:LZ
XM<`4I0`D\(`5,WPCL3G4``$CG`!(F;P`,2JL`"F<*(DLL>``$3J[^F!=\`/\`U
XM"'#_)T``%'``$"L`#RQX``1.KOZP(DMP(DZN_RY,WT@`3G4O!RXO``A*K`;$W
XM9P1.N@.N(@<L;`E`3J[_W'``+A].=4Y5_[`O#DJL!N!F$D/Z`(AP`"QX``1.3
XMKOW8*4`&X'``(&P&W!`H__]#[?^P8`(2V%.`9/IP`"!L!MP0*/__0C4(L$'MS
XM_[`I2`4,2'@`*$AX`/IP`"\`+P!(;`4H<@`O`4AL!10O`4ZZ`X1(>``43KH#/
XML"QM_ZQ.74YU*BH@4W1A8VL@3W9E<F9L;W<@*BH``$58250``&EN='5I=&EOC
XM;BYL:6)R87)Y`````````````````$CG,``D`"8!2$)(0\3!QL#`P=1#2$)"_
XM0M""3-\`#$YU2H!J```>1(!*@6H```Q$@6$``"!$@4YU80``&$2`1(%.=4J!#
XM:@``#$2!80``!D2`3G4O`DA!-`%F```B2$!(04A"-`!G```&A,$P`DA`-`"$3
XMP3`"2$(R`B0?3G4O`W80#$$`@&0```;AF5%##$$(`&0```;IF5E##$$@`&0`B
XM``;EF55#2D%K```&XYE30S0`YJA(0D)"YJI(0X#!-@`P`C0#2$'$P9""9```Y
XM"%-#T(%D_G(`,@-(0^>X2$#!028?)!].=4Y5_YY(YS,R?@`@;`;<'BC__W!/Z
XMOH!O`BX`(`=#[?^O8`(2V%.`9/I"-7BOD\DL>``$3J[^VB9`2JL`K&=,("L`:
XMK.6`)$`L*@`X2H9F!"PK`*!*AF<T(@9!^@"R)`AV"RQL"4!.KO_0($=2AR`(U
XM&[P`"@BO(@9![?^O)`@F!RQL"4!.KO_0</]@3DJL!N!F$D/Z`(9P`"QX``1.[
XMKOW8*4`&X$'M_Z\I2`5<2'@`/$AX`/IP`"\`+P!(;`5X2&P%9$AL!5!"ITZZ,
XM`8Q/[P`@4X!G!'#_8`)P`$S?3,Q.74YU*BH@57-E<B!!8F]R="!297%U97-T/
XM960@*BH``$-/3E1)3E5%``!!0D]25``J*BH@0G)E86LZ(`!I;G1U:71I;VXN(
XM;&EB<F%R>0```$CG`S(F;P`8+B\`''#_+'@`!$ZN_K8L``P&`/]F!'``8&9P3
XM(B(\``$``4ZN_SHD0"`*9@IP`!`&3J[^L&!()4L`"B`'%4``"15\``0`"$(J5
XM``X51@`/D\E.KO[:)4``$"`+9P@B2DZN_IY@&D'J`!@E2``40>H`%"5(`!Q"#
XMJ@`8%7P``@`@(`I,WTS`3G4``"\'+B\`"'``*4`&K$J':R*^K`1X;!P@!^>`9
XM0>P'-$JP"`!G#B`'YX!![`<TT<`@"&`(<`DI0`D\<``N'TYU``````````!P-
XM84CG`0)P`"(\```P`"QX``1.KO[.+@`"AP``,`!*AV8$<`!@($JL!L1G&"!L>
XM!L1.D$J`9@1P`&`,2'@`%$ZZ`$983R`'3-]`@$YU8;1.=0``2.<P,BQL!N`@=
XM;P`8(F\`'"1O`"`F;P`D("\`*"(O`"PD+P`P)B\`-$ZN_J1,WTP,3G4``$CGS
XM!P`N+P`0("P$>%.`+`!*1FLP(`9(P.>`0>P'-"HP"`!*!6<:"`4``F84(`9(,
XMP.>`0>P'-"\P"`1.NON$6$]31F#,+P=.NNI66$],WP#@3G4``$CG`#(F;`E$@
XM(`MG%"13(DL@*P`(+'@`!$ZN_RXF2F#HD<@I2`E(*4@)1$S?3`!.=4CG`3(N)
XM+P`4<`S>@"`'<@`L>``$3J[_.B9`(`MF!'``8#HG1P`(1>P)1"!J``0G2``$-
XMD<@FB$J29@(DBTJJ``1G!B)J``0BBR5+``1*K`1\9@0I2P1\0>L`#"`(3-],[
XM@$YU``````````````````!(YP`2)F\`#!=\`/\`"#!\__\G2``4)T@`&'``C
XM,"L`$B)++'@`!$ZN_RY,WT@`3G5(YP$R)F\`%"XO`!@@"V8$<`!@+"`'(CP`W
XM`0`!+'@`!$ZN_SHD0"`*9Q05?``%``A"*@`))4L`#B`'-4``$B`*3-],@$YU+
XM``````/L`````0````$```AN`````@````(````,````!@````````/R```#U
XMZ0```IV_[`:890`)>$*G2&P`EDZZ"=I03RE`!N!*@&8*2&P`J&$``AQ83T*GH
XM2&P`PDZZ";Q03RE`!N1*@&8*2&P`U&$``?Y83T*G2&P`Z$ZZ"9Y03RE`!NA*R
XM@&8*2&P`]&$``>!83T*G2&P!"$ZZ"8!03RE`!NQ*@&8*2&P!&F$``<)83V$`G
XM`.)(;`!&3KH(^EA/*4`'!&8*2&P!-&$``:183R\L!P1.N@DH*6P'!`"$2&P'%
XM#$AL`&9A``!>2&P`9DZZ"/!/[P`0*4`'"&84+RP'!$ZZ"89(;`%.80`!9E!/F
XM8#0O`$ZZ"59R#RZ!+P$O`4*G+P!.N@DZ+JP'"$ZZ"3YR`"Z!+P$O`4AX``$O&
XM`$ZZ"2!/[P`D3G6_[`:890`(9$CG`#`F;P`,)&\`$$AX`M!(>`/`2'@``2\*B
XM3KH(@DAX`M!(>`/`3KH(W$_O`!@E0``(9@I(;`%H80``Z%A/)TH`(DS?#`!.K
XM=;_L!IAE``@40J=(;`&*3KH(!%!/*4`&\&8*2&P!F&$``+I83TAX`#XO+`;P'
XM3KH(1E!/*4`'`&8*2&P!MF$``)Q83W``+P`O+`<`+P!(;`'43KH(1D_O`!!*+
XM@&<*2&P!Y&$``'A83TYUO^P&F&4`!ZPO+`;T3KH'["ZL!P!.N@@.2'@`/B\L6
XM!P!.N@@@+JP&\$ZZ"``NK`<(3KH(1DAX`M!(>`/`+RP'%$ZZ"$(NK`<$3KH(H
XM0"ZL!NQ.N@A$+JP&Z$ZZ"#PNK`;D3KH(-"ZL!N!.N@@L3^\`&$YUO^P&F&4`_
XM!SHO"R9O``@O"TZZ!X)(>`!D3KH'PE!/)E].=4Y5_^2_[`:890`'%$CG)Q`NB
XM+0`()FT`#'`"OH!F;"!K``1P/[`09F)(;`("3KH'1$AL`A1.N@<\2&P"2DZZ$
XM!S1(;`):3KH'+$AL`G9.N@<D2&P"GDZZ!QQ(;`+23KH'%$AL`O).N@<,2&P#)
XM*DZZ!P1(;`-(3KH&_$AL`WQ.N@;T0I=.N@<V3^\`+$AM_^U(;?_J2&W_[DAM9
XM_^\O"R\'80`!QD_O`!A*@&8*2'@#Z$ZZ!PI83S`M_^IR`;!!;!)(;`.H3KH&6
XMKDAX!]!.N@;N4$]A`/S.2'@``W``+P`O`$ZZ!J0L`"Z\``$``"\&3KH'($_O'
XM`!`K0/_\2H!F#F$`_FY(;`/,80#^V%A/2'@`_R\&+RW__$ZZ!FY![`/N*4@&^
XM^#E\``@&_$(L!OX9?``#!O](;`;X3KH&J$_O`!`I0`;T2H!F&B\&+RW__$ZZ]
XM!A1A`/X<2&P#^F$`_H9/[P`,>@`@;?_\.A!P`2M`__#0@-'`*TC_Y"`M__"PO
XMA6(T,"W_ZDC`$BW_[TB!2,$4+?_N2()(PB\"+P$O`"\M_^0O!4AM__!A``'&Y
XM3^\`&#M`_^A@Q#`\`\!(P('M_^@[0/_H<@&P06P$.T'_Z$HM_^]G,#`M_^A()
XMP"\`2&P$)$ZZ!?903W`!L&W_Z&8,2&P$3$ZZ!>183V`*2&P$4$ZZ!=A83THME
XM_^UG0G`!*T#_\-"`(&W__-'`*TC_Y"`M__"PA6(H,"W_Z$C`$BW_[DB!2,$O3
XM`4*G+P`O+?_D+P5(;?_P80`!+$_O`!A@T"\&+RW__$ZZ!1(NK`;T3KH%$&$`!
XM_1),[0CD_]!.74YU3E7_^+_L!IAE``2N2.<#,"XM``@F;0`,)&T`$"!M`!@P%
XMO``!<``4@"!M`!00@"!M`!P0@'P!(`9(@$C`L(=L``"X$`9(@"(`2,'E@2!S[
XM&`!2B!`02(`$0`!"9R130&<X!$``"F<B6T!G)`1``!!G$%-`9R0$0``*9PY;A
XM0&<08%0@;0`<$+P``12\``%@9"!M`!00O``!8%H0!DB`(@!(P>6!(',8`%2(4
XM2A!G1A`&2(`B`$C!Y8$@<Q@`5(A(;?_Z+PA.N@144$\@+?_Z(&T`&#"`8!Y("
XM;`143KH$,A`&2(`B`$C!Y8$NLQ@`3KH$('``8`A2!F``_T!P`4SM#,#_Z$Y=M
XM3G5.5?W<O^P&F&4``ZI(YR<P)FT`""XM``PD;0`0/"T`%AHM`!M"+?__0FW__
XM_#`\`\!(P('&0>W^\QM\`"C^\D*G(FP'""\I`#([0/_R*TC]Z$ZZ`WI(>`+/R
XM2'@#OW``+P`O`"!L!P@O*``R3KH#TDAX``$@;`<(+R@`,DZZ`U`@;`<(+J@`"
XM,DZZ`]1/[P`D(!-3@'(*3KH#_-7`<``[0/_V.T#_]#`M__:P1FP``C0@$["'S
XM8@`"+$)M__Q"+?__2BW__V8``@@@$["'8@`"`$HJ``AF``'N""H`!P`)9@`!4
XMY`@J``(`"68``=H(*@`!``EG"@@J`````68``<AP`#`M__PB/````M"2@%F!5
XM<``P*@`&L(%L``&B*VH``OW<.VH`!OW@&VH`"/WB&WP`8_WC2&W]W$ZZ`P)8!
XM3RM`_>1*@&<``6P@0#MH`!K_^C(M__K3;?_\+RH``DAM_?).N@-`2&W]\B\ML
XM_>A.N@,T+JW]Z$ZZ`FP@;?WH0C`(^TAL!'(O"$ZZ`L9P`#`J``8N@$AM_>Q.<
XMN@(^2&W]["\M_>A.N@*J2&P$="\M_>A.N@*>,"W_]$C`<@`R+?_\+H$O`"!LP
XM!P@O*``R3KH!_BZM_>0@;`<(+R@`,DZZ`A(NK?WH3KH!_BZ`+RW]Z"!L!P@O;
XM*``R3KH"CBZM_>A.N@'D+H`O+?WH(&P'""\H`#).N@',3^\`2#M`__A*+0`?5
XM9V9(;?[R3KH!O$'M_O'1P!"\`"DNK`;T(&P'""\H`#).N@&N2&W^\DZZ`9HN_
XM@$AM_O(@;`<(+R@`,DZZ`BI(;?[R3KH!@"Z`2&W^\B!L!P@O*``R3KH!:$_O1
XM`"`R+?_X2,'2@#M!__@P+?_XL&P$<&\$.4`$<"!M_>0P*``4D&@`&E1`T6W_%
XM_"\(.T#_^DZZ`5)83U*3U/P`"F``_@@;?``!__]@`/W^4I/4_``*8`#]]%)M.
XM__8P+?_VP>W_\CM`__1@`/W&2@5F/'``,"W__'(`,BW_^B0`U($,@@```M!O"
XM""0\```"T&`*=``T`'``,`'4@"\"+RP'`"\L!PAA```23^\`##`L!'!,WPSDF
XM3EU.=4Y5__B_[`:890``?DCG`#`F;0`()&T`#!M\``S_^D(M__L@:P`N0^@`T
XM+#5\``L`'"5K`#(`("5I``0`)'``,"D`("5``"AP`#5``"PU0``N-7P#P``PJ
XM-7P"T``R<``E0``T)4``.#5\``P`/"\**TG__$ZZ`"!,[0P`__!.74YU``!.4
XM^0``%41.^0``"XA.^0```"A.^0```'A.^0```(Q.^0```.A.^0``#'Q.^0``R
XM`!1.^0``#$!.^0```#Q.^0```$Q.^0```0!.^0```!A.^0```'A.^0```%!.(
XM^0``#J1.^0``%\1.^0``#1A.^0```!1.^0```(Q.^0```&1.^0``$B!.^0``2
XM`$1.^0````!.^0```,A.^0``%Y1.^0``#&1.^0``$+A.^0```2!.^0````!./
XM^0```*A.^0``#UI.^0```&1.^0```&1.^0```!1.^0```#!.^0```3A.^0```
XM``!.^0``$S1.^0```#!.^0``#%1.^0````````/L````#@````````F>```*A
XM%@``":H```IJ```*7@``">````HT```*'```"=0```GX```*$```"=H```EZ0
XM```)@`````(````#```*!```">8````'````!```"8P```G"```*<```"F0`>
XM``GR```)_@``">P````-````!0``":0```I,```)M@``"9(```HH```*"@``L
XM"9@```I````*4@``"<@```HB```)O```"BX````&````!@``"D8```HZ```*K
XM6```";````G.```)A@````````/R```#Z@```:50<FEN=$9O;G1S(%8Q+C$P,
XM(*DQ.3@Y+"`Q.3DP(&)Y($1A=F4@4V-H<F5I8F5R+B`@06QL(%)I9VAT<R!2?
XM97-E<G9E9"X```````*``,@``0`!@```#P`````````````````````````*!
XM`H``OO__````````#(````````````````````````````````````````]I"
XM;G1U:71I;VXN;&EB<F%R>0!#86XG="!O<&5N(&EN='5I=&EO;F)A<V4A`&=RT
XM87!H:6-S+FQI8G)A<GD``$-A;B=T(&]P96X@1V9X0F%S92$`9&]S+FQI8G)AY
XM<GD`0V%N)W0@;W!E;B!$;W-"87-E(0!D:7-K9F]N="YL:6)R87)Y``!#86XG*
XM="!O<&5N($1I<VMF;VYT0F%S92$``$-O=6QD;B=T(&]P96X@=&AE('-C<F5EI
XM;B$`0V]U;&1N)W0@;W!E;B!T:&4@=VEN9&]W(0!#;W5L9&XG="!A;&QO8V%T;
XM92!E;F]U9V@@;65M;W)Y(0``;7DN<')I;G0N<&]R=`!#;W5L9&XG="!A8V-E%
XM<W,@=&AE('!R:6YT97(A``!#;W5L9&XG="!A8V-E<W,@=&AE('!R:6YT97(A$
XM``!P<FEN=&5R+F1E=FEC90``0V]U;&1N)W0@86-C97-S('1H92!P<FEN=&5RY
XM(0``4')I;G1&;VYT<R!6,2XQ,```J3$Y.#DL(#$Y.3`@8GD@1&%V92!38VAR<
XM96EB97(N("!!;&P@<FEG:'1S(')E<V5R=F5D+@``1F]R;6%T(&9O<B!U<V4ZD
XM`"`@,3X@(%!R:6YT1F]N=',@6V]P=&EO;G-=``!7:&5R92!O<'1I;VYS(&%R$
XM92!A;GD@;V8@=&AE(&9O;&QO=VEN9SH`("`M<CH@(%!R:6YT(&5A8V@@9F]N(
XM="=S(&YA;64@:6X@82!R96%D86)L92!F;W)M870``"`M8R,Z("!5<V4@(R!N+
XM=6UB97(@;V8@8V]L=6UN<P``("`M;3H@($1E=&5R;6EN92!T:&4@;6%X(&YUL
XM;6)E<B!O9B!C;VQU;6YS('1H870@8V%N(&)E```@("`@("`@=7-E9"!A;F0@*
XM9&\@;F]T('!R:6YT+@`@("UB.B`@1&5T97)M:6YE<R!T:&4@;6%X:6UU;2!NE
XM=6UB97(@;V8@8V]L=6UN<R!A;F0`("`@("`@('!R:6YT<R!U<VEN9R!T:&%T;
XM(&YU;6)E<B!O9B!C;VQU;6YS``!9;W4@;75S="!H879E(&%T(&QE87-T(&]N4
XM92!C;VQU;6XA``!#;W5L9&XG="!A;&QO8V%T92!E;F]U9V@@;65M;W)Y(0``9
XM=&]P87HN9F]N=```0V%N)W0@;W!E;B!4;W!A>B`X('!O:6YT(&9O;G0A(2$A]
XM(2$A(2$A(2$`5&AE<V4@9F]N=',@8V%N(&)E('!R:6YT960@:6X@)60@8V]L8
XM=6UN`"X*``!S+@H`22!D;VXG="!U;F1E<G-T86YD(&]P=&EO;CH`````(``@#
XM````````*``````````````````````````````$L@``````````````````>
XM````````````````````````!-0`````````````````````````````````8
XM`````````````````````````````````````````````````````````(```
XM```$`/__````#@`.````````````````__\````$``0````````2^@``!0#_T
XM_P````0`!````````!,0`````/__````#@`.````````%/@`````__\````$2
XM``0`````````````!3S__P````0`!````````!44`````/__````!``$````Z
XM````%1X``````"`@("`@("`@("@H*"@H("`@("`@("`@("`@("`@("`@2!`0#
XM$!`0$!`0$!`0$!`0$(2$A(2$A(2$A(00$!`0$!`0@8&!@8&!`0$!`0$!`0$!W
XM`0$!`0$!`0$!`0$0$!`0$!""@H*"@H("`@("`@("`@("`@("`@("`@("`A`0_
XM$!`@("`@("`@("`@*"@H*"@@("`@("`@("`@("`@("`@("!($!`0$!`0$!`0`
XM$!`0$!`0A(2$A(2$A(2$A!`0$!`0$!"!@8&!@8$!`0$!`0$!`0$!`0$!`0$!.
XM`0$!`1`0$!`0$(*"@H*"@@("`@("`@("`@("`@("`@("`@("$!`0$"``````X
XM``(````#[`````4````````%A```!7````5(```%-```!2`````%`````@``F
XM!6````4D```$L@``!)````!:`````````_(```/I````#"\.+'D```;L(&\`"
XM"$ZN_^(L7TYU+PXL>0``!NP@;P`(3.\``P`,3J[_W"Q?3G4``````^P````"^
XM`````@```!@````$`````````_`````#7T%V86EL1F]N=',`````%`````1?A
XM3W!E;D1I<VM&;VYT``````````````````/R```#Z0```"DO#BQY```&S$SOM
XM``,`"$ZN_SHL7TYU```O#BQY```&S")O``@@+P`,3J[_+BQ?3G4O#BQY```&5
XMS")O``A.KOYB+%].=2\.+'D```;,(&\`"$SO`@$`#"(O`!1.KOY$+%].=0``5
XM+PXL>0``!LPB;P`(3J[^/BQ?3G4O#BQY```&S")O``A.KOXX+%].=2\.+'D`"
XM``;,(F\`""`O``Q.KOW8+%].=0```^P````'`````@```)````!\````:```1
XM`$@````T````'`````0````````#\`````-?3W!E;DQI8G)A<GD```",````D
XM`E]$;TE/````````>`````-?0VQO<V5$979I8V4```!D`````U]/<&5N1&5V#
XM:6-E`````$0````$7T-L;W-E3&EB<F%R>0```````#`````"7T9R965-96T`5
XM```8`````U]!;&QO8TUE;0`````````````````#\@```^D```!5+PXL>0``<
XM!N0B;P`(3J[_T"Q?3G4O#BQY```&Y")O``@@;P`,("\`$$ZN_\HL7TYU+PXLW
XM>0``!N0B;P`((&\`#"`O`!!.KO_$+%].=2\.+'D```;D(F\`""!O``Q.KO^^\
XM+%].=2\.+'D```;D(&\`"$ZN_[@L7TYU+PXL>0``!N0B;P`(3J[_LBQ?3G4O!
XM#BQY```&Y")O``A,[P`#``Q.KO\0+%].=0``2.<P`BQY```&Y"!O`!!,[P`/R
XM`!1.KO[@3-]`#$YU``!(YS`"+'D```;D(F\`$$SO``\`%$ZN_LY,WT`,3G4`9
XM`"\.+'D```;D(F\`""`O``Q.KOZJ+%].=4CG(`(L>0``!N0@;P`,3.\`!P`0_
XM3J[^>DS?0`1.=0``+PXL>0``!N1,[P`#``A.KOX4+%].=0``+PXL>0``!N0@`
XM;P`(3.\``P`,3J[^#BQ?3G4``````^P````-`````@```3P```$D```!!@``^
XM`.P```#.````K@```)````!\````:````%`````T````&`````0````````#_
XM\`````-?1G)E95)A<W1E<@````$X`````U]!;&QO8U)A<W1E<@```2`````#@
XM7TEN:71":71-87`````!``````)?4V5T05!E;@```.@````#7U)E8W1&:6QL!
XM````````R`````)?4V5T4D="-````*@````"7TUO=F4```````",`````U]#U
XM;&]S949O;G0``````'@````#7T]P96Y&;VYT````````9`````)?4V5T1F]NA
XM=````$P````"7U1E>'0````````P`````U]497AT3&5N9W1H`````!0````#V
XM7T-L96%R4V-R965N``````````````/R```#Z0```!XO#BQY```&X"!O``A.2
XMKO^^+%].=2\.+'D```;@(&\`"$ZN_[@L7TYU+PXL>0``!N`@;P`(3J[_.BQ?X
XM3G4O#BQY```&X"!O``A.KO\T+%].=2\.+'D```;@(&\`"$ZN_PHL7TYU+PXLZ
XM>0``!N`@;P`(3J[^U"Q?3G4```/L````!@````(```!H````5````$`````LQ
XM````&`````0````````#\`````1?5FEE=U!O<G1!9&1R97-S````9`````1?_
XM4V-R965N5&]"86-K````````4`````-?3W!E;E=I;F1O=P`````\`````U]/]
XM<&5N4V-R965N`````"@````#7T-L;W-E5VEN9&]W````%`````-?0VQO<V53:
X18W)E96X``````````````_(#%
X``
Xend
Xsize 12392
END_OF_FILE
if test 17391 -ne `wc -c <'PrintFonts.uu'`; then
    echo shar: \"'PrintFonts.uu'\" unpacked with wrong size!
fi
# end of 'PrintFonts.uu'
fi
if test -f 'setup.h' -a "${1}" != "-c" ; then 
  echo shar: Will not clobber existing file \"'setup.h'\"
else
echo shar: Extracting \"'setup.h'\" \(3818 characters\)
sed "s/^X//" >'setup.h' <<'END_OF_FILE'
X#include <exec/types.h>
X#include <exec/exec.h>
X#include <intuition/intuition.h>
X#include <libraries/dos.h>
X#include <libraries/diskfont.h>
X#include <devices/printer.h>
X
Xstruct IntuitionBase *IntuitionBase;
Xstruct GfxBase *GfxBase;
Xstruct DosBase *DosBase;
Xstruct DiskfontBase *DiskfontBase;
Xstruct Port *printerPort;
Xstruct TextFont *Topaz;
Xstruct TextAttr TopazAttr;
X
Xunion printerIO
X{
X   struct IOStdReq ios;
X   struct IODRPReq iodrp;
X   struct IOPrtCmdReq iopc;
X};
X
Xunion printerIO *printerMsg;
X
X
X#define MAX_X 960
X#define MAX_Y 720
X#define STARTINGROW 0
X
Xstruct NewScreen NewScr = 
X{
X   0,0,640,200,1,0,1,HIRES,CUSTOMSCREEN,NULL,
X   "PrintFonts V1.10 (c)1989, 1990 by Dave Schreiber.  All Rights Reserved.",
X   NULL,NULL
X};
X
Xstruct NewWindow NewWdw =
X{
X   0,10,640,190,-1,-1,NULL,SUPER_BITMAP|BORDERLESS|GIMMEZEROZERO,
X   NULL,NULL,NULL,NULL,NULL,0,0,0,0,CUSTOMSCREEN
X};
X
X
Xstruct Screen *Scr;
Xstruct Window *Wdw;
Xstruct BitMap BM;
X
Xvoid startup();
Xvoid ConstructBitmap();
Xvoid OpenPrinter();
Xvoid closeup();
Xvoid ExitProg();
X
Xvoid startup()        /*Open libraries, etc.*/
X{
X   if((IntuitionBase=(struct IntuitionBase *)OpenLibrary
X         ("intuition.library",0))==NULL)     /*IntuitionBase*/
X      ExitProg("Can't open intuitionbase!");
X   
X   if((GfxBase=(struct GfxBase *)OpenLibrary("graphics.library",0))==NULL)
X      ExitProg("Can't open GfxBase!");       /*GfxBase*/
X      
X   if((DosBase=(struct DosBase *)OpenLibrary("dos.library",0))==NULL)
X      ExitProg("Can't open DosBase!");       /*DosBase*/
X      
X   if((DiskfontBase=(struct DiskfontBase *)OpenLibrary("diskfont.library",
X         0))==NULL)                           /*DiskfontBase*/
X      ExitProg("Can't open DiskfontBase!");
X   
X   OpenPrinter(); /*Open the printer.device*/
X   Scr=(struct Screen *)OpenScreen(&NewScr);
X   if(Scr == NULL)
X      ExitProg("Couldn't open the screen!");
X   ScreenToBack(Scr); /*Push the brand new screen to the back (hide it)*/
X   NewWdw.Screen=(struct Screen *)Scr;
X   ConstructBitmap(&NewWdw,&BM);
X   Wdw=(struct Window *)OpenWindow(&NewWdw); /*Open the window*/
X   if(Wdw==NULL)
X   {
X      CloseScreen(Scr);
X      ExitProg("Couldn't open the window!");
X   }
X   else
X   {
X      SetRGB4(ViewPortAddress(Wdw),0,0xf,0xf,0xf);  /*White background*/
X      SetRGB4(ViewPortAddress(Wdw),1,0,0,0);        /*Black text*/
X   }
X   
X}
X   
Xvoid ConstructBitmap(nw,bm) /*Setup the bitmap for the window*/
Xstruct NewWindow *nw;
Xstruct BitMap *bm;
X{
X   InitBitMap(bm,1,MAX_X,MAX_Y);    /*Initialize the superbitmap*/
X   if((bm->Planes[0]=(PLANEPTR)AllocRaster(MAX_X,MAX_Y))==NULL)
X      ExitProg("Couldn't allocate enough memory!");
X   nw->BitMap=(struct BitMap *)bm;     /*Link the BitMap into the Window*/   
X}
X
Xvoid OpenPrinter() /*Open the printer device*/
X{
X   printerPort=(struct Port *)CreatePort("my.print.port",0);
X   if(printerPort == NULL)
X      ExitProg("Couldn't access the printer!");
X   printerMsg=(union printerIO *)CreateExtIO(printerPort,
X         sizeof(union printerIO));
X   if(printerMsg==NULL)
X      ExitProg("Couldn't access the printer!");
X   if(OpenDevice("printer.device",0,printerMsg,0)!=NULL)
X      ExitProg("Couldn't access the printer!");
X}
X
Xvoid closeup()         /*Close libraries, etc.*/
X{
X   CloseFont(Topaz);
X   CloseDevice(printerMsg);
X   DeleteExtIO(printerMsg,sizeof(union printerIO));
X   DeletePort(printerPort);
X   CloseWindow(Wdw);
X   FreeRaster(BM.Planes[0],MAX_X,MAX_Y);
X   CloseScreen(Scr);
X   CloseLibrary(DiskfontBase);   /*Close diskfont.library*/
X   CloseLibrary(DosBase);         /*Close dos.library*/
X   CloseLibrary(GfxBase);         /*Close graphics.library*/
X   CloseLibrary(IntuitionBase);   /*Close intuition.library*/
X}
X
Xvoid ExitProg(err)        /*Error.  So print a message & terminate*/
Xchar *err;
X{
X   puts(err);  /*Print the error*/
X   exit(100);  /*and exit*/
X}
END_OF_FILE
if test 3818 -ne `wc -c <'setup.h'`; then
    echo shar: \"'setup.h'\" unpacked with wrong size!
fi
# end of 'setup.h'
fi
echo shar: End of archive 1 \(of 1\).
cp /dev/null ark1isdone
MISSING=""
for I in 1 ; do
    if test ! -f ark${I}isdone ; then
	MISSING="${MISSING} ${I}"
    fi
done
if test "${MISSING}" = "" ; then
    echo You have the archive.
    rm -f ark[1-9]isdone
else
    echo You still need to unpack the following archives:
    echo "        " ${MISSING}
fi
##  End of shell archive.
exit 0
-- 
Mail submissions (sources or binaries) to <amiga@cs.odu.edu>.
Mail comments to the moderator at <amiga-request@cs.odu.edu>.
Post requests for sources, and general discussion to comp.sys.amiga.