ICS (Internet Component Suite), is a set Delphi classes for TCP/IP based communications using the usual internet protocols. There is also a version for Kylix.
ICS and the middleware suite Midware are available on the Overbyte site (click the logo in the top left of this page)
I use (and you'll need) FPC compiler: 1.9.8. Maybe 1.9.6 works too. This is for Windows. Other OSes (most notably Linux and FreeBSD) and FPC versions (1.0.x) are not yet supported.
The above compiler date is not fixed, if compability issues are found and fixed, it might increase.
The 1.9.x series is used because that minimizes the changes to ICS. All changes at this point have been absorbed into the ICS distribution by Francois.
It might be possible to do a different port of ICS to 1.0.10, but I don't think it is wise to merge these fixes in to Francois' main distribution.
Quite some of the changes for FPC were actually patches to the console application (non forms.application event loop) support of ICS. Francois made a nice unit for this, called conapp that eases this.
Currently I use Francois releases of early march 2005. No modifications on the FPC runtime were needed, and the ICS distribution con* applications should compile directly with FPC 1.9.8.
As said category 1 and 2 only need the "general" fixes listed below, and a few "per unit" fixes.
Category 3 could also work, but needs some things adapted in the eventflow. It turned out that Francois was already working on this (wsocket.allocatehwnd), and pop3prot and ftpsrv are working. nttpcli was fixed, but there is no demo for it yet.
Category 4 Maybe (partially?) portable to lazarus in say a year time, but I don't touch them for now. See separate lazarus section
These more intrusive changes are needed in every unit (and a lot of the relevant demoes). Most involve preprocessor or uses clause fixes. The only units that don't qualify are units that really _use_ the visual part of the VCL, and have nothing else, (tnoptfrm, emulvt, wait and pop3cli. tnemulvt is based on emulvt. Most demoes)
{$ifdef FPC} {$MODE Delphi} // delphi mode {$asmmode Intel} // Intel syntax assembler {$define usewindows} // Use "Windows" unit. {$define Noforms} // No unit forms. {$define socketulongmustmatch} // not used yet. {$endif}
{$Ifdef usewindows}Windows, {$else}WinTypes, WinProcs, {$endif}
{$ifdef FPC} type u_long=longint; {$endif}