IonicWind Software

Announcements => User Offerings => Topic started by: Andy on December 25, 2015, 11:16:24 PM

Title: Working with strings
Post by: Andy on December 25, 2015, 11:16:24 PM
Merry Christmas every one.

I am posting this as I think it could help with searching through and/or replacing text in strings, and my take some work off your hands.

Please go to (page 3) - the end of this post to download the latest version.

You can use this include file to work with strings that have / don't have delimiters in them.

I maybe re-inventing the wheel here, but here it is.

Attached is the include file, and example program, and a help file.

Please read the help file first.

Best wishes,
Andy.
:)
Title: Re: Working with strings
Post by: Andy on December 29, 2015, 05:51:05 AM
Thanks for downloading,

I have now added more commands to the include file.

Please unzip and overwrite all files if you have downloaded the previous version.

As always, please read the help file and read through the example program before compiling and playing around with it.

Please let me know if this is useful to you!!

Best wishes,
Andy.
:)
Title: Re: Working with strings
Post by: Brian on December 31, 2015, 05:25:18 AM
Andy,

Just been messing with your latest StringMap, and noticed that if you had autodefine "off"
in the code, the include file was missing a few undefined variables

I modified my StringMap.inc file, and here it is

Brian
Title: Re: Working with strings
Post by: Andy on December 31, 2015, 06:25:55 AM
Hi Brian,

Thanks for the info, yes I have been looking at that.

I'm releasing my final (3rd version) of the include file in a day or so and It will work with Autodefine "off".

The new release has another 9 commands included, and I think that unless anyone else has a "wish list" (or I think of any more possibilities with extracting / replacing text in strings) that this will be the last version.

I hope everyone likes it, as I've tried to take out the hard work sometimes involved with strings.   

P.S. Happy new year to all!

Andy.
Title: Re: Working with strings
Post by: LarryMc on December 31, 2015, 08:04:50 PM
Why not put all the subroutines in a static .lib?
Title: Re: Working with strings
Post by: Andy on January 01, 2016, 04:12:47 AM
Here is hopefully the final release.

Please read the help file first!

What's new:

1. Added another 9 commands to work on strings.
2. Prefixed all commands with SM to avoid hopefully any conflicts with code you might write.
3. Changed pointers to work from index 0 instead of 1 (which they should).
4. Placed the routines in a lib file - thanks Larry, that was a good idea.
5. The include file now uses the lib file and declares the lib functions.

I've done all this to take most of the work out of working with strings so you (and me) don't have to.

Hope you like it, please let me know.

Thanks,
Andy.
:)
Title: Re: Working with strings
Post by: Andy on January 02, 2016, 12:39:52 AM
Well, it seems I always miss something!  :-[

In the last version, I commented out section 3 of the example program whilst I was concentrating on the new commands and moving the sub routines to a lib file.

I changed the get text position variables to functions, and as a consequence, uncommenting section 3 will throw compile errors - sorry my fault!

So I have amended the example program, together with the include & lib files.

I hope this one is the "final" "final" version as I'm going square eyed looking at strings now!

I have also added a new revised help file to replace the one in the zip file.

Thanks all,
Andy.
:)
Title: Re: Working with strings
Post by: RitchieF on January 02, 2016, 10:37:28 AM
Hi Andy,

interesting code. You might find more inspiration with this code created by Alberto Gonzales . Code is for PureBasic :

https://code.google.com/p/pb-source-repositery/source/browse/trunk/CodeArchiv_v4-Beta/Includes%2BMacros/Includes/nsString.pbi?r=156

Richard

Title: Re: Working with strings
Post by: Andy on January 02, 2016, 10:45:57 AM
Thanks Richard,

I will have a look at it tomorrow, but I think this is as far as I want to go with strings, unless I can think of some more functions.

Best wishes,
Andy.
Title: Re: Working with strings
Post by: Andy on January 04, 2016, 07:38:58 AM
Richard,

That did give me some ideas, so whilst going insane writing my "String theory" offering, I have been adding yet more functions to it.

I will post it soon when I have finished and checked it, seems there's no end to how you can play around with strings.

Thanks all,

Andy.


Title: Re: Working with strings
Post by: LarryMc on January 04, 2016, 11:49:13 PM
Quote from: andy1966 on January 04, 2016, 07:38:58 AM
...seems there's no end to how you can play around with strings...

