deep-c-rsc/mudclient204-headless/ChatMessage.java

102 lines
3.4 KiB
Java

public class ChatMessage {
public static byte scrambledbytes[] = new byte[100];
public static char chars[] = new char[100];
private static char charmap[] = {
' ', 'e', 't', 'a', 'o', 'i', 'h', 'n', 's', 'r',
'd', 'l', 'u', 'm', 'w', 'c', 'y', 'f', 'g', 'p',
'b', 'v', 'k', 'x', 'j', 'q', 'z', '0', '1', '2',
'3', '4', '5', '6', '7', '8', '9', ' ', '!', '?',
'.', ',', ':', ';', '(', ')', '-', '&', '*', '\\',
'\'', '@', '#', '+', '=', '\243', '$', '%', '"', '[',
']'
};
public static String descramble(byte buff[], int off, int len) {
try {
int newLen = 0;
int l = -1;
for (int idx = 0; idx < len; idx++) {
int current = buff[off++] & 0xff;
int k1 = current >> 4 & 0xf;
if (l == -1) {
if (k1 < 13)
chars[newLen++] = charmap[k1];
else
l = k1;
} else {
chars[newLen++] = charmap[((l << 4) + k1) - 195];
l = -1;
}
k1 = current & 0xf;
if (l == -1) {
if (k1 < 13)
chars[newLen++] = charmap[k1];
else
l = k1;
} else {
chars[newLen++] = charmap[((l << 4) + k1) - 195];
l = -1;
}
}
boolean flag = true;
for (int l1 = 0; l1 < newLen; l1++) {
char c = chars[l1];
if (l1 > 4 && c == '@')
chars[l1] = ' ';
if (c == '%')
chars[l1] = ' ';
if (flag && c >= 'a' && c <= 'z') {
chars[l1] += '\uFFE0';// ????? ¢ 65504
flag = false;
}
if (c == '.' || c == '!')
flag = true;
}
return new String(chars, 0, newLen);
} catch (Exception Ex) {
return ".";
}
}
public static int scramble(String s) {
if (s.length() > 80)
s = s.substring(0, 80);
s = s.toLowerCase();
int off = 0;
int lshift = -1;
for (int k = 0; k < s.length(); k++) {
char currentchar = s.charAt(k);
int foundcharmapidx = 0;
for (int n = 0; n < charmap.length; n++) {
if (currentchar != charmap[n])
continue;
foundcharmapidx = n;
break;
}
if (foundcharmapidx > 12)
foundcharmapidx += 195;
if (lshift == -1) {
if (foundcharmapidx < 13)
lshift = foundcharmapidx;
else
scrambledbytes[off++] = (byte) foundcharmapidx;
} else if (foundcharmapidx < 13) {
scrambledbytes[off++] = (byte) ((lshift << 4) + foundcharmapidx);
lshift = -1;
} else {
scrambledbytes[off++] = (byte) ((lshift << 4) + (foundcharmapidx >> 4));
lshift = foundcharmapidx & 0xf;
}
}
if (lshift != -1)
scrambledbytes[off++] = (byte) (lshift << 4);
return off;
}
}