/*
 *  Source machine generated by GadToolsBox V2.0b
 *  which is (c) Copyright 1991-1993 Jaba Development
 *
 *  GUI Designed by : Allan Savage
 */

#include <exec/types.h>
#include <clib/diskfont_protos.h>
#include <clib/asl_protos.h>
#include <intuition/intuition.h>
#include <intuition/classes.h>
#include <intuition/classusr.h>
#include <intuition/imageclass.h>
#include <intuition/gadgetclass.h>
#include <libraries/gadtools.h>
#include <graphics/displayinfo.h>
#include <graphics/gfxbase.h>
#include <clib/exec_protos.h>
#include <clib/intuition_protos.h>
#include <clib/gadtools_protos.h>
#include <clib/graphics_protos.h>
#include <clib/utility_protos.h>
#include <string.h>

#include <library/prog_bar.h>


#define GetString( g )      ((( struct StringInfo * )g->SpecialInfo )->Buffer  )
#define GetNumber( g )      ((( struct StringInfo * )g->SpecialInfo )->LongInt )

#define GD_Border                              0
#define GD_Direction                           1
#define GD_T_Mode                              2
#define GD_T_Pos                               3
#define GD_Size                                4
#define GD_Width                               5
#define GD_Height                              6
#define GD_Delta                               7
#define GD_Top                                 8
#define GD_Left                                9
#define GD_T_Colour                            10
#define GD_TB_Colour                           11
#define GD_B_Colour                            12
#define GD_BB_Colour                           13
#define GD_Font                                14

#define PB_Demo_CNT 15


#define START_SIZE   100
#define START_WIDTH  320
#define START_HEIGHT 25
#define START_DELTA  1
#define START_TOP    190
#define START_LEFT   160

void wbmain( void );
void main( void );

UBYTE AllocateFontReq ( void );
void FreeFontReq (void);

int BorderClicked( void );
int DirectionClicked( void );
int T_ModeClicked( void );
int T_PosClicked( void );
int SizeClicked( void );
int WidthClicked( void );
int HeightClicked( void );
int DeltaClicked( void );
int TopClicked( void );
int LeftClicked( void );
int T_ColourClicked( void );
int TB_ColourClicked( void );
int B_ColourClicked( void );
int BB_ColourClicked( void );
int FontClicked( void );
int PB_DemoQuit( void );

int SetupScreen( void );
void CloseDownScreen( void );
void PB_DemoRender( void );
int HandlePB_DemoIDCMP( void );
int OpenPB_DemoWindow( void );
void ClosePB_DemoWindow( void );



extern struct IntuitionBase *IntuitionBase;
extern struct Library       *GadToolsBase;

struct Screen         *Scr = NULL;
APTR                   VisualInfo = NULL;
struct Window         *PB_DemoWnd = NULL;
struct Gadget         *PB_DemoGList = NULL;
struct Menu           *PB_DemoMenus = NULL;
struct IntuiMessage    PB_DemoMsg;
struct Gadget         *PB_DemoGadgets[15];
UWORD                  PB_DemoLeft = 0;
UWORD                  PB_DemoTop = 0;
UWORD                  PB_DemoWidth = 640;
UWORD                  PB_DemoHeight = 245;
UBYTE                 *PB_DemoWdt = (UBYTE *)"Progress Bar Demonstration";
struct FontRequester  *FontReq = NULL;
PBAR                  *PBar_Ptr = NULL;

struct TextFont       *P_TFont = NULL;
struct TextAttr        P_TAttr;
int                    P_Value;
int                    P_Delta;
int                    P_Size;

UBYTE *Border0Labels[] = {
   (UBYTE *)"None",
   (UBYTE *)"Plain",
   (UBYTE *)"Recessed",
   (UBYTE *)"Raised",
   (UBYTE *)"Ridge",
   NULL };

UBYTE *Direction0Labels[] = {
   (UBYTE *)"Right",
   (UBYTE *)"Left",
   (UBYTE *)"Up",
   (UBYTE *)"Down",
   NULL };

UBYTE *T_Mode0Labels[] = {
   (UBYTE *)"None",
   (UBYTE *)"Percent",
   (UBYTE *)"Value",
   NULL };

UBYTE *T_Pos0Labels[] = {
   (UBYTE *)"Below",
   (UBYTE *)"Above",
   (UBYTE *)"Left",
   (UBYTE *)"Right",
   (UBYTE *)"Centre",
   NULL };

