# crc16, crc16file

CRC-16-IBMを計算する。

    crc16 <intvar> <string>
    crc16file <intvar> <filename>

## 解説

引数の文字列およびファイルからCRC(Cyclic Redundancy Checking)を計算する。多項式（右回り）は以下のとおり。
0xA001 (x16+x15+x2+x0)
計算結果は intvar 変数に数値として格納される。
crc16file でファイルが開けなかった場合は、システム変数 result に -1 が格納される。

CRCアルゴリズムの実装（C言語）を以下に示す。

    static unsigned int crc16(int n, unsigned char c[])
    {
    #define CRC16POLY2  0x8408U  /* 左右逆転 */

    	int i, j;
    	unsigned long r;

    	r = 0xFFFFU;
    	for (i = 0; i < n; i++) {
    		r ^= c[i];
    		for (j = 0; j < CHAR_BIT; j++)
    			if (r & 1) r = (r >> 1) ^ CRC16POLY2;
    			else       r >>= 1;
    	}
    	return r ^ 0xFFFFU;
    }

## 例

    str = 'this is a test string to be CRC16ed'
    crc16 crc str

    ; Display CRC16 result asHEX
    sprintf '0x%08X' crc
    messagebox inputstr 'CRC16 = '

    crc16file crc 'foo.bin'
    if result = -1 then
        messagebox 'file open error' 'CRC16 = '
    else
        sprintf '0x%08X' crc
        messagebox inputstr 'CRC16 = '
    endif