this is a MIRROR at the TP-links site


Jonathan Ramsey's Pascal TCP/IP for DOS

Please Note:

As of July 6, 1998 I am no longer able to contact Jonathan Ramsey. In the absence of instructions from him, I will leave his code on this site and keep it available for interested users. 

However, I am unable to reply personally to any requests for assistance on his code. You are on your own... 

We are proud to host Jonathan Ramsey's Pascal TCP/IP for DOS. This shareware has PPP, TCP, IP, UDP, ICMP, DNS Lookup, sockets, POP3 support, SMTP support (sending messages), plus a full DOS GUI. The registration fee is only US$25.00. 

The complete Pascal source is contained in the archive. 

Included in this package : 

Internet Protocol Suite v1.00 PPP Point to Point Protocol 
IP Internet Protocol 
TCP Transport Control Protocol 
UDP User Datagram Protocol 
DNS Domain Name Resolution 
ICMP Internet Messaging Protocol 
IGMP Internet Group Messaging Protocol 
SMTP Simple Mail Transfer Protocol 
POP3 Post Office Protocol 
Also included: 
Graphical User Interface v1.00 
From Jonathan's OVERVIEW.TXT: 
"The GUI included in this package is a complete, easy to use interface to just about any program you can think of. With these units, I have created a complete commercial program which automates HVAC Service Companies. I have also used the GUI units to create an interface to a program which allows me to manipulate 3d Studio Meshes and render them as voxels, 100% interactively!"
You can download INET1_1.ZIP here (949k)
TP-links MIRROR: ! (949kB)
remember the filename

Jonathan's address is: 

E-mail :

Postal : 

Jonathan Ramsey 
5421 S Perth Wy 
Aurora, CO 80015 

New info:
Subject: Jonathan Ramsey
   Date: Sat, 20 Jan 2001 16:16:41 -0800
  From: "Pete" <>
    To: <>

I sent you a email a while ago and got no responce.. Please let me
know if this info helps..
In search of JR...
"If you get information  about Jonathan Ramsey's  address or e-mail address, 
please send me a mail!"
try this address 
Using yahoo did a people search.. Same name & state then after a hit or two I switched to email search and bam a JR under the
same domain... what are the

If you have any problems downloading, please contact Webmaster,
Note to Spammers - Please do not abuse this email address. We are not interested in your products and will automatically delete your message.
The URL for this page is (ORIGINAL)

Also mirrored at Klaus Hartnegg's site in Freiburg

For the curious, the mail history:
   Betreff: Re: TCP/IP Unit for pascal
     Datum: Tue, 07 Jul 1998 00:15:18 -0700
       Von: Mike Monett <>
     Firma: UTS
        An: "Ing. Franz Glaser" <>

Ing. Franz Glaser wrote:

>   Mike wrote:

>   > Ing. Franz Glaser wrote:

>   >> Chapters network and winsock in the TP-links site
>   >>

>   > Hi Franz,

>   > Regarding the  url  for Jonathan Ramsey's TCP/IP for  DOS  on your
>   > page

>   >

>   > Regrettably, I had to remove the link

>   >

>   > from my site.

>   > For some reason, I can no longer contact Jonathan, and I am unable
>   > to reply personally to all the questions about his code.

>   > Best Regards,

>   > Mike, CEO Analog & Digital Design

>   This is a drama!

>   Please could you mail me the page a last time! I would like  to host
>   it on  my  TP-links  URL with a note  that  no  more  maintenance is
>   available. I got the link from Klaus Hartnegg.

>   I understand  the  problems one can have with other  people,  but in
>   this case a valuable source is probably lost.

>   I am  not sure if your URL is in my links, I will check it  soon. If
>   not, please tell me in which chapter you would prefer the link.

>   Regards,
>   Franz Glaser

Hi Franz,

I posted all the necessary URL's - you have everything you asked for
shown above!

But, you make me feel so guilty, I'll have to put Jonathan's code back
up on my site. I will add the following message to the download page, so
you don't really have to do anything else.

  Please Note:

  As of  July 6, 1998 I am no longer able to contact  Jonathan Ramsey.
  In the  absence of instructions from him, I will leave  his  code on
  this site and keep it available for interested users.

  However, I  am  unable  to  reply  personally  to  any  requests for
  assistance on his code. You are on your own...

For some reason, ftp is not working right now, but I'll try uploading
everything later tomorrow morning.

Best Regards,

Michael R. Monett,
CEO, Analog & Digital Design
Automated Production Test

A Borland SPRINT Editor for Pascal, C, 
Assembly, HTML, email, and newsgroups:

