/*
 * Kleine Utilities, die das Leben leichter machen (ganz ohne Zucker.)
 *
 * 22.03.1992 Andre geschrieben.
 */

extern "C" {
#include <exec/types.h>
#include <libraries/asl.h>
#include <dos/var.h>
};

#include "list.h"
#include "utils.h"

extern "C" {
#include <clib/asl_protos.h>
char *strdup(char *);
};

/* Wandelt einen PASCAL-String in einen C-String um. */
char *pstr2cstr(void *p)
{
   int index;
   char *pa=(char *)p;
   static char buffer[256];   /* Maximale Länge eines PASCAL-Strings  */

   for(index=0; index<*((char *)p); index++)
      buffer[index]=pa[index+1];
   buffer[index]='\0';
   return buffer;
}

// Wandelt einen gepackten Typ in einen C-String um.
char *pack2cstr(unsigned long p)
{
   static unsigned long pa[2];

   pa[1]=0;
   pa[0]=p;
   return (char *)pa;
}

// Wandelt einen C-String in einen Type um.
unsigned long cstr2pack(char *s)
{
   unsigned long  p;
   char *pp;

   pp=(char *)&p;
   pp[0]=s[0];
   pp[1]=s[1];
   pp[2]=s[2];
   pp[3]=s[3];
   return p;
}

// Holt einen File-Namen vom ASL-Requester

char *ASLGetName(void)
{
   BOOL 		 ret;
   char 		 buffer[1024];
   int			 len;

   buffer[0]='\0';
   if( AslRequestTags(fr, ASL_Hail, "ResGrep", TAG_DONE) )
   {
      // Den FileNamen zusammenpuzzlen.
      strcpy(buffer,(char *)(fr->rf_Dir));
      len=strlen(buffer);
      if( len!=0 && *(buffer+len)!='/' && *(buffer+len)!=':' )
	 *(buffer+len++)='/';
      strcpy(buffer+len,(char *)(fr->rf_File));
   }
   return strdup(buffer);
}

// Fensterkoordinatenberechnung
static int XPos=30;
static int YPos=30;

int NewXPos(void)
{
   return XPos;
}

int NewYPos(void)
{
   return YPos;
}

void CoordsUsed(void)
{
   XPos= (XPos+5)%550;
   YPos= (YPos+14)%200;
}

// Berechnet eine neue Filenummer
unsigned long GetNewFileNum(void)
{
   extern list FileList;

   if( FileList.getfirst()->getsucc()!=NULL )
      return FileList.getlast()->getpri()+1;
   else
      return 1;
}
