ICS - Internet Component Suite
==============================
(Aka FPIETTE's Components)


Revised: Aug 03, 1998 
http://www.rtfm.be/fpiette/indexuk.htm

Legal issues: 
-------------
              Copyright (C) 1997, 1998 by Franois PIETTE 
              Rue de Grady 24, 4053 Embourg, Belgium
              <francois.piette@pophost.eunet.be>

              This software is provided 'as-is', without any express or
              implied warranty. In no event will the author be held liable
              for any damages arising from the use of this software.

              Permission is granted to anyone to use this software for any
              purpose, including commercial applications, and to alter it
              and redistribute it freely, subject to the following
              restrictions:

              1. The origin of this software must not be misrepresented,
                 you must not claim that you wrote the original software.
                 If you use this software in a product, an acknowledgment
                 in the product documentation would be appreciated but is
                 not required.

              2. Altered source versions must be plainly marked as such, and
                 must not be misrepresented as being the original software.

              3. This notice may not be removed or altered from any source
                 distribution.


Register
--------

ICS is freeware. If you like the components and use it, you must send a 
picture postcard showing the area you lives in and some beautiful stamps for 
my kids who are stamp collectors. Do not use an envelop, I collect USED
postcards sent to me.

Address your card to: Francois PIETTE, rue de Grady 24, 4053 Embourg, Belgium
Don't forget to mention your EMail, I'll tell you when I'll receive your 
postcard.


Installation:
-------------

The zip file has subdirectories in it. You must use the pkunzip -d option
to restore this directory tree or you will have problems because the files 
will not be in their proper subdirectories.

This is the subdirectory layout:

.\                           Info directory
.\delphi\internet            Delphi sample applications
.\cpp\internet               C++Builder sample applications
.\delphi\vc                  Delphi 1.x components
.\delphi\vc32                Delphi 2.x, Delphi 3.x and C++Builder components

You must first install the components. In Delphi 1, Delphi 2 and C++Builder 1,
just do menu/component/install and specify each component after the other.
Remember that components are those files which have a Register procedure. 
Other files are not component, must NOT be installed but are needed by the 
components when building the library.

For Delphi 3 and 4, there are packages source in the VC32 directory. They
are called IcsDel30.dpk (D3) and IcsDel40.dpk (D4). You can install those
packages, but you must first compile them. Do file/open and select the dpk.
Then compile and install. Note that you can easily reconstruct them by 
creating a new package and insert all the VC32 directory *.pas files in 
this package. 

For C++Builder 3, there is a package called 'IcsBcb30.bpk' in the VC32
directory. Do File/Open to open and compile it and procude the dpl file,
then do Menu/Component/Install Package to install it. You can also easily 
build your own package (file/new/package) with all components in the VC32.

Don't forget that the C++Builder components are located in .\delphi\vc32 
which is object pascal source code (not a problem for C++Builder, just 
indicate that the *.pas files are displayed when installing). C++Builder 
will create the *.hpp files. There are some on-line help files in the VC32
directory. Do not install the WSockBuf.pas, icmp.pas, md5.pas, tnoptfrm.pas,
formpos.pas files since it is not components (BCB1, D1, D2).

The following is a list of the files that should be installed in order to
properly add all of the available components in this collection.  Note that 
you may not have all of these present:

> WSocket.pas      (Winsock component - TCP, UDP, DNS,...)
> HttpProt.pas     (HTTP client protocol - used by the web)
> FtpCli.pas       (FTP client protocol - file transfert)
> FtpSrv.pas       (FTP server protocol - file transfert)
> Ping.pas         (ICMP echo protocol - ping a host)
> Pop3Cli.pas      (POP3 client protocol - get mail from mail server)
> MimeDec.pas      (MIME component - decode file attach, use with POP3)
> SmtpProt.pas     (SMTP client protocol - send mail to server)
> NntpCli.pas      (NNTP client protocol - send and receive newsgroups messages)
> TnCnx.pas        (TELNET client protocol - terminal emulation protocol)
> TnScript.pas     (TELNET client protocol - with automation)
> EmulVT.pas       (ANSI terminal emulation in a control)
> TnEmulVT.pas     (TELNET and ANSI terminal emulation combined)
> FingCli.pas      (FINGER client protocol - Find informations about user)
> Wait.pas         (A kind of progress bar)

As a rule, the component are the files which have a Register procedure.

Sample applications:
--------------------

TWSCHAT         Chat program (both client and server in a single program)
SRV5/CLI5       Basic client/server GUI applications
CONCLI          Basic client/server console applications
TNSRV           Basic server, event driven
MTSRV           Basic server, multi-threaded
FTPCLI          Graphical FTP client
FTPSERV         General purpose FTP server
TNCLIENT        Telnet client using a TnEmulVT
TNDEMO          Telnet client using a TMemo
UDPDEMO	UDP     send/receive
POP3CLI         Internet EMail access using POP3 protocol
MIMEDEMO        Example of EMail decoding (file attach)
MAILSND         Example of EMail sending, including file attach
HTTPTST	        Example of THttpCli component (GET)
HTTPGET         Example of THttpCli component (GET into a file)
HTTPPG          Example of THttpCli component (POST)
HTTPASP         Example of THttpCli component with cookie (POST)
HTTPASY         Example of THttpCli component with multiple requests (GET)
HTTPTHRD        Example of THttpCli component (multi-threaded GET)
FINGER          Example of TFingerCli component
NEWSRDR         Example of TNntpCli component (Send/receive newsgroups)
SRVDEMO         Example of server using a TTable
CLIDEMO         Example of client for SRVDEMO

If you use Delphi 1, Delphi 2 or 3, you may encounter an error loading a
sample application or running it. This may be because the last time I
loaded the form, I was using another Delphi version which has new properties. 
You can safely ignore those properties. They are not used in the samples.
(The properties are CharSet and OldCreateOrder). You can also encounter
error about duplicate resources. You can ignore them safely. If you have
those errors, open each form in the IDE then recompile. If you don't open
the form in the IDE, you'll get the errors at runtime and your program
will abort.

If you use C++Builder 1, you may encounter problems because Borland has
two winsock include files: one .h and one .hpp. TWSocket needs the 
winsock.hpp file and it is automatically included. However, sometimes
the winsock.h file is included indirectly and you will get numerous error 
messages from the compiler. Just add a #define _WINSOCKAPI_ before 
your existing #include directives. This will prevent winsock.h from being
included. This is no a bug, it is a feature :-) Another annoying feature
is the SetPortA syndrome. Add a #define _WINSPOOL_ before any #include
directive to work around. If you have some file not found error at
compile time, be sure to verify the project options to change any directory
following your own configuration (include files and library path).
Do NOT use those #include if you use C++Builder 3: Borland has corrected
their mistake.