Here you see what you get with the .ZIP file


from the

there are
some 100
only few

Sorry, I am
not good
I did not
find a way
to put the
into the

If anybody
could tell me
how to do
that, please
email me.

Point to Point Protocol

The PPP protocol allows a computer to dial into an ISP (Internet
Service Provider) and access the Internet using a standard modem.  This
is probably the most useful feature in this package, considering its the
very first in a series of Protocols in the Protocol Stack.

The PPP protocol is responsible for transmitting and receiving data,
organinzing the received data, and properly dispatching it to higher level

Why would you want to have direct access to PPP?  If you have an existing
application, you can use PPP in conjunction with one other protocol to
add Intranet support into your application.  PPP allows you to communicate
with any other computer on the Internet in any way that you want it to.
For example, a business owner wants to be able to access information at work
from home.  If he has Internet access, it would be a fairly simple task
to set up a communications PC at the office which redirects information
using the Internet as a transport medium and onto his computer.  This can be
done a number of ways, 1 - using a custom protocol, or 2 - the communications
PC can act as a WEB server, interpret data and send it as HTML pages to
anyone with a web browser.

Instead of going on into tremendous detail about the uses of PPP and other
Internet Protocols, I will refer you to a good book that should be fairly
easy to find.  The books title is Internet Programming, published by
Jamsa Press.  The first few chapters outline all the protocols that I will
be discussing, along with some good implementation ideas (not to mention
the theory behind it all).

To use PPP in your application, you must have PPP.PAS in your uses statement :

   Uses PPP;

This is only the first step though.  You must also initialize an object and
make callbacks to that object in order to POLL information correctly.  In
conjunction with the GUI units, you can set up a callback to automatically
handle Incoming and Outgoing data.

To initialize the PPP object you must call the Init Constructor.  I have
included a variable name oPPP in the PPP.PAS file which I would recommend
using.  Before initializing the object, you must know the ComPort and Baud
Rate of the communications device.  Here is an example of Initializing the
oPPP object with Com 2, Baud Rate 57600 :

     oPPP.Init(2,57600,NIL);  {The third parameter is currently not used
                               and should always contain NIL}

Once you have initialized the object, you can begin using PPP.  The first
step is to actually dial in to an ISP and login.  There are 2 procedures
which will make this a relatively painless process :


To dial an ISP, given the phone number, you would call :

      oPPP.Dial('','',phone_number,'');  {There are 3 parameters in this
                                          call which are currently not
                                          in use.  These will eventually
                                          allow you to call the dial
                                          procedure with username, password
                                          and a script file for automating
                                          the login process}

Once you have called the Dial procedure, you can call the Terminal procedure
if you are using the GUI functions.  This will bring up a window and allow
you to manually log in to the ISP.  When you have completed logging in, pressing
the <ESC> key will begin the PPP negotiation phase to establish a valid
PPP connections.  If you aren't using the GUI, then you must provide a valid
terminal emulator using the MODEM.PAS functions :


These functions are documented in the MODEM.TXT file.

Once a valid PPP connection has been made and an IP address has been assigned,
you may start polling with the Packet_Driver procedure :


This will process any incoming or outgoing data without any more user interaction.

To sum this all up, it's simply a matter of getting connected.  Once you've
gotten connected, there are no hassles aside from calling the Packet_Driver
Procedure to actually handle the data stream.  This Procedure should be executed
as often as possible to avoid overflows in the receiving/transmitting buffers.
If this Procedure doesn't get called often enough, data could be lost, or
memory overflow may occur.

The following section is a reference to all callable/addressable functions and
variables :


Variable   :     use_PFC      (boolean)

Once a successful PPP connection has been established, this field contains
TRUE if Protocol Field Compression is Enabled, and FALSE if it is not.


Variable   :     use_ADFC     (boolean)

Once a successful PPP connection has been established, this field contains
TRUE if Address and Control Field Compression is Enabled, and FALSE if it is


Variable   :     IPADDR       (IPTYPE : Array[1..4] of byte)

Once a successful PPP connection has been established, this field contains
the IP address of the computer in and array of 4 bytes which together form
a 32-bit address.


Variable   :     IPSTRING     (String[16])