struct TextAttr topaz8 = {
   ( STRPTR )"topaz.font", 8, 0x00, 0x01 };

struct NewMenu PB_DemoNewMenu[] = {
   NM_TITLE, (STRPTR)"Prog_Bar Demo", NULL, 0, NULL, NULL,
   NM_ITEM, (STRPTR)"About", NULL, 0, NULL, NULL,
   NM_SUB, (STRPTR)"Prog_Bar Demo Program", NULL, 0, 0L, NULL,
   NM_SUB, (STRPTR)"     Written By", NULL, 0, 0L, NULL,
   NM_SUB, (STRPTR)"    Allan Savage", NULL, 0, 0L, NULL,
   NM_SUB, (STRPTR)"       © 1996", NULL, 0, 0L, NULL,
   NM_SUB, (STRPTR)NM_BARLABEL, NULL, 0, 0L, NULL,
   NM_SUB, (STRPTR)"  Interface created", NULL, 0, 0L, NULL,
   NM_SUB, (STRPTR)"  using GadToolsBox", NULL, 0, 0L, NULL,
   NM_SUB, (STRPTR)"       v37.300", NULL, 0, 0L, NULL,
   NM_SUB, (STRPTR)NM_BARLABEL, NULL, 0, 0L, NULL,
   NM_SUB, (STRPTR)" Code compiled using", NULL, 0, 0L, NULL,
   NM_SUB, (STRPTR)"  Dice C v2.07.56 R", NULL, 0, 0L, NULL,
   NM_ITEM, (STRPTR)NM_BARLABEL, NULL, 0, 0L, NULL,
   NM_ITEM, (STRPTR)"Quit", (STRPTR)"Q", 0, 0L, (APTR)PB_DemoQuit,
   NM_END, NULL, NULL, 0, 0L, NULL };

UWORD PB_DemoGTypes[] = {
   CYCLE_KIND,
   CYCLE_KIND,
   CYCLE_KIND,
   CYCLE_KIND,
   SLIDER_KIND,
   SLIDER_KIND,
   SLIDER_KIND,
   SLIDER_KIND,
   SLIDER_KIND,
   SLIDER_KIND,
   PALETTE_KIND,
   PALETTE_KIND,
   PALETTE_KIND,
   PALETTE_KIND,
   BUTTON_KIND
};

struct NewGadget PB_DemoNGad[] = {
   125, 7, 121, 13, (UBYTE *)"Border", NULL, GD_Border, PLACETEXT_LEFT, NULL, (APTR)BorderClicked,
   125, 24, 121, 13, (UBYTE *)"Direction", NULL, GD_Direction, PLACETEXT_LEFT, NULL, (APTR)DirectionClicked,
   125, 41, 121, 13, (UBYTE *)"Text Mode", NULL, GD_T_Mode, PLACETEXT_LEFT, NULL, (APTR)T_ModeClicked,
   125, 58, 121, 13, (UBYTE *)"Text Position", NULL, GD_T_Pos, PLACETEXT_LEFT, NULL, (APTR)T_PosClicked,
   354, 7, 223, 11, (UBYTE *)"Size", NULL, GD_Size, PLACETEXT_LEFT, NULL, (APTR)SizeClicked,
   354, 63, 223, 11, (UBYTE *)"Width", NULL, GD_Width, PLACETEXT_LEFT, NULL, (APTR)WidthClicked,
   354, 79, 223, 11, (UBYTE *)"Height", NULL, GD_Height, PLACETEXT_LEFT, NULL, (APTR)HeightClicked,
   354, 21, 223, 11, (UBYTE *)"Change By", NULL, GD_Delta, PLACETEXT_LEFT, NULL, (APTR)DeltaClicked,
   354, 35, 223, 11, (UBYTE *)"TopEdge", NULL, GD_Top, PLACETEXT_LEFT, NULL, (APTR)TopClicked,
   354, 49, 223, 11, (UBYTE *)"LeftEdge", NULL, GD_Left, PLACETEXT_LEFT, NULL, (APTR)LeftClicked,
   0, 110, 145, 30, (UBYTE *)"Text Colour", NULL, GD_T_Colour, PLACETEXT_ABOVE, NULL, (APTR)T_ColourClicked,
   165, 110, 145, 30, (UBYTE *)"Text Back Colour", NULL, GD_TB_Colour, PLACETEXT_ABOVE, NULL, (APTR)TB_ColourClicked,
   330, 110, 145, 30, (UBYTE *)"Bar Colour", NULL, GD_B_Colour, PLACETEXT_ABOVE, NULL, (APTR)B_ColourClicked,
   495, 110, 145, 30, (UBYTE *)"Bar Back Colour", NULL, GD_BB_Colour, PLACETEXT_ABOVE, NULL, (APTR)BB_ColourClicked,
   125, 77, 121, 13, (UBYTE *)"Select Font", NULL, GD_Font, PLACETEXT_IN, NULL, (APTR)FontClicked
};

