/* Unterprogramme für ShowPicasso
** File: tools.c
*/


#include "sp_tools.h"


/* Umwandlung eines String in LONG */

LONG stol(UBYTE *str)
{
 LONG i=NULL,j=strlen(str),l=NULL;

 if(!str) return(NULL);

 while((i < j) && (str[i] > 47) && (str[i] < 58))
 {
  l += (str[i] - 48);
  l *= 10;
  i++;
 }

 return(l / 10);
}

/* Ausgabe von Programmeldungen */

VOID OutText(STRPTR errstr, STRPTR argstr)
{
 struct Screen *pubscr;

 STRPTR     str,rarg[2];

 if(USERFLGS & (PFLG_WBSTART|UFLG_FMSGREQ))
 {

  if(argstr) 
  {
   str = (UBYTE *)"File <%s> :\n%s";    
   rarg[0] = argstr;
   rarg[1] = errstr;
  }
  else str = errstr;

  if(ReqToolsBase)
  {

   if(pubscr = LockPubScreen(pubscrname))
   {
    msgreqtags[1].ti_Data = (LONG)pubscr;
    rtEZRequestA( str, "Ok", NULL, rarg, msgreqtags);
    UnlockPubScreen(NULL,pubscr);
   }

  }
  else
  {
   msgreq.es_TextFormat = str;
   EasyRequestArgs(NULL, &msgreq, NULL, rarg);
  }

 }
 else
 {

  if(argstr) 
  {
   str = "%s : %s\n";    
   rarg[0] = argstr;
   rarg[1] = errstr;
  }
  else
  {
   str = "%s\n";
   rarg[0] = errstr;
  }

  VPrintf(str,rarg);
 }

}


/* Öffnen der benötigten Libraries */


BOOL OpenLibs(void)
{
 if(!(IntuitionBase = OpenLibrary("intuition.library",LIBRARY_MIN))) return(FALSE);
 if(!(IconBase = OpenLibrary("icon.library",LIBRARY_MIN)))           return(FALSE);
 if(!(WorkbenchBase = OpenLibrary("workbench.library",LIBRARY_MIN))) return(FALSE);
 if(!(AslBase = OpenLibrary("asl.library",LIBRARY_MIN)))             return(FALSE);
 if(!(GfxBase = OpenLibrary("graphics.library",LIBRARY_MIN)))        return(FALSE);
 if(!(IFFParseBase = OpenLibrary("iffparse.library",LIBRARY_MIN)))   return(FALSE);
 if(!(VilIntuiBase = OpenLibrary("vilintuisup.library",0)))          return(FALSE);
 LocaleBase = OpenLibrary("locale.library",38L);
 ReqToolsBase = OpenLibrary("reqtools.library",38L);
 return(TRUE);
}


/* Schließen der Libraries  */


void CloseLibs(void)
{
 if(IntuitionBase) CloseLibrary(IntuitionBase);
 if(IconBase) CloseLibrary(IconBase);
 if(WorkbenchBase) CloseLibrary(WorkbenchBase);
 if(AslBase) CloseLibrary(AslBase);
 if(GfxBase) CloseLibrary(GfxBase);
 if(IFFParseBase) CloseLibrary(IFFParseBase);
 if(VilIntuiBase) CloseLibrary(VilIntuiBase);
 if(LocaleBase) CloseLibrary(LocaleBase);
 if(ReqToolsBase) CloseLibrary(ReqToolsBase);
}


/* Speicherreservierung */


BOOL GetWorkSpace(VOID)
{
 ULONG workspace = cbufsize + 960L; /* (ULONG)sizeof(BitMapHeader) + 768L + 64L + 108L */

 if(cbuf = AllocVec(workspace,MEMF_PUBLIC|MEMF_CLEAR))
 {
  color = cbuf + cbufsize;
  mynamebuffer = color + 768L; /* 256 * 3 (r,g,b) = 768 */
  fname = mynamebuffer + 64L;
  bmhd = (BitMapHeader *)(fname + 108L);
  return(TRUE);
 }

 return(FALSE);

}


/* Freigabe des Speichers */


VOID FreeWorkSpace(VOID)
{
 if(cbuf) FreeVec(cbuf);
}
