Getting a CRC for a Dynamic Length String... 
Author Message
 Getting a CRC for a Dynamic Length String...

Hello Everyone,

I'm having some trouble getting a prototype worked out ( I *think* ).

Here is what I am up to:

1)    I want to generate a CRC on the contents of a field of unknown length.
2)    I want to write the class code so that it will *adjust* itself to the
maximum size field as needed.

For the CRC, I have this code from Randy Goodhew's book (THANKS Randy!):
======================================
MAP
   MODULE('CLARION 32 BIT API')
CRC32(*STRING buffer,ULONG size,ULONG crc),ULONG,RAW,NAME('CLA$CRC32')
   END !module
END !map

where the parameters are:

buffer - the data buffer upon which to perform the CRC.
size - size (in bytes) of the data buffer.
crc - the initial CRC value, usually 0.
======================================

The CRC code works fine, but it is prototyped to expect a pointer to a
string buffer.  That is where I am running into problems.

======================================
In my class code , I have these variables that are global to the class:

MaxDataString       &STRING
MaxDataSize         LONG
======================================
When processing the Field (based on the FEQ number) I use this code to
determine if my string is large enough to hold the data returned by
CONTENTS() and I adjust the size if it is not:

MyClass.ValidateSize     Procedure(Long pFEQ)
TheSize       LONG

 Code
   !Get the size of the current control's contents
   TheSize = LEN(Contents(pFEQ))

   !If the size is greater than our allocated string space
   IF TheSize > MaxDataSize
     !If the string space allocated > 0
     IF MaxDataSize > 0
       !Dispose of the old string
       DISPOSE(MaxDataString)
       !Allocate a new string at the new max size
       MaxDataString &= NEW(STRING(TheSize))
       !Reset the max value
       MaxDataSize = TheSize
     ELSE
       !Allocate a new string at the new max size
       MaxDataString &= NEW(STRING(TheSize))
       !Reset the max value
       MaxDataSize = TheSize
     END
   END

======================================
The code to validate the size will determine if the MaxStringData is large
enough to hold the contents of the control that was passed and if it is not,
it will dispose of the string and create a NEW string of the right size.  So
far so good.
======================================

Next I want to get the CRC of the data in the control (now that I know my
sting is big enough to hold it).

The code for this is below (note the call to the Self.ValidateSize(pFEQ)

MyClass.GetCRC     Procedure(Long pFEQ)
CRCValue    LONG

 Code

   !Validate that our MaxDataString is big enough - adjust if needed
   Self.ValidateSize( pFEQ )

   !Set the string to NULL
   MaxDataString &= NULL

   !Get the Data in this control and load it into the empty string
   MaxDataString = CONTENTS( pFEQ )

   !Get the CRC
   CRCValue = CRC32( MaxDataString, SIZE(MaxDataString), 0 )

   !Return the new CRC value
   RETURN( CRCValue )

======================================

Where I am running into problems is that the dynamic string MaxDataString
which is declared as:

MaxDataString     &STRING

does not match the prototype of the CRC32 function.

I may just be having a brain fart here, but I can't seem to figure out how
to get the newly sized string into the CRC32 function.

Any help appreciated!

Thanks,

Charles Edmonds

LANSRAD - "Intelligent Solutions for Universal Problems"
www.lansrad.com



Sat, 22 Oct 2005 17:25:41 GMT  
 Getting a CRC for a Dynamic Length String...
Can you have just a large CString, or a large String. When I use CRC32, I
almost always use a String(512).

FYI, if you are using CRC32, on OEM data, you may want to be careful as the
OEM data is converted into ANSI when read in and these can have different
values.


Quote:
> Hello Everyone,

> I'm having some trouble getting a prototype worked out ( I *think* ).

> Here is what I am up to:

> 1)    I want to generate a CRC on the contents of a field of unknown
length.
> 2)    I want to write the class code so that it will *adjust* itself to
the
> maximum size field as needed.

> For the CRC, I have this code from Randy Goodhew's book (THANKS Randy!):
> ======================================
> MAP
>    MODULE('CLARION 32 BIT API')
> CRC32(*STRING buffer,ULONG size,ULONG crc),ULONG,RAW,NAME('CLA$CRC32')
>    END !module
> END !map

> where the parameters are:

> buffer - the data buffer upon which to perform the CRC.
> size - size (in bytes) of the data buffer.
> crc - the initial CRC value, usually 0.
> ======================================

