/*************************************************************************/
/* Autor      : RTA                                                      */
/* Computer   : Amiga                                                    */
/* Sprache    : Ansi C                                                   */
/* Compiler   : SAS C-Compiler Version 5.1a                              */
/* Dateiname  : status.c                                                 */
/* Projekt    : OnlineHelp                                               */
/* Erstellt am: 24 Aug 1991,14:15                                        */
/* Letzte Veränderung: 10 Nov 1991 von RTA                               */
/* Ausgabe wird nun mit RectFill gelöscht											 */
/*************************************************************************/


#include "online.h"

static struct Window *statuswin=NULL;
static struct RastPort *myrp=NULL;

/*************************************************************************/
/*                      Schließt das Status-Window                       */
/*************************************************************************/
void closestatus()
{
if(statuswin)
   {
   CloseWindow(statuswin);
   myrp=NULL;
	statuswin=NULL;
   }
}

/*************************************************************************/
/*                       Öffnet das Status-Window                        */
/*************************************************************************/
BOOL openstatus()
{
struct NewWindow new_window = {
  0,0,400,30,1,2,
  RAWKEY+CLOSEWINDOW,
  WINDOWCLOSE+WINDOWDRAG+WINDOWDEPTH+NOCAREREFRESH+SMART_REFRESH+ACTIVATE,
  NULL,NULL,
  (UBYTE *)"OnlineHelp Status",NULL,NULL,
  150,50,640,272,CUSTOMSCREEN };

#define NEWWINDOW   new_window

	if(!statuson)
		{
		if(statuswin)closestatus();
		return(TRUE);
		}

   if(statuswin) return(TRUE);
	if(!myscreen) NEWWINDOW.Screen=IntuitionBase->ActiveScreen;
	else  NEWWINDOW.Screen=myscreen;
   Center(&NEWWINDOW,0,0);
   statuswin=OpenWindow(&NEWWINDOW);
   if(!statuswin)
		{
        statuswin=NULL;
        return(FALSE);
       }
   myrp=statuswin->RPort;
   SetDrMd(myrp,JAM2);
   return(TRUE);
}

/*************************************************************************/
/*                     Gibt den String <puffer> aus                      */
/*************************************************************************/
BOOL printstatus(BYTE *puffer)
{
   register struct IntuiMessage *message;

	if(!statuson)return(TRUE);
   if(!statuswin) if(!openstatus()) return(FALSE);
   SetAPen(myrp,0);
	RectFill(myrp,5,12,380,23);
   SetAPen(myrp,1);
   Move(statuswin->RPort,10,20);
   Text(statuswin->RPort,puffer,strlen(puffer));
   if(message = (struct IntuiMessage *)GetMsg(statuswin->UserPort))
   ReplyMsg((struct Message *)message);
   if(message->Class==CLOSEWINDOW || (message->Class==RAWKEY && message->Code==ESC))
            {
             if(TwoGadRequest(errortext.ende))return(FALSE);
             else return(TRUE);
            }
   else return(TRUE);
}

/*************************************************************************/
/*         Wartet auf eine Aktion vom Benutzer im Status-Window          */
/*************************************************************************/
void waitstatus()
{
   struct IntuiMessage *message;
   ULONG               class;
   USHORT              code;

  if(!statuson)return;
  if(!statuswin) return;
  FOREVER
  {
  if ((message = (struct IntuiMessage *)GetMsg(statuswin->UserPort)) == 0L)
         {
          Wait(1L<<statuswin->UserPort->mp_SigBit);
          continue;
         }
      class     = message->Class;
      code      = message->Code;
      ReplyMsg((struct Message *)message);
      switch (class)
         {
           case RAWKEY      :
           case CLOSEWINDOW : return;
                              break;
        }
   }
}
