/*->c.txi */

#include <stdlib.h>
#include <stdio.h>
#include <string.h>
#include <signal.h>
#include <ctype.h>
#include <time.h>
#include <stdarg.h> 

#include "h.os"
#include "h.wimp"
#include "h.bbc"
#include "h.flex"
#include "h.swis"

#include "h.Drawlevel0"

#include "h.def"

#include "h.wos"
#include "h.strdef"
#include "h.main"
#include "h.mym"
#include "h.fsx"
#include "h.timex"
#include "h.pr"
#include "h.buffer"
#include "h.state"
#include "h.dir"
#include "h.txfax"
#include "h.view"
#include "h.batch"
#include "h.trans"
#include "h.config"
#include "h.sched"
#include "h.xext"
#include "h.script"
#include "h.file"
#include "h.ram"


#include "h.txi"





int loadtexticon(char * name,int type,int mhandle,int micon)
{
 wimp_icon   istate;
 int         buttonbits;
 FILE      * fp;
 char        buffer[256];
 int         i;
 int         c;

 if(type==TEXT)
 {
  wimp_get_icon_info(mhandle,micon,&istate);

  if(istate.flags & wimp_ITEXT)
  {
   buttonbits=(istate.flags/wimp_IBTYPE)&0xF;
   if(buttonbits==wimp_BWRITABLE || buttonbits==wimp_BWRITECLICKDRAG)
   {
    fp=ropen(name,"rb");
    if(fp)
    {
     i=0;
     while(!rameof(fp))
     {
      c=rgetc(fp);
      if(c>=32) buffer[i++]=c;
     }
     rclose(fp);

     if(istate.flags & wimp_INDIRECT)
     {
      if(i>(istate.data.indirecttext.bufflen-1)) 
                                i=istate.data.indirecttext.bufflen-1;
     }
     else
     {
      if(i>=11) i=11;
     }

     buffer[i]=0;

     writeicon(mhandle,micon,buffer);
    }
   }
  }
 }

 return(0);  /* could not load it */
}



int canloadtexticon(int type,int mhandle,int micon)
{
 wimp_icon istate;
 int       buttonbits;

 if(type==TEXT)
 {
  wimp_get_icon_info(mhandle,micon,&istate);

  if(istate.flags & wimp_ITEXT)
  {
   buttonbits=(istate.flags/wimp_IBTYPE)&0xF;

   if(buttonbits==wimp_BWRITABLE || buttonbits==wimp_BWRITECLICKDRAG)
   {
    return(1);
   }
  }
 }

 return(0);  /* could not load it */
}




/***************************************************************************/

/* return non-zero to claim */

static int txicon;
static int txhandle;
static int txistate;


int txiconcheck(int buttons,int micon,int mhandle)
{
 wimp_icon istate;
 int       buttonbits;


 if(micon>=0 && buttons==0x40)
 {
  wimp_get_icon_info(mhandle,micon,&istate);

  if(istate.flags & wimp_ITEXT)
  {
   buttonbits=(istate.flags/wimp_IBTYPE)&0xF;

   if(buttonbits==wimp_BWRITECLICKDRAG)
   {
    dragicon(mousex,mousey,mhandle,micon);
    txicon=micon;
    txhandle=mhandle;
    txistate=1;
   }
  }
 }

 return(0);
}



/* return non-zero to claim */

int txicondrag(void)
{
 wimp_icon istate;
 int       buttonbits;
 int       task;


 if(txistate)
 {
  getpointer();

  findwindowtask(mhandle,micon,&task);
  if(task==taskhandle)
  {
   /* internal */
   wimp_get_icon_info(mhandle,micon,&istate);

   if(istate.flags & wimp_ITEXT)
   {
    buttonbits=(istate.flags/wimp_IBTYPE)&0xF;
    if(buttonbits==wimp_BWRITABLE || buttonbits==wimp_BWRITECLICKDRAG)
    {
     writeicon(mhandle,micon,iconaddr(txhandle,txicon));
    }
   }
  }
  else
  {
   setsave(SAVETXI);
   savedragend();
  }

  txistate=0;
  return(1);
 }

 return(0);
}



int savetxi(char * name)
{
 FILE * fp;
 char * p;

 fp=ropen(name,"wb");
 if(fp)
 {
  p=iconaddr(txhandle,txicon);
  rwrite(p,strlen(p),1,fp);
  rclose(fp);
 }

 return(1);
}


