// This is utils.cc CVS version: $Id: utils.cc,v 1.2 2000/02/28 18:06:24 andreaha Exp $
/*-----------------------------------------------------------------*/
/* World::Utils                                                    */
/*-----------------------------------------------------------------*/
#include "eng.h"

char *World::Utils::bytes(int i) {
  dpush2("World::Utils::bytes(%i)", i);

  if (i == 0)
    sprintf(text,   "  -          ");
  else 
  if (i > (1 << 23)) 
    sprintf(text,   "%6iMb    ", i>>20);
  else 
    if (i > (1 << 13))
      sprintf(text, "%6ikb    ", i>>10);
  else
    if (i > (1 << 4))
      sprintf(text, "%6i bytes", i);

  dpop();
  return &text[0];
}

char *World::Utils::charptr(const char *s) {
  dpush2("World::Utils::charptr(%s)", s); 
  
  strcpy(text, s);

  dpop();
  return &text[0];
}

char *World::Utils::fillstr(int i) {
  dpush2("World::Utils::fillstr(%i)", i);


  switch (i) {
  case TEXTURE:
    sprintf(text, "%s", "Texture");
    break;
  case TEXTURE|MIP:
    sprintf(text, "%s", "Mip-mapped Texture");
    break;
  case TEXTURE|GOURAUD:
    sprintf(text, "%s", "Texture, Gouraud");
    break;
  case TEXTURE|GOURAUD|MIP:
    sprintf(text, "%s", "Mip-mapped Texture, Gouraud");
    break;
  case TEXTURE|GOURAUD|TRANSPARENT:
    sprintf(text, "%s", "Transparent Texture, Gouraud");
    break;
  case PHONG:   
    sprintf(text, "%s", "Phong");
    break; 
  case PLAIN:   
    sprintf(text, "%s", "Plain");
    break; 
  case GOURAUD: 
    sprintf(text, "%s", "Gouraud");
    break;
  case GOURAUD|TRANSPARENT: 
    sprintf(text, "%s", "Transparent Gouraud");
    break;
  default: sprintf(text, "no filltype");
  }

  dpop();
  return &text[0];
}

/* convert string to uppercase */
char *World::Utils::ucase(char *c) {

  int l = strlen(c);

  for (int i = 0; i < l; i++) {
    if ((c[i] >= 'a') && (c[i] <= 'z')) c[i] -= 32;
    if (c[i] == 'æ') c[i] = 'Æ';
    if (c[i] == '¢') c[i] = '¥';
    if (c[i] == 'å') c[i] = 'Å';
  }

  return c;
}

/* convert string to lowercase */
char *World::Utils::lcase(char *c) {

  int l = strlen(c);

  for (int i = 0; i < l; i++) {
    if ((c[i] >= 'A') && (c[i] <= 'Z')) c[i] += 32;
    if (c[i] == 'Æ') c[i] = 'æ';
    if (c[i] == '¥') c[i] = '¢';
    if (c[i] == 'Å') c[i] = 'å';
  }

  return c;
}

/* get value */
double World::Utils::getValue(char *s, char *v) {

  char *pos;
  double x;
  pos = strstr(s, v);
  pos += strlen(v);
  x = strtod(pos, &_dummy);
  return x;
}

/* get string */
void World::Utils::getString(char *s, char *v, char *ret) {

  char *pos;
  pos  = strstr(s, v);
  pos += strlen(v);
  while (*pos != '\"') pos++;
  while (*pos == '\"') pos++;
  while (*pos != '\"') *ret++ = *pos++;
  *ret = '\0';
}

/*
void World::saveBufToPPM24(char *filename) {

  FILE *fp;
  char temp[256];
  char *buf;

  buf = (char *)getMem(vrtscrsize);

  blit32_to_24(buf);

  if ((fp = fopen(filename, "wb"))) {
    fprintf(fp, "P6\n%i %i\n255\n", width, length);
    fwrite(fp, 1, vrtscrsize, buf);
    fclose(fp);
  } else {
    printf("Error: Can't write to %s.\n", filename);
  }

  freeMem(buf);
}
*/