ULONG PB_DemoGTags[] = {
   (GTCY_Labels), (ULONG)&Border0Labels[ 0 ], (GTCY_Active), 1, (TAG_DONE),
   (GTCY_Labels), (ULONG)&Direction0Labels[ 0 ], (TAG_DONE),
   (GTCY_Labels), (ULONG)&T_Mode0Labels[ 0 ], (TAG_DONE),
   (GTCY_Labels), (ULONG)&T_Pos0Labels[ 0 ], (TAG_DONE),
   (GTSL_Min), 0, (GTSL_Max), 500, (GTSL_Level), START_SIZE, (GTSL_MaxLevelLen), 3, (GTSL_LevelFormat), (ULONG)"%ld", (GTSL_LevelPlace), (PLACETEXT_RIGHT), (PGA_Freedom), LORIENT_HORIZ, (GA_RelVerify), TRUE, (TAG_DONE),
   (GTSL_Min), 0, (GTSL_Max), 320, (GTSL_Level), START_WIDTH, (GTSL_MaxLevelLen), 3, (GTSL_LevelFormat), (ULONG)"%ld", (GTSL_LevelPlace), (PLACETEXT_RIGHT), (PGA_Freedom), LORIENT_HORIZ, (GA_RelVerify), TRUE, (TAG_DONE),
   (GTSL_Min), 0, (GTSL_Max), 70, (GTSL_Level), START_HEIGHT, (GTSL_MaxLevelLen), 2, (GTSL_LevelFormat), (ULONG)"%ld", (GTSL_LevelPlace), (PLACETEXT_RIGHT), (PGA_Freedom), LORIENT_HORIZ, (GA_RelVerify), TRUE, (TAG_DONE),
   (GTSL_Min), 0, (GTSL_Max), 50, (GTSL_Level), START_DELTA, (GTSL_MaxLevelLen), 2, (GTSL_LevelFormat), (ULONG)"%ld", (GTSL_LevelPlace), (PLACETEXT_RIGHT), (PGA_Freedom), LORIENT_HORIZ, (GA_RelVerify), TRUE, (TAG_DONE),
   (GTSL_Min), 170, (GTSL_Max), 240, (GTSL_Level), START_TOP, (GTSL_MaxLevelLen), 3, (GTSL_LevelFormat), (ULONG)"%ld", (GTSL_LevelPlace), (PLACETEXT_RIGHT), (PGA_Freedom), LORIENT_HORIZ, (GA_RelVerify), TRUE, (TAG_DONE),
   (GTSL_Min), 30, (GTSL_Max), 300, (GTSL_Level), START_LEFT, (GTSL_MaxLevelLen), 3, (GTSL_LevelFormat), (ULONG)"%ld", (GTSL_LevelPlace), (PLACETEXT_RIGHT), (PGA_Freedom), LORIENT_HORIZ, (GA_RelVerify), TRUE, (TAG_DONE),
   (GTPA_Depth), 3, (GTPA_IndicatorHeight), 10, (GTPA_Color), 1, (GTPA_ColorOffset), 0, (TAG_DONE),
   (GTPA_Depth), 3, (GTPA_IndicatorHeight), 10, (GTPA_Color), 0, (GTPA_ColorOffset), 0, (TAG_DONE),
   (GTPA_Depth), 3, (GTPA_IndicatorHeight), 10, (GTPA_Color), 3, (GTPA_ColorOffset), 0, (TAG_DONE),
   (GTPA_Depth), 3, (GTPA_IndicatorHeight), 10, (GTPA_Color), 0, (GTPA_ColorOffset), 0, (TAG_DONE),
   (TAG_DONE)
};

