Click to See Complete Forum and Search --> : From C to Basic


Hal
05-04-2000, 09:32 AM
Could someone convert this to Basic for me? My C is not what it used to B.

Thanks


uint crc(uchar *p, int n)
/* This function returns the XMODEM CRC of an n byte buffer of data pointed
to by p. */
{
int
i;
unsigned int
u,crc;

const unsigned int crc_table[]=
{0x0000,0x1021,0x2042,0x3063,0x4084,0x50A5,0x60C6,0x70E7,0x8108,0x9129,0xA14A,0xB16B,0xC18 C,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
,0
x6C07,0x5C64,0x4C45,0x3CA2,0x2C83,0x1CE0,0x0CC1,

0xEF1F,0xFF3E,0xCF5D,0xDF7C,0xAF9B,0xBFBA,0x8FD9,0x9FF8,0x6E17,0x7E36,0x4E55
,0x5E74,0x2E93,0x3EB2,0x0ED1,0x1EF0};

/* read crc and compute partial CRC */
crc=0;
for (i=0; i<n; i++)


u=crc_table[high(crc)];
crc<<=8;
crc|=*p++;
crc^=u;
}

u=crc_table[high(crc)];
crc<<=8;
crc^=u;
u=crc_table[high(crc)];
crc<<=8;
crc^=u;

return(crc);
}

Dylan
05-04-2000, 07:12 PM
I don't want to sound discouraging or anything, but the people who could translate
this are few and far between. This is the kind of thing that makes COM so
cool (my opinion); you can do crazy things in one language and call it from
another. Maybe you should post this to http://www.qbasic.com. There are
(or were) people who did strange things like client server applications.
Good luck.
Dylan


"Hal" <hal@autocutresearch.com> wrote:
>Could someone convert this to Basic for me? My C is not what it used to
B.
>
>Thanks
>
>

Hal
05-04-2000, 11:05 PM
Wow! I had no idea. Thanks for the tip.

Hal

Dylan <dproulx@carl.org> wrote in message news:391203ec$1@news.devx.com...
>
> I don't want to sound discouraging or anything, but the people who could
translate
> this are few and far between. This is the kind of thing that makes COM so
> cool (my opinion); you can do crazy things in one language and call it
from
> another. Maybe you should post this to http://www.qbasic.com. There are
> (or were) people who did strange things like client server applications.
> Good luck.
> Dylan
>
>
> "Hal" <hal@autocutresearch.com> wrote:
> >Could someone convert this to Basic for me? My C is not what it used to
> B.
> >
> >Thanks
> >
> >
>

Brian Leung
05-05-2000, 08:30 AM
Hi Hal,

I don't know whether you've got your answer yet, and I haven't tested this
but:
2 ways are to put the c function into dll format and call it in visual basic:

Private Declare Function crc Lib "some dll library" (p As Byte, ByVal n As
Long) As Long



The conversion to VB would be something like:

Note though that VB does not have unsigned values. So you'll have to
adjust the data type accordingly to avoid overflow.
I assume that high() is a function that VB will have access to.



Function crc(p As Byte, ByVal n As Long) As Long
'* This function returns the XMODEM CRC of an n byte buffer of data pointed
' to by p. *
Dim i As Long, u As Long

'NOTE if you use this function multiple times, calculate table once in some
initialization function.
'Note also, Visual Basic does not allow unsigned values to my knowledge
'-------------------------
dim crc_table() as long
Dim tmp As Variant, tmp1 As Integer

