/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *\
* |_o_o|\\ Copyright (c) 1987 The Software Distillery.  All Rights Reserved *
* |. o.| ||          Written by Doug Walker                                 *
* | .  | ||          The Software Distillery                                *
* | o  | ||          235 Trillingham Lane                                   *
* |  . |//           Cary, NC 27511                                         *
* ======             BBS:(919)-471-6436                                     *
\* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */

#include "mydebug.h"

#include "exec/types.h"
#include "exec/memory.h"
#include "intuition/intuition.h"
#include "graphics/gfxbase.h"
#include "stdio.h"

#include "hackicon.h"

#define COPY_FROM 0
#define COPY_TO   1
#define COPY_DONE 2

extern struct Menu Titles[], CopyTitles[];

extern struct Screen   *Screen;
extern struct Window   *Window;
extern struct ViewPort *ViewPort;

extern struct iconfont *fonts[2];
extern int fontnum;
extern USHORT colormap[];

CopyIcon(repeat)
int repeat;
{
   struct IntuiMessage *imsg;
   ULONG Class;
   USHORT Code;
   USHORT icondata[ILENGTH];
   int MouseX, MouseY;
   int state, which, i;
   struct Image *curimage, *nextimage;

   NewPtr(Window, 1);
   ClearMenuStrip(Window);
   SetMenuStrip(Window, CopyTitles);

   state = COPY_FROM;
   
   while(state != COPY_DONE)
   {
      if(!(imsg = (struct IntuiMessage *)GetMsg(Window->UserPort)))
      {
         WaitPort(Window->UserPort);
         continue;
      }
      Class  = imsg->Class;
      Code   = imsg->Code;
      MouseX = imsg->MouseX;
      MouseY = imsg->MouseY;
      ReplyMsg(imsg);

      switch(Class)
      {
         case MOUSEBUTTONS:
            BUG(5, ("main: case MOUSEBUTTONS\n"))
            if(Code == SELECTDOWN)
               which = WhichIcon(MouseX, MouseY);
            else if(which >= 0 && fonts[fontnum] &&
                    which == WhichIcon(MouseX, MouseY))
            {
               if(state == COPY_FROM)
               {
BUG(5, ("Copy FROM # %d\n", which))
                  movmem((char *)(fonts[fontnum]->idata+(which*ILENGTH)),
                         (char *)icondata,
                         ILENGTH*sizeof(USHORT));
                  state = COPY_TO;
                  NewPtr(Window, 0);
               }
               else
               {
BUG(5, ("Copy TO # %d\n", which))
                  fonts[fontnum]->flags |= CHANGED;
                  if(fonts[fontnum]->firstchar > which) 
                     fonts[fontnum]->firstchar = which;
                  if(fonts[fontnum]->lastchar  < which) 
                     fonts[fontnum]->lastchar  = which;
                  movmem((char *)icondata,
                         (char *)(fonts[fontnum]->idata+(which*ILENGTH)),
                         ILENGTH*sizeof(USHORT));
                  curimage = fonts[fontnum]->images + which;
                  nextimage = curimage->NextImage;
                  curimage->NextImage = (struct Image *)NULL;
                  DrawImage(Window->RPort, curimage, 0, 0);
                  curimage->NextImage = nextimage;
                  if(repeat)
                  {
                     state = COPY_FROM;
                     NewPtr(Window, 1);
                  }
                  else
                     state = COPY_DONE;
	       }
            }
            break;

         case MENUPICK:
            BUG(5, ("Copy: case MENUPICK\n"))
            if(Code == MENUNULL) break;

            BUG(8, ("Copy: menunum = %d\n", MENUNUM(Code)))
            if((i = MENUNUM(Code)) > 0)
            {
               AboutHackicon();
               break;
            }

            BUG(8, ("Copy: itemnum = %d\n", ITEMNUM(Code)))
            i = ITEMNUM(Code);
            switch(i)
            {
               case MC_ALTFONT:
                  SetFont();
                  break;
                  
               case MC_CANCEL:
                  state = COPY_DONE;
                  break;

               default:
                  break;
            }
            break;

         default:
            break;
      }
   }

   ClearPointer(Window);
   ClearMenuStrip(Window);
   SetMenuStrip(Window, Titles);
   return(0);
}