struct ColorSpec ScreenColors[] = {
    0, 0x0A, 0x0A, 0x0A,
    1, 0x00, 0x00, 0x00,
    2, 0x0F, 0x0F, 0x0F,
    3, 0x06, 0x08, 0x0B,
    4, 0x0F, 0x00, 0x00,
    5, 0x00, 0x0F, 0x00,
    6, 0x00, 0x00, 0x0F,
    7, 0x0F, 0x0F, 0x00,
   ~0, 0x00, 0x00, 0x00 };

UWORD DriPens[] = {
   ~0 };







void wbmain( void )
{
   main ();
}

void main( void )
{
   int GoFlag = TRUE;

   if (!SetupScreen()) {
      if ( AllocateFontReq () ) {
         if (!OpenPB_DemoWindow()) {
            PBar_Ptr = CreateProgBar ( PB_DemoWnd,
                                       START_LEFT,
                                       START_TOP,
                                       START_WIDTH,
                                       START_HEIGHT,
                                       START_SIZE,
                                       TAG_DONE );
            if ( PBar_Ptr ) {
               P_Delta = START_DELTA;
               P_Value = 0;
               P_Size = START_SIZE;

               do {
                  Wait(1L << PB_DemoWnd->UserPort->mp_SigBit);
                  GoFlag = HandlePB_DemoIDCMP();
               } while (GoFlag);

               FreeProgBar ( PBar_Ptr );
            }
            ClosePB_DemoWindow();
         }
         FreeFontReq ();
      }
      CloseDownScreen();
   }
}

UBYTE AllocateFontReq ( void )
{
   FontReq = AllocAslRequestTags(ASL_FontRequest,
                                 ASL_LeftEdge, 170,
                                 ASL_Width, 300,
                                 ASL_TopEdge, 30,
                                 ASL_Height, 200,
                                 TAG_DONE);
   if(FontReq == NULL) {
      return FALSE;
   }
   return TRUE;
}

void FreeFontReq (void)
{
   if (FontReq) {
      FreeAslRequest(FontReq);
      FontReq = NULL;
   }
}

int SetupScreen( void )
{
   if ( ! ( Scr = OpenScreenTags( NULL, SA_Left,   0,
               SA_Top,     0,
               SA_Width,   640,
               SA_Height,  256,
               SA_Depth,   3,
               SA_Colors,  &ScreenColors[0],
               SA_Font, &topaz8,
               SA_Type, CUSTOMSCREEN,
               SA_DisplayID,  PAL_MONITOR_ID|HIRES_KEY,
               SA_AutoScroll, TRUE,
               SA_Overscan,   OSCAN_TEXT,
               SA_Pens, &DriPens[0],
               SA_Title,   "Progress Bar Demonstration",
               TAG_DONE )))
      return( 1L );

   if ( ! ( VisualInfo = GetVisualInfo( Scr, TAG_DONE )))
      return( 2L );

   return( 0L );
}


void CloseDownScreen( void )
{
   if ( VisualInfo ) {
      FreeVisualInfo( VisualInfo );
      VisualInfo = NULL;
   }

   if ( Scr        ) {
      CloseScreen( Scr );
      Scr = NULL;
   }
}

void PB_DemoRender( void )
{
   UWORD    offx, offy;

   offx = 0;
   offy = Scr->WBorTop + Scr->Font->ta_YSize + 1;


   DrawBevelBox( PB_DemoWnd->RPort, offx + 0, offy + 143, 640, 102, GT_VisualInfo, VisualInfo, TAG_DONE );
   DrawBevelBox( PB_DemoWnd->RPort, offx + 4, offy + 145, 632, 98, GT_VisualInfo, VisualInfo, GTBB_Recessed, TRUE, TAG_DONE );
}

int HandlePB_DemoIDCMP( void )
{
   struct IntuiMessage  *m;
   struct MenuItem      *n;
   int         (*func)( void );
   BOOL        running = TRUE;

   PB_DemoRender();
   while( m = GT_GetIMsg( PB_DemoWnd->UserPort )) {

      CopyMem(( char * )m, ( char * )&PB_DemoMsg, (long)sizeof( struct IntuiMessage ));

      GT_ReplyIMsg( m );

      switch ( PB_DemoMsg.Class ) {

         case  IDCMP_REFRESHWINDOW:
            GT_BeginRefresh( PB_DemoWnd );
            PB_DemoRender();
            RefreshProgBar ( PBar_Ptr );
            GT_EndRefresh( PB_DemoWnd, TRUE );
            break;

         case  IDCMP_GADGETUP:
         case  IDCMP_GADGETDOWN:
            func = ( void * )(( struct Gadget * )PB_DemoMsg.IAddress )->UserData;
            if ( func ) running = func();
            break;

         case  IDCMP_MENUPICK:
            while( PB_DemoMsg.Code != MENUNULL ) {
               n = ItemAddress( PB_DemoMenus, PB_DemoMsg.Code );
               func = (void *)(GTMENUITEM_USERDATA( n ));
               if ( func ) running = func();
               PB_DemoMsg.Code = n->NextSelect;
            }
            break;

         case IDCMP_INTUITICKS:
            if ( P_Value == 0 ) {
               ClearText ( PBar_Ptr );
            }
            UpdateProgBar( PBar_Ptr, P_Value );
            P_Value += P_Delta;
            if ( P_Value > P_Size ) {
               P_Value = 0;
            }
            break;
      }
   }
   return( running );
}

