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

Amiga-Request@cs.odu.edu (Amiga Sources/Binaries Moderator) (07/08/90)

Submitted-by: davids@ucscb.UCSC.EDU (Dave Schreiber)
Posting-number: Volume 90, Issue 206
Archive-name: util/prtfonts-1.11/part01

[ uuencoded executable included  ...tad ]

This is an upgrade to PrintFonts V1.10, which also came out on c.s.a a
few months ago.  It will now abort the printing if the printer becomes
unavailable and the user clicks on CANCEL in the 'Printer Error'
requestor.

     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 Sun Jul  8 12:17:21 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'\" \(9818 characters\)
sed "s/^X//" >'PrintFonts.c' <<'END_OF_FILE'
X/*PrintFonts V1.11 (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/*V1.11 finished May 14, 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                     Aborts if it can't print out a page of fonts (V1.11)
X*/
X
X/*Compiled using Lattice C V5.04*/
X
X#include "setup.h"
X
X
Xint InterpretArgs();
XWORD PrintPage();
XDumpWindowToPrinter();
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.11");
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      if((DumpWindowToPrinter(Wdw,printerMsg,
X            (TextY+LastY>MAX_Y ? MAX_Y : TextY+LastY))) != 0)
X      {
X         puts("Printer error!  Aborting!");
X         *curfont=numfonts+1; /*An error occured, so abort*/
X      }
X         
X   /*Add a little for serifs, but not more than MAX_Y*/
X   return(max); /*And return the max text length*/
X}
X
XDumpWindowToPrinter(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   return(DoIO(request)); /*Do the actual dump*/
X}
X
END_OF_FILE
if test 9818 -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'\" \(2045 characters\)
sed "s/^X//" >'PrintFonts.doc' <<'END_OF_FILE'
X-----------------------------PrintFonts V1.10------------------------------
X
XPrintFonts V1.11 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))
END_OF_FILE
if test 2045 -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```7X```"H@```EH````,````*0```%4`*
XM```>```#Z0``!?A(YW[^)$@D`$GY`````"QX``1'^0``!JQR`"`\````KV`"]
XM)L%1R/_\*4\&["E.!N1"K`;H<``B/```,`!.KO[.0_H!6G``3J[]V"E`")1FL
XM!G!D8```_"9N`10I:P"8!N!*JP"L9V@@#Y"O``0&@````(`I0`:P(&L`K-'((
XMT<@B:``0T\G3R2`"<@`2&2E)!O30@5*`0F=2@`)`__Z?P%6`0G<(`"`"4X#4Q
XM@1^R```@`%."4<C_]A^\`"`@`%."'[$@`"``4<K_^")/+PE@<BEK`#H&L'!_5
XM4H#1K`:P0>L`7$ZN_H!!ZP!<3J[^C"E`!N@O`"1`("H`)&<2+&P(E"!`(B@`$
XM`"E!!N!.KO^"(BH`(&<:)#P```/M3J[_XBE`!O!G"N6(($`G:``(`*0@;`;HY
XM+PA(;`:L(&@`)"EH``0&]$ZZ`&9.NA`&<`!@!"`O``0O`"`L!MAG!"!`3I!.;
XMN@IF+'@`!")L")1.KOYB3KH`/$JL!NAG&B(L!O!G!$ZN_]PL>``$3J[_?")LT
XM!NA.KOZ&(!\N;`;L3-]_?DYU9&]S+FQI8G)A<GD`3G5.=4Y5_^Q(YR\0+B\`L
XM-"9O`#@H!W`QP*L`&&<&</]@``)P""L`!P`:5L!$`$B`2,`L`$JK`!1F``"$?
XM""L``@`;9GIP`"=```QR_[Z!9P`"0B\+3KH1AEA/2H!G#`CK``4`&W#_8``"/
XM*@CK``$`&TH&9PX@*P`4(@!$@2=!``Q@""`K`!0G0``,4ZL`#&T6(&L`!$/HY
XM``$G20`$(`<0@'(`$@!@$B`'<@`2`"\++P%A`/]24$\B`"`!8``!U@@K``(`W
XM&V=8</^^@&8&<`!@``'"(`<;0/__2@9G(G(*OH%F''("+P%(>@&R+RL`'"M!7
XM__!.N@I`3^\`#"H`8!IR`2\!2&W__R\K`!PK0?_P3KH*)$_O``PJ`'[_8```=
XMX`CK``$`&TH&9U)P_[Z`9TQ4JP`,<@J^@68F(&L`!$/H``$G20`$$+P`#2(K_
XM``Q*@6L*+PLO`&$`_JY03U*K``P@:P`$0^@``2=)``0@!Q"`(BL`#$J!:P`!@
XM''[_("L`!)"K`!`K0/_P9W((*P`&`!IG4DAX``)"IR\K`!Q.N@/,3^\`#"M`?
XM_^Q*!F<X4ZW_[&TR0J<O+?_L+RL`'$ZZ`ZQ(>``!2&W__2\K`!Q.NA'`3^\``
XM&$JL!L1F"A`M__UR&K`!9\@O+?_P+RL`$"\K`!Q.N@E$3^\`#"H`8`)Z`'#_L
XMNH!F"`CK``4`&V`,NJW_\&<&".L`!``;2@9G#B(K`!0D`42")T(`#&`8""L`M
XM`@`;9PAR`"=!``Q@""(K`!0G00`,(&L`$"=(``2^@&<N4ZL`#&T6(&L`!$/H7
XM``$G20`$(`<0@'(`$@!@$B`'<@`2`"\++P%A`/V04$\B`'`PP*L`&&<$</]@#
XM#'#_N(!F!'``8`(@!$S?"/1.74YU#0H`````````````<&$N;`;L3KH13DAY$
XM````%$ZZ`\@``````````'!A2.<@,"9O`!`D2TH29R1P`!`20>P%&0@P``$(0
XM`&<*<@`2`'0@DH)@!'(`$@`4@5**8-@@"TS?#`1.=0``````````<&%.5?_X"
XM2.<#,"9O`"`D;P`D+B\`*"!*2AAF_%.(D<HL""!+2AAF_%.(D<L@"")+T\`KD
XM2?_XO(=C`BP'(`8@2F`"$MA3@&3Z(&W_^$(P:``@"TS?#,!.74YU(&\`!"`(1
XM2AAF_%-(D<`@"$YU```B;P`((&\`!"`(2AAF_%.($-EF_$YU```@+P`((&\`"
XM!$Y5__0B3W(*3KH%$`9!`#`2P4J`9O`@"1#AO\EF^D(0D(].74YU```@+P`(&
XM(&\`!$Y5__0B3R(``D$`!P9!`#`2P>:(9O`@"1#AO\EF^D(0D(].74YU```PE
XM,3(S-#4V-S@Y86)C9&5F("\`""!O``1#[P`$,@`"00`/$OL0W.B(9O(@"2(/Q
XM6($0X;*)9OI"$)"!3G4@;P`$(DAR`'``+P(,$``K9P8,$``M9@)22!`8!```&
XM,&T2#```"6X,)`'E@=*"TH'2@&#F#!$`+68"1($D'R`(4X`@;P`(((&0B4YU1
XM2.<!$"9O``Q^`!X;2H=G,E.L!-9M%B!L!,Y#Z``!*4D$SB`'$(!R`!(`8-P@#
XM!W(`$@!(;`3*+P%.NOM64$\B`&#&4ZP$UFT6(&P$SD/H``$I203.<`H0@'(`C
XM$@!@$$AL!,I(>``*3KK[*%!/(@`@`4S?"(!.=0``````````<&$O!RXO``A2/
XMK`B,4ZP$UFT6(&P$SD/H``$I203.(`<0@'(`$@!@%"`'<@`2`$AL!,HO`4ZZ^
XM^MQ03R(`+A].=4Y5```O"R9O``Q"K`B,2&T`#"\+2'K_K$ZZ"?Y(;`3*2'C_?
XM_TZZ^JP@+`B,)FW__$Y=3G4``$CG#Q`N+P`8+"\`'"HO`"`O!TZZ!%183R9`?
XM(`MF!'#_8!XO!2\&+RL`!$ZZ`:!/[P`,*`!*K`;$9P1P_V`"(`1,WPCP3G4`J
XM`````````'!A2.<#,"XO`!1*AVX&<`!@``"D<`B^@&0"+@`@!U:`+@`"1__\6
XM1>P$H"92(`MG0"`K``2PAVTRL(=F#"!3)(B?K`2D(`M@;B`K``20AW((L(%EN
XM%B!+T<<DB"1()),E0``$GZP$I"`+8$PD2R938+P@!R(L!130@5.`3KH"2B(LS
XM!11.N@(B+`!0AB`&5H`L``)&__PO!DZZ`_Y83R9`(`MG$B\&+PM.N@P^+H=AX
XM`/]44$]@`G``3-\,P$YU``````````````````!(YP,0+B\`$$?L!*@@"V<T2
XM""L``@`;9B@(*P`!`!MG("`K``20JP`0+`!*AF<2+P8O*P`0+RL`'$ZZ!'I/M
XM[P`,)E-@R"\'3KH+<%A/3-\(P$YU``!(YS<0+B\`'"9O`"`L+P`D2JP&W&<$8
XM3KH/`$*L!L0B!R0+)@8L;`B43J[_T"H`</^Z@&8.3J[_?"E`!L1P!2E`")`@9
XM!4S?".Q.=0``````````````````````````<&%(YS\`+B\`'"PO`"`J+P`D7
XM2JP&W&<$3KH.H$*L!L0@!5.`(@<D!B8`+&P(E$ZN_[XH`'#_N(!F#DZN_WPIR
XM0`;$<!8I0`B0(`4,@`````)G%@R``````6<(2H!F&"`&8!0@!-"&8`XB!W0`D
XM=@`L;`B43J[_ODS?`/Q.=0``2.<W$"XO`!PF;P`@+"\`)$JL!MQG!$ZZ#B1"O
XMK`;$(@<D"R8&+&P(E$ZN_]8J`'#_NH!F#DZN_WPI0`;$<`4I0`B0(`5,WPCLJ
XM3G4``$CG`!(F;P`,2JL`"F<*(DLL>``$3J[^F!=\`/\`"'#_)T``%'``$"L`K
XM#RQX``1.KOZP(DMP(DZN_RY,WT@`3G4O!RXO``A*K`;<9P1.N@VB(@<L;`B4Q
XM3J[_W'``+A].=4CG,``D`"8!2$)(0\3!QL#`P=1#2$)"0M""3-\`#$YU2H!J'
XM```>1(!*@6H```Q$@6$``"!$@4YU80``&$2`1(%.=4J!:@``#$2!80``!D2`G
XM3G4O`DA!-`%F```B2$!(04A"-`!G```&A,$P`DA`-`"$P3`"2$(R`B0?3G4O3
XM`W80#$$`@&0```;AF5%##$$(`&0```;IF5E##$$@`&0```;EF55#2D%K```&4
XMXYE30S0`YJA(0D)"YJI(0X#!-@`P`C0#2$'$P9""9```"%-#T(%D_G(`,@-(A
XM0^>X2$#!028?)!].=4CG`S(F;P`8+B\`''#_+'@`!$ZN_K8L``P&`/]F!'``?
XM8&9P(B(\``$``4ZN_SHD0"`*9@IP`!`&3J[^L&!()4L`"B`'%4``"15\``0`7
XM"$(J``X51@`/D\E.KO[:)4``$"`+9P@B2DZN_IY@&D'J`!@E2``40>H`%"5(9
XM`!Q"J@`8%7P``@`@(`I,WTS`3G4``"\'+B\`"'``*4`&Q$J':R*^K`20;!P@Y
XM!^>`0>P'3$JP"`!G#B`'YX!![`=,T<`@"&`(<`DI0`B0<``N'TYU````````.
XM``````````!(YP`R)FP(F"`+9Q0D4R)+("L`""QX``1.KO\N)DI@Z)'(*4@(+
XMG"E(")A,WTP`3G5(YP$R+B\`%'`,WH`@!W(`+'@`!$ZN_SHF0"`+9@1P`&`Z/
XM)T<`"$7L")@@:@`$)T@`!)'()HA*DF8")(M*J@`$9P8B:@`$(HLE2P`$2JP$2
XME&8$*4L$E$'K``P@"$S?3(!.=0``````````````````2.<`$B9O``P7?`#_8
XM``@P?/__)T@`%"=(`!AP`#`K`!(B2RQX``1.KO\N3-](`$YU2.<!,B9O`!0N&
XM+P`8(`MF!'``8"P@!R(\``$``2QX``1.KO\Z)$`@"F<4%7P`!0`(0BH`"25+(
XM``X@!S5``!(@"DS?3(!.=0``2.<',"XO`!@F;P`<+"\`("\'3KK^B%A/)$`@6
XM"F8$</]@-@@J``,``V<02'@``D*G+P=.NOH`3^\`#"\&+PLO*@`$3KK[7$_O^
XM``PJ`$JL!L1G!'#_8`(@!4S?#.!.=0``3E7_Q$CG)S`F;P!<)&\`8'X`?`!ZU
XM`'``&WP`(/_[<@`K0?_V=/\K0O_R0>W_T!M`__$;0/_\*T'_Y"M!_^@K2/_,#
XM2A-G+'``$!,$0``@9Q170&<444!G"%5`9A9^`6`.?`%@"GH!8`8;?``!__Q2?
XMBV#0$!-R,+`!9@92BQM!__MP*K`39@P@4EB2*U#_]E*+8`Y(;?_V+PM.NO?Z3
XM4$_7P!`3<BZP`68B4HMP*K`39@P@4EB2*U#_\E*+8`Y(;?_R+PM.NO?04$_76
XMP!`3<FRP`68*&WP``?_Q4HM@"')HL`%F`E*+$!MR`!(`&T#_\`1!`%AG``%^[
XM!$$`"V<``@I306<D!$$`"V<``1)306<``5!706<``;I506<``.1706<``5)@%
XM``'X2BW_\6<((%)8DB`08`8@4EB2(!`K0/_L;`IR`42M_^PK0?_H2JW_Z&<$$
XM<"U@"DH&9P1P*V`"<"`;0/_0<``0!B(M_^B"@'``$`6"@&<(4JW_S%*M_^0O(
XM+?_L+RW_S$ZZ]G)03RM`_\@@+?_R2H!J!G(!*T'_\B`M_\@B+?_RDH!([0`"E
XM_\1O-"!M_\PB2-/!+P`O"2\(3KH&@D_O``QP`!`M__LB+?_$(&W_S&`"$,!3*
XM@63Z("W_\BM`_\C1K?_D0>W_T"M(_\Q*!V<``3`;?``@__M@``$F2BW_\6<(B
XM(%)8DB`08`8@4EB2(!`K0/_L8`#_9$HM__%G""!26)(@$&`&(%)8DB`0*T#_5
XM[$HM__QG$B!M_\P0_``P<@$K0?_D*TC_S"\`+RW_S$ZZ]=903RM`_\A@`/\RV
XM&WP`,/_[("W_\DJ`:@9P""M`__)*+?_Q9P@@4EB2(!!@!B!26)(@$"M`_^Q*!
XM+?_\9Q8@;?_,$/P`,!#\`'AR`BM!_^0K2/_,+P`O+?_,3KKUNE!/*T#_R'!8D
XML"W_\&8`_M!(;?_03KKT:EA/8`#^PB!26)(B4"M)_\QF"$'Z`-@K2/_,(&W_)
XMS$H89OQ3B)'M_\PK2/_D("W_\DJ`:R:QP&\B*T#_Y&`<<`$K0/_D(%)8DB`0Z
XM&T#_T$(M_]%@!G``8```C"`M_^0B+?_VLH!L"'0`*T+_]F`$D:W_]DH'9S93S
XMK?_D;1AP`"!M_\P0&"\`*TC_S"!M`!!.D%A/8.)3K?_V;4AP`!`M__LO`"!MC
XM`!!.D%A/8.A3K?_V;1)P`!`M__LO`"!M`!!.D%A/8.A3K?_D;1AP`"!M_\P01
XM&"\`*TC_S"!M`!!.D%A/8.(@"TS?#.1.74YU``!.5?_T2.<!,"9O`"`D;P`D_
XM*VT`$/_V'AI*!V<T<"6^`&8BL!)F!%**8!HO"TAM__8O"F$`_!9/[P`,*T#_B
XM^F<$)$!@TG``$`<O`$Z36$]@QDS?#(!.74YU``!.5?_P2.<A,B9O`"P,K```1
XM`"`(WFP``(80$W(@L`%G#'()L`%G!G(*L`%F!%*+8.A*$V=H("P(WN6`4JP(O
XMWD'L".;1P"1(<"*P$V8F4HLDBTH39PIP(K`39P12BV#R2A-F#$AX``%.N@(LF
XM6$]@GD(;8)HDBTH39Q@0$W(@L`%G$'()L`%G"G(*L`%G!%*+8.1*$V8"8`9"G
XM&V``_W)*K`C>9@8@;`;H8`1![`CF*4@(XDJL"-YF?$/Z`21-[`BD+-DLV2S9<
XM+-D\D2)L!N@@:0`D2'@`*"\H``1(;`BD3KKRAD_O``PL;`B40>P(I"(()#P`_
XM``/N3J[_XBE`!U`I0`=8<A`I00=4*4`'8"E!!USE@"M`__`L>``$D\E.KO[:1
XM(&W_\")`(V@`"`"D?@`K0/_T8"HL;`B43J[_RBE`!U!.KO_$*4`'6$'Z`*8B^
XM""0\```#[4ZN_^(I0`=@?A`@!P!`@`&!K`=,(`<`0(`"@:P'5`"L``"``P=<^
XM2JP%$&<$<`!@!B`\``"``"X`0JP$Q"`'`$```2E`!,!P`2E`!.8@!P!```(IW
XM0`3B<`(I0`4((`<`0`"`*4`%!$'Z`U8I2`;<+RP(XB\L"-Y.N@`F0I=.NO4,D
XM3.U,A/_<3EU.=6-O;CHQ,"\Q,"\S,C`O.#`O`"H`3OD```)@````````````:
XM````<&%(YS`R+&\`."!O`!@B;P`<)&\`("9O`"0@+P`H(B\`+"0O`#`F+P`TU
XM3J[^I$S?3`Q.=0``+PLF;P`(2JL`%&<,""L``P`;9@1P`&`V+RP&'$ZZ\[Y8&
XM3R=```0G0``02H!F"G`,*4`(D'#_8!8G;`8<`!1P\\&K`!AP`"=```PG0``(/
XM)E].=0``````````<&%(YP<`+B\`$"`L!)!3@"P`2D9K,"`&2,#G@$'L!TPJ%
XM,`@`2@5G&@@%``1F%"`&2,#G@$'L!TPO,`@$3KKUR%A/4T9@S"\'3KKM)%A/Z
XM3-\`X$YU```B;P`((&\`!"`)$-EF_$YU3E7_Z$CG`3(N+P`T2H=N!G#_8```"
XMTG`(OH!D`BX`(`=6@"X``D?__"1M``@@+0`(T(??K`2D0>P$H"90*T#_\"M(7
XM__0@"V<``)`@2R`K``31P"M(_^PB;?_PM\EC$"2+)4<`!"QM__0LBG``8'BW/
XMR68:+%,DCB`K``0B`-*')4$`!"QM__0LBG``8%JUR&0(GZP$I'#_8$ZUR&8LB
XM2I-G#B!3L\AC")^L!*1P_V`XWZL`!$J39PZSTV8*("D`!-&K``0FD7``8!XK8
XM2__T*VW_[/_H)E-@`/]N(&W_]""*0I(E1P`$<`!,WTR`3EU.=0``2.<',"XOT
XM`!@F;P`<+"\`("\'3KKV,%A/)$`@"F8$</]@'B\&+PLO*@`$3KKS^$_O``PJG
XM`$JL!L1G!'#_8`(@!4S?#.!.=0``(&\`!")O``@@+P`,;Q:SR&4,T<#3P!,@*
XM4X!F^DYU$MA3@&;Z3G4``$Y5_ZA(YP$"+'@`!$/Z`(YP`$ZN_=@K0/^H9@I(0
XM>``43KK^&EA/?@`@;`;T'BC__R`'0^W_L&`"$MA3@&3Z0C5XL$'M_[`I2`8L]
XM+RW_J$AX`"A(>`#Z<``O`"\`2&P&2'(`+P%(;`8T+P%.NOU`2'@`%$ZZ_<A,G
XM[4"`_Z!.74YU*BH@4W1A8VL@3W9E<F9L;W<@*BH``$58250``&EN='5I=&EO[
XM;BYL:6)R87)Y````````````<&%.5?^82.<S`GX`(&P&]!XH__]P3[Z`;P(ND
XM`"`'0^W_KV`"$MA3@&3Z0C5XKRQX``23R4ZN_MHK0/^F($!*J`"L9U(B*`"LU
XMY8$B02PI`#A([0`"_YY*AF8$+"@`H$J&9S0L;`B4(@9!^@"R)`AV"TZN_]`@D
XM1U*'(`@;O``*"*\L;`B4(@8F!T'M_Z\D"$ZN_]!P_V!2+'@`!$/Z`(QP`$ZNZ
XM_=@K0/^:9@1P_V`Z0>W_KRE(!GPO+?^:2'@`/$AX`/IP`"\`+P!(;`:82&P&@
XMA$AL!G!"ITZZ_!Y/[P`D4X!G!'#_8`)P`$S?0,Q.74YU*BH@57-E<B!!8F]RV
XM="!297%U97-T960@*BH``$-/3E1)3E5%``!!0D]25``J*BH@0G)E86LZ(`!I=
XM;G1U:71I;VXN;&EB<F%R>0!(YP$"+'@`!'``(CP``#``3J[^SBX``H<``#``D
XM2H=G($JL!MQG&B!L!MQ.D$J`9@)@#D*L!MQ(>``43KK\$%A/3-]`@$YU8;A.1
XM=0`````#[`````$````!```3/@````(````"````%`````H````````#\@``.
XM`^D```*BO^P&L&4`"8Q"ITAL`)9.N@GN4$\I0`;X2H!F"DAL`*AA``(<6$]"A
XMITAL`,).N@G04$\I0`;\2H!F"DAL`-1A``'^6$]"ITAL`.A.N@FR4$\I0`<`H
XM2H!F"DAL`/1A``'@6$]"ITAL`0A.N@F44$\I0`<$2H!F"DAL`1IA``'"6$]A>
XM``#B2&P`1DZZ"0Y83RE`!QQF"DAL`31A``&D6$\O+`<<3KH)/"EL!QP`A$ALO
XM!R1(;`!F80``7DAL`&9.N@D$3^\`$"E`!R!F%"\L!QQ.N@F:2&P!3F$``690/
XM3V`T+P!.N@EJ<@\N@2\!+P%"IR\`3KH)3BZL!R!.N@E2<@`N@2\!+P%(>``!Z
XM+P!.N@DT3^\`)$YUO^P&L&4`"'A(YP`P)F\`#"1O`!!(>`+02'@#P$AX``$O'
XM"DZZ")9(>`+02'@#P$ZZ"/!/[P`8)4``"&8*2&P!:&$``.A83R=*`"),WPP`/
XM3G6_[`:P90`(*$*G2&P!BDZZ"!A03RE`!PAF"DAL`9AA``"Z6$](>``^+RP'_
XM"$ZZ"%I03RE`!QAF"DAL`;9A``"<6$]P`"\`+RP'&"\`2&P!U$ZZ"%I/[P`0A
XM2H!G"DAL`>1A``!X6$].=;_L!K!E``?`+RP'#$ZZ"``NK`<83KH((DAX`#XOZ
XM+`<83KH(-"ZL!PA.N@@4+JP'($ZZ"%I(>`+02'@#P"\L!RQ.N@A6+JP''$ZZ5
XM"%0NK`<$3KH(6"ZL!P!.N@A0+JP&_$ZZ"$@NK`;X3KH(0$_O`!A.=;_L!K!EE
XM``=.+PLF;P`(+PM.N@>62'@`9$ZZ!]903R9?3G5.5?_DO^P&L&4`!RA(YR<0<
XM+BT`""9M``QP`KZ`9FP@:P`$<#^P$&9B2&P"`DZZ!UA(;`(43KH'4$AL`DI.@
XMN@=(2&P"6DZZ!T!(;`)V3KH'.$AL`IY.N@<P2&P"TDZZ!RA(;`+R3KH'($ALX
XM`RI.N@<82&P#2$ZZ!Q!(;`-\3KH'"$*73KH'2D_O`"Q(;?_M2&W_ZDAM_^Y(!
XM;?_O+PLO!V$``<9/[P`82H!F"DAX`^A.N@<>6$\P+?_J<@&P06P22&P#J$ZZ1
XM!L)(>`?03KH'`E!/80#\SDAX``-P`"\`+P!.N@:X+``NO``!```O!DZZ!S1/O
XM[P`0*T#__$J`9@YA`/YN2&P#S&$`_MA83TAX`/\O!B\M__Q.N@:"0>P#[BE([
XM!Q`Y?``(!Q1"+`<6&7P``P<72&P'$$ZZ!KQ/[P`0*4`'#$J`9AHO!B\M__Q.S
XMN@8H80#^'$AL`_IA`/Z&3^\`#'H`(&W__#H0<`$K0/_PT(#1P"M(_^0@+?_P-
XML(5B-#`M_^I(P!(M_^](@4C!%"W_[DB"2,(O`B\!+P`O+?_D+P5(;?_P80`!C
XMQD_O`!@[0/_H8,0P/`/`2,"![?_H.T#_Z'(!L$%L!#M!_^A*+?_O9S`P+?_H'
XM2,`O`$AL!"1.N@8*4$]P`;!M_^AF#$AL!$Q.N@7X6$]@"DAL!%!.N@7L6$]*]
XM+?_M9T)P`2M`__#0@"!M__S1P"M(_^0@+?_PL(5B*#`M_^A(P!(M_^Y(@4C!1
XM+P%"IR\`+RW_Y"\%2&W_\&$``2Q/[P`88-`O!B\M__Q.N@4F+JP'#$ZZ!21AQ
XM`/T23.T(Y/_03EU.=4Y5__B_[`:P90`$PDCG`S`N+0`()FT`#"1M`!`@;0`8!
XM,+P``7``%(`@;0`4$(`@;0`<$(!\`2`&2(!(P+"';```N!`&2(`B`$C!Y8$@X
XM<Q@`4H@0$$B`!$``0F<D4T!G.`1```IG(EM`9R0$0``09Q!30&<D!$``"F<.Y
XM6T!G$&!4(&T`'!"\``$4O``!8&0@;0`4$+P``6!:$`9(@"(`2,'E@2!S&`!4G
XMB$H09T80!DB`(@!(P>6!(',8`%2(2&W_^B\(3KH$:%!/("W_^B!M`!@P@&`>6
XM2&P$5$ZZ!$80!DB`(@!(P>6!+K,8`$ZZ!#1P`&`(4@9@`/]`<`%,[0S`_^A.`
XM74YU3E7]W+_L!K!E``.^2.<G,"9M``@N+0`,)&T`$#PM`!8:+0`;0BW__T)M)
XM__PP/`/`2,"!QD'M_O,;?``H_O)"IR)L!R`O*0`R.T#_\BM(_>A.N@..2'@".
XMSTAX`[]P`"\`+P`@;`<@+R@`,DZZ`^9(>``!(&P'("\H`#).N@-D(&P'("ZH!
XM`#).N@/H3^\`)"`34X!R"DZZ!!#5P'``.T#_]CM`__0P+?_VL$9L``(T(!.P5
XMAV(``BQ";?_\0BW__THM__]F``(((!.PAV(``@!**@`(9@`![@@J``<`"68`:
XM`>0(*@`"``EF``':""H``0`)9PH(*@````%F``'(<``P+?_\(CP```+0DH!95
XM@7``,"H`!K"!;``!HBMJ``+]W#MJ``;]X!MJ``C]XAM\`&/]XTAM_=Q.N@,6^
XM6$\K0/WD2H!G``%L($`[:``:__HR+?_ZTVW__"\J``)(;?WR3KH#5$AM_?(OK
XM+?WH3KH#2"ZM_>A.N@*`(&W]Z$(P"/M(;`1R+PA.N@+:<``P*@`&+H!(;?WLW
XM3KH"4DAM_>PO+?WH3KH"ODAL!'0O+?WH3KH"LC`M__1(P'(`,BW__"Z!+P`@.
XM;`<@+R@`,DZZ`A(NK?WD(&P'("\H`#).N@(F+JW]Z$ZZ`A(N@"\M_>@@;`<@>
XM+R@`,DZZ`J(NK?WH3KH!^"Z`+RW]Z"!L!R`O*``R3KH!X$_O`$@[0/_X2BT`Y
XM'V=F2&W^\DZZ`=!![?[QT<`0O``I+JP'#"!L!R`O*``R3KH!PDAM_O).N@&N=
XM+H!(;?[R(&P'("\H`#).N@(^2&W^\DZZ`90N@$AM_O(@;`<@+R@`,DZZ`7Q/\
XM[P`@,BW_^$C!TH`[0?_X,"W_^+!L!'!O!#E`!'`@;?WD,"@`%)!H`!I40-%MU
XM__PO"#M`__I.N@%F6$]2D]3\``I@`/X(&WP``?__8`#]_E*3U/P`"F``_?12T
XM;?_V,"W_]L'M__([0/_T8`#]QDH%9E!P`#`M__QR`#(M__HD`-2!#((```+04
XM;P@D/````M!@"G0`-`!P`#`!U(`O`B\L!Q@O+`<@80``)D_O``Q*@&<02&P$G
XM=DZZ`/)83R`'4H`F@#`L!'!,WPSD3EU.=4Y5__B_[`:P90``?DCG`#`F;0`(G
XM)&T`#!M\``S_^D(M__L@:P`N0^@`+#5\``L`'"5K`#(`("5I``0`)'``,"D`K
XM("5``"AP`#5``"PU0``N-7P#P``P-7P"T``R<``E0``T)4``.#5\``P`/"\*2
XM*TG__$ZZ`"!,[0P`__!.74YU``!.^0``"NA.^0``!%!.^0```"A.^0```'A.)
XM^0```(Q.^0```.A.^0``!31.^0```!1.^0``!0A.^0```#Q.^0```$Q.^0```
XM`0!.^0```!A.^0```'A.^0```%!.^0``!AQ.^0``#)1.^0``!=!.^0```!1.+
XM^0```(Q.^0```&1.^0``":1.^0```$1.^0````!.^0```,A.^0``#&1.^0``#
XM!1Q.^0``""A.^0```2!.^0````!.^0```*A.^0``!MI.^0```&1.^0```&1.!
XM^0```!1.^0```#!.^0```3A.^0````!.^0``"@1.^0```#!.^0``%#1.^0``M
XM``````/L````#@````````FR```**@``";X```I^```*<@``"?0```I(```*0
XM,```">@```H,```*)```">X```F.```)E`````(````#```*&```"?H````'!
XM````!```":````G6```*A```"G@```H&```*$@``"@`````-````!0``";@`E
XM``I@```)R@``":8```H\```*'@``":P```I4```*9@``"=P```HV```)T```;
XM"D(````&````!@``"EH```I.```*;```"<0```GB```)F@````````/R```#=
XMZ@```:M0<FEN=$9O;G1S(%8Q+C$Q(*DQ.3@Y+"`Q.3DP(&)Y($1A=F4@4V-H`
XM<F5I8F5R+B`@06QL(%)I9VAT<R!297-E<G9E9"X```````*``,@``0`!@```K
XM#P`````````````````````````*`H``OO__````````#(``````````````C
XM``````````````````````````]I;G1U:71I;VXN;&EB<F%R>0!#86XG="!O1
XM<&5N(&EN='5I=&EO;F)A<V4A`&=R87!H:6-S+FQI8G)A<GD``$-A;B=T(&]PB
XM96X@1V9X0F%S92$`9&]S+FQI8G)A<GD`0V%N)W0@;W!E;B!$;W-"87-E(0!DB
XM:7-K9F]N="YL:6)R87)Y``!#86XG="!O<&5N($1I<VMF;VYT0F%S92$``$-O0
XM=6QD;B=T(&]P96X@=&AE('-C<F5E;B$`0V]U;&1N)W0@;W!E;B!T:&4@=VENC
XM9&]W(0!#;W5L9&XG="!A;&QO8V%T92!E;F]U9V@@;65M;W)Y(0``;7DN<')IO
XM;G0N<&]R=`!#;W5L9&XG="!A8V-E<W,@=&AE('!R:6YT97(A``!#;W5L9&XG9
XM="!A8V-E<W,@=&AE('!R:6YT97(A``!P<FEN=&5R+F1E=FEC90``0V]U;&1NS
XM)W0@86-C97-S('1H92!P<FEN=&5R(0``4')I;G1&;VYT<R!6,2XQ,0``J3$YT
XM.#DL(#$Y.3`@8GD@1&%V92!38VAR96EB97(N("!!;&P@<FEG:'1S(')E<V5R;
XM=F5D+@``1F]R;6%T(&9O<B!U<V4Z`"`@,3X@(%!R:6YT1F]N=',@6V]P=&EO0
XM;G-=``!7:&5R92!O<'1I;VYS(&%R92!A;GD@;V8@=&AE(&9O;&QO=VEN9SH`F
XM("`M<CH@(%!R:6YT(&5A8V@@9F]N="=S(&YA;64@:6X@82!R96%D86)L92!F7
XM;W)M870``"`M8R,Z("!5<V4@(R!N=6UB97(@;V8@8V]L=6UN<P``("`M;3H@3
XM($1E=&5R;6EN92!T:&4@;6%X(&YU;6)E<B!O9B!C;VQU;6YS('1H870@8V%NF
XM(&)E```@("`@("`@=7-E9"!A;F0@9&\@;F]T('!R:6YT+@`@("UB.B`@1&5T0
XM97)M:6YE<R!T:&4@;6%X:6UU;2!N=6UB97(@;V8@8V]L=6UN<R!A;F0`("`@D
XM("`@('!R:6YT<R!U<VEN9R!T:&%T(&YU;6)E<B!O9B!C;VQU;6YS``!9;W4@3
XM;75S="!H879E(&%T(&QE87-T(&]N92!C;VQU;6XA``!#;W5L9&XG="!A;&QOT
XM8V%T92!E;F]U9V@@;65M;W)Y(0``=&]P87HN9F]N=```0V%N)W0@;W!E;B!4C
XM;W!A>B`X('!O:6YT(&9O;G0A(2$A(2$A(2$A(2$`5&AE<V4@9F]N=',@8V%N4
XM(&)E('!R:6YT960@:6X@)60@8V]L=6UN`"X*``!S+@H`22!D;VXG="!U;F1E_
XM<G-T86YD(&]P=&EO;CH`````(``@`%!R:6YT97(@97)R;W(A("!!8F]R=&EN=
XM9R$`````*``````````````````````````````$R@``````````````````^
XM````````````````````````!.P`````````````````````````````````P
XM`````````````````````````````````````````````````````````(```
XM```$```@("`@("`@("`H*"@H*"`@("`@("`@("`@("`@("`@($@0$!`0$!`0D
XM$!`0$!`0$!"$A(2$A(2$A(2$$!`0$!`0$(&!@8&!@0$!`0$!`0$!`0$!`0$!L
XM`0$!`0$!$!`0$!`0@H*"@H*"`@("`@("`@("`@("`@("`@("`@(0$!`0("`@Z
XM("`@("`@("@H*"@H("`@("`@("`@("`@("`@("`@2!`0$!`0$!`0$!`0$!`00
XM$(2$A(2$A(2$A(00$!`0$!`0@8&!@8&!`0$!`0$!`0$!`0$!`0$!`0$!`0$02
XM$!`0$!""@H*"@H("`@("`@("`@("`@("`@("`@("`A`0$!`@```````"`/__D
XM````#@`.````````````````__\````$``0````````6)```!B#__P````0`$
XM!````````!8Z`````/__````#@`.````````%TH`````__\````$``0`````5
XM````````!ES__P````0`!````````!=F`````/__````!``$````````%W``R
XM```````#[`````4````````&I```!I````9H```&5```!D`````%`````@``)
XM!H````9$```$R@``!*@```!:`````````_(```/I````#"\.+'D```<$(&\`-
XM"$ZN_^(L7TYU+PXL>0``!P0@;P`(3.\``P`,3J[_W"Q?3G4``````^P````"7
XM`````@```!@````$`````````_`````#7T%V86EL1F]N=',`````%`````1?A
XM3W!E;D1I<VM&;VYT``````````````````/R```#Z0```"DO#BQY```&Y$SO%
XM``,`"$ZN_SHL7TYU```O#BQY```&Y")O``@@+P`,3J[_+BQ?3G4O#BQY```&M
XMY")O``A.KOYB+%].=2\.+'D```;D(&\`"$SO`@$`#"(O`!1.KOY$+%].=0``%
XM+PXL>0``!N0B;P`(3J[^/BQ?3G4O#BQY```&Y")O``A.KOXX+%].=2\.+'D`R
XM``;D(F\`""`O``Q.KOW8+%].=0```^P````'`````@```)````!\````:```I
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!OPB;P`(3J[_T"Q?3G4O#BQY```&_")O``@@;P`,("\`$$ZN_\HL7TYU+PXLG
XM>0``!OPB;P`((&\`#"`O`!!.KO_$+%].=2\.+'D```;\(F\`""!O``Q.KO^^L
XM+%].=2\.+'D```;\(&\`"$ZN_[@L7TYU+PXL>0``!OPB;P`(3J[_LBQ?3G4OQ
XM#BQY```&_")O``A,[P`#``Q.KO\0+%].=0``2.<P`BQY```&_"!O`!!,[P`/B
XM`!1.KO[@3-]`#$YU``!(YS`"+'D```;\(F\`$$SO``\`%$ZN_LY,WT`,3G4`Q
XM`"\.+'D```;\(F\`""`O``Q.KOZJ+%].=4CG(`(L>0``!OP@;P`,3.\`!P`0O
XM3J[^>DS?0`1.=0``+PXL>0``!OQ,[P`#``A.KOX4+%].=0``+PXL>0``!OP@P
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```&^"!O``A.J
XMKO^^+%].=2\.+'D```;X(&\`"$ZN_[@L7TYU+PXL>0``!O@@;P`(3J[_.BQ?H
XM3G4O#BQY```&^"!O``A.KO\T+%].=2\.+'D```;X(&\`"$ZN_PHL7TYU+PXLJ
XM>0``!O@@;P`(3J[^U"Q?3G4```/L````!@````(```!H````5````$`````L)
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.11 (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.