aboutsummaryrefslogtreecommitdiffstats
path: root/src/jake2/qcommon/CRC.java
diff options
context:
space:
mode:
Diffstat (limited to 'src/jake2/qcommon/CRC.java')
-rw-r--r--src/jake2/qcommon/CRC.java383
1 files changed, 383 insertions, 0 deletions
diff --git a/src/jake2/qcommon/CRC.java b/src/jake2/qcommon/CRC.java
new file mode 100644
index 0000000..ca22d9b
--- /dev/null
+++ b/src/jake2/qcommon/CRC.java
@@ -0,0 +1,383 @@
+/*
+Copyright (C) 1997-2001 Id Software, Inc.
+
+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., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
+
+*/
+
+// Created on 25.01.2004 by RST.
+// $Id: CRC.java,v 1.1 2004-07-09 06:50:49 hzi Exp $
+package jake2.qcommon;
+
+import jake2.util.Vargs;
+
+public class CRC
+{
+
+ public final static short CRC_INIT_VALUE= (short) 0xffff;
+ public final static short CRC_XOR_VALUE= (short) 0x0000;
+
+ private static int crctable[]=
+ {
+ 0x0000,
+ 0x1021,
+ 0x2042,
+ 0x3063,
+ 0x4084,
+ 0x50a5,
+ 0x60c6,
+ 0x70e7,
+ 0x8108,
+ 0x9129,
+ 0xa14a,
+ 0xb16b,
+ 0xc18c,
+ 0xd1ad,
+ 0xe1ce,
+ 0xf1ef,
+ 0x1231,
+ 0x0210,
+ 0x3273,
+ 0x2252,
+ 0x52b5,
+ 0x4294,
+ 0x72f7,
+ 0x62d6,
+ 0x9339,
+ 0x8318,
+ 0xb37b,
+ 0xa35a,
+ 0xd3bd,
+ 0xc39c,
+ 0xf3ff,
+ 0xe3de,
+ 0x2462,
+ 0x3443,
+ 0x0420,
+ 0x1401,
+ 0x64e6,
+ 0x74c7,
+ 0x44a4,
+ 0x5485,
+ 0xa56a,
+ 0xb54b,
+ 0x8528,
+ 0x9509,
+ 0xe5ee,
+ 0xf5cf,
+ 0xc5ac,
+ 0xd58d,
+ 0x3653,
+ 0x2672,
+ 0x1611,
+ 0x0630,
+ 0x76d7,
+ 0x66f6,
+ 0x5695,
+ 0x46b4,
+ 0xb75b,
+ 0xa77a,
+ 0x9719,
+ 0x8738,
+ 0xf7df,
+ 0xe7fe,
+ 0xd79d,
+ 0xc7bc,
+ 0x48c4,
+ 0x58e5,
+ 0x6886,
+ 0x78a7,
+ 0x0840,
+ 0x1861,
+ 0x2802,
+ 0x3823,
+ 0xc9cc,
+ 0xd9ed,
+ 0xe98e,
+ 0xf9af,
+ 0x8948,
+ 0x9969,
+ 0xa90a,
+ 0xb92b,
+ 0x5af5,
+ 0x4ad4,
+ 0x7ab7,
+ 0x6a96,
+ 0x1a71,
+ 0x0a50,
+ 0x3a33,
+ 0x2a12,
+ 0xdbfd,
+ 0xcbdc,
+ 0xfbbf,
+ 0xeb9e,
+ 0x9b79,
+ 0x8b58,
+ 0xbb3b,
+ 0xab1a,
+ 0x6ca6,
+ 0x7c87,
+ 0x4ce4,
+ 0x5cc5,
+ 0x2c22,
+ 0x3c03,
+ 0x0c60,
+ 0x1c41,
+ 0xedae,
+ 0xfd8f,
+ 0xcdec,
+ 0xddcd,
+ 0xad2a,
+ 0xbd0b,
+ 0x8d68,
+ 0x9d49,
+ 0x7e97,
+ 0x6eb6,
+ 0x5ed5,
+ 0x4ef4,
+ 0x3e13,
+ 0x2e32,
+ 0x1e51,
+ 0x0e70,
+ 0xff9f,
+ 0xefbe,
+ 0xdfdd,
+ 0xcffc,
+ 0xbf1b,
+ 0xaf3a,
+ 0x9f59,
+ 0x8f78,
+ 0x9188,
+ 0x81a9,
+ 0xb1ca,
+ 0xa1eb,
+ 0xd10c,
+ 0xc12d,
+ 0xf14e,
+ 0xe16f,
+ 0x1080,
+ 0x00a1,
+ 0x30c2,
+ 0x20e3,
+ 0x5004,
+ 0x4025,
+ 0x7046,
+ 0x6067,
+ 0x83b9,
+ 0x9398,
+ 0xa3fb,
+ 0xb3da,
+ 0xc33d,
+ 0xd31c,
+ 0xe37f,
+ 0xf35e,
+ 0x02b1,
+ 0x1290,
+ 0x22f3,
+ 0x32d2,
+ 0x4235,
+ 0x5214,
+ 0x6277,
+ 0x7256,
+ 0xb5ea,
+ 0xa5cb,
+ 0x95a8,
+ 0x8589,
+ 0xf56e,
+ 0xe54f,
+ 0xd52c,
+ 0xc50d,
+ 0x34e2,
+ 0x24c3,
+ 0x14a0,
+ 0x0481,
+ 0x7466,
+ 0x6447,
+ 0x5424,
+ 0x4405,
+ 0xa7db,
+ 0xb7fa,
+ 0x8799,
+ 0x97b8,
+ 0xe75f,
+ 0xf77e,
+ 0xc71d,
+ 0xd73c,
+ 0x26d3,
+ 0x36f2,
+ 0x0691,
+ 0x16b0,
+ 0x6657,
+ 0x7676,
+ 0x4615,
+ 0x5634,
+ 0xd94c,
+ 0xc96d,
+ 0xf90e,
+ 0xe92f,
+ 0x99c8,
+ 0x89e9,
+ 0xb98a,
+ 0xa9ab,
+ 0x5844,
+ 0x4865,
+ 0x7806,
+ 0x6827,
+ 0x18c0,
+ 0x08e1,
+ 0x3882,
+ 0x28a3,
+ 0xcb7d,
+ 0xdb5c,
+ 0xeb3f,
+ 0xfb1e,
+ 0x8bf9,
+ 0x9bd8,
+ 0xabbb,
+ 0xbb9a,
+ 0x4a75,
+ 0x5a54,
+ 0x6a37,
+ 0x7a16,
+ 0x0af1,
+ 0x1ad0,
+ 0x2ab3,
+ 0x3a92,
+ 0xfd2e,
+ 0xed0f,
+ 0xdd6c,
+ 0xcd4d,
+ 0xbdaa,
+ 0xad8b,
+ 0x9de8,
+ 0x8dc9,
+ 0x7c26,
+ 0x6c07,
+ 0x5c64,
+ 0x4c45,
+ 0x3ca2,
+ 0x2c83,
+ 0x1ce0,
+ 0x0cc1,
+ 0xef1f,
+ 0xff3e,
+ 0xcf5d,
+ 0xdf7c,
+ 0xaf9b,
+ 0xbfba,
+ 0x8fd9,
+ 0x9ff8,
+ 0x6e17,
+ 0x7e36,
+ 0x4e55,
+ 0x5e74,
+ 0x2e93,
+ 0x3eb2,
+ 0x0ed1,
+ 0x1ef0 };
+
+ static short CRC_Block(byte start[], int count)
+ {
+ short crc= CRC_INIT_VALUE;
+
+ int ndx= 0;
+
+ while (count-- > 0)
+ crc= (short) ((crc << 8) ^ crctable[0xff & ((crc >> 8) ^ start[ndx++])]);
+
+ return crc;
+ }
+
+ public static void main(String[] args)
+ {
+ byte data[]=
+ {
+ (byte) 0x71,
+ (byte) 0xa9,
+ (byte) 0x05,
+ (byte) 0xce,
+ (byte) 0x8d,
+ (byte) 0x75,
+ (byte) 0x28,
+ (byte) 0xc8,
+ (byte) 0xba,
+ (byte) 0x97,
+
+ (byte) 0x45,
+ (byte) 0xe9,
+ (byte) 0x8a,
+ (byte) 0xe0,
+ (byte) 0x37,
+ (byte) 0xbd,
+ (byte) 0x6c,
+ (byte) 0x6d,
+ (byte) 0x67,
+ (byte) 0x4a,
+ (byte) 0x21 };
+ System.out.println("crc:" + (CRC_Block(data, 21) & 0xffff));
+ System.out.println("----");
+ for (int n=0; n < 5; n++)
+ System.out.println("seq:" + (Com.BlockSequenceCRCByte( data,0, 21,n*10) & 0xff));
+
+ }
+
+/* c test:
+ *
+ * D:\Rene\gamesrc\quake2-3.21\qcommon>crc
+ * crc=-12353
+ * ----
+ * seq:215
+ * seq:252
+ * seq:164
+ * seq:202
+ * seq:201
+ *
+int main()
+{
+ byte data[21] =
+ {
+ 0x71,
+ 0xa9,
+ 0x05,
+ 0xce,
+ 0x8d,
+ 0x75,
+ 0x28,
+ 0xc8,
+ 0xba,
+ 0x97,
+
+ 0x45,
+ 0xe9,
+ 0x8a,
+ 0xe0,
+ 0x37,
+ 0xbd,
+ 0x6c,
+ 0x6d,
+ 0x67,
+ 0x4a, 0x21 };
+ int n=0;
+
+ printf("crc=%d\n", (short) CRC_Block(&data, 21));
+
+ printf("----\n");
+ for (n=0; n < 5; n++)
+ printf("seq:%d\n", COM_BlockSequenceCRCByte( &data,21, n*10) );
+}
+ */
+
+}