/* prf_apphandler.c */
/* V1.1 9-3-92 */

#include "prf.h"

UWORD chip iconI1Data[] =
{
/* Plane 0 */
    0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
    0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
    0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
    0x0000,0x0000,0x1000,0x0000,0x0020,0x0000,0x0000,0x007F,
    0xF000,0x0000,0x0000,0x0000,0x1002,0x0000,0x0020,0x0000,
    0x0000,0x00CB,0xE000,0x0000,0x0000,0x0000,0x1000,0x0000,
    0x0020,0x0000,0x0000,0x00FB,0xBA04,0x0000,0x0000,0x0000,
    0x1000,0x0000,0x0020,0x0000,0x0000,0x00DE,0x6F00,0x0000,
    0x0000,0x0000,0x1000,0x0000,0x0020,0x0000,0x0000,0x00B0,
    0x0000,0x0000,0x0000,0x0000,0x1000,0x0000,0x0020,0x0000,
    0x0000,0x00C1,0x17BE,0x3000,0x0000,0x0000,0x10E1,0x8000,
    0x0020,0x0000,0x0000,0x0012,0x1C00,0x0000,0x0000,0x0000,
    0x1000,0x0000,0x0020,0x0000,0x003F,0xFFFF,0xFFFF,0xFFFF,
    0xF000,0x00FF,0xFFFF,0xFFFE,0xE077,0xFF80,0x00FF,0xFFFF,
    0xFFFD,0x5EE9,0xFF80,0x00FF,0xFFFF,0xFFFF,0xF7FF,0xFF80,
    0x00FF,0xFFFF,0xFFFF,0xDFFF,0xFF80,0x00FF,0xFFFF,0xFFFF,
    0xFFFF,0xFC00,0x01FF,0xFFFF,0xFFFF,0xFFFF,0xFC00,0x02FF,
    0xFFFF,0xFFFF,0xFFFF,0xFC00,0x033E,0x0000,0x0000,0x0003,
    0xE000,0x00F0,0x0000,0x0000,0x0000,0x0000,0x000C,0x0000,
    0x0000,0x0000,0x0000,0x0018,0x0000,0x0000,0x0000,0x0000,
    0x0060,0x0000,0x0000,0x0000,0x0000,0xFF80,0x0000,0x0000,
    0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
    0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
    0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
    0x0000,0x0000,0x0000,
/* Plane 1 */
    0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
    0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
    0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
    0x0000,0x0000,0x2FFF,0xFFFF,0xFFD0,0x0000,0x0000,0x3F80,
    0x0FFF,0xFFF0,0x0000,0x0000,0x2FFD,0xFFFF,0xFFD0,0x0000,
    0x0000,0x3F34,0x1FFF,0xFFF0,0x0000,0x0000,0x2FFF,0xFFFF,
    0xFFD0,0x0000,0x0000,0x3F04,0x45FB,0xFFF0,0x0000,0x0000,
    0x2FFF,0xFFFF,0xFFD0,0x0000,0x0000,0x3F21,0x90FF,0xFFF0,
    0x0000,0x0000,0x2FFF,0xFFFF,0xFFD0,0x0000,0x0000,0x3F4F,
    0xFFFF,0xFFF0,0x0000,0x0000,0x2FFF,0xFFFF,0xFFD0,0x0000,
    0x0000,0x3F3E,0xE841,0xCFF0,0x0000,0x0000,0x2F1E,0x7FFF,
    0xFFD0,0x0000,0x0000,0x3FED,0xE3FF,0xFFF0,0x0000,0x0000,
    0x2FFF,0xFFFF,0xFFD0,0x0000,0x0000,0x0000,0x0000,0x0000,
    0x0000,0x0000,0x0000,0x0001,0x1F88,0x0780,0x0000,0x0000,
    0x0002,0xA116,0x0780,0x0000,0x0000,0x0000,0x0800,0x0780,
    0x0000,0x0000,0x0000,0x2000,0x0780,0x0000,0x0000,0x0000,
    0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
    0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0700,0x0000,
    0x0000,0x0000,0x0000,0x7FE0,0x0000,0x0000,0x0000,0x0003,
    0xFFFC,0x0000,0x0000,0x0000,0x001F,0xFFFF,0x8000,0x0000,
    0x0000,0x01FF,0xFFFF,0xF000,0x0000,0x0000,0x0FFF,0xFFFF,
    0xFE00,0x0000,0x0000,0x3FFF,0xFFFF,0xFF80,0x0000,0x0000,
    0x001F,0xFFFF,0x8000,0x0000,0x0000,0x001F,0xFFFF,0x8000,
    0x0000,0x0000,0x001F,0xFFFF,0x8000,0x0000,0x0000,0x001F,
    0xFFFF,0x8000,0x0000,
/* Plane 2 */
    0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
    0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
    0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
    0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
    0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
    0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
    0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
    0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
    0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
    0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
    0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
    0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
    0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
    0x0000,0x0003,0x8000,0x0000,0x0000,0x0000,0x0003,0x8000,
    0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
    0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
    0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
    0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0700,0x0000,
    0x0000,0x0000,0x0000,0x7FE0,0x0000,0x0000,0x0000,0x0003,
    0xFFFC,0x0000,0x0000,0x0000,0x001F,0xFFFF,0x8000,0x0000,
    0x0000,0x01FF,0xFFFF,0xF000,0x0000,0x0000,0x0FFF,0xFFFF,
    0xFE00,0x0000,0x0000,0x3FFF,0xFFFF,0xFF80,0x0000,0x0000,
    0x001F,0xFFFF,0x8000,0x0000,0x0000,0x001F,0xFFFF,0x8000,
    0x0000,0x0000,0x001F,0xFFFF,0x8000,0x0000,0x0000,0x001F,
    0xFFFF,0x8000,0x0000,
};