> The CRC code works fine, but it is prototyped to expect a pointer to a
> string buffer.  That is where I am running into problems.

> ======================================
> In my class code , I have these variables that are global to the class:

> MaxDataString       &STRING
> MaxDataSize         LONG
> ======================================
> When processing the Field (based on the FEQ number) I use this code to
> determine if my string is large enough to hold the data returned by
> CONTENTS() and I adjust the size if it is not:

> MyClass.ValidateSize     Procedure(Long pFEQ)
> TheSize       LONG

>  Code
>    !Get the size of the current control's contents
>    TheSize = LEN(Contents(pFEQ))

>    !If the size is greater than our allocated string space
>    IF TheSize > MaxDataSize
>      !If the string space allocated > 0
>      IF MaxDataSize > 0
>        !Dispose of the old string
>        DISPOSE(MaxDataString)
>        !Allocate a new string at the new max size
>        MaxDataString &= NEW(STRING(TheSize))
>        !Reset the max value
>        MaxDataSize = TheSize
>      ELSE
>        !Allocate a new string at the new max size
>        MaxDataString &= NEW(STRING(TheSize))
>        !Reset the max value
>        MaxDataSize = TheSize
>      END
>    END

> ======================================
> The code to validate the size will determine if the MaxStringData is large
> enough to hold the contents of the control that was passed and if it is
not,
> it will dispose of the string and create a NEW string of the right size.
So
> far so good.
> ======================================

> Next I want to get the CRC of the data in the control (now that I know my
> sting is big enough to hold it).

> The code for this is below (note the call to the Self.ValidateSize(pFEQ)

> MyClass.GetCRC     Procedure(Long pFEQ)
> CRCValue    LONG

>  Code

>    !Validate that our MaxDataString is big enough - adjust if needed
>    Self.ValidateSize( pFEQ )

>    !Set the string to NULL
>    MaxDataString &= NULL

>    !Get the Data in this control and load it into the empty string
>    MaxDataString = CONTENTS( pFEQ )

>    !Get the CRC
>    CRCValue = CRC32( MaxDataString, SIZE(MaxDataString), 0 )

>    !Return the new CRC value
>    RETURN( CRCValue )

> ======================================

> Where I am running into problems is that the dynamic string MaxDataString
> which is declared as:

> MaxDataString     &STRING

> does not match the prototype of the CRC32 function.

> I may just be having a brain fart here, but I can't seem to figure out how
> to get the newly sized string into the CRC32 function.

> Any help appreciated!

> Thanks,

> Charles Edmonds

> LANSRAD - "Intelligent Solutions for Universal Problems"
> www.lansrad.com



Sat, 22 Oct 2005 22:20:57 GMT  
 Getting a CRC for a Dynamic Length String...
Hi Charles,

Quote:
> I'm having some trouble getting a prototype worked out ( I *think* ).
>.....
> MaxDataString       &STRING
> MaxDataSize         LONG
>......
>    !Set the string to NULL
>    MaxDataString &= NULL

>    !Get the Data in this control and load it into the empty string
>    MaxDataString = CONTENTS( pFEQ )

I have not run your code, but I would think that the statement
"MaxDataString &= NULL" is not what you really want to happen here. Doing
this, unless I'm having a brain fart as well, 1) sets the size AND the
address to NULL, thus you lose where the string is to be stored in memory,
and 2) you now cannot get back to the string to DISPOSE of it, creating a
memory leak. Comment out that line and see if it starts working.

Let me know if that does something good.

Regards,

Jim Gambon



Sat, 22 Oct 2005 22:35:28 GMT  
 Getting a CRC for a Dynamic Length String...

Quote:

> Can you have just a large CString, or a large String. When I use CRC32, I
> almost always use a String(512).

I could perhaps, but the class could still run into situations where the
data in the control was greater than 512.

I am wanting to use the CRC to compare the data in the control at one point
in time against itself at another time.  I have been doing this now by
simply using a CSTRING set to a fixed length, but I wanted to switch to a
CRC of the entire data in the control as an alternative.  The problem with
comparing say the first 512 bytes of a control would be when your dealing
with a text field and the data grows beyond 512K, but the first 512K does
not change.

Quote:
> FYI, if you are using CRC32, on OEM data, you may want to be careful as
the
> OEM data is converted into ANSI when read in and these can have different

values.

