/******************************************************************************
 *
 * RCS ID
 * $Id: utils,v 1.1 1999/11/07 15:15:20 david Exp $
 *
 * HISTORY
 * $Log: utils,v $
 * Revision 1.1  1999/11/07 15:15:20  david
 * New WIMP configuration using toolbox libs
 *
 *
 *
 *****************************************************************************/                    

#include <stdlib.h>
#include <string.h>
#include <stdio.h>  
#include "kernel.h"
#include "swis.h"
#include "wimp.h"
#include "toolbox.h"
#include "event.h"
#include "wimplib.h"
#include "proginfo.h"
#include "quit.h"   
#include "gadgets.h"
#include "version.h"


#include "includes.h"
#include "smb.h"

#include "smbconfig.h"



int fontStrWidth(char *s)
{
   _kernel_swi_regs rin,rout;
   _kernel_oserror *e;

   rin.r[0] = 0;
   rin.r[1] = 1280;
   rin.r[2] = 1024;

   if (e=_kernel_swi(Font_Converttopoints, &rin, &rout))
   {
      return -1;
   }

   rin.r[0] = 0;
   rin.r[1] = (int)s;
   rin.r[2] = rout.r[1];
   rin.r[3] = rout.r[2];
   rin.r[4] = -1;
   rin.r[5] = strlen(s);

   if (e=_kernel_swi(Font_StringWidth, &rin, &rout))
   {
      return -1;
   }
                       
   rin.r[0] = 0;
   rin.r[1] = rout.r[2];
   rin.r[2] = rout.r[3];

   if (e=_kernel_swi(Font_ConverttoOS, &rin, &rout))
   {
      return -1;
   }

   return rout.r[1];
 
}

void screenToWorkCoords(BBox *user_box,WimpGetWindowStateBlock *state)
{
   if (user_box->xmax < user_box->xmin)
   {
      user_box->xmax ^= user_box->xmin;
      user_box->xmin ^= user_box->xmax;
      user_box->xmax ^= user_box->xmin;
   }
                                       
   if (user_box->ymax < user_box->ymin)
   {
      user_box->ymax ^= user_box->ymin;
      user_box->ymin ^= user_box->ymax;
      user_box->ymax ^= user_box->ymin;
   }             

   user_box->xmin = user_box->xmin + (state->xscroll - state->visible_area.xmin);
   user_box->ymin = user_box->ymin + (state->yscroll - state->visible_area.ymax);
   user_box->xmax = user_box->xmax + (state->xscroll - state->visible_area.xmin);
   user_box->ymax = user_box->ymax + (state->yscroll - state->visible_area.ymax);
}

BOOL boxexOverlap(BBox *b1, BBox *b2)
{
   BOOL result=False;

#if 0 
   DEBUG(2,("Boxes overlap (%d,%d)-(%d,%d)   (%d,%d)-(%d,%d)\n",
            b1->xmin, b1->ymin, b1->xmax, b1->ymax,
            b2->xmin, b2->ymin, b2->xmax, b2->ymax));  
#endif

   if (!result &&
       b1->ymin>=b2->ymin && b1->ymin<=b2->ymax &&
       b1->xmax>=b2->xmin && b1->xmax<=b2->xmax)
      result = True;

   if (!result &&
       b1->ymin>=b2->ymin && b1->ymin<=b2->ymax &&
       b1->xmin>=b2->xmin && b1->xmin<=b2->xmax)
      result = True;
               
   if (!result &&
       b1->ymax>=b2->ymin && b1->ymax<=b2->ymax &&
       b1->xmax>=b2->xmin && b1->xmax<=b2->xmax)
      result = True;

   if (!result &&
       b1->ymax>=b2->ymin && b1->ymax<=b2->ymax &&
       b1->xmin>=b2->xmin && b1->xmin<=b2->xmax)
      result = True;

   if (!result &&
       b1->xmin<=b2->xmin && b1->xmax>=b2->xmax)
   {
      if (b1->ymin>=b2->ymin && b1->ymin<=b2->ymax)
         result=True;

      if (!result &&
          b1->ymax>=b2->ymin && b1->ymax<=b2->ymax)
         result=True;
   }

   if (!result &&
       b1->ymin<=b2->ymin && b1->ymax>=b2->ymax)
   {
      if (b1->xmin>=b2->xmin && b1->xmin<=b2->xmax)
         result=True;

      if (!result &&
          b1->xmax>=b2->xmin && b1->xmax<=b2->xmax)
         result=True;
   }

   if (!result &&
       b1->ymin<=b2->ymin && b1->ymax>=b2->ymax &&
       b1->xmin<=b2->xmin && b1->xmax>=b2->xmax)
      result = True;

#if 0
   DEBUG(2,("Result %d\n",result));
#endif

   return result;
}               

int objectType(char *filename, int *ftype)
{
   _kernel_swi_regs rin,rout;
   _kernel_oserror *e;
   int result=0;

   rin.r[0]=20;
   rin.r[1]=(int)filename;
   if (e=_kernel_swi(OS_File, &rin, &rout))
   {
      *ftype=-1;
   }
   else
   {          
      *ftype=rout.r[6];
      result=rout.r[0];
   }

   return result;
}