struct Image iconI1 =
{
    0, 0,                       /* Upper left corner */
    73, 39, 3,                  /* Width, Height, Depth */
    iconI1Data,             /* Image data */
    0x0007, 0x0000,             /* PlanePick, PlaneOnOff */
    NULL                        /* Next image */
};

struct DiskObject icon =
{
    WB_DISKMAGIC,               /* Magic Number */
    WB_DISKVERSION,             /* Version */
    {                           /* Embedded Gadget Structure */
        NULL,                   /* Next Gadget Pointer */
        0, 0, 73, 40,           /* Left,Top,Width,Height */
        GADGIMAGE | GADGHCOMP,  /* Flags */
        RELVERIFY,              /* Activation Flags */
        BOOLGADGET,             /* Gadget Type */
        (APTR)&iconI1,      /* Render Image */
        NULL,                   /* Select Image */
        NULL,                   /* Gadget Text */
        NULL,                   /* Mutual Exclude */
        NULL,                   /* Special Info */
        0,                      /* Gadget ID */
        NULL,                   /* User Data */
    },
    WBTOOL,                     /* Icon Type */
    NULL,                       /* Default Tool */
    NULL,                       /* Tool Type Array */
    NO_ICON_POSITION,           /* Current X */
    NO_ICON_POSITION,           /* Current Y */
    NULL,                       /* Drawer Structure */
    NULL,                       /* Tool Window */
    0                           /* Stack Size */
};

long OpenApp(struct prf_info *info)
{
 if(info->appPort = CreateMsgPort())
 {
  info->appPort->mp_Node.ln_Pri  = 0;
  if(info->amenu = AddAppMenuItem(0,0,(UBYTE *)T_MENUITEM,info->appPort,TAG_DONE))
  {
   if(info->aicon = AddAppIcon(0,0,(UBYTE *)T_APPICON,info->appPort,NULL,&icon,TAG_END))
   {
    return ((long)TRUE);
   }
  }
 }
 return ((long)FALSE);
}

void CloseApp(struct prf_info *info)
{
 if(info->appPort)
 {
  if(info->aWnd)  RemoveAppWindow(info->aWnd);
  if(info->amenu) RemoveAppMenuItem(info->amenu);
  if(info->aicon) RemoveAppIcon(info->aicon);
  while(info->amsg = (struct AppMessage *)GetMsg(info->appPort))
   ReplyMsg((struct Message *)info->amsg);
  DeleteMsgPort(info->appPort);
 }
}

void ChangeApp(struct prf_info *info)
{
 if(!info->Swd)
 {
  if(OpenSwd(info))
  {
   info->aWnd = AddAppWindow(0,0,info->Swd,info->appPort,TAG_DONE);
  }
 }
 else
 {
  if(info->aWnd)
  {
   RemoveAppWindow(info->aWnd);
   info->aWnd = NULL;
  }
  CloseSwd(info);
 }
}

long HandleAmsg(struct prf_info *info)
{
 ULONG i;
 UBYTE f[256];
 long rc = CMD_NEUTRAL;
 switch(info->amsg->am_Type)
 {
  case  MTYPE_APPICON    : if(info->amsg->am_NumArgs != 0)
                           {
                            for(i = 0; i < info->amsg->am_NumArgs;i++)
                            {
                             long cmd = CMD_INSERTTAIL;
                             NameFromLock(info->amsg->am_ArgList[i].wa_Lock,f,256);
                             AddPart(f,info->amsg->am_ArgList[i].wa_Name,256);
                             info->Special1 = (APTR)f;
                             info->Special2 = (APTR)&cmd;
                             InsertName(info);
                             info->Special1 = NULL;
                             info->Special2 = NULL;
                            }
                            if(!(info->Swd))rc = CMD_PRINT;
                             else rc = CMD_NEUTRAL;
                           }
                           else
                           rc = CMD_CHANGEAPP;
                           break;
  case  MTYPE_APPWINDOW  : for(i = 0; i < info->amsg->am_NumArgs;i++)
                           {
                            long cmd = CMD_INSERTTAIL;
                            NameFromLock(info->amsg->am_ArgList[i].wa_Lock,f,256);
                            AddPart(f,info->amsg->am_ArgList[i].wa_Name,256);
                            info->Special1 = (APTR)f;
                            info->Special2 = (APTR)&cmd;
                            InsertName(info);
                            info->Special1 = NULL;
                            info->Special2 = NULL;
                           }
                           rc = CMD_NEUTRAL;
                           break;
  case MTYPE_APPMENUITEM : rc = CMD_CHANGEAPP;
                           break;
  default                : rc = CMD_NEUTRAL;
                           break;
 }
 return (rc);
}