Once a successful PPP connection has been established, this field contains
a legible string version of the IP address (, which can be used to
show the user the IP address that has been assigned to the computer.


Variable    :    Terminate_OK (boolean)

This variable contains TRUE if it ok to call the DONE destructor of the object.
When it is time to close the PPP connection and you wish to call the DONE
destructor, make sure that this field contains a TRUE value.  If it does not,
the connection is still active and has not been terminated properly.


Variable    :    Frame_Size    (word)

This variable contains the maximum packet size to send or receive across the
connection.  If frames passed into the PPP object larger than Frame_Size, they
will be fragmented and sent as multiple packets.


Constructor Init(comport:byte;baudrate:longint;ifunc:proc);

The Init Constructor will initialize a PPP object.  You must pass a valid com
port and baudrate.  The third variable, ifunc, should be left at NIL until
a future version.  The ifunc variable is a pointer to a procedure which allows
additional PPP negotiation features to be implemented (ie Van-Jacobsen
compression etc..).



Destructor  Done;

Destroys the PPP object that was created with the Init Constructor.  You should
not call this destructor until the Terminate_OK flag is set to true.


Function    MakePtr(var variable):pbyte;

This Function is used internally, but you may find other uses for it.  If you
pass a variable to MakePtr, it will return a pointer to the object.  It is the
same as calling the built in Addr() Function for Turbo/Borland Pascal except
that the pointer returned is typecasted to a pbyte which is defined as ^byte.


Function    Carrier:boolean;

This function will return TRUE if a carrier is detected on the modem, and FALSE
if no carrier signal is present :

            IsCarrier := oPPP.Carrier;


Procedure   Terminal;  (USE ONLY WITH GUI)

After the modem has been dialed and a carrier has been detected, you can call
the Terminal procedure to handle a manual login.  This Procedure has been added
to provide a manual extension to the GUI functions only, and cannot be used in
conjunction with any other GUI, text or graphical :



Procedure   Dial(username,password,phone,scriptfile:string);

This Procedure will perform the following functions to the modem before
returning to the calling process :


This Procedure is not complete as of yet.  A future release of PPP will allow
you to pass a username, password, and valid script file to completely automate
the login process.

To call the Dial procedure, you must have a valid phone number :


After calling this procedure, the most logical course of action is to
continually call the Carrier function until a carrier has been detected or
a set amount of time has elapsed.


Procedure   Packet_Driver;

This Procedure must be called in order to poll the data line for incoming data.
It will also handle all outgoing IP/PPP Packets.  This Procedure is the driving
force behind the PPP unit and must be called as ofter as possible in order to
insure efficient data management  :

                    {Other functions repeated in succession}
                 Until (Program_Finished);


Procedure   FormatIP (b1,b2,b3,b4:byte; var ipt:iptype);

This Procedure will take 4 bytes and return an IP address in the IPTYPE format :

              IPAddr : IPTYPE;

              oPPP.FormatIP (101,102,103,4,IPAddr);


Function    IPstr    (ip:iptype):string;

This function will convert the internal IP representation into a string IP
representation  :

               IPS : string[16];

               IPS := oPPP.IPstr(IPAdr);


Function    ValidIP  (s:string):boolean;

This function verifies a string representation of an IP address.  You must
pass the string IP address :

            valid := oPPP.ValidIP('');

The function will return TRUE if the address passed is a valid address, FALSE
if it is not.


Function    StoIP(s:string;var IP:iptype):boolean;

This function will convert a string representation of an IP addres to
a valid IP address stored in an array of 4 bytes.  You must pass both
the string IP address and a variable that will contain the new IP address :

              IPaddr : IPTYPE;

            success := oPPP.StoIP('',ipaddr);

The function will return true on success, false if an invalid IP address
was supplied.


Simple PPP demonstration :

Program PPPDemo;


 DONE : Boolean;

  {Initialize PPP and DIAL into ISP}

  {Wait until a carrier is detected before continuing}
  repeat until oPPP.Carrier;

  {Call Procedure to handle user input for logging into and enabling
   PPP connection of ISP}
   LOGIN_TO_ISP;  {Dummy Procedure}

   writeln('Your IP Address is : ',oPPP.IPSTRING);

   DONE := False;

     {do stuff}
     if keypressed then DONE := TRUE;
   until DONE;

overview.txt Included in this package :

         Internet Protocol Suite v1.00

                  PPP   Point to Point Protocol
                  IP    Internet Protocol
                  TCP   Transport Control Protocol
                  UDP   User Datagram Protocol
                  DNS   Domain Name Resolution
                  ICMP  Internet       Messaging Protocol
                  IGMP  Internet Group Messaging Protocol
                  SMTP  Simple Mail Transfer Protocol
                  POP3  Post Office Protocol

         * You will find a more detailed description of each of these
           Protocols later on.

Graphical User Interface v1.00

     The GUI included in this package is a complete, easy to use interface
to just about any program you can think of.  With these units, I have created
a complete commercial program which automates HVAC Service Companies.  I have
also used the GUI units to create an interface to a program which allows me
to manipulate 3d Studio Meshes and render them as voxels, 100% interactively!

     There are only a couple items which I hope will make it into a future
release of this package including support for Windows resource files.  This
will allow anyone to port their Windows .RC files into data that the GUI
units can manage.

README.TXT Well, a few months late, but it's finally here...

This zip contains a number of extremely useful units (with source) that
you can use for your own personal projects.

Before I go on, here's the deal :

       I'm not responsible for what happens when you use these functions.
So if it blows up your computer, don't come after me!  I've used most of
this stuff for approximately 1+ years and haven't had to replace anything,
so I don't think you should worry about it.

        If you wish to use anything in this package which will be
distributed to one or more people for a fee, you must obtain written consent
from me (  There is also a small registration fee of
$25.  I think this is fair due to the massive content that these units
contain.  We're talking GUI, Real and Pmode SVGA routines, Internet Protocol
support, Modem support, Mouse, keyboard etc... etc... etc...  What will
you get when you register?  Support!  This version needs it too.  It's laid
out fairly well, but it needs to be documented with tutorials.  Consider
registering an incentive for me to continue supporting this.


OK, included is a resource editor which is far from complete, but allows
you to make dialog boxes with scrollbars, listboxes, etc....

If I ever feel ambitious, I'll document the GUI (after straightening it
out a bit).

There a graphics routines for 8, 15 and 16 bit SVGA graphics modes (all
assembler except for the clipping routines).  These are pretty fast, but
could use an overhaul to make it faster on machines equipped with a PCI

There is a unit that allows playback of FLI files to a client window.

The Internet units consists of a PPP dial-up unit, SMTP,  POP3, UDP, DNS
Resolution, TCP (partially working), IGMP etc etc...  I have laid out
a basic protocol stack, and everything works pretty independently.  This
section needs a little work, but is QUITE functional, so enjoy.  As far
as I can tell, I've never been able to find this stuff in Pascal.

NOTE : The entire GUI is coded using a non-preemptive multitasking system.
There was a problem with the timer that I had originally used in the system
to time in Milliseconds, and has since been replaced with a quick fix until
I have the opportunity to figure out what the hey is going on with it.
This timer ONLY times using the system clock, which is only updated 18.2 times
a second and brings up some timing issues.  The program functions normally
in almost all circumstances, but I'm sure that there are a couple units that
may depend a little more readily on more accurate timing.


If I ever get the chance, I will clean all this code up, optimize the
majority of it, document and re-release it with some additions.  We'll see.

Registration :
                 You may register all these units as stated above for
                 $25.  There isn't an order form, but all you need to
                 do is slap a check in the mail (address below) with
                 a note in it saying something to the effect of :

                   Here is my registration for Pascal GUI

                   John Doe
                   1234 W 1 Lane
                   New York, New York

                 I will mail/email a certificate to you so that you
                 have proof of your purchase.  I will also provide you with
                 support for 1 year through email.

Ok, if you want to get a hold of me :

       E-mail   :

       Postal   :  Jonathan Ramsey
                   5421 S Perth Wy
                   Aurora, CO 80015
Caution, invalid! See above! (F.Glaser)

This kind mail was sent
to me to inform you
about Jonathan Ramsey's
possible address.

To all the US American
readers of the TP-links:

If you get information
about Jonathan Ramsey's
address or e-mail address,
please send me a mail!

Franz Glaser

      Subject: Aufenthalt von J. Ramsey?!
         Date: Mon, 14 Jun 1999 15:49:56 -0600
         From: Marc Forestier <>
 Organization: NREL

Lieber Herr Glaser.

Es mögen Ihnen ja schon einige geschrieben haben,
hier jedenfalls ist alles, was ich über Ramseys
in und um Denver herausgefunden habe. Jonathan
Ramsey hat die PPP unit für TP geschrieben.
Die erste Adresse stimmt vom Namen her mit dem
früheren Eintrag überein. Vielleicht eher korrekt.
Die Tel. Nr. sind von und nicht immer
korrekt. Eine andere Adresse war unter
zu haben.

Viel Glück.

Halten Sie mich auf dem Laufenden, wenn sie den Kontakt
wiederhergestellt haben.


Marc Forestier.

(Schweizer Auslandstudent, z.Z. in Lakewood bei Denver)

non testatus:

Jonathan Ramsey & Elaine (1)
10571 Colorado Blvd 
Thornton CO 80233
(303) 280-2864

Jonathan Ramsey (2)
217 Virginia Dr,
Estes Park, CO

This Page Hosted by  Get your own FREE HOMEPAGE