Level Extreme platform
Subscription
Corporate profile
Products & Services
Support
Legal
Français
Help translating some C code to VFP, please
Message
From
04/06/2008 14:52:57
 
 
To
04/06/2008 14:35:35
General information
Forum:
Visual FoxPro
Category:
Other
Miscellaneous
Thread ID:
01321678
Message ID:
01321683
Views:
14
Shouldn't be too difficult to do. Look at BITOR(), BITXOR(), and BITRSHIFT()

>Would somebody be kind enough to translate the following C code to VFP, please. The code is used to calculate CRC for "chunks" of a PNG file.
>
>TIA,
>
>Alex
>
>
>Table D.1 — Hints for reading ISO C code
>& 	Bitwise AND operator.
>^ 	Bitwise exclusive-OR operator.
>>> 	Bitwise right shift operator. When applied to an unsigned quantity, as here, right shift inserts zeroes at the left.
>! 	Logical NOT operator.
>++ 	"n++" increments the variable n. In "for" loops, it is applied after the variable is tested.
>0xNNN 	0x introduces a hexadecimal (base 16) constant. Suffix L indicates a long value (at least 32 bits).
>
>
>
>   /* Table of CRCs of all 8-bit messages. */
>   unsigned long crc_table[256];
>
>   /* Flag: has the table been computed? Initially false. */
>   int crc_table_computed = 0;
>
>   /* Make the table for a fast CRC. */
>   void make_crc_table(void)
>   {
>     unsigned long c;
>     int n, k;
>
>     for (n = 0; n < 256; n++) {
>       c = (unsigned long) n;
>       for (k = 0; k < 8; k++) {
>         if (c & 1)
>           c = 0xedb88320L ^ (c >> 1);
>         else
>           c = c >> 1;
>       }
>       crc_table[n] = c;
>     }
>     crc_table_computed = 1;
>   }
>
>   /* Update a running CRC with the bytes buf[0..len-1]--the CRC
>      should be initialized to all 1's, and the transmitted value
>      is the 1's complement of the final running CRC (see the
>      crc() routine below). */
>
>   unsigned long update_crc(unsigned long crc, unsigned char *buf,
>                            int len)
>   {
>     unsigned long c = crc;
>     int n;
>
>     if (!crc_table_computed)
>       make_crc_table();
>     for (n = 0; n < len; n++) {
>       c = crc_table[(c ^ buf[n]) & 0xff] ^ (c >> 8);
>     }
>     return c;
>   }
>
>   /* Return the CRC of the bytes buf[0..len-1]. */
>   unsigned long crc(unsigned char *buf, int len)
>   {
>     return update_crc(0xffffffffL, buf, len) ^ 0xffffffffL;
>   }
>
Craig Berntson
MCSD, Microsoft .Net MVP, Grape City Community Influencer
Previous
Next
Reply
Map
View

Click here to load this message in the networking platform