I'll keep an eye on that, but I think that the CRC would be different even
so.

Charles Edmonds

LANSRAD - "Intelligent Solutions for Universal Problems"
www.lansrad.com



Sun, 23 Oct 2005 01:32:13 GMT  
 Getting a CRC for a Dynamic Length String...

Quote:
> I have not run your code, but I would think that the statement
> "MaxDataString &= NULL" is not what you really want to happen here. Doing
> this, unless I'm having a brain fart as well, 1) sets the size AND the
> address to NULL, thus you lose where the string is to be stored in memory,
> and 2) you now cannot get back to the string to DISPOSE of it, creating a
> memory leak. Comment out that line and see if it starts working.

> Let me know if that does something good.

That is interesting and I'll have to check it if I can ever get the newly
created string to pass to the CRC function.

BTW - I got the idea for the "MaxDataString &= NULL" statement from some
code that Steve Johnson posted here a while back in a post about dynamically
increasing string size as needed - so it was untested for me.

Thanks for the heads up about it.

Charles Edmonds

LANSRAD - "Intelligent Solutions for Universal Problems"
www.lansrad.com



Sun, 23 Oct 2005 01:35:06 GMT  
 Getting a CRC for a Dynamic Length String...
Hello Everyone,

Thanks to all who contributed suggestions.  I have to say "thanks again" to
Arnor Baldvinsson for providing the answer to the problem <g>...

As I had suspected, the main problem was in the prototype.  The CRC32 was
expecting a *STRING parameter, yet the dynamic string that I was allocating
was declared as &STRING.  When I changed it to &CSTRING, it worked fine.

I also moved the code to create the string inside the control CRC function.
The revised code is:
 ======================================
MyClass.GetCRC     Procedure(Long pFEQ)

TheCString  &CSTRING
TheSize     LONG
CRCValue    LONG

 Code

   !Get the size of the current control's contents
   TheSize = LEN(Contents(pFEQ))

   !Allocate a new string at the new max size
   TheCString &= NEW(CSTRING(TheSize + 1))       !Add 1 because the CRC uses
a STRING

   !Get the Data in this control
   TheCString = CONTENTS( pFEQ )

   !Get the CRC
   CRCValue = ControlMonitorCRC32( TheCString, SIZE(TheCString), 0 )

   !Dispose of the string
   DISPOSE(TheCString)

   !Return the new CRC value
   RETURN( CRCValue )
 ======================================

This code returns a CRC for the contents of a control - no matter what the
size.

BTW - I plan to post the code for a class/template set (based on an idea
that Arnor gave me for a solution to another post here on "The best place to
trigger a refresh") in a day or so.  This is turning out to be a VERY useful
class and I'm quite happy to be able to pass it along for others to use!

Charles Edmonds

LANSRAD - "Intelligent Solutions for Universal Problems"
www.lansrad.com


Quote:
> Hello Everyone,

> I'm having some trouble getting a prototype worked out ( I *think* ).

> Here is what I am up to:

> 1)    I want to generate a CRC on the contents of a field of unknown
length.
> 2)    I want to write the class code so that it will *adjust* itself to
the
> maximum size field as needed.

> For the CRC, I have this code from Randy Goodhew's book (THANKS Randy!):
> ======================================
> MAP
>    MODULE('CLARION 32 BIT API')
> CRC32(*STRING buffer,ULONG size,ULONG crc),ULONG,RAW,NAME('CLA$CRC32')
>    END !module
> END !map

> where the parameters are:

> buffer - the data buffer upon which to perform the CRC.
> size - size (in bytes) of the data buffer.
> crc - the initial CRC value, usually 0.
> ======================================

> The CRC code works fine, but it is prototyped to expect a pointer to a
> string buffer.  That is where I am running into problems.

> ======================================
> In my class code , I have these variables that are global to the class:

> MaxDataString       &STRING
> MaxDataSize         LONG
> ======================================
> When processing the Field (based on the FEQ number) I use this code to
> determine if my string is large enough to hold the data returned by
> CONTENTS() and I adjust the size if it is not:

> MyClass.ValidateSize     Procedure(Long pFEQ)
> TheSize       LONG

>  Code
>    !Get the size of the current control's contents
>    TheSize = LEN(Contents(pFEQ))