int OpenPB_DemoWindow( void )
{
   struct NewGadget  ng;
   struct Gadget  *g;
   UWORD    lc, tc;
   UWORD    offx = 0, offy = Scr->WBorTop + Scr->RastPort.TxHeight + 1;

   if ( ! ( g = CreateContext( &PB_DemoGList )))
      return( 1L );

   for( lc = 0, tc = 0; lc < PB_Demo_CNT; lc++ ) {

      CopyMem((char * )&PB_DemoNGad[ lc ], (char * )&ng, (long)sizeof( struct NewGadget ));

      ng.ng_VisualInfo = VisualInfo;
      ng.ng_TextAttr   = &topaz8;
      ng.ng_LeftEdge  += offx;
      ng.ng_TopEdge   += offy;

      PB_DemoGadgets[ lc ] = g = CreateGadgetA((ULONG)PB_DemoGTypes[ lc ], g, &ng, ( struct TagItem * )&PB_DemoGTags[ tc ] );

      while( PB_DemoGTags[ tc ] ) tc += 2;
      tc++;

      if ( NOT g )
         return( 2L );
   }

   if ( ! ( PB_DemoMenus = CreateMenus( PB_DemoNewMenu, GTMN_FrontPen, 0L, TAG_DONE )))
      return( 3L );

   LayoutMenus( PB_DemoMenus, VisualInfo, GTMN_TextAttr, &topaz8, TAG_DONE );

   if ( ! ( PB_DemoWnd = OpenWindowTags( NULL,
            WA_Left, PB_DemoLeft,
            WA_Top,     PB_DemoTop,
            WA_Width,   PB_DemoWidth,
            WA_Height,  PB_DemoHeight + offy,
            WA_IDCMP,   CYCLEIDCMP|SLIDERIDCMP|PALETTEIDCMP|BUTTONIDCMP|
                        IDCMP_MENUPICK|IDCMP_REFRESHWINDOW|IDCMP_INTUITICKS,
            WA_Flags,   WFLG_SMART_REFRESH|WFLG_BACKDROP|WFLG_BORDERLESS|
                        WFLG_ACTIVATE,
            WA_Gadgets, PB_DemoGList,
            WA_ScreenTitle,   "Progress Bar Demonstration",
            WA_CustomScreen,  Scr,
            TAG_DONE )))
   return( 4L );

   SetMenuStrip( PB_DemoWnd, PB_DemoMenus );
   GT_RefreshWindow( PB_DemoWnd, NULL );

   PB_DemoRender();

   return( 0L );
}

void ClosePB_DemoWindow( void )
{
   if ( PB_DemoMenus      ) {
      ClearMenuStrip( PB_DemoWnd );
      FreeMenus( PB_DemoMenus );
      PB_DemoMenus = NULL; }

   if ( PB_DemoWnd        ) {
      CloseWindow( PB_DemoWnd );
      PB_DemoWnd = NULL;
   }

   if ( PB_DemoGList      ) {
      FreeGadgets( PB_DemoGList );
      PB_DemoGList = NULL;
   }
}

int BorderClicked( void )
{
   /* routine when gadget "Border" is clicked. */
   SetProgBarAttrs ( PBar_Ptr, PB_BorderType, PB_DemoMsg.Code + 10, TAG_DONE );
   return TRUE;
}

int DirectionClicked( void )
{
   /* routine when gadget "Direction" is clicked. */
   SetProgBarAttrs ( PBar_Ptr, PB_Direction, PB_DemoMsg.Code, TAG_DONE );
   return TRUE;
}