now you can understand how I wound up spending years on some of my offerings
Title: Re: Working with strings
Post by: Andy on January 05, 2016, 06:07:06 AM
Yes Larry, strings have had me in knots!

I have added many more functions, there are now over sixty.

I have tested these functions as best I can, but please be careful.

As always, read the help file first please.

Run StringMap.iwb first, included is Example2.iwb which carries on with more functions.

Thanks,
Andy.
:)
Title: Re: Working with strings
Post by: Andy on January 08, 2016, 06:44:23 AM
This just goes on and on....

Here is StringTheory2 - to insanity and beyond......

The are now over 100 functions you can use, as you can see my OCD has got the better of me!

Attached are the files.

P.S. Do you find these functions useful??? - if so, please someone let me know!

All the best,
Andy.
:)


Title: Re: Working with strings
Post by: RitchieF on January 10, 2016, 04:14:37 AM
Hi Andy,

since I have Alberto Gonzales' string code already in use I'm gonna see where to use your "string theory" code.

Thanks for offering it

Richard
Title: Re: Working with strings
Post by: Andy on January 10, 2016, 04:19:53 AM
Hi Richard,

Thanks for that!

Good luck and please let me know how you get on with it.

Thanks,
Andy.
Title: Re: Working with strings
Post by: Andy on January 13, 2016, 04:55:02 AM
Hi All,

Don't want to hog this section, but I have a new update to my string theory code for you.

What's new:

1. Nearly 40 more commands included.
2. Rationalised the command names.
3. Updated the help file.

Hope you enjoy it!

Please read the help file first.

Attached are the files.

Best wishes,
Andy.
:)
Title: Re: Working with strings
Post by: LarryMc on January 13, 2016, 08:25:03 AM
But you're not through  ;D

You've done all this for STRINGs; what about WSTRINGs and TSTRINGs? ... just saying  ::)
Title: Re: Working with strings
Post by: Andy on January 13, 2016, 08:34:41 AM
Thanks Larry,

Just when I thought I was getting my sanity back  ;D

Strangely, I was thinking about them.

We shall see.

Andy.
:)
Title: Re: Working with strings
Post by: Andy on January 17, 2016, 04:38:30 AM
Here is the latest version of my "StringTheory" code, don't think this will ever end!

What's new:

1. There are now 175 commands for working with strings.
2. Made the help file more "helpful", well as much as I can.
3. Added some examples and of course more commands.

If you are a fan of my string code, then please download this latest version.

As always, please read the help file first.

Best wishes,
Andy.
:)
Title: Re: Working with strings
Post by: Brian on January 17, 2016, 06:10:29 AM
Don't know where you are getting them from, or even thinking them up!

I must be able to fit them in somewhere, sometime, just need the right circumstances

Keep up the good work,

Brian
Title: Re: Working with strings
Post by: Andy on January 17, 2016, 06:15:28 AM
Thanks Brian,

Somehow, I'll make it to 200 before they take me away in the funny ambulance!

Andy.
Title: Re: Working with strings
Post by: LarryMc on January 17, 2016, 10:00:16 PM
Unless I missed it you don't have any functions for changing instances of text to upper/lower case.
Also, what about changing numeric instances between integer/float/hex?
Title: Re: Working with strings
Post by: Andy on January 17, 2016, 11:10:14 PM
Larry,

They seem good ideas, I will have a look at them now.

Thanks,
Andy.
Title: Re: Working with strings
Post by: Brian on January 18, 2016, 03:10:17 AM
Andy,

Can't look at the functions right now, but is there one to measure how many characters there are in a line?

Or words in a line?

Brian
Title: Re: Working with strings
Post by: LarryMc on January 18, 2016, 06:52:01 AM
You have SMInstrAll and SMInstrX
I would suggest SMInstrLast

You have SMRemoveStringX
I would also suggest a SMDelPosX which would delete the instance indicated by Pos.
If Pos >1 through # of instances -1 then also remove the following delim
If Pos= # of instances then delete preceding delim
X is optional parameter to indicate number of additional instances to delete following POS; -1 = ALL
Title: Re: Working with strings
Post by: Andy on January 19, 2016, 07:35:17 AM
Some more good ideas Larry & Brian,

Thanks for inspiration and persperation!

I am now just past 200 and counting.