>    !If the size is greater than our allocated string space
>    IF TheSize > MaxDataSize
>      !If the string space allocated > 0
>      IF MaxDataSize > 0
>        !Dispose of the old string
>        DISPOSE(MaxDataString)
>        !Allocate a new string at the new max size
>        MaxDataString &= NEW(STRING(TheSize))
>        !Reset the max value
>        MaxDataSize = TheSize
>      ELSE
>        !Allocate a new string at the new max size
>        MaxDataString &= NEW(STRING(TheSize))
>        !Reset the max value
>        MaxDataSize = TheSize
>      END
>    END

> ======================================
> The code to validate the size will determine if the MaxStringData is large
> enough to hold the contents of the control that was passed and if it is
not,
> it will dispose of the string and create a NEW string of the right size.
So
> far so good.
> ======================================

> Next I want to get the CRC of the data in the control (now that I know my
> sting is big enough to hold it).

> The code for this is below (note the call to the Self.ValidateSize(pFEQ)

> MyClass.GetCRC     Procedure(Long pFEQ)
> CRCValue    LONG

>  Code

>    !Validate that our MaxDataString is big enough - adjust if needed
>    Self.ValidateSize( pFEQ )

>    !Set the string to NULL
>    MaxDataString &= NULL

>    !Get the Data in this control and load it into the empty string
>    MaxDataString = CONTENTS( pFEQ )

>    !Get the CRC
>    CRCValue = CRC32( MaxDataString, SIZE(MaxDataString), 0 )

>    !Return the new CRC value
>    RETURN( CRCValue )

> ======================================

> Where I am running into problems is that the dynamic string MaxDataString
> which is declared as:

> MaxDataString     &STRING

> does not match the prototype of the CRC32 function.

> I may just be having a brain fart here, but I can't seem to figure out how
> to get the newly sized string into the CRC32 function.

> Any help appreciated!

> Thanks,

> Charles Edmonds

> LANSRAD - "Intelligent Solutions for Universal Problems"
> www.lansrad.com



Sun, 23 Oct 2005 04:20:12 GMT  
 Getting a CRC for a Dynamic Length String...
Thanks for the update.
Looking forward to the class/template.


Quote:
> Hello Everyone,

> Thanks to all who contributed suggestions.  I have to say "thanks again"
to
> Arnor Baldvinsson for providing the answer to the problem <g>...

> As I had suspected, the main problem was in the prototype.  The CRC32 was
> expecting a *STRING parameter, yet the dynamic string that I was
allocating
> was declared as &STRING.  When I changed it to &CSTRING, it worked fine.

> I also moved the code to create the string inside the control CRC
function.
> The revised code is:
>  ======================================
> MyClass.GetCRC     Procedure(Long pFEQ)

> TheCString  &CSTRING
> TheSize     LONG
> CRCValue    LONG

>  Code

>    !Get the size of the current control's contents
>    TheSize = LEN(Contents(pFEQ))

>    !Allocate a new string at the new max size
>    TheCString &= NEW(CSTRING(TheSize + 1))       !Add 1 because the CRC
uses
> a STRING

>    !Get the Data in this control
>    TheCString = CONTENTS( pFEQ )

>    !Get the CRC
>    CRCValue = ControlMonitorCRC32( TheCString, SIZE(TheCString), 0 )

>    !Dispose of the string
>    DISPOSE(TheCString)

>    !Return the new CRC value
>    RETURN( CRCValue )
>  ======================================

> This code returns a CRC for the contents of a control - no matter what the
> size.

> BTW - I plan to post the code for a class/template set (based on an idea
> that Arnor gave me for a solution to another post here on "The best place
to
> trigger a refresh") in a day or so.  This is turning out to be a VERY
useful
> class and I'm quite happy to be able to pass it along for others to use!

> Charles Edmonds

> LANSRAD - "Intelligent Solutions for Universal Problems"
> www.lansrad.com



> > Hello Everyone,

> > I'm having some trouble getting a prototype worked out ( I *think* ).

> > Here is what I am up to:

> > 1)    I want to generate a CRC on the contents of a field of unknown
> length.
> > 2)    I want to write the class code so that it will *adjust* itself to
> the
> > maximum size field as needed.

> > For the CRC, I have this code from Randy Goodhew's book (THANKS Randy!):
> > ======================================
> > MAP
> >    MODULE('CLARION 32 BIT API')
> > CRC32(*STRING buffer,ULONG size,ULONG crc),ULONG,RAW,NAME('CLA$CRC32')
> >    END !module
> > END !map

