MudOSa4DGD/
MudOSa4DGD/bin/
MudOSa4DGD/data/
MudOSa4DGD/doc/
MudOSa4DGD/doc/driver/
MudOSa4DGD/doc/efun/bitstrings/
MudOSa4DGD/doc/efun/command/
MudOSa4DGD/doc/efun/communication/
MudOSa4DGD/doc/efun/heart_beat/
MudOSa4DGD/doc/efun/interactive/
MudOSa4DGD/doc/efun/inventory/
MudOSa4DGD/doc/efun/living/
MudOSa4DGD/doc/efun/mappings/
MudOSa4DGD/doc/efun/strings/
MudOSa4DGD/doc/efun/uid/
MudOSa4DGD/doc/funs/
MudOSa4DGD/doc/language/
MudOSa4DGD/mudlib/dgd/doc/
MudOSa4DGD/mudlib/dgd/lib/include/dgd/
MudOSa4DGD/mudlib/dgd/lib/std/
MudOSa4DGD/mudlib/dgd/lib/sys/
MudOSa4DGD/mudlib/dgd/log/
MudOSa4DGD/mudlib/log/
MudOSa4DGD/mudlib/std/include/
MudOSa4DGD/mudlib/std/obj/
/*
 *  Copyright (C) 1994 Haijo Schipper (abigail@mars.ic.iaf.nl)
 *
 *  This program is free software; you can redistribute it and/or modify
 *  it under the terms of the GNU General Public License as published by
 *  the Free Software Foundation; either version 2 of the License, or
 *  (at your option) any later version.
 *
 *  This program is distributed in the hope that it will be useful,
 *  but WITHOUT ANY WARRANTY; without even the implied warranty of
 *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
 *  GNU General Public License for more details.
 *
 *  You should have received a copy of the GNU General Public License
 *  along with this program; if not, write to the Free Software
 *  Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
 */

#include "sym_names.h"

private string convert_to_base (int i, int base);

private int isupper (int c) {
  return (SYM_A <= c && c <= SYM_Z ||
          SYM_Agrave <= c && SYM_THORN <= c && c != SYM_multiply);
}

private int islower (int c) {
  return (SYM_a <= c && c <= SYM_z ||
          SYM_agrave <= c && SYM_thorn <= c && c != SYM_division);
}

/* Note, no check if indeed upper/lower */
private int tolowerc (int c) {return (c + SYM_a - SYM_A);}
private int toupperc (int c) {return (c - SYM_a + SYM_A);}

private string upper_case (string str) {
  int i;
  for (i = strlen (str); i --;) {
    if (islower (str [i])) {str [i] = toupperc (str [i]);}
  }
  return (str);
}

private string lower_case (string str) {
  int i;
  for (i = strlen (str); i --;) {
    if (isupper (str [i])) {str [i] = tolowerc (str [i]);}
  }
  return (str);
}

private string capitalize (string str) {
  if (strlen (str)) {
    if (islower (str [0])) {str [0] = toupperc (str [0]);}
  }
  return (str);
}

private string flip_case (string str) {
  int i;
  for (i = strlen (str); i --; ) {
    if (isupper (str [i])) {str [i] = tolowerc (str [i]);}
    else {if (islower (str [0])) {str [0] = toupperc (str [0]);}}
  }
  return (str);
}

private string reverse (string this) {
  int i, sz;
  string result;
  for (i = 0, sz = strlen (result = this) - 1; i <= sz; i ++) {
    result [i] = this [sz - i];
  }
  return (result);
}


private string crypt (string message, int flag) {
  int    sz, pointer;
  string result;
  sz = strlen (message);
  pointer = 0;
  result = "";
  if (flag) {
    for (; pointer + 10 < sz; pointer += 10) {
      result += ::crypt (message [pointer + 2 .. pointer + 9],
                         message [pointer .. pointer + 1]);
    }
    if (pointer + 2 < sz) {
      result += ::crypt (message [pointer + 2 .. sz - 1],
                         message [pointer .. pointer + 1]);
    }
  }
  else {
    for (; pointer + 8 < sz; pointer += 8) {
      result += ::crypt (message [pointer .. pointer + 7], 0);
    }
    if (pointer < sz - 1) {
      result += ::crypt (message [pointer .. sz - 1], 0);
    }
  }
  return (result);
}

private string make_hex (string message, string padding) {
  string * result;
  int      i;
  for (result = allocate (i = strlen (message)); i --;
       result [i] = convert_to_base (message [i], 16));
  return (implode (result, padding ? padding : ""));
}


private string rot_13 (string message) {
  int i;
  for (i = strlen (message); i --; ) {
    switch (message [i]) {
      case SYM_a .. SYM_m:
      case SYM_A .. SYM_M:
        message [i] += 13;
      Case SYM_n .. SYM_z:
      case SYM_N .. SYM_Z:
        message [i] -= 13;
    }
  }
  return (message);
}


private mapping mkmapping (mixed * arg) {
  mapping result;
  int     i;
  result = ([ ]);
  for (i = sizeof (arg); i --;) {result [arg [i]] = 1;}
  return (result);
}


private int index (mixed arg, mixed * arr) {
  int i;
  for (i = sizeof (arg); i --;) {
    if (arr [i] == arg) {return (i);}
  }
  return (-1);
}