tmp = Array(&H0, &H1021, &H2042, &H3063, &H4084, &H50A5, &H60C6, &H70E7,
&H8108, &H9129, &HA14A, &HB16B, &HC18C, &HD1AD, &HE1CE, &HF1EF, _
&H1231, &H210, &H3273, &H2252, &H52B5, &H4294, &H72F7, &H62D6, &H9339,
&H8318, &HB37B, &HA35A, &HD3BD, &HC39C, &HF3FF, &HE3DE, _
&H2462, &H3443, &H420, &H1401, &H64E6, &H74C7, &H44A4, &H5485, &HA56A,
&HB54B, &H8528, &H9509, &HE5EE, &HF5CF, &HC5AC, &HD58D, _
&H3653, &H2672, &H1611, &H630, &H76D7, &H66F6, &H5695, &H46B4, &HB75B,
&HA77A, &H9719, &H8738, &HF7DF, &HE7FE, &HD79D, &HC7BC, _
&H48C4, &H58E5, &H6886, &H78A7, &H840, &H1861, &H2802, &H3823, &HC9CC,
&HD9ED, &HE98E, &HF9AF, &H8948, &H9969, &HA90A, &HB92B, _
&H5AF5, &H4AD4, &H7AB7, &H6A96, &H1A71, &HA50, &H3A33, &H2A12, &HDBFD,
&HCBDC, &HFBBF, &HEB9E, &H9B79, &H8B58, &HBB3B, &HAB1A, _
&H6CA6, &H7C87, &H4CE4, &H5CC5, &H2C22, &H3C03, &HC60, &H1C41, &HEDAE,
&HFD8F, &HCDEC, &HDDCD, &HAD2A, &HBD0B, &H8D68, &H9D49, _
&H7E97, &H6EB6, &H5ED5, &H4EF4, &H3E13, &H2E32, &H1E51, &HE70, &HFF9F,
&HEFBE, &HDFDD, &HCFFC, &HBF1B, &HAF3A, &H9F59, &H8F78, _
&H9188, &H81A9, &HB1CA, &HA1EB, &HD10C, &HC12D, &HF14E, &HE16F, &H1080,
&HA1, &H30C2, &H20E3, &H5004, &H4025, &H7046, &H6067, _
&H83B9, &H9398, &HA3FB, &HB3DA, &HC33D, &HD31C, &HE37F, &HF35E, &H2B1,
&H1290, &H22F3, &H32D2, &H4235, &H5214, &H6277, &H7256, _
&HB5EA, &HA5CB, &H95A8, &H8589, &HF56E, &HE54F, &HD52C, &HC50D, &H34E2,
&H24C3, &H14A0, &H481, &H7466, &H6447, &H5424, &H4405, _
&HA7DB, &HB7FA, &H8799, &H97B8, &HE75F, &HF77E, &HC71D, &HD73C, &H26D3,
&H36F2, &H691, &H16B0, &H6657, &H7676, &H4615, &H5634, _
&HD94C, &HC96D, &HF90E, &HE92F, &H99C8, &H89E9, &HB98A, &HA9AB, &H5844,
&H4865, &H7806, &H6827, &H18C0, &H8E1, &H3882, &H28A3, _
&HCB7D, &HDB5C, &HEB3F, &HFB1E, &H8BF9, &H9BD8, &HABBB, &HBB9A, &H4A75,
&H5A54, &H6A37, &H7A16, &HAF1, &H1AD0, &H2AB3, &H3A92, _
&HFD2E, &HED0F, &HDD6C, &HCD4D, &HBDAA, &HAD8B, &H9DE8, &H8DC9, &H7C26,
&H6C07, &H5C64, &H4C45, &H3CA2, &H2C83, &H1CE0, &HCC1, _
&HEF1F, &HFF3E, &HCF5D, &HDF7C, &HAF9B, &HBFBA, &H8FD9, &H9FF8, &H6E17, &H7E36,
&H4E55, &H5E74, &H2E93, &H3EB2, &HED1, &H1EF0)

ReDim crc_table(UBound(tmp))
For tmp1 = 0 To UBound(tmp)
crc_table(tmp1) = tmp(tmp1)
Next tmp1

'-------------------------------
' /* read crc and compute partial CRC */

For i = 0 To n - 1
u = crc_table(high(crc))
crc = crc * 2 ^ 8
crc = crc Or p
p = p + 1
crc = crc Xor u
Next i
u = crc_table(high(crc))
crc = crc * 2 ^ 8
u = crc_table(high(crc))
crc = crc * 2 ^ 8
crc = crc Xor u


End Function



"Hal" <hal@autocutresearch.com> wrote:
>Could someone convert this to Basic for me? My C is not what it used to
B.
>
>Thanks
>
>
>uint crc(uchar *p, int n)
>/* This function returns the XMODEM CRC of an n byte buffer of data pointed
>to by p. */
>{
> int
> i;
> unsigned int
> u,crc;
>
> const unsigned int crc_table[]=
> {0x0000,0x1021,0x2042,0x3063,0x4084,0x50A5,0x60C6,0x70E7,0x8108,0x9129,0xA14A,0xB16B,0xC18 C,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
>,0
>x6C07,0x5C64,0x4C45,0x3CA2,0x2C83,0x1CE0,0x0CC1,
>
>0xEF1F,0xFF3E,0xCF5D,0xDF7C,0xAF9B,0xBFBA,0x8FD9,0x9FF8,0x6E17,0x7E36,0x4E55
>,0x5E74,0x2E93,0x3EB2,0x0ED1,0x1EF0};
>
> /* read crc and compute partial CRC */
> crc=0;
> for (i=0; i<n; i++)
>
>
> u=crc_table[high(crc)];
> crc<<=8;
> crc|=*p++;
> crc^=u;
> }
>
> u=crc_table[high(crc)];
> crc<<=8;
> crc^=u;
> u=crc_table[high(crc)];
> crc<<=8;
> crc^=u;
>
> return(crc);
>}
>
>
>
>