> > where the parameters are:

> > buffer - the data buffer upon which to perform the CRC.
> > size - size (in bytes) of the data buffer.
> > crc - the initial CRC value, usually 0.
> > ======================================

> > The CRC code works fine, but it is prototyped to expect a pointer to a
> > string buffer.  That is where I am running into problems.

> > ======================================
> > In my class code , I have these variables that are global to the class:

> > MaxDataString       &STRING
> > MaxDataSize         LONG
> > ======================================
> > When processing the Field (based on the FEQ number) I use this code to
> > determine if my string is large enough to hold the data returned by
> > CONTENTS() and I adjust the size if it is not:

> > MyClass.ValidateSize     Procedure(Long pFEQ)
> > TheSize       LONG

> >  Code
> >    !Get the size of the current control's contents
> >    TheSize = LEN(Contents(pFEQ))

> >    !If the size is greater than our allocated string space
> >    IF TheSize > MaxDataSize
> >      !If the string space allocated > 0
> >      IF MaxDataSize > 0
> >        !Dispose of the old string
> >        DISPOSE(MaxDataString)
> >        !Allocate a new string at the new max size
> >        MaxDataString &= NEW(STRING(TheSize))
> >        !Reset the max value
> >        MaxDataSize = TheSize
> >      ELSE
> >        !Allocate a new string at the new max size
> >        MaxDataString &= NEW(STRING(TheSize))
> >        !Reset the max value
> >        MaxDataSize = TheSize
> >      END
> >    END

> > ======================================
> > The code to validate the size will determine if the MaxStringData is
large
> > enough to hold the contents of the control that was passed and if it is
> not,
> > it will dispose of the string and create a NEW string of the right size.
> So
> > far so good.
> > ======================================

> > Next I want to get the CRC of the data in the control (now that I know
my
> > sting is big enough to hold it).

> > The code for this is below (note the call to the Self.ValidateSize(pFEQ)

> > MyClass.GetCRC     Procedure(Long pFEQ)
> > CRCValue    LONG

> >  Code

> >    !Validate that our MaxDataString is big enough - adjust if needed
> >    Self.ValidateSize( pFEQ )

> >    !Set the string to NULL
> >    MaxDataString &= NULL

> >    !Get the Data in this control and load it into the empty string
> >    MaxDataString = CONTENTS( pFEQ )

> >    !Get the CRC
> >    CRCValue = CRC32( MaxDataString, SIZE(MaxDataString), 0 )

> >    !Return the new CRC value
> >    RETURN( CRCValue )

> > ======================================

> > Where I am running into problems is that the dynamic string
MaxDataString
> > which is declared as:

> > MaxDataString     &STRING

> > does not match the prototype of the CRC32 function.

> > I may just be having a brain fart here, but I can't seem to figure out
how
> > to get the newly sized string into the CRC32 function.

> > Any help appreciated!

> > Thanks,

> > Charles Edmonds

> > LANSRAD - "Intelligent Solutions for Universal Problems"
> > www.lansrad.com



Sun, 23 Oct 2005 04:38:18 GMT  
 Getting a CRC for a Dynamic Length String...
Jim Gambon is spot on.
The NULL assignment will destroy the pointer to the STRING.
The CRC of nothing is nothing. :)
Then there's the memory leak issue...
Never NULL an active Reference Variable.

Try this updated prototype:

MAP
   MODULE('CLARION 32 BIT API')
  CRC32(*? buffer,ULONG size,ULONG crc),ULONG,RAW,NAME('CLA$CRC32')
   END !module
END !map

This gives you a more universal pointer to the buffer ( *? ).

Note: The orginal CLARION COMPANION book was written five years
ago when the current Clarion for Windows version was 4.0.
Many updates, and about 800 additional pages of notes later,
I know more about Clarion - I think. :)

Also, I'm not sure why you are trying to create a perfect fitting
new container for the USE variable. Its already in a container. :)

Quote:



> > I have not run your code, but I would think that the statement
> > "MaxDataString &= NULL" is not what you really want to happen here. Doing
> > this, unless I'm having a brain fart as well, 1) sets the size AND the
> > address to NULL, thus you lose where the string is to be stored in memory,
> > and 2) you now cannot get back to the string to DISPOSE of it, creating a
> > memory leak. Comment out that line and see if it starts working.

> > Let me know if that does something good.