The numbers / doubles have been difficult but I'm winning!!

Keep downloading!

Thanks,
Andy.
:)
Title: Re: Working with strings
Post by: Andy on January 20, 2016, 11:02:04 PM
Brian,

Forgot to answer your question about characters and words.

Yes you can.

There are commands:

SMCountChrs
Counts how many characters are in a string (same as len), however it has a ,1 optional switch this allows counting characters but does not include spaces.

Asrtring = "This is my string"

SMCountChrs(Astring,1)
Returns a count of 14 (count excludes spaces in this example).

SMCountChrsExcl(Astring,"my",1)
Returns a count of 12 (count excludes all instances of "my" and spaces in this example).

SMCountChrsExcl(Astring,"my")
Returns a count of 15 (count excludes "my" in this example).

SMCountWords(Astring) - counts how many words are in a line
Would return a value of 4 for Astring.

SMCountWordsExcl(Astring,"my")
Would return a value of 3 for Astring.
Counts how many words are in a line excluding all instances of "my".

I've got to nearly 220 functions now, and when I've tested them more (soon), I will release the latest update, until then It's StringTheory4.zip towards the end of page one of this post.

Thanks,
Andy.






Same as above, but you can specify a character or characters to exclude from the count.

Title: Re: Working with strings
Post by: Brian on January 21, 2016, 06:01:47 AM
Blimey! There's a lot there. Memo to oneself: Must read the manual!

Thanks, Andy

Brian
Title: Re: Working with strings
Post by: Andy on January 21, 2016, 06:13:12 AM
Brian,

Sorry forgot to say, these are in the next release which is coming real soon.

Andy.
Title: Re: Working with strings
Post by: Andy on January 22, 2016, 06:30:14 AM
StringTheory5 is here....

What's new?

50 more functions which takes the running total up to 225!

I have worked on adding some more practical functions, including working with blocks of numbers and includes numbers with two decimal places (I shall increase that at some point).

It was very hard to work out some of these functions.

The library file code in now up to around 8,000 lines.

I've also incorporated many suggestions / wish list to help you all.

As always,  I have updated the help file, please read it first.

You can post any suggestions here of course, and I will look at them.

Best wishes,
Andy.
Title: Re: Working with strings
Post by: Andy on January 27, 2016, 06:44:24 AM
Just an update for you.

I am now amending the String Theory code to include working with very very large numbers - which may of interest to you, even though you may not be intersted in just strings.

I can now add up two numbers (including decimal places), total size 1,024 digits (which I can increase).

I am now working on subtraction, multiplication and division.

I will post an update to the code when I've got there.

Andy.
:)
 
Title: Re: Working with strings
Post by: RitchieF on January 28, 2016, 07:30:10 AM
Hi Andy,
reading the command list in the help file I can't find the one command I'd need to parse nc-code line by line and extract different coordinates.
Here is a piece of nc-code :

G21
G80 G40 G17
M06 T216* 1. Carving
G90
M03 S5000 F250.
M08
G00 X-32.931 Y-29.599
G00 Z0.05
G01 Z-0.5 F100.
G03 X-43.895 Y-17.548 I-36.63 J-22.312 F250.
G03 X-60.544 Y-12.301 I-15.95 J-21.575
G01 X-60.79 Y-12.354
G03 X-61.466 Y-12.517 I1.444 J-7.482
G03 X-61.875 Y-12.747 I0.148 J-0.741
G03 X-61.884 Y-12.905 I0.139 J-0.087
G03 X-61.711 Y-13.103 I0.492 J0.255
G03 X-60.669 Y-13.645 I2.642 J3.807
G03 X-53.216 Y-18.217 I31.483 J42.951
G03 X-49.605 Y-19.389 I6.059 J12.53
G02 X-48.229 Y-19.712 I-3.063 J-16.149
G02 X-33.523 Y-29.892 I-8.76 J-28.366
G02 X-33.106 Y-30.482 I-36.099 J-25.975
G03 X-32.09 Y-31.911 I74.616 J51.981
G03 X-31.801 Y-32.181 I0.827 J0.595
G03 X-31.543 Y-32.246 I0.21 J0.288
G03 X-31.467 Y-32.183 I-0.031 J0.114
G03 X-31.45 Y-32.047 I-0.228 J0.097
G03 X-31.66 Y-31.526 I-1.414 J-0.267
G03 X-32.676 Y-29.953 I-9.017 J-4.711
G02 X-32.931 Y-29.599 I5.501 J4.225
G00 Z0.05
G00 X-65.511 Y-20.95
G01 Z-0.5 F100.