When installing a new version, always recompile everything ! 
Close everything before recompiling the library or packages.

The provided delphi\vc\winsock.pas is for use with Delphi 1 only.
Use Borland file with Delphi 2, 3, 4 and C++Builder.

C++Builder 1 and 3 projects are not compatible. V3 can load and convert V1
project. For those who need the two versions, I made separate projects in
CPP\INTERNET\BCB1 and CPP\INTERNET\BCB3 directories. If you install this
ICS version above an older one, be sure to delete every *.mak and 
corresponding *.cpp files form the internet directory (not all *.cpp
files, only those which has a corresponding *.mak file !).


Support:
--------
There is a mailing list to discuss FPiette's components (TWSocket, TTnCnx,
TEmulVT, RasDial, TPop3Cli, and others). To subscribe send an EMail at 
majordomo@rtfm.be without subject line and with "subscribe twsocket" in the 
message body (without the quotes). You'll receive an autorization
message you have to reply. Then you'll receive an acknowledgement and 
instructions to unsubscribe. Once you have been registered with the mailing 
list processor, you can send messages to twsocket@rtfm.be. Every subscriber 
will receive a copy of your message. I will respond, but anybody is welcome
to respond to each other's messages. So every body can share his expertize.

Before asking a question, browse the message digest you can download from
the support page on the website (click the "support" button).

If you found a bug, please make a short program which reproduce the problem 
attach it to a message addresed to me or to the mailing list. If I can
reproduce the problem, I can find a fix !

You are also encouraged to use the support mailing list to ask for enhancements. 
You are welcome to post your own code.

The support mailing list has an heavy traffic: 20 to 40 messages each day. If
it is too much for you, you can subscribe to another mailing list called
twsocket-announce which will receive only very few messages when major bug
fixes or updates are done. The subscription process is the same as for the other
mailing list. See above procedure.


MidWare
-------
If you wants to build client/server applications using TCP/IP protocol, you 
can do it easily with ICS. But you can do it much more easily using another
freeware product from Franois Piette: MidWare. Available from the same web
site.


Known problems:
--------------

Delphi and C++Builder have limitation on path length. If you installed many
components in many differents subdirectories, you'll get strange errors. Just
make the path shorter and use less different directories. You cannot have
a path greater than 255 characters (this problem is solved starting from Delphi
3.02 or later).

Using Delphi 3 Pro, there could a problem after inserting all the component
into your user package. Delphi 3 gives an access violation error in DCC.DLL.
This does not occur if you use Delphi C/S (That's what I do). Ben Ark
(BenArk@email.msn.com) has found the following procedure to overcome 
this [Delphi] bug:

---- copy of a message posted in twsocket@rtfm.be mailing list ----

Just thought I'd correct that previous message with some more detailed
steps...

1)	Remove the EmulVT and TnEmulVT units from your User Package.
2)	Create a new project/application.
3)	Put all of these new files in a directory seperate from your components.
4)	MOVE, do not copy, your Emulvt.pas source file into this new directory.
5)	You need to add Emulvt.pas to the new project.
6)	Build the project.
7)	This should generate an Emultvt.dcu in the directory where the project
        is.
8)	Copy ONLY the DCU file into your component directory
9)	Add EmulVT.dcu to your User Package.
10)	Make sure the EmulVT.pas file IS NOT on your search path.
11)	Now you can safely readd TnEmulVT.pas to your User Package and build
        it.

If you have any problems with these steps, let me know.

-Ben

---- End of message ----

Thank you Ben !

Eric Daniels <sparky@netgsi.com> also found the same problem with Delphi 3
standard. Here what's he tell me in a message:

---- copy of a message posted in twsocket@rtfm.be mailing list ----

This error does happen under Delphi 3 Standard which I use...  I traced it
down and found out to trigger this error all one needs to do is goto:
package options / compiler  / debugging section  and look for local symbols
if this is not checked I will get this error.  After playing around with my
compiler options I unchecked local symbols and rebuilt the package and
Access Violation in dcc.dll read of address occurred...  If anyone has this
happen while using the ics components that is how I managed to fix it.  Also
I got error about unable to find *.dcr files if you edit your package source
and specify the full path to each dcr file you will find all goes well.

---- End of message ----


Special thanks
--------------

to Bob Dolan (bobd@overware.com) who corrected my bad english.
(Ok, I introduced new errors since I updated this file... For those
who cares, I normally speak french.)


francois.piette@rtfm.be
http://www.rtfm.be/fpiette/indexuk.htm
