//**************************************************************************
#include <iostream.h>
#include <fstream.h>
#include <stdio.h>
#include <stdlib.h>     // for atoi()
#include <string.h>
#include <stdarg.h>
#include <math.h>
#include <time.h>
#include "utils.h"
//**************************************************************************
// e.g extract "lenna" from "images/lenna.gif"
char *ExtractName(char *s)
{

int n = strlen(s);
int begin = 0, end = n-1;

for (int i = 0; i < n; i++)
        {
         if (s[i] == '/')
                begin = i+1;
         if (s[i] == '.')
                end = i-1;
        }
if (begin >= end)
        {
         begin = 0;
         end = n - 1;
        }
int length = end-begin+1;
char *snew = new char [length+1];
snew[length] = '\0';
strncpy(snew, &s[begin], length);

return snew;
}
//**************************************************************************
int FileCopy(char *source, char *dest, int printflag)
{
FILE *in, *out;
char a;

in = fopen(source,"rb");
out = fopen(dest,"wb");

if (!in || !out)
        {
         cerr << "FileCopy: Error with file \"" << source 
                << "\" or \"" << dest << "\"!!" << endl;
         exit(-1);
        }

if (printflag)
        {
         cout << "Copying file \"" << source << "\" to file \""
                << dest << "\"...";
         cout.flush();
        }

while (!feof(in))
        {
         fread((void *) &a, sizeof(char), 1 , in);
         fwrite((void *) &a, sizeof(char), 1 , out);
        }
fclose(in);
fclose(out);

if (printflag)
        {
         cout << "done!" << endl;
         cout.flush();
        }

return 1;
}
/*************************************************************************/
int FileCopy(char *source, char *dest)
{
return FileCopy(source, dest, 1);
}
/*************************************************************************/
int system_command(char *fmt, ...)
{
va_list argptr;
char buffer[300];
int err;

va_start(argptr,fmt);
vsprintf(buffer,fmt,argptr);
va_end(argptr);

err = system(buffer);

return err;
}
/*************************************************************************/
int myrand()
{
static int firstcall = 1;

if (firstcall)
        {
         time_t time_now;
         firstcall = 0;
         time(&time_now);
         srand(((int) time_now)%10000);
        }

return rand();
}
/****************************************************************/
char *convert_image_format(char *filename, char *fmt)
{
char *tmpfile = new char [40];

sprintf(tmpfile,"/tmp/mytmp%08d", myrand());
FileCopy(filename, tmpfile, 0);
system_command("mogrify -format %s %s 2> /dev/null", fmt, tmpfile);
system_command("mv %s.%s %s", tmpfile, fmt, tmpfile);

return tmpfile;
}
/****************************************************************/
int deleteFile(char *filename)
{
return system_command("rm -f %s 2> /dev/null",filename);
}
/****************************************************************/
int moveFile(char *src, char *dest)
{
return system_command("mv %s %s", src, dest);
}
/****************************************************************/
int parseArg(int argc, char *argv[], char *tag)
{
for (int i = 2; i < argc; i++)
        {
         if (strstr(argv[i], tag) == argv[i]
          && strlen(tag) == strlen(argv[i])
          && i < argc-1)
                {
                 return (i+1);
                }
        }

return 0;
}
//**************************************************************************
char *printOnOff(int flag)
{
char *s = new char [4];
if (flag)
        strcpy(s, "ON");
else
        strcpy(s, "OFF");

return s;
}
//**************************************************************************