/*******************  main.c  ********************
 *                                               *
 *                                               *
 *                     hyper                     *
 *                                               *
 *                  © by Koessi                  *
 *                                               *
 *             Saturday, 22 Aug 1992             *
 *                                               *
 *                                               *
 *************************************************/

#include "defs.h"

Prototype void cleanup(void);

Prototype char *taskname;
Prototype short backmode;

char *taskname = NULL;
short backmode = FALSE;



/*************************************************
 *                                               *
 *                                               *
 *    FUNCTION: main                             *
 *                                               *
 *                                               *
 *    INPUT:    int argc                         *
 *              char **argv                      *
 *                                               *
 *    OUTPUT:   int                              *
 *                                               *
 *    NOTE:                                      *
 *                                               *
 *************************************************/


int
main(int argc, char **argv)
{
  char  *d, *s, *buf = charbuffer;

  switch (argc)
  {
  case 3:
    s = argv[2];
    while (*s = toupper(*s))
      ++s;

  case 2:
    if (*((short *)argv[1]) == '-b')
      backmode = TRUE;
    else
    {
      d = buf;
      s = argv[1];
      while (*d++ = *s++);
      AddPart(buf, (argc == 2) ? str_main : argv[2], 64);
    }

  case 1:
    taskname = argv[0];
    break;

  default:
    return(10);
    break;
  }

  if (FindPort(portname))
    SendRxMsg(buf);
  else
  {
    OpenRexx();
    if (backmode)
    {
      while (backmode)
      {
        WaitPort(rexx_port);
        if (GetRxMsg() >= NEWNODE_DOCNOTFOUND)   /*  no doc/win ? */
          backmode = TRUE;
        else
          DoHlpWindow();
      }
    }
    else
    {
      if (argc == 1)
      {
        if (!LoadDoc())
        {
          cleanup();
          return(5);
        }
      }
      if (NewNode(buf) < NEWNODE_DOCNOTFOUND)
        DoHlpWindow();
    }
  }
  cleanup();
  return(0);
}

/*************************************************
 *                                               *
 *                                               *
 *    FUNCTION: cleanup                          *
 *                                               *
 *                                               *
 *    INPUT:    void                             *
 *                                               *
 *    OUTPUT:   void                             *
 *                                               *
 *    NOTE:                                      *
 *                                               *
 *************************************************/


void
cleanup(void)
{
  if (remkey)
    FreeRemember(&remkey, TRUE);

  ClrWindow(TRUE);

  if (gadsfont)
    CloseFont(gadsfont);

  if (txtfont != gadsfont)
    CloseFont(txtfont);

  if (DocFile)
    Close(DocFile);

  CloseRexx();
}


