home *** CD-ROM | disk | FTP | other *** search
/ Beijing Paradise BBS Backup / PARADISE.ISO / software / BBSDOORW / FDR.ZIP / FDR.C next >
Encoding:
C/C++ Source or Header  |  1995-11-11  |  8.6 KB  |  207 lines

  1. #include <stdio.h>
  2. #include <stdlib.h>
  3. #include <conio.h>
  4. #include <string.h>
  5.  
  6. typedef unsigned char BYTE;
  7. typedef unsigned int  WORD;
  8. typedef unsigned long DWORD;
  9.  
  10. static BYTE Xtab0[] = {
  11.     0x30, 0x31, 0x32, 0x33, 0x34, 0x35, 0x36, 0x37, 0x38, 0x39,
  12.     0x41, 0x42, 0x43, 0x44, 0x45, 0x46, 0x47, 0x48, 0x49, 0x4A,
  13.     0x4B, 0x4C, 0x4D, 0x4E, 0x4F, 0x50, 0x51, 0x52, 0x53, 0x54,
  14.     0x55, 0x56, 0x57, 0x58, 0x59, 0x5A, 0x61, 0x62, 0x63, 0x64,
  15.     0x65, 0x66, 0x67, 0x68, 0x69, 0x6A, 0x6B, 0x6C, 0x6D, 0x6E,
  16.     0x6F, 0x70, 0x71, 0x72, 0x73, 0x74, 0x75, 0x76, 0x77, 0x78,
  17.     0x79, 0x7A, 0xFF
  18.     };
  19.  
  20. static BYTE Xtab1[] = {
  21.     0x00, 0x00, 0x96, 0x30, 0x2C, 0x61, 0xBA, 0x51, 0x19, 0xC4,
  22.     0x8F, 0xF4, 0x35, 0xA5, 0xA3, 0x95, 0x32, 0x88, 0xA4, 0xB8,
  23.     0x1E, 0xE9, 0x88, 0xD9, 0x2B, 0x4C, 0xBD, 0x7C, 0x07, 0x2D,
  24.     0x91, 0x1D, 0x64, 0x10, 0xF2, 0x20, 0x48, 0x71, 0xDE, 0x41,
  25.     0x7D, 0xD4, 0xEB, 0xE4, 0x51, 0xB5, 0xC7, 0x85, 0x56, 0x98,
  26.     0xC0, 0xA8, 0x7A, 0xF9, 0xEC, 0xC9, 0x4F, 0x5C, 0xD9, 0x6C,
  27.     0x63, 0x3D, 0xF5, 0x0D, 0xC8, 0x20, 0x5E, 0x10, 0xE4, 0x41,
  28.     0x72, 0x71, 0xD1, 0xE4, 0x47, 0xD4, 0xFD, 0x85, 0x6B, 0xB5,
  29.     0xFA, 0xA8, 0x6C, 0x98, 0xD6, 0xC9, 0x40, 0xF9, 0xE3, 0x6C,
  30.     0x75, 0x5C, 0xCF, 0x0D, 0x59, 0x3D, 0xAC, 0x30, 0x3A, 0x00,
  31.     0x80, 0x51, 0x16, 0x61, 0xB5, 0xF4, 0x23, 0xC4, 0x99, 0x95,
  32.     0x0F, 0xA5, 0x9E, 0xB8, 0x08, 0x88, 0xB2, 0xD9, 0x24, 0xE9,
  33.     0x87, 0x7C, 0x11, 0x4C, 0xAB, 0x1D, 0x3D, 0x2D, 0x90, 0x41,
  34.     0x06, 0x71, 0xBC, 0x20, 0x2A, 0x10, 0x89, 0x85, 0x1F, 0xB5,
  35.     0xA5, 0xE4, 0x33, 0xD4, 0xA2, 0xC9, 0x34, 0xF9, 0x8E, 0xA8,
  36.     0x18, 0x98, 0xBB, 0x0D, 0x2D, 0x3D, 0x97, 0x6C, 0x01, 0x5C,
  37.     0xF4, 0x51, 0x62, 0x61, 0xD8, 0x30, 0x4E, 0x00, 0xED, 0x95,
  38.     0x7B, 0xA5, 0xC1, 0xF4, 0x57, 0xC4, 0xC6, 0xD9, 0x50, 0xE9,
  39.     0xEA, 0xB8, 0x7C, 0x88, 0xDF, 0x1D, 0x49, 0x2D, 0xF3, 0x7C,
  40.     0x65, 0x4C, 0x58, 0x61, 0xCE, 0x51, 0x74, 0x00, 0xE2, 0x30,
  41.     0x41, 0xA5, 0xD7, 0x95, 0x6D, 0xC4, 0xFB, 0xF4, 0x6A, 0xE9,
  42.     0xFC, 0xD9, 0x46, 0x88, 0xD0, 0xB8, 0x73, 0x2D, 0xE5, 0x1D,
  43.     0x5F, 0x4C, 0xC9, 0x7C, 0x3C, 0x71, 0xAA, 0x41, 0x10, 0x10,
  44.     0x86, 0x20, 0x25, 0xB5, 0xB3, 0x85, 0x09, 0xD4, 0x9F, 0xE4,
  45.     0x0E, 0xF9, 0x98, 0xC9, 0x22, 0x98, 0xB4, 0xA8, 0x17, 0x3D,
  46.     0x81, 0x0D, 0x3B, 0x5C, 0xAD, 0x6C, 0x20, 0x83, 0xB6, 0xB3,
  47.     0x0C, 0xE2, 0x9A, 0xD2, 0x39, 0x47, 0xAF, 0x77, 0x15, 0x26,
  48.     0x83, 0x16, 0x12, 0x0B, 0x84, 0x3B, 0x3E, 0x6A, 0xA8, 0x5A,
  49.     0x0B, 0xCF, 0x9D, 0xFF, 0x27, 0xAE, 0xB1, 0x9E, 0x44, 0x93,
  50.     0xD2, 0xA3, 0x68, 0xF2, 0xFE, 0xC2, 0x5D, 0x57, 0xCB, 0x67,
  51.     0x71, 0x36, 0xE7, 0x06, 0x76, 0x1B, 0xE0, 0x2B, 0x5A, 0x7A,
  52.     0xCC, 0x4A, 0x6F, 0xDF, 0xF9, 0xEF, 0x43, 0xBE, 0xD5, 0x8E,
  53.     0xE8, 0xA3, 0x7E, 0x93, 0xC4, 0xC2, 0x52, 0xF2, 0xF1, 0x67,
  54.     0x67, 0x57, 0xDD, 0x06, 0x4B, 0x36, 0xDA, 0x2B, 0x4C, 0x1B,
  55.     0xF6, 0x4A, 0x60, 0x7A, 0xC3, 0xEF, 0x55, 0xDF, 0xEF, 0x8E,
  56.     0x79, 0xBE, 0x8C, 0xB3, 0x1A, 0x83, 0xA0, 0xD2, 0x36, 0xE2,
  57.     0x95, 0x77, 0x03, 0x47, 0xB9, 0x16, 0x2F, 0x26, 0xBE, 0x3B,
  58.     0x28, 0x0B, 0x92, 0x5A, 0x04, 0x6A, 0xA7, 0xFF, 0x31, 0xCF,
  59.     0x8B, 0x9E, 0x1D, 0xAE, 0xB0, 0xC2, 0x26, 0xF2, 0x9C, 0xA3,
  60.     0x0A, 0x93, 0xA9, 0x06, 0x3F, 0x36, 0x85, 0x67, 0x13, 0x57,
  61.     0x82, 0x4A, 0x14, 0x7A, 0xAE, 0x2B, 0x38, 0x1B, 0x9B, 0x8E,
  62.     0x0D, 0xBE, 0xB7, 0xEF, 0x21, 0xDF, 0xD4, 0xD2, 0x42, 0xE2,
  63.     0xF8, 0xB3, 0x6E, 0x83, 0xCD, 0x16, 0x5B, 0x26, 0xE1, 0x77,
  64.     0x77, 0x47, 0xE6, 0x5A, 0x70, 0x6A, 0xCA, 0x3B, 0x5C, 0x0B,
  65.     0xFF, 0x9E, 0x69, 0xAE, 0xD3, 0xFF, 0x45, 0xCF, 0x78, 0xE2,
  66.     0xEE, 0xD2, 0x54, 0x83, 0xC2, 0xB3, 0x61, 0x26, 0xF7, 0x16,
  67.     0x4D, 0x47, 0xDB, 0x77, 0x4A, 0x6A, 0xDC, 0x5A, 0x66, 0x0B,
  68.     0xF0, 0x3B, 0x53, 0xAE, 0xC5, 0x9E, 0x7F, 0xCF, 0xE9, 0xFF,
  69.     0x1C, 0xF2, 0x8A, 0xC2, 0x30, 0x93, 0xA6, 0xA3, 0x05, 0x36,
  70.     0x93, 0x06, 0x29, 0x57, 0xBF, 0x67, 0x2E, 0x7A, 0xB8, 0x4A,
  71.     0x02, 0x1B, 0x94, 0x2B, 0x37, 0xBE, 0xA1, 0x8E, 0x1B, 0xDF,
  72.     0x8D, 0xEF, 0xFF
  73.     };
  74.  
  75. static BYTE Xtab2[] = {
  76.     0x00, 0x00, 0x07, 0x77, 0x0E, 0xEE, 0x09, 0x99, 0x6D, 0x07,
  77.     0x6A, 0x70, 0x63, 0xE9, 0x64, 0x9E, 0xDB, 0x0E, 0xDC, 0x79,
  78.     0xD5, 0xE0, 0xD2, 0x97, 0xB6, 0x09, 0xB1, 0x7E, 0xB8, 0xE7,
  79.     0xBF, 0x90, 0xB7, 0x1D, 0xB0, 0x6A, 0xB9, 0xF3, 0xBE, 0x84,
  80.     0xDA, 0x1A, 0xDD, 0x6D, 0xD4, 0xF4, 0xD3, 0x83, 0x6C, 0x13,
  81.     0x6B, 0x64, 0x62, 0xFD, 0x65, 0x8A, 0x01, 0x14, 0x06, 0x63,
  82.     0x0F, 0xFA, 0x08, 0x8D, 0x6E, 0x3B, 0x69, 0x4C, 0x60, 0xD5,
  83.     0x67, 0xA2, 0x03, 0x3C, 0x04, 0x4B, 0x0D, 0xD2, 0x0A, 0xA5,
  84.     0xB5, 0x35, 0xB2, 0x42, 0xBB, 0xDB, 0xBC, 0xAC, 0xD8, 0x32,
  85.     0xDF, 0x45, 0xD6, 0xDC, 0xD1, 0xAB, 0xD9, 0x26, 0xDE, 0x51,
  86.     0xD7, 0xC8, 0xD0, 0xBF, 0xB4, 0x21, 0xB3, 0x56, 0xBA, 0xCF,
  87.     0xBD, 0xB8, 0x02, 0x28, 0x05, 0x5F, 0x0C, 0xC6, 0x0B, 0xB1,
  88.     0x6F, 0x2F, 0x68, 0x58, 0x61, 0xC1, 0x66, 0xB6, 0xDC, 0x76,
  89.     0xDB, 0x01, 0xD2, 0x98, 0xD5, 0xEF, 0xB1, 0x71, 0xB6, 0x06,
  90.     0xBF, 0x9F, 0xB8, 0xE8, 0x07, 0x78, 0x00, 0x0F, 0x09, 0x96,
  91.     0x0E, 0xE1, 0x6A, 0x7F, 0x6D, 0x08, 0x64, 0x91, 0x63, 0xE6,
  92.     0x6B, 0x6B, 0x6C, 0x1C, 0x65, 0x85, 0x62, 0xF2, 0x06, 0x6C,
  93.     0x01, 0x1B, 0x08, 0x82, 0x0F, 0xF5, 0xB0, 0x65, 0xB7, 0x12,
  94.     0xBE, 0x8B, 0xB9, 0xFC, 0xDD, 0x62, 0xDA, 0x15, 0xD3, 0x8C,
  95.     0xD4, 0xFB, 0xB2, 0x4D, 0xB5, 0x3A, 0xBC, 0xA3, 0xBB, 0xD4,
  96.     0xDF, 0x4A, 0xD8, 0x3D, 0xD1, 0xA4, 0xD6, 0xD3, 0x69, 0x43,
  97.     0x6E, 0x34, 0x67, 0xAD, 0x60, 0xDA, 0x04, 0x44, 0x03, 0x33,
  98.     0x0A, 0xAA, 0x0D, 0xDD, 0x05, 0x50, 0x02, 0x27, 0x0B, 0xBE,
  99.     0x0C, 0xC9, 0x68, 0x57, 0x6F, 0x20, 0x66, 0xB9, 0x61, 0xCE,
  100.     0xDE, 0x5E, 0xD9, 0x29, 0xD0, 0xB0, 0xD7, 0xC7, 0xB3, 0x59,
  101.     0xB4, 0x2E, 0xBD, 0xB7, 0xBA, 0xC0, 0xB8, 0xED, 0xBF, 0x9A,
  102.     0xB6, 0x03, 0xB1, 0x74, 0xD5, 0xEA, 0xD2, 0x9D, 0xDB, 0x04,
  103.     0xDC, 0x73, 0x63, 0xE3, 0x64, 0x94, 0x6D, 0x0D, 0x6A, 0x7A,
  104.     0x0E, 0xE4, 0x09, 0x93, 0x00, 0x0A, 0x07, 0x7D, 0x0F, 0xF0,
  105.     0x08, 0x87, 0x01, 0x1E, 0x06, 0x69, 0x62, 0xF7, 0x65, 0x80,
  106.     0x6C, 0x19, 0x6B, 0x6E, 0xD4, 0xFE, 0xD3, 0x89, 0xDA, 0x10,
  107.     0xDD, 0x67, 0xB9, 0xF9, 0xBE, 0x8E, 0xB7, 0x17, 0xB0, 0x60,
  108.     0xD6, 0xD6, 0xD1, 0xA1, 0xD8, 0x38, 0xDF, 0x4F, 0xBB, 0xD1,
  109.     0xBC, 0xA6, 0xB5, 0x3F, 0xB2, 0x48, 0x0D, 0xD8, 0x0A, 0xAF,
  110.     0x03, 0x36, 0x04, 0x41, 0x60, 0xDF, 0x67, 0xA8, 0x6E, 0x31,
  111.     0x69, 0x46, 0x61, 0xCB, 0x66, 0xBC, 0x6F, 0x25, 0x68, 0x52,
  112.     0x0C, 0xCC, 0x0B, 0xBB, 0x02, 0x22, 0x05, 0x55, 0xBA, 0xC5,
  113.     0xBD, 0xB2, 0xB4, 0x2B, 0xB3, 0x5C, 0xD7, 0xC2, 0xD0, 0xB5,
  114.     0xD9, 0x2C, 0xDE, 0x5B, 0x64, 0x9B, 0x63, 0xEC, 0x6A, 0x75,
  115.     0x6D, 0x02, 0x09, 0x9C, 0x0E, 0xEB, 0x07, 0x72, 0x00, 0x05,
  116.     0xBF, 0x95, 0xB8, 0xE2, 0xB1, 0x7B, 0xB6, 0x0C, 0xD2, 0x92,
  117.     0xD5, 0xE5, 0xDC, 0x7C, 0xDB, 0x0B, 0xD3, 0x86, 0xD4, 0xF1,
  118.     0xDD, 0x68, 0xDA, 0x1F, 0xBE, 0x81, 0xB9, 0xF6, 0xB0, 0x6F,
  119.     0xB7, 0x18, 0x08, 0x88, 0x0F, 0xFF, 0x06, 0x66, 0x01, 0x11,
  120.     0x65, 0x8F, 0x62, 0xF8, 0x6B, 0x61, 0x6C, 0x16, 0x0A, 0xA0,
  121.     0x0D, 0xD7, 0x04, 0x4E, 0x03, 0x39, 0x67, 0xA7, 0x60, 0xD0,
  122.     0x69, 0x49, 0x6E, 0x3E, 0xD1, 0xAE, 0xD6, 0xD9, 0xDF, 0x40,
  123.     0xD8, 0x37, 0xBC, 0xA9, 0xBB, 0xDE, 0xB2, 0x47, 0xB5, 0x30,
  124.     0xBD, 0xBD, 0xBA, 0xCA, 0xB3, 0x53, 0xB4, 0x24, 0xD0, 0xBA,
  125.     0xD7, 0xCD, 0xDE, 0x54, 0xD9, 0x23, 0x66, 0xB3, 0x61, 0xC4,
  126.     0x68, 0x5D, 0x6F, 0x2A, 0x0B, 0xB4, 0x0C, 0xC3, 0x05, 0x5A,
  127.     0x02, 0x2D, 0xFF
  128.     };
  129.  
  130. DWORD CRCGen( BYTE *pBuf, DWORD lCRC, WORD nLen )
  131. {
  132.     DWORD t;
  133.     WORD *p1, *p2;
  134.     BYTE i, j;
  135.  
  136.     p1 = ( WORD * )Xtab1;
  137.     p2 = ( WORD * )Xtab2;
  138.     for( i = 0; i < nLen; i ++ ){
  139.         j = ( *pBuf ++ ) ^ ( BYTE )lCRC;
  140.         t = ( DWORD )p1[ j ] + ( ( DWORD )p2[ j ] << 16 );
  141.         lCRC = ( lCRC >> 8 ) ^ t;
  142.     }
  143.  
  144.     return lCRC;
  145. }
  146.  
  147. void CheckSum( DWORD lCRC, char *bBuf )
  148. {
  149.     char i, j;
  150.  
  151.     memset( bBuf, 0, 8 );
  152.     for( i = 0; i < 6; i ++ ){
  153.         j = lCRC % ( DWORD ) 0x3e;
  154.         lCRC /= ( DWORD )0x3e;
  155.         bBuf[ i ] = Xtab0[ j ];
  156.     }
  157.     strrev( bBuf );
  158. }
  159.  
  160. void main( void )
  161. {
  162.     WORD    nZone, nRegion, nNode, nPoint;
  163.     DWORD    lCRC;
  164.     char    pBuf[ 8 ], bName[ 40 ], bTemp[ 64 ];
  165.  
  166.     printf( "\nFDR --- Front Door 2.12/SW Register" );
  167.  
  168.     printf( "\nEnter you Zone: " );
  169.     pBuf[ 0 ] = 6;
  170.     nZone = atoi( cgets( pBuf ) );
  171.  
  172.     printf( "\nEnter you Region: " );
  173.     pBuf[ 0 ] = 6;
  174.     nRegion = atoi( cgets( pBuf ) );
  175.  
  176.     printf( "\nEnter you Node: " );
  177.     pBuf[ 0 ] = 6;
  178.     nNode = atoi( cgets( pBuf ) );
  179.  
  180.     printf( "\nEnter you Point: " );
  181.     pBuf[ 0 ] = 6;
  182.     nPoint = atoi( cgets( pBuf ) );
  183.  
  184.     printf( "\nEnter you Name: " );
  185.     bTemp[ 0 ] = 60;
  186.     cgets( bTemp );
  187.  
  188.     strcpy( bName, &bTemp[ 2 ] );
  189.     strlwr( bName );
  190.  
  191.     lCRC = CRCGen( bName, ( DWORD )( nZone << 1 ), strlen( bName ) );
  192.     strcpy( bTemp, "FD" );
  193.     sprintf( pBuf, "%03d", nZone );
  194.     strcat( bTemp, pBuf );
  195.     sprintf( pBuf, "%03d", nRegion );
  196.     strcat( bTemp, pBuf );
  197.     sprintf( pBuf, "%03d", nNode );
  198.     strcat( bTemp, pBuf );
  199.     sprintf( pBuf, "%03d", nPoint );
  200.     strcat( bTemp, pBuf );
  201.  
  202.     lCRC = CRCGen( bTemp, lCRC ^ ( DWORD )( nZone >> 1 ), strlen( bTemp ) );
  203.     CheckSum( lCRC, pBuf );
  204.     printf( "\nYour Register Code is: FD%03d%s%03d%03d%03d\n",
  205.         nZone, pBuf, nRegion, nNode, nPoint );
  206. }
  207.