int T_ModeClicked( void )
{
   /* routine when gadget "Text Mode" is clicked. */
   ClearText ( PBar_Ptr );
   SetProgBarAttrs ( PBar_Ptr, PB_TextMode, PB_DemoMsg.Code + 20, TAG_DONE );
   return TRUE;
}

int T_PosClicked( void )
{
   /* routine when gadget "Text Position" is clicked. */
   ClearText ( PBar_Ptr );
   SetProgBarAttrs ( PBar_Ptr, PB_TextPosition, PB_DemoMsg.Code + 30, TAG_DONE );
   return TRUE;
}


int SizeClicked( void )
{
   /* routine when gadget "Size" is clicked. */
   ClearText( PBar_Ptr );
   P_Size = PB_DemoMsg.Code;
   P_Value = 0;
   SetProgBarAttrs ( PBar_Ptr, PB_BarSize, P_Size,
                               PB_BarValue, 0,
                               TAG_DONE );
   return TRUE;
}

int WidthClicked( void )
{
   /* routine when gadget "Width" is clicked. */
   ClearProgBar ( PBar_Ptr );
   SetProgBarAttrs ( PBar_Ptr, PB_Width, PB_DemoMsg.Code, TAG_DONE );
   return TRUE;
}

int HeightClicked( void )
{
   /* routine when gadget "Height" is clicked. */
   ClearProgBar ( PBar_Ptr );
   SetProgBarAttrs ( PBar_Ptr, PB_Height, PB_DemoMsg.Code, TAG_DONE );
   return TRUE;
}

int DeltaClicked( void )
{
   /* routine when gadget "Change By" is clicked. */
   P_Delta = PB_DemoMsg.Code;
   return TRUE;
}

int TopClicked( void )
{
   /* routine when gadget "TopEdge" is clicked. */
   ClearProgBar ( PBar_Ptr );
   SetProgBarAttrs ( PBar_Ptr, PB_TopEdge, PB_DemoMsg.Code, TAG_DONE );
   return TRUE;
}

int LeftClicked( void )
{
   /* routine when gadget "LeftEdge" is clicked. */
   ClearProgBar ( PBar_Ptr );
   SetProgBarAttrs ( PBar_Ptr, PB_LeftEdge, PB_DemoMsg.Code, TAG_DONE );
   return TRUE;
}

int T_ColourClicked( void )
{
   /* routine when gadget "Text Colour" is clicked. */
   SetProgBarAttrs ( PBar_Ptr, PB_TextColour, PB_DemoMsg.Code, TAG_DONE );
   return TRUE;
}

int TB_ColourClicked( void )
{
   /* routine when gadget "Text Back Colour" is clicked. */
   SetProgBarAttrs ( PBar_Ptr, PB_TextBackColour, PB_DemoMsg.Code, TAG_DONE );
   return TRUE;
}

int B_ColourClicked( void )
{
   /* routine when gadget "Bar Colour" is clicked. */
   SetProgBarAttrs ( PBar_Ptr, PB_BarColour, PB_DemoMsg.Code, TAG_DONE );
   return TRUE;
}

int BB_ColourClicked( void )
{
   /* routine when gadget "Bar Back Colour" is clicked. */
   SetProgBarAttrs ( PBar_Ptr, PB_BarBackColour, PB_DemoMsg.Code, TAG_DONE );
   return TRUE;
}

int FontClicked( void )
{
   /* routine when gadget "Select Font" is clicked. */
   BOOL Flag;

   Flag = AslRequestTags(FontReq,
                         ASL_Window, PB_DemoWnd,
                         ASL_FuncFlags, FILF_NEWIDCMP,
                         TAG_DONE);
   if ( Flag ) {
      memcpy ( &P_TAttr, &FontReq->fo_Attr, sizeof ( P_TAttr ) );
      if ( P_TFont ) {
         CloseFont( P_TFont );
         P_TFont = NULL;
      }
      if ( P_TFont = OpenDiskFont( &P_TAttr ) ) {
         ClearText ( PBar_Ptr );
         SetProgBarAttrs ( PBar_Ptr, PB_TextFont, &P_TAttr, TAG_DONE );
      }
   } else {
         ClearText ( PBar_Ptr );
         SetProgBarAttrs ( PBar_Ptr, PB_TextFont, NULL, TAG_DONE );
   }
   return TRUE;
}

int PB_DemoQuit( void )
{
   /* routine when (sub)item "Quit" is selected. */
   return FALSE;
}