> That is interesting and I'll have to check it if I can ever get the newly
> created string to pass to the CRC function.

> BTW - I got the idea for the "MaxDataString &= NULL" statement from some
> code that Steve Johnson posted here a while back in a post about dynamically
> increasing string size as needed - so it was untested for me.

> Thanks for the heads up about it.

> Charles Edmonds

> LANSRAD - "Intelligent Solutions for Universal Problems"
> www.lansrad.com

--
 Randy Goodhew
 ---[ eQ ]---


Sun, 23 Oct 2005 05:03:52 GMT  
 Getting a CRC for a Dynamic Length String...
Hi Randy,


Quote:
> Jim Gambon is spot on.
> The NULL assignment will destroy the pointer to the STRING.
> The CRC of nothing is nothing. :)
> Then there's the memory leak issue...
> Never NULL an active Reference Variable.

Got it! - Thanks to Jim for pointing it out and you for cofirming it.  I
already removed it from the code.

(BTW - like I stated in one of these messages, that particular code came
from a post that Steve Johnson did about dynamically adjusting the size of
strings as needed).

Quote:
> Try this updated prototype:

> MAP
>    MODULE('CLARION 32 BIT API')
>   CRC32(*? buffer,ULONG size,ULONG crc),ULONG,RAW,NAME('CLA$CRC32')
>    END !module
> END !map

> This gives you a more universal pointer to the buffer ( *? ).

Thanks - will put that into the class and my code library.

Quote:
> Note: The orginal CLARION COMPANION book was written five years
> ago when the current Clarion for Windows version was 4.0.
> Many updates, and about 800 additional pages of notes later,
> I know more about Clarion - I think. :)

Despite using it for years, this part of Clarion is still pretty new to me.
That is why I'm happy to have *experts* like you that I can depend on to
keep me from shooting myself in the foot!

Quote:
> Also, I'm not sure why you are trying to create a perfect fitting
> new container for the USE variable. Its already in a container. :)

Hmmm???  Not sure if I follow you here.

I am writing a class/template set that makes it possible to have a block of
code executed or a routine called whenever ANY data in a procedure is
changed.  I know that this is nothing special in itself, except that you
only have to add the template and then insert your code ONE time in a single
embed point.  To me this sure beats having to enter a call to a routine in
100+ embed points (or more on a complex window).

In explanation, I have a imaging control that has a multitude of settings
that change how the image is displayed.  I needed to have the image updated
"on-the-fly" as the user makes changes.  I did NOT want to have to call the
update routine in all the emed points that could change - plus there were
cases when one action caused a change of data in another place.  This class
makes it easy to do this - all from a single embed point.

I am using a CRC32 check to determine if the data has changed since the last
time I checked it.  I needed to be able to get the CRC32 prototypes working
with the NEW data buffer that was created to hold the CONTENTS() of the
control or variable.  This variable had to be created to fit so that
CONTENTS() would not truncate the data and since the CRC32 function was
expecting a pointer to a STRING (at least that is what I though until I saw
your new prototype <g>).

Am I right in guessing that your new prototype would accept a pointer to a
buffer other than STRING?

Thanks - again, I do appeciate the help and I DO like your book.  Can't wait
to see the new version after C6 comes out (if you decide to write one!).

Charles Edmonds

LANSRAD - "Intelligent Solutions for Universal Problems"
www.lansrad.com



Sun, 23 Oct 2005 13:46:54 GMT  
 Getting a CRC for a Dynamic Length String...

<snip>

Quote:
> Am I right in guessing that your new prototype would accept a pointer to a
> buffer other than STRING?

Yes.
Forget about "recontainerizing" everything and save yourself a ton of
code.

--
 Randy Goodhew
 ---[ eQ ]---



Sun, 23 Oct 2005 18:42:09 GMT  
 
 [ 12 post ] 

 Relevant Pages 

1. Length of Dynamic SQL string in COBOL pgm

2. Getting the length of a string

3. Getting true length of a variable length record - IBM Mainframe

4. Determning length of varable length string

5. [??]CRC-size and message length

6. String length of a binary string?

7. Getting CRC's for files

8. Getting Ascii string from hex 'string'

9. Wanted - string CRC routine in ASM

10. crc confuses string with option

11. Need PL1 CRC-16 or CRC-32 code

12. CRC-16, CRC-32 question/problem

 

 
Powered by phpBB® Forum Software