I'd like to extract i.e. the X-value, the Y-value, the I-value and the J-value from one line including the letter. I have a working solution but wanted to give your code a chance.
The problem is : not every nc-code has delimiters like spaces or colons.

Richard
Title: Re: Working with strings
Post by: LarryMc on January 28, 2016, 08:25:32 AM
QuoteThe problem is : not every nc-code has delimiters like spaces or colons.

Can you give an example of a few lines that
1) don't have spaces
and a few lines that
2) have colons?
Title: Re: Working with strings
Post by: RitchieF on January 28, 2016, 10:15:40 AM
Lines without spaces :

G00Z0.05
G01Z-0.5F100.
G03X-43.895Y-17.548I-36.63J-22.312F250.
G03X-60.544Y-12.301I-15.95J-21.575
G01X-60.79Y-12.354
G03X-61.466Y-12.517I1.444J-7.482
G03X-61.875Y-12.747I0.148J-0.741
G03X-61.884Y-12.905I0.139J-0.087
G03X-61.711Y-13.103I0.492J0.255
G03X-60.669Y-13.645I2.642J3.807
G03X-53.216Y-18.217I31.483J42.951
G03X-49.605Y-19.389I6.059J12.53

Colons

Colons was perhaps a wrong possibility for a delimiter. I mean actually every arbitrary delimiter a postprocessor might have used to split the axes or the other parameters from each other.

Richard
Title: Re: Working with strings
Post by: LarryMc on January 28, 2016, 12:39:38 PM
OK, a couple of other questions.

Is there any other circumstance that the letters 'X,Y,I,J' would appear in a line other than as you have shown; in a different order maybe?
or in some sort of a comment and if so how would that line be identified as being different?

and are there ever multiple instances of any of these letters ('X,Y,I,J' ) in a line? and are these the only letters/values you are interested in returning?
Title: Re: Working with strings
Post by: Andy on January 29, 2016, 05:17:59 AM
Hi Richard,

Attached is a very simple way to do it with StringMap.

My StringMap does not need delimiters to detect blocks of numbers, but the number blocks have to be sepatated by something (any other character that's not a number).

There are other ways with StringMap if you have multiple occurences of X,Y,J,I in each line (shown at the end of attachment 2).

Please let me know what you think.

Best wishes,
Andy.

:)
Title: Re: Working with strings
Post by: RitchieF on January 29, 2016, 11:45:15 AM
Andy, thanks for your code. Samples look fine. Gonna try it in my code.

Larry, in 2007 I wrote a script using AutoIt to wrap plane 2d nc-code onto a column. Please have a look here :

http://forum.vectric.com/viewtopic.php?f=2&t=656&p=8054#p8054

Meanwhile I have the same code running in IWBasic. Works fine and fast.

About the nc-code :

You will find every address code only once in a line. So I needed to extract the axis letter (X or Y coz it is 2d code) and grab the numbers behind the axis letter for later calculations.
Perhaps better visible in the script mentioned above.


Richard
Title: Re: Working with strings
Post by: LarryMc on January 29, 2016, 01:22:36 PM
Side note to Richard:
When I bought my Piranha CNC machine in came with Vetric VCarve DeskTop and I bought PhotoVCarve.  I can't afford the Pro version.  What I need is a really CHEAP, EASY TO USE program that will let me create 3D files I can carve.
But I still have  a lot to learn with what I got.

Your Praying Hands on a column are really neat.
Title: Re: Working with strings
Post by: RitchieF on January 30, 2016, 01:56:31 AM
Answer to Larry:

Take a look at http://mecsoft.com/freemill

Richard
Title: Re: Working with strings
Post by: Andy on January 30, 2016, 03:50:15 AM
I noticed in the example strings Richard was showing that some of the numbers are actually minus?

So, just to cover this (if they are), I've updated the StringMap code with a new SMGetNumBlockX command.

This has now two optional parameters, one for including any minus sign that might be attached to a number block, and one for including x number of characters that preceeds the block.

I have attached my beta version of StringMap6, which includes the new SMGetNumBlockX command, plus many more functions, including a revised example for Richard (and any one else of course).

I've called it beta because there are one or two things I have not fully tested yet with large numbers, although adding and subtracting large numbers is there (as long as they are positive numbers - so far).

By the way... I found a bug in the Windows calculator (standard view), apparantly It's documented, but threw me for around 2 hours and left me doubting my old maths teachers!

Best wishes,
Andy.

P.S. like the CNC stuff!








Title: Re: Working with strings
Post by: RitchieF on January 30, 2016, 05:05:52 AM
Andy,

counting the numerical blocks and adding X/Y/I or J might be the wrong way. Coz it is possible that a line has no X-coordinate or no Y-coordinate and the CNC control will use the coordinate from the previous line.

The right way is to search for X or Y and the extract the numerical value behind the letter if it exists.

Richard   
Title: Re: Working with strings
Post by: Andy on January 30, 2016, 05:21:38 AM
No problem Richard, the previous examples can do it anyway, but you need to add a ,1 to be sure the value is not a minus (shown in example 3), and another ,1 to give you the letter.

You could then just use midstring to check what letter is at position 1 in the returned string.

Andy.
Title: Re: Working with strings
Post by: LarryMc on January 30, 2016, 12:01:03 PM
Quote from: RitchieF on January 30, 2016, 01:56:31 AM
Answer to Larry:

Take a look at http://mecsoft.com/freemill

Richard

Thanks Richard; Good Stuff
Title: Re: Working with strings
Post by: Andy on February 04, 2016, 05:27:03 AM
StringMap 6 update....

I've now completed subtracting very large numbers (1024 digits).

It's taken some time as I realised there could (and will be at times) negative numbers to deal with including decimal place numbers (if there are any in either or both of the two numbers).

So the revised function SMSubNumBlockX (subtract two numbers, returns the correct value and includes a minus sign if the subtraction needs it) will be included in the next full upload.

I now need to add in working with negative numbers whilst adding two numbers together.

Once I've cracked the adding section, I will look at multiplication and division (if my maths are up to it).

Either way, both revised SMAddNumBlockX (add to numbers together) and SMSubNumBlockX functions will be added to the my next upload when completed.

Andy.
:)





Title: Re: Working with strings
Post by: Andy on February 05, 2016, 06:56:29 AM

I have now got addition working as well.

Attached is a screenshot (which you will probably be unimpressed by), however don't forget I am not able to work with such commands as you would normally e.g. INT, VAL, SETPRECISION etc...

So, I can now add up or subtract two numbers (each up to 1024 digits - including positive and negative values) and return the correct answer.

This is a labour of love, but if you like what I'm attempting - please tell me - it helps to keep me going!

Andy.



Title: Re: Working with strings
Post by: LarryMc on February 05, 2016, 07:30:01 AM
You're in the same mode I was in when I was working on the new IDE for IWBasic.  You get on a roll and it's kinda hard to stop.
And a lot of times people don't realize how much effort you put into it.

The problem now is the the smaller number of active forum members is making it harder for there to be a person that suddenly has a major use for all your functions.  But it will come so I say that as long as it is fun for you; that you have the time; that the ideas keep coming; and your wife isn't saying she is leaving; then I say press on.
Title: Re: Working with strings
Post by: Andy on February 05, 2016, 08:01:42 AM
Larry,

Thanks for the keep going message - I think my other half is glad of it as I am out from under her feet.
;D

Andy.
Title: Re: Working with strings
Post by: Andy on February 10, 2016, 06:51:57 AM
Well, now I've been back to school to work out decimal places, I'm happy with the multiplication routine for my StringMap library file.

Attached is a screenshot of a multiplication of two numbers both 52 digits in length.

It did take a around four minutes to calculate, (something I will work on), but I guess if you want the answer, you will probably wait for it.

When I have division worked out I will release the next update.

Andy
Title: Re: Working with strings
Post by: LarryMc on February 10, 2016, 11:38:04 AM
How do you know that is the correct answer?
Title: Re: Working with strings
Post by: Andy on February 10, 2016, 12:07:34 PM
By doing a very very very long manual calculation which takes a very very very long time!

Title: Re: Working with strings (testing needed)
Post by: Andy on February 11, 2016, 06:30:55 AM
Hi,

Well, I've looked at multiplying two numbers together 'till I'm seeing numbers in my sleep.

So - would some one please double check me.

I'm sure this is correct now, but I need some feedback please.....

Attached is the new beta version of StringMap6, and I'm focusing on the multiplication function.

To that end, I have attached all the files needed.

Please unzip the files, copy the lib file to the IWBDev libs folder, and compile m2.iwb

Please change the numbers in the strings - Xstring1 and Xstring3 to other numbers.

Please let me know how you get on.....

WARNING! - for very large numbers - be prepared for a wait! - I will try to optimise this later.

Please remember - I cannot use INT, VAL, +, -, * commands normally, so I have to do this in little bite size peices and use my own addition function as the numbers get to large for IWB.

Thanks,
Andy.
:)
Title: Re: Working with strings
Post by: Andy on February 11, 2016, 11:56:10 PM
These are the timings for calculations using my multiplication function and vary a little depending on what my pc is doing:

(Length of number 1 x Length of number 2)

70 x 70 = 918765.89 ms = 15.3 mins
60 x 60 = 509163.67 ms = 8.48
50 x 50 = 256304.41 ms = 4.26
40 x 40 = 110279.48 ms = 1.83
30 x 30 = 39009.83  ms = 0.65
20 x 20 = 9683.33   ms = 0.16
10 x 10 = 1095.2    ms = 0.0185
5  x 5  = 115.75    ms = 0.00191

As you can see, the timing jumps everytime you add another 10 x 10 digits, and I would estimate 100 x 100 digits multiplied would take around 59 mins (I've tried it since posting this).

These timings are done on my older PC, and I'm sure many of you will have faster machines than mine.

I used Graham's (GWS) precision timing routine to get these results (thanks Graham).

Limits:
Well, at the moment it would be around 500 x 500 (or 1,000) digits in total that can be multiplied.

It works with numbers that have decimal places in them, also the numbers can be positive or negative.

Like I said before, if you have a large number and you can wait, then the multiplication function will work for you. If you cannot wait, then you'll have to find another solution.

I've done my best! - attached is a typical screenshot.





Title: Re: Working with strings
Post by: Andy on February 17, 2016, 07:16:37 AM
Okay,

I've now cracked division of a large number by another large number and you can specify the number of decimal places you require and it is very very accurate.

I have had to "go back to school" with division, and I've watched a lot of childrens online maths videos to check myself - It's amazing what you remember (and what you don't!).

I just need to work on division of numbers with decimals in them - but this should be a small point now.

Also, I've added the functions - SMLessThan, SMGreaterThan, SMEquals, SMPower10 functions which I needed to complete the division subroutine.

Hopefully now, I can complete my StringMap 6 release soon.

Division has been a tough one I can tell you!!

Thanks for reading this,

Andy.




Title: Re: Working with strings (Division - testing needed please)
Post by: Andy on February 22, 2016, 07:08:47 AM
Hi,

As far as I can see now, division of large numbers (and small of course) is working!

Attached is the zip file that has all files needed.

Please copy the lib file to your IWBDev / Libs folder and compile and run div1.iwb.

Please change the numbers in the two strings - String11 and String21 to test.

I will document the help file as soon as I can and make a full release of StringMap6.

Please let me know how you get on....

P.S. - Division has been a real so and so to do!

Thanks,
Andy.
:)
Title: Re: Working with strings
Post by: Andy on February 23, 2016, 05:06:36 AM
Just running through the numbers for division,

It looks like I have a little more work to do to finish of division, I now need to look at numbers that have 0.00something in them and adjust the decimal point accordingly.

Just thought I'd mention it (before someone else did!).

However, I did try dividing a 160 digit number by another 160 digit number and it took only a couple of seconds to do, so I'm very pleased with the speed of division.

I have also added functions to strip of leading and trailing zeros if needed.

Anyway, must crack on with these very small numbers.

Thanks,
Andy.
Title: Re: Working with strings (New full version available now)
Post by: Andy on February 25, 2016, 06:15:52 AM
Hi,

Here is the new StringMap update - this is the new full release.

It's taken some work I can tell you!

Now there are 254 functions available, including the division function.

Attached are all the files you need including some iwb source programs for you to compile and play around with.

Unzip all files, copy the .lib file to your IWBDev / libs folder and you can compile the programs to have a look.

As always, please have a read of the help file first!!

Thanks,
Andy.
:)