{******************************************************************************}
{                                                                              }
{       Microsoft Windows Internet Extensions interface unit                   }
{                                                                              }
{ Portions created by Microsoft are Copyright (C) 1995-1999 Microsoft          }
{ Corporation. All Rights Reserved.                                            }
{                                                                              }
{                                                                              }
{ The initial developer of the Pascal code is Rudy Velthuis                    }
{                                                                              }
{ Portions created by Marcel van Brakel are Copyright (C) 1999-2000            }
{ Rudy Velthuis. All Rights Reserved.                                          }
{                                                                              }
{ The original file is: WinInet.h released 16 May 1999.                        }
{ The original Pascal code is: WinInet.pas, released 27 May 1999.              }
{                                                                              }
{ Obtained through: Joint Endeavour of Delphi Innovators (Project JEDI)        }
{                                                                              }
{ You may retrieve the latest version of this file at the Project JEDI         }
{ APILIB home page, located at http://jedi-apilib.sourceforge.net              }
{                                                                              }
{ The contents of this file are used with permission, subject to the Mozilla   }
{ Public License Version 1.1 (the "License"); you may not use this file except }
{ in compliance with the License. You may obtain a copy of the License at      }
{ http://www.mozilla.org/MPL/MPL-1.1.html                                      }
{                                                                              }
{ Software distributed under the License is distributed on an "AS IS" basis,   }
{ WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License for }
{ the specific language governing rights and limitations under the License.    }
{                                                                              }
{ Alternatively, the contents of this file may be used under the terms of the  }
{ GNU Lesser General Public License (the  "LGPL License"), in which case the   }
{ provisions of the LGPL License are applicable instead of those above.        }
{ If you wish to allow use of your version of this file only under the terms   }
{ of the LGPL License and not to allow others to use your version of this file }
{ under the MPL, indicate your decision by deleting  the provisions above and  }
{ replace  them with the notice and other provisions required by the LGPL      }
{ License.  If you do not delete the provisions above, a recipient may use     }
{ your version of this file under either the MPL or the LGPL License.          }
{                                                                              }
{ For more information about the LGPL: http://www.gnu.org/copyleft/lesser.html }
{                                                                              }
{******************************************************************************}

{$IFNDEF JWA_OMIT_SECTIONS}
unit JwaWinInet;
{$ENDIF JWA_OMIT_SECTIONS}

{$HPPEMIT ''}
{$HPPEMIT '#include "wininet.h"'}
{$HPPEMIT ''}


{$IFNDEF JWA_OMIT_SECTIONS}
interface

uses
  Windows;
{
  Set up Structure Packing to be 4 bytes
  for all wininet structures
}
{$ALIGN ON}
{$ENDIF JWA_OMIT_SECTIONS}

{$IFNDEF JWA_IMPLEMENTATIONSECTION}
// 
// internet types 
//
type

  PHINTERNET = ^HINTERNET;
  {$EXTERNALSYM HINTERNET}
  HINTERNET = Pointer;



  PInternetPort = ^TInternetPort;
  PINTERNET_PORT = ^INTERNET_PORT;
  {$EXTERNALSYM INTERNET_PORT}
  INTERNET_PORT = Word;
  TInternetPort = INTERNET_PORT;


// 
// Internet APIs 
//
 
// manifests 

const
  {EXTERNALSYM INTERNET_INVALID_PORT_NUMBER}
  INTERNET_INVALID_PORT_NUMBER    = 0;          // use the protocol-specific default 
 
  {EXTERNALSYM INTERNET_DEFAULT_FTP_PORT}
  INTERNET_DEFAULT_FTP_PORT       = 21;         // default for FTP servers
  {EXTERNALSYM INTERNET_DEFAULT_GOPHER_PORT}
  INTERNET_DEFAULT_GOPHER_PORT    = 70;         //    "     "  gopher " 
  {EXTERNALSYM INTERNET_DEFAULT_HTTP_PORT}
  INTERNET_DEFAULT_HTTP_PORT      = 80;         //    "     "  HTTP   " 
  {EXTERNALSYM INTERNET_DEFAULT_HTTPS_PORT}
  INTERNET_DEFAULT_HTTPS_PORT     = 443;        //    "     "  HTTPS  " 
  {$EXTERNALSYM INTERNET_DEFAULT_SOCKS_PORT}
  INTERNET_DEFAULT_SOCKS_PORT     = 1080;       // default for SOCKS firewall servers. 
 
// 
// maximum field lengths (arbitrary) 
// 
  {$EXTERNALSYM INTERNET_MAX_HOST_NAME_LENGTH}
  INTERNET_MAX_HOST_NAME_LENGTH   = 256;
  {$EXTERNALSYM INTERNET_MAX_USER_NAME_LENGTH}
  INTERNET_MAX_USER_NAME_LENGTH   = 128;
  {$EXTERNALSYM INTERNET_MAX_PASSWORD_LENGTH}
  INTERNET_MAX_PASSWORD_LENGTH    = 128;

{$IFNDEF JWA_INCLUDEMODE}
  {$NODEFINE DWORD_PTR}
  DWORD_PTR = DWORD;
{$ENDIF JWA_INCLUDEMODE}

  {$EXTERNALSYM INTERNET_MAX_PORT_NUMBER_LENGTH}
  INTERNET_MAX_PORT_NUMBER_LENGTH = 5;          // INTERNET_PORT is unsigned short 
  {$EXTERNALSYM INTERNET_MAX_PORT_NUMBER_VALUE}
  INTERNET_MAX_PORT_NUMBER_VALUE  = 65535;      // maximum unsigned short value 
  {$EXTERNALSYM INTERNET_MAX_PATH_LENGTH}
  INTERNET_MAX_PATH_LENGTH        = 2048;
  {$EXTERNALSYM INTERNET_MAX_SCHEME_LENGTH}
  INTERNET_MAX_SCHEME_LENGTH      = 32;         // longest protocol name length 
  {$EXTERNALSYM INTERNET_MAX_URL_LENGTH}
  INTERNET_MAX_URL_LENGTH         = INTERNET_MAX_SCHEME_LENGTH + 
                                    Length('://') + 1 +
                                    INTERNET_MAX_PATH_LENGTH;

// values returned by InternetQueryOption() with INTERNET_OPTION_KEEP_CONNECTION:

  {$EXTERNALSYM INTERNET_KEEP_ALIVE_UNKNOWN}
  INTERNET_KEEP_ALIVE_UNKNOWN     = DWORD(-1);
  {$EXTERNALSYM INTERNET_KEEP_ALIVE_ENABLED}
  INTERNET_KEEP_ALIVE_ENABLED     = 1;
  {$EXTERNALSYM INTERNET_KEEP_ALIVE_DISABLED}
  INTERNET_KEEP_ALIVE_DISABLED    = 0;

// flags returned by InternetQueryOption() with INTERNET_OPTION_REQUEST_FLAGS

  {$EXTERNALSYM INTERNET_REQFLAG_FROM_CACHE}
  INTERNET_REQFLAG_FROM_CACHE     = $00000001;  // response came from cache
  {$EXTERNALSYM INTERNET_REQFLAG_ASYNC}
  INTERNET_REQFLAG_ASYNC          = $00000002;  // request was made asynchronously
  {$EXTERNALSYM INTERNET_REQFLAG_VIA_PROXY}
  INTERNET_REQFLAG_VIA_PROXY      = $00000004;  // request was made via a proxy
  {$EXTERNALSYM INTERNET_REQFLAG_NO_HEADERS}
  INTERNET_REQFLAG_NO_HEADERS     = $00000008;  // orginal response contained no headers
  {$EXTERNALSYM INTERNET_REQFLAG_PASSIVE}
  INTERNET_REQFLAG_PASSIVE        = $00000010;  // FTP: passive-mode connection
  {$EXTERNALSYM INTERNET_REQFLAG_CACHE_WRITE_DISABLED}
  INTERNET_REQFLAG_CACHE_WRITE_DISABLED = $00000040;  // HTTPS: this request not cacheable
  {$EXTERNALSYM INTERNET_REQFLAG_NET_TIMEOUT}
  INTERNET_REQFLAG_NET_TIMEOUT    = $00000080;  // w/ _FROM_CACHE: net request timed out

// flags common to open functions (not InternetOpen()):

  {$EXTERNALSYM INTERNET_FLAG_RELOAD}
  INTERNET_FLAG_RELOAD            = $80000000;  // retrieve the original item

// flags for InternetOpenUrl():

  {$EXTERNALSYM INTERNET_FLAG_RAW_DATA}
  INTERNET_FLAG_RAW_DATA          = $40000000;  // FTP/gopher find: receive the item as raw (structured) data
  {$EXTERNALSYM INTERNET_FLAG_EXISTING_CONNECT}
  INTERNET_FLAG_EXISTING_CONNECT  = $20000000;  // FTP: use existing InternetConnect handle for server if possible

// flags for InternetOpen():

  {$EXTERNALSYM INTERNET_FLAG_ASYNC}
  INTERNET_FLAG_ASYNC             = $10000000;  // this request is asynchronous (where supported)

// protocol-specific flags:

  {$EXTERNALSYM INTERNET_FLAG_PASSIVE}
  INTERNET_FLAG_PASSIVE           = $08000000;  // used for FTP connections

// additional cache flags

  {$EXTERNALSYM INTERNET_FLAG_NO_CACHE_WRITE}
  INTERNET_FLAG_NO_CACHE_WRITE    = $04000000;  // don't write this item to the cache
  {$EXTERNALSYM INTERNET_FLAG_DONT_CACHE}
  INTERNET_FLAG_DONT_CACHE        = INTERNET_FLAG_NO_CACHE_WRITE;
  {$EXTERNALSYM INTERNET_FLAG_MAKE_PERSISTENT}
  INTERNET_FLAG_MAKE_PERSISTENT   = $02000000;  // make this item persistent in cache
  {$EXTERNALSYM INTERNET_FLAG_FROM_CACHE}
  INTERNET_FLAG_FROM_CACHE        = $01000000;  // use offline semantics
  {$EXTERNALSYM INTERNET_FLAG_OFFLINE}
  INTERNET_FLAG_OFFLINE           = INTERNET_FLAG_FROM_CACHE;

// additional flags

  {$EXTERNALSYM INTERNET_FLAG_SECURE}
  INTERNET_FLAG_SECURE            = $00800000;  // use PCT/SSL if applicable (HTTP)
  {$EXTERNALSYM INTERNET_FLAG_KEEP_CONNECTION}
  INTERNET_FLAG_KEEP_CONNECTION   = $00400000;  // use keep-alive semantics
  {$EXTERNALSYM INTERNET_FLAG_NO_AUTO_REDIRECT}
  INTERNET_FLAG_NO_AUTO_REDIRECT  = $00200000;  // don't handle redirections automatically
  {$EXTERNALSYM INTERNET_FLAG_READ_PREFETCH}
  INTERNET_FLAG_READ_PREFETCH     = $00100000;  // do background read prefetch
  {$EXTERNALSYM INTERNET_FLAG_NO_COOKIES}
  INTERNET_FLAG_NO_COOKIES        = $00080000;  // no automatic cookie handling
  {$EXTERNALSYM INTERNET_FLAG_NO_AUTH}
  INTERNET_FLAG_NO_AUTH           = $00040000;  // no automatic authentication handling
  {$EXTERNALSYM INTERNET_FLAG_CACHE_IF_NET_FAIL}
  INTERNET_FLAG_CACHE_IF_NET_FAIL = $00010000;  // return cache file if net request fails

// Security Ignore Flags, Allow HttpOpenRequest to overide
//  Secure Channel (SSL/PCT) failures of the following types.

  {$EXTERNALSYM INTERNET_FLAG_IGNORE_REDIRECT_TO_HTTP}
  INTERNET_FLAG_IGNORE_REDIRECT_TO_HTTP   = $00008000; // ex: https:// to http://
  {$EXTERNALSYM INTERNET_FLAG_IGNORE_REDIRECT_TO_HTTPS}
  INTERNET_FLAG_IGNORE_REDIRECT_TO_HTTPS  = $00004000; // ex: http:// to https://
  {$EXTERNALSYM INTERNET_FLAG_IGNORE_CERT_DATE_INVALID}
  INTERNET_FLAG_IGNORE_CERT_DATE_INVALID  = $00002000; // expired X509 Cert.
  {$EXTERNALSYM INTERNET_FLAG_IGNORE_CERT_CN_INVALID}
  INTERNET_FLAG_IGNORE_CERT_CN_INVALID    = $00001000; // bad common name in X509 Cert.

// more caching flags

  {$EXTERNALSYM INTERNET_FLAG_RESYNCHRONIZE}
  INTERNET_FLAG_RESYNCHRONIZE      = $00000800; // asking wininet to update an item if it is newer
  {$EXTERNALSYM INTERNET_FLAG_HYPERLINK}
  INTERNET_FLAG_HYPERLINK          = $00000400; // asking wininet to do hyperlinking semantic which works right for scripts
  {$EXTERNALSYM INTERNET_FLAG_NO_UI}
  INTERNET_FLAG_NO_UI              = $00000200; // no cookie popup
  {$EXTERNALSYM INTERNET_FLAG_PRAGMA_NOCACHE}
  INTERNET_FLAG_PRAGMA_NOCACHE     = $00000100; // asking wininet to add "pragma: no-cache"
  {$EXTERNALSYM INTERNET_FLAG_CACHE_ASYNC}
  INTERNET_FLAG_CACHE_ASYNC        = $00000080; // ok to perform lazy cache-write
  {$EXTERNALSYM INTERNET_FLAG_FORMS_SUBMIT}
  INTERNET_FLAG_FORMS_SUBMIT       = $00000040; // this is a forms submit
  {$EXTERNALSYM INTERNET_FLAG_FWD_BACK}
  INTERNET_FLAG_FWD_BACK           = $00000020; // fwd-back button op
  {$EXTERNALSYM INTERNET_FLAG_NEED_FILE}
  INTERNET_FLAG_NEED_FILE          = $00000010; // need a file for this request
  {$EXTERNALSYM INTERNET_FLAG_MUST_CACHE_REQUEST}
  INTERNET_FLAG_MUST_CACHE_REQUEST = INTERNET_FLAG_NEED_FILE;

// FTP

// manifests

  {$EXTERNALSYM FTP_TRANSFER_TYPE_UNKNOWN}
  FTP_TRANSFER_TYPE_UNKNOWN   = $00000000;
  {$EXTERNALSYM FTP_TRANSFER_TYPE_ASCII}
  FTP_TRANSFER_TYPE_ASCII     = $00000001;
  {$EXTERNALSYM FTP_TRANSFER_TYPE_BINARY}
  FTP_TRANSFER_TYPE_BINARY    = $00000002;

  {$EXTERNALSYM FTP_TRANSFER_TYPE_MASK}
  FTP_TRANSFER_TYPE_MASK      = FTP_TRANSFER_TYPE_ASCII or FTP_TRANSFER_TYPE_BINARY;

// flags for FTP

  {$EXTERNALSYM INTERNET_FLAG_TRANSFER_ASCII}
  INTERNET_FLAG_TRANSFER_ASCII    = FTP_TRANSFER_TYPE_ASCII;     // = $00000001
  {$EXTERNALSYM INTERNET_FLAG_TRANSFER_BINARY}
  INTERNET_FLAG_TRANSFER_BINARY   = FTP_TRANSFER_TYPE_BINARY;    // = $00000002

// flags field masks

  {$EXTERNALSYM SECURITY_INTERNET_MASK}
  SECURITY_INTERNET_MASK  = INTERNET_FLAG_IGNORE_CERT_CN_INVALID or
                            INTERNET_FLAG_IGNORE_CERT_DATE_INVALID or
                            INTERNET_FLAG_IGNORE_REDIRECT_TO_HTTPS or
                            INTERNET_FLAG_IGNORE_REDIRECT_TO_HTTP;

  {$EXTERNALSYM INTERNET_FLAGS_MASK}
  INTERNET_FLAGS_MASK     = INTERNET_FLAG_RELOAD or
                            INTERNET_FLAG_RAW_DATA or
                            INTERNET_FLAG_EXISTING_CONNECT or
                            INTERNET_FLAG_ASYNC or
                            INTERNET_FLAG_PASSIVE or
                            INTERNET_FLAG_NO_CACHE_WRITE or
                            INTERNET_FLAG_MAKE_PERSISTENT or
                            INTERNET_FLAG_FROM_CACHE or
                            INTERNET_FLAG_SECURE or
                            INTERNET_FLAG_KEEP_CONNECTION or
                            INTERNET_FLAG_NO_AUTO_REDIRECT or
                            INTERNET_FLAG_READ_PREFETCH or
                            INTERNET_FLAG_NO_COOKIES or
                            INTERNET_FLAG_NO_AUTH or
                            INTERNET_FLAG_CACHE_IF_NET_FAIL or
                            SECURITY_INTERNET_MASK or
                            INTERNET_FLAG_RESYNCHRONIZE or
                            INTERNET_FLAG_HYPERLINK or
                            INTERNET_FLAG_NO_UI or
                            INTERNET_FLAG_PRAGMA_NOCACHE or
                            INTERNET_FLAG_CACHE_ASYNC or
                            INTERNET_FLAG_FORMS_SUBMIT or
                            INTERNET_FLAG_NEED_FILE or
                            INTERNET_FLAG_TRANSFER_BINARY or
                            INTERNET_FLAG_TRANSFER_ASCII or
                            INTERNET_FLAG_FWD_BACK;
// Note by translator: the following flag is not defined anywhere in the
// current platform SDK, so I excluded it. Older headers don't have it.
//                          or INTERNET_FLAG_BGUPDATE


  {$EXTERNALSYM INTERNET_ERROR_MASK_INSERT_CDROM}
  INTERNET_ERROR_MASK_INSERT_CDROM = $1;
  {$EXTERNALSYM INTERNET_ERROR_MASK_COMBINED_SEC_CERT}
  INTERNET_ERROR_MASK_COMBINED_SEC_CERT = $2;
  {$EXTERNALSYM INTERNET_ERROR_MASK_NEED_MSN_SSPI_PKG}
  INTERNET_ERROR_MASK_NEED_MSN_SSPI_PKG = $4;
  {$EXTERNALSYM INTERNET_ERROR_MASK_LOGIN_FAILURE_DISPLAY_ENTITY_BODY}
  INTERNET_ERROR_MASK_LOGIN_FAILURE_DISPLAY_ENTITY_BODY = $8;

  {$EXTERNALSYM INTERNET_OPTIONS_MASK}
  INTERNET_OPTIONS_MASK   = not INTERNET_FLAGS_MASK;

// common per-API flags (new APIs)

  {$EXTERNALSYM WININET_API_FLAG_ASYNC}
  WININET_API_FLAG_ASYNC          = $00000001;  // force async operation
  {$EXTERNALSYM WININET_API_FLAG_SYNC}
  WININET_API_FLAG_SYNC           = $00000004;  // force sync operation
  {$EXTERNALSYM WININET_API_FLAG_USE_CONTEXT}
  WININET_API_FLAG_USE_CONTEXT    = $00000008;  // use value supplied in dwContext (even if 0)

// INTERNET_NO_CALLBACK - if this value is presented as the dwContext parameter
// then no call-backs will be made for that API

  {$EXTERNALSYM INTERNET_NO_CALLBACK}
  INTERNET_NO_CALLBACK            = 0;

// structures/types

// INTERNET_SCHEME - enumerated URL scheme type

  {$EXTERNALSYM INTERNET_SCHEME_PARTIAL}
  INTERNET_SCHEME_PARTIAL    = -2;
  {$EXTERNALSYM INTERNET_SCHEME_UNKNOWN}
  INTERNET_SCHEME_UNKNOWN    = -1;
  {$EXTERNALSYM INTERNET_SCHEME_DEFAULT}
  INTERNET_SCHEME_DEFAULT    = 0;
  {$EXTERNALSYM INTERNET_SCHEME_FTP}
  INTERNET_SCHEME_FTP        = 1;
  {$EXTERNALSYM INTERNET_SCHEME_GOPHER}
  INTERNET_SCHEME_GOPHER     = 2;
  {$EXTERNALSYM INTERNET_SCHEME_HTTP}
  INTERNET_SCHEME_HTTP       = 3;
  {$EXTERNALSYM INTERNET_SCHEME_HTTPS}
  INTERNET_SCHEME_HTTPS      = 4;
  {$EXTERNALSYM INTERNET_SCHEME_FILE}
  INTERNET_SCHEME_FILE       = 5;
  {$EXTERNALSYM INTERNET_SCHEME_NEWS}
  INTERNET_SCHEME_NEWS       = 6;
  {$EXTERNALSYM INTERNET_SCHEME_MAILTO}
  INTERNET_SCHEME_MAILTO     = 7;
  {$EXTERNALSYM INTERNET_SCHEME_SOCKS}
  INTERNET_SCHEME_SOCKS      = 8;
  {$EXTERNALSYM INTERNET_SCHEME_JAVASCRIPT}
  INTERNET_SCHEME_JAVASCRIPT = 9;
  {$EXTERNALSYM INTERNET_SCHEME_VBSCRIPT}
  INTERNET_SCHEME_VBSCRIPT   = 10;
  {$EXTERNALSYM INTERNET_SCHEME_FIRST}
  INTERNET_SCHEME_FIRST    = INTERNET_SCHEME_FTP;
  {$EXTERNALSYM INTERNET_SCHEME_LAST}
  INTERNET_SCHEME_LAST     = INTERNET_SCHEME_VBSCRIPT;

type
  PINTERNET_SCHEME = ^INTERNET_SCHEME;
  {$EXTERNALSYM INTERNET_SCHEME}
  INTERNET_SCHEME = ULONG;


// INTERNET_ASYNC_RESULT - this structure is returned to the application via
// the callback with INTERNET_STATUS_REQUEST_COMPLETE. It is not sufficient to
// just return the result of the async operation. If the API failed then the
// app cannot call GetLastError() because the thread context will be incorrect.
// Both the value returned by the async API and any resultant error code are
// made available. The app need not check dwError if dwResult indicates that
// the API succeeded (in this case dwError will be ERROR_SUCCESS)

type
  PInternetAsyncResult = ^TInternetAsyncResult;
  {$EXTERNALSYM INTERNET_ASYNC_RESULT}
  INTERNET_ASYNC_RESULT = record // not packed!
    dwResult: DWORD;    // the HINTERNET, DWORD or BOOL return code from an async API
    dwError: DWORD;     // the error code if the API failed
  end;
  TInternetAsyncResult = INTERNET_ASYNC_RESULT;


// INTERNET_PROXY_INFO - structure supplied with INTERNET_OPTION_PROXY to get/
// set proxy information on a InternetOpen() handle

  PInternetProxyInfo = ^TInternetProxyInfo;
  {$EXTERNALSYM INTERNET_PROXY_INFO}
  INTERNET_PROXY_INFO = record // not packed!
    dwAccessType: DWORD;        // INTERNET_OPEN_TYPE_DIRECT, INTERNET_OPEN_TYPE_PROXY, or
                                // INTERNET_OPEN_TYPE_PRECONFIG (set only)
    lpszProxy: LPCTSTR;         // proxy server list
    lpszProxyBypass: LPCTSTR;   // proxy bypass list
  end;
  TInternetProxyInfo = INTERNET_PROXY_INFO;

//
// INTERNET_PER_CONN_OPTION_LIST - set per-connection options such as proxy
// and autoconfig info
//
// Set and queried using Internet[Set|Query]Option with
// INTERNET_OPTION_PER_CONNECTION_OPTION
//

  PInternetPerConnOptionA = ^TInternetPerConnOptionA;
  PInternetPerConnOptionW = ^TInternetPerConnOptionW;
  PInternetPerConnOption = PInternetPerConnOptionA;
  {$EXTERNALSYM INTERNET_PER_CONN_OPTIONA}
  INTERNET_PER_CONN_OPTIONA = record // not packed!
    dwOption: DWORD;            // option to be queried or set
    Value: record
      case Integer of
        1: (dwValue: DWORD);             // dword value for the option
        2: (pszValue: PAnsiChar);           // pointer to string value for the option
        3: (ftValue: TFileTime);         // file-time value for the option
    end;
  end;
  {$EXTERNALSYM INTERNET_PER_CONN_OPTIONW}
  INTERNET_PER_CONN_OPTIONW = record // not packed!
    dwOption: DWORD;            // option to be queried or set
    Value: record
      case Integer of
        1: (dwValue: DWORD);             // dword value for the option
        2: (pszValue: PWideChar);           // pointer to string value for the option
        3: (ftValue: TFileTime);         // file-time value for the option
    end;
  end;
  {$EXTERNALSYM INTERNET_PER_CONN_OPTION}
  INTERNET_PER_CONN_OPTION = INTERNET_PER_CONN_OPTIONA;
  TInternetPerConnOptionA = INTERNET_PER_CONN_OPTIONA;
  TInternetPerConnOptionW = INTERNET_PER_CONN_OPTIONW;
  TInternetPerConnOption = TInternetPerConnOptionA;

  PInternetPerConnOptionListA = ^TInternetPerConnOptionListA;
  PInternetPerConnOptionListW = ^TInternetPerConnOptionListW;
  PInternetPerConnOptionList = PInternetPerConnOptionListA;
  {$EXTERNALSYM INTERNET_PER_CONN_OPTION_LISTA}
  INTERNET_PER_CONN_OPTION_LISTA = record // not packed!
    dwSize: DWORD;              // size of the INTERNET_PER_CONN_OPTION_LIST struct
    pszConnection: PAnsiChar;      // connection name to set/query options
    dwOptionCount: DWORD;       // number of options to set/query
    dwOptionError: DWORD;       // on error, which option failed
    pOptions: PInternetPerConnOptionA; // array of options to set/query
  end;
  {$EXTERNALSYM INTERNET_PER_CONN_OPTION_LISTW}
  INTERNET_PER_CONN_OPTION_LISTW = record // not packed!
    dwSize: DWORD;              // size of the INTERNET_PER_CONN_OPTION_LIST struct
    pszConnection: PWideChar;      // connection name to set/query options
    dwOptionCount: DWORD;       // number of options to set/query
    dwOptionError: DWORD;       // on error, which option failed
    pOptions: PInternetPerConnOptionW; // array of options to set/query
  end;
  {$EXTERNALSYM INTERNET_PER_CONN_OPTION_LIST}
  INTERNET_PER_CONN_OPTION_LIST = INTERNET_PER_CONN_OPTION_LISTA;
  TInternetPerConnOptionListA = INTERNET_PER_CONN_OPTION_LISTA;
  TInternetPerConnOptionListW = INTERNET_PER_CONN_OPTION_LISTW;
  TInternetPerConnOptionList = TInternetPerConnOptionListA;


// Options used in INTERNET_PER_CONN_OPTION struct
const
  {$EXTERNALSYM INTERNET_PER_CONN_FLAGS}
  INTERNET_PER_CONN_FLAGS               = 1;
  {$EXTERNALSYM INTERNET_PER_CONN_PROXY_SERVER}
  INTERNET_PER_CONN_PROXY_SERVER        = 2;
  {$EXTERNALSYM INTERNET_PER_CONN_PROXY_BYPASS}
  INTERNET_PER_CONN_PROXY_BYPASS        = 3;
  {$EXTERNALSYM INTERNET_PER_CONN_AUTOCONFIG_URL}
  INTERNET_PER_CONN_AUTOCONFIG_URL      = 4;
  {$EXTERNALSYM INTERNET_PER_CONN_AUTODISCOVERY_FLAGS}
  INTERNET_PER_CONN_AUTODISCOVERY_FLAGS = 5;


// PER_CONN_FLAGS

  {$EXTERNALSYM PROXY_TYPE_DIRECT}
  PROXY_TYPE_DIRECT         = $00000001; // direct to net
  {$EXTERNALSYM PROXY_TYPE_PROXY}
  PROXY_TYPE_PROXY          = $00000002; // via named proxy
  {$EXTERNALSYM PROXY_TYPE_AUTO_PROXY_URL}
  PROXY_TYPE_AUTO_PROXY_URL = $00000004; // autoproxy URL
  {$EXTERNALSYM PROXY_TYPE_AUTO_DETECT}
  PROXY_TYPE_AUTO_DETECT    = $00000008; // use autoproxy detection


// PER_CONN_AUTODISCOVERY_FLAGS

  {$EXTERNALSYM AUTO_PROXY_FLAG_USER_SET}
  AUTO_PROXY_FLAG_USER_SET                = $00000001; // user changed this setting
  {$EXTERNALSYM AUTO_PROXY_FLAG_ALWAYS_DETECT}
  AUTO_PROXY_FLAG_ALWAYS_DETECT           = $00000002; // force detection even when its not needed
  {$EXTERNALSYM AUTO_PROXY_FLAG_DETECTION_RUN}
  AUTO_PROXY_FLAG_DETECTION_RUN           = $00000004; // detection has been run
  {$EXTERNALSYM AUTO_PROXY_FLAG_MIGRATED}
  AUTO_PROXY_FLAG_MIGRATED                = $00000008; // migration has just been done
  {$EXTERNALSYM AUTO_PROXY_FLAG_DONT_CACHE_PROXY_RESULT}
  AUTO_PROXY_FLAG_DONT_CACHE_PROXY_RESULT = $00000010; // don't cache result of host=proxy name
  {$EXTERNALSYM AUTO_PROXY_FLAG_CACHE_INIT_RUN}
  AUTO_PROXY_FLAG_CACHE_INIT_RUN          = $00000020; // don't initalize and run unless URL expired
  {$EXTERNALSYM AUTO_PROXY_FLAG_DETECTION_SUSPECT}
  AUTO_PROXY_FLAG_DETECTION_SUSPECT       = $00000040; // if we're on a LAN & Modem, with only one IP, bad?!?


// INTERNET_VERSION_INFO - version information returned via
// InternetQueryOption(..., INTERNET_OPTION_VERSION, ...)
type
  PInternetVersionInfo = ^TInternetVersionInfo;
  {$EXTERNALSYM INTERNET_VERSION_INFO}
  INTERNET_VERSION_INFO = record // not packed!
    dwMajorVersion: DWORD;
    dwMinorVersion: DWORD;
  end;
  TInternetVersionInfo = INTERNET_VERSION_INFO;


// HTTP_VERSION_INFO - query or set global HTTP version (1.0 or 1.1)

  PHttpVersionInfo = ^THttpVersionInfo;
  {$EXTERNALSYM HTTP_VERSION_INFO}
  HTTP_VERSION_INFO = record // not packed!
    dwMajorVersion: DWORD;
    dwMinorVersion: DWORD;
  end;
  THttpVersionInfo = HTTP_VERSION_INFO;


// INTERNET_CONNECTED_INFO - information used to set the global connected state

  PInternetConnectedInfo = ^TInternetConnectedInfo;
  {$EXTERNALSYM INTERNET_CONNECTED_INFO}
  INTERNET_CONNECTED_INFO = record // not packed!
    dwConnectedState: DWORD; // new connected/disconnected state.
                             // See INTERNET_STATE_CONNECTED, etc.
    dwFlags: DWORD;          // flags controlling connected->disconnected (or disconnected->
                             // connected) transition. See below
  end;
  TInternetConnectedInfo = INTERNET_CONNECTED_INFO;


// flags for INTERNET_CONNECTED_INFO dwFlags

// ISO_FORCE_DISCONNECTED - if set when putting Wininet into disconnected mode,
// all outstanding requests will be aborted with a cancelled error

const
  {$EXTERNALSYM ISO_FORCE_DISCONNECTED}
  ISO_FORCE_DISCONNECTED  = $00000001;


// URL_COMPONENTS - the constituent parts of an URL. Used in InternetCrackUrl()
// and InternetCreateUrl()
//
// For InternetCrackUrl(), if a pointer field and its corresponding length field
// are both 0 then that component is not returned. If the pointer field is NULL
// but the length field is not zero, then both the pointer and length fields are
// returned if both pointer and corresponding length fields are non-zero then
// the pointer field points to a buffer where the component is copied. The
// component may be un-escaped, depending on dwFlags
//
// For InternetCreateUrl(), the pointer fields should be NULL if the component
// is not required. If the corresponding length field is zero then the pointer
// field is the address of a zero-terminated string. If the length field is not
// zero then it is the string length of the corresponding pointer field

type
  PURLComponentsA = ^TURLComponentsA;
  PURLComponentsW = ^TURLComponentsW;
  PURLComponents = PURLComponentsA;
  {$EXTERNALSYM URL_COMPONENTSA}
  URL_COMPONENTSA = record // not packed!
    dwStructSize: DWORD;        // size of this structure. Used in version check
    lpszScheme: PAnsiChar;         // pointer to scheme name
    dwSchemeLength: DWORD;      // length of scheme name
    nScheme: INTERNET_SCHEME;   // enumerated scheme type (if known)
    lpszHostName: PAnsiChar;       // pointer to host name
    dwHostNameLength: DWORD;    // length of host name
    nPort: INTERNET_PORT;       // converted port number
    lpszUserName: PAnsiChar;       // pointer to user name
    dwUserNameLength: DWORD;    // length of user name
    lpszPassword: PAnsiChar;       // pointer to password
    dwPasswordLength: DWORD;    // length of password
    lpszUrlPath: PAnsiChar;        // pointer to URL-path
    dwUrlPathLength: DWORD;     // length of URL-path
    lpszExtraInfo: PAnsiChar;      // pointer to extra information (e.g. ?foo or #foo)
    dwExtraInfoLength: DWORD;   // length of extra information
  end;
  {$EXTERNALSYM URL_COMPONENTSW}
  URL_COMPONENTSW = record // not packed!
    dwStructSize: DWORD;        // size of this structure. Used in version check
    lpszScheme: PWideChar;         // pointer to scheme name
    dwSchemeLength: DWORD;      // length of scheme name
    nScheme: INTERNET_SCHEME;   // enumerated scheme type (if known)
    lpszHostName: PWideChar;       // pointer to host name
    dwHostNameLength: DWORD;    // length of host name
    nPort: INTERNET_PORT;       // converted port number
    lpszUserName: PWideChar;       // pointer to user name
    dwUserNameLength: DWORD;    // length of user name
    lpszPassword: PWideChar;       // pointer to password
    dwPasswordLength: DWORD;    // length of password
    lpszUrlPath: PWideChar;        // pointer to URL-path
    dwUrlPathLength: DWORD;     // length of URL-path
    lpszExtraInfo: PWideChar;      // pointer to extra information (e.g. ?foo or #foo)
    dwExtraInfoLength: DWORD;   // length of extra information
  end;
  {$EXTERNALSYM URL_COMPONENTS}
  URL_COMPONENTS = URL_COMPONENTSA;
  TURLComponentsA = URL_COMPONENTSA;
  TURLComponentsW = URL_COMPONENTSW;
  TURLComponents = TURLComponentsA;


// INTERNET_CERTIFICATE_INFO lpBuffer - contains the certificate returned from
// the server

  PInternetCertificateInfo = ^TInternetCertificateInfo;
  {$EXTERNALSYM INTERNET_CERTIFICATE_INFO}
  INTERNET_CERTIFICATE_INFO = record // not packed!
    ftExpiry: TFileTime;           // ftExpiry - date the certificate expires.
    ftStart: TFileTime;            // ftStart - date the certificate becomes valid.
    lpszSubjectInfo: LPTSTR;       // lpszSubjectInfo - the name of organization, site, and server
    lpszIssuerInfo: LPTSTR;        // lpszIssuerInfo - the name of orgainzation, site, and server
    lpszProtocolName: LPTSTR;      // lpszProtocolName - the name of the protocol used to provide the secure
                                   //   connection.
    lpszSignatureAlgName: LPTSTR;  // lpszSignatureAlgName - the name of the algorithm used for signing
                                   //   the certificate.
    lpszEncryptionAlgName: LPTSTR; // lpszEncryptionAlgName - the name of the algorithm used for
                                   //   doing encryption over the secure channel (SSL/PCT) connection.
    dwKeySize: DWORD;              // dwKeySize - size of the key.
  end;
  TInternetCertificateInfo = INTERNET_CERTIFICATE_INFO;

// INTERNET_BUFFERS - combines headers and data. May be chained for e.g. file
// upload or scatter/gather operations. For chunked read/write, lpcszHeader
// contains the chunked-ext

type
  PInternetBuffersA = ^TInternetBuffersA;
  PInternetBuffersW = ^TInternetBuffersW;
  PInternetBuffers = PInternetBuffersA;
  {$EXTERNALSYM _INTERNET_BUFFERSA}
  _INTERNET_BUFFERSA = record
    dwStructSize: DWORD;                 // used for API versioning. Set to sizeof(INTERNET_BUFFERS)
    Next: PInternetBuffers;              // chain of buffers
    lpcszHeader: PAnsiChar;              // pointer to headers (may be NULL)
    dwHeadersLength: DWORD;              // length of headers if not NULL
    dwHeadersTotal: DWORD;               // size of headers if not enough buffer
    lpvBuffer: Pointer;                  // pointer to data buffer (may be NULL)
    dwBufferLength: DWORD;               // length of data buffer if not NULL
    dwBufferTotal: DWORD;                // total size of chunk, or content-length if not chunked
    dwOffsetLow: DWORD;                  // used for read-ranges (only used in HttpSendRequest2)
    dwOffsetHigh: DWORD;
  end;
  {$EXTERNALSYM _INTERNET_BUFFERSW}
  _INTERNET_BUFFERSW = record
    dwStructSize: DWORD;                 // used for API versioning. Set to sizeof(INTERNET_BUFFERS)
    Next: PInternetBuffers;              // chain of buffers
    lpcszHeader: PWideChar;              // pointer to headers (may be NULL)
    dwHeadersLength: DWORD;              // length of headers if not NULL
    dwHeadersTotal: DWORD;               // size of headers if not enough buffer
    lpvBuffer: Pointer;                  // pointer to data buffer (may be NULL)
    dwBufferLength: DWORD;               // length of data buffer if not NULL
    dwBufferTotal: DWORD;                // total size of chunk, or content-length if not chunked
    dwOffsetLow: DWORD;                  // used for read-ranges (only used in HttpSendRequest2)
    dwOffsetHigh: DWORD;
  end;
  {$EXTERNALSYM _INTERNET_BUFFERS}
  _INTERNET_BUFFERS = _INTERNET_BUFFERSA;
  {$EXTERNALSYM _INTERNET_BUFFERSA}
  INTERNET_BUFFERSA = _INTERNET_BUFFERSA;
  {$EXTERNALSYM _INTERNET_BUFFERSW}
  INTERNET_BUFFERSW = _INTERNET_BUFFERSW;
  {$EXTERNALSYM INTERNET_BUFFERS}
  INTERNET_BUFFERS = INTERNET_BUFFERSA;
  TInternetBuffersA = _INTERNET_BUFFERSA;
  TInternetBuffersW = _INTERNET_BUFFERSW;
  TInternetBuffers = TInternetBuffersA;


// prototypes

{$EXTERNALSYM InternetTimeFromSystemTimeA}
function InternetTimeFromSystemTimeA(const pst: TSystemTime;
  dwRFC: DWORD; lpszTime: PAnsiChar; cbTime: DWORD): BOOL; stdcall;
{$EXTERNALSYM InternetTimeFromSystemTimeW}
function InternetTimeFromSystemTimeW(const pst: TSystemTime;
  dwRFC: DWORD; lpszTime: PWideChar; cbTime: DWORD): BOOL; stdcall;
{$EXTERNALSYM InternetTimeFromSystemTime}
function InternetTimeFromSystemTime(const pst: TSystemTime;
  dwRFC: DWORD; lpszTime: PChar; cbTime: DWORD): BOOL; stdcall;

// constants for InternetTimeFromSystemTime

const
  {$EXTERNALSYM INTERNET_RFC1123_FORMAT}
  INTERNET_RFC1123_FORMAT   =  0;
  {$EXTERNALSYM INTERNET_RFC1123_BUFSIZE}
  INTERNET_RFC1123_BUFSIZE  = 30;

{$EXTERNALSYM InternetTimeToSystemTimeA}
function InternetTimeToSystemTimeA(lpszTime: PAnsiChar;
  out pst: TSystemTime; dwReserved: DWORD): BOOL; stdcall;
{$EXTERNALSYM InternetTimeToSystemTimeW}
function InternetTimeToSystemTimeW(lpszTime: PWideChar;
  out pst: TSystemTime; dwReserved: DWORD): BOOL; stdcall;
{$EXTERNALSYM InternetTimeToSystemTime}
function InternetTimeToSystemTime(lpszTime: PChar;
  out pst: TSystemTime; dwReserved: DWORD): BOOL; stdcall;

{$EXTERNALSYM InternetCrackUrlA}
function InternetCrackUrlA(lpszUrl: PAnsiChar; dwUrlLength, dwFlags: DWORD;
  out UrlComponents: TURLComponentsA): BOOL; stdcall;
{$EXTERNALSYM InternetCrackUrlW}
function InternetCrackUrlW(lpszUrl: PWideChar; dwUrlLength, dwFlags: DWORD;
  out UrlComponents: TURLComponentsW): BOOL; stdcall;
{$EXTERNALSYM InternetCrackUrl}
function InternetCrackUrl(lpszUrl: PChar; dwUrlLength, dwFlags: DWORD;
  out UrlComponents: TURLComponents): BOOL; stdcall;

{$EXTERNALSYM InternetCreateUrlA}
function InternetCreateUrlA(var lpUrlComponents: TURLComponentsA;
  dwFlags: DWORD; lpszUrl: PAnsiChar; var lpdwUrlLength: DWORD): BOOL;  stdcall;
{$EXTERNALSYM InternetCreateUrlW}
function InternetCreateUrlW(var lpUrlComponents: TURLComponentsW;
  dwFlags: DWORD; lpszUrl: PWideChar; var lpdwUrlLength: DWORD): BOOL;  stdcall;
{$EXTERNALSYM InternetCreateUrl}
function InternetCreateUrl(var lpUrlComponents: TURLComponents;
  dwFlags: DWORD; lpszUrl: PChar; var lpdwUrlLength: DWORD): BOOL;  stdcall;

{$EXTERNALSYM InternetCanonicalizeUrlA}
function InternetCanonicalizeUrlA(lpszUrl: PAnsiChar;
  lpszBuffer: PAnsiChar; var lpdwBufferLength: DWORD; dwFlags: DWORD): BOOL; stdcall;
{$EXTERNALSYM InternetCanonicalizeUrlW}
function InternetCanonicalizeUrlW(lpszUrl: PWideChar;
  lpszBuffer: PWideChar; var lpdwBufferLength: DWORD; dwFlags: DWORD): BOOL; stdcall;
{$EXTERNALSYM InternetCanonicalizeUrl}
function InternetCanonicalizeUrl(lpszUrl: PChar;
  lpszBuffer: PChar; var lpdwBufferLength: DWORD; dwFlags: DWORD): BOOL; stdcall;

{$EXTERNALSYM InternetCombineUrlA}
function InternetCombineUrlA(lpszBaseUrl, lpszRelativeUrl: PAnsiChar;
  lpszBuffer: PAnsiChar; dwFlags: DWORD): BOOL; stdcall;
{$EXTERNALSYM InternetCombineUrlW}
function InternetCombineUrlW(lpszBaseUrl, lpszRelativeUrl: PWideChar;
  lpszBuffer: PWideChar; dwFlags: DWORD): BOOL; stdcall;
{$EXTERNALSYM InternetCombineUrl}
function InternetCombineUrl(lpszBaseUrl, lpszRelativeUrl: PChar;
  lpszBuffer: PChar; dwFlags: DWORD): BOOL; stdcall;


const

// flags for InternetCrackUrl() and InternetCreateUrl()

  {$EXTERNALSYM ICU_ESCAPE}
  ICU_ESCAPE      = $80000000;  // (un)escape URL characters
  {$EXTERNALSYM ICU_USERNAME}
  ICU_USERNAME    = $40000000;  // use internal username & password

// flags for InternetCanonicalizeUrl() and InternetCombineUrl()

  {$EXTERNALSYM ICU_NO_ENCODE}
  ICU_NO_ENCODE   = $20000000;  // Don't convert unsafe characters to escape sequence
  {$EXTERNALSYM ICU_DECODE}
  ICU_DECODE      = $10000000;  // Convert %XX escape sequences to characters
  {$EXTERNALSYM ICU_NO_META}
  ICU_NO_META     = $08000000;  // Don't convert .. etc. meta path sequences
  {$EXTERNALSYM ICU_ENCODE_SPACES_ONLY}
  ICU_ENCODE_SPACES_ONLY = $04000000;   // Encode spaces only
  {$EXTERNALSYM ICU_BROWSER_MODE}
  ICU_BROWSER_MODE = $02000000; // Special encode/decode rules for browser
  ICU_ENCODE_PERCENT = $00001000;       // Encode any percent (ASCII 25)
                                        // signs encountered, default is to
                                        // not encode percent.

function InternetOpenA(lpszAgent: PAnsiChar; dwAccessType: DWORD;
  lpszProxy, lpszProxyBypass: PAnsiChar; dwFlags: DWORD): HInternet; stdcall;
function InternetOpenW(lpszAgent: PWideChar; dwAccessType: DWORD;
  lpszProxy, lpszProxyBypass: PWideChar; dwFlags: DWORD): HInternet; stdcall;
function InternetOpen(lpszAgent: PChar; dwAccessType: DWORD;
  lpszProxy, lpszProxyBypass: PChar; dwFlags: DWORD): HInternet; stdcall;

const

// access types for InternetOpen()

  {$EXTERNALSYM INTERNET_OPEN_TYPE_PRECONFIG}
  INTERNET_OPEN_TYPE_PRECONFIG                    = 0;   // use registry configuration
  {$EXTERNALSYM INTERNET_OPEN_TYPE_DIRECT}
  INTERNET_OPEN_TYPE_DIRECT                       = 1;   // direct to net
  {$EXTERNALSYM INTERNET_OPEN_TYPE_PROXY}
  INTERNET_OPEN_TYPE_PROXY                        = 3;   // via named proxy
  {$EXTERNALSYM INTERNET_OPEN_TYPE_PRECONFIG_WITH_NO_AUTOPROXY}
  INTERNET_OPEN_TYPE_PRECONFIG_WITH_NO_AUTOPROXY  = 4;   // prevent using java/script/INS

// old names for access types

  {$EXTERNALSYM PRE_CONFIG_INTERNET_ACCESS}
  PRE_CONFIG_INTERNET_ACCESS  = INTERNET_OPEN_TYPE_PRECONFIG;
  {$EXTERNALSYM LOCAL_INTERNET_ACCESS}
  LOCAL_INTERNET_ACCESS       = INTERNET_OPEN_TYPE_DIRECT;
  {$EXTERNALSYM CERN_PROXY_INTERNET_ACCESS}
  CERN_PROXY_INTERNET_ACCESS  = INTERNET_OPEN_TYPE_PROXY;

{$EXTERNALSYM InternetCloseHandle}
function InternetCloseHandle(hInternet: HINTERNET): BOOL; stdcall;

{$EXTERNALSYM InternetConnectA}
function InternetConnectA(hInternet: HINTERNET;
  lpszServerName: PAnsiChar; nServerPort: TInternetPort;
  lpszUserName, lpszPassword: PAnsiChar;
  dwService, dwFlags, dwContext: DWORD): HINTERNET; stdcall;
{$EXTERNALSYM InternetConnectW}
function InternetConnectW(hInternet: HINTERNET;
  lpszServerName: PWideChar; nServerPort: TInternetPort;
  lpszUserName, lpszPassword: PWideChar;
  dwService, dwFlags, dwContext: DWORD): HINTERNET; stdcall;
{$EXTERNALSYM InternetConnect}
function InternetConnect(hInternet: HINTERNET;
  lpszServerName: PChar; nServerPort: TInternetPort;
  lpszUserName, lpszPassword: PChar;
  dwService, dwFlags, dwContext: DWORD): HINTERNET; stdcall;


const

// service types for InternetConnect()

  {$EXTERNALSYM INTERNET_SERVICE_URL}
  INTERNET_SERVICE_URL    = 0;
  {$EXTERNALSYM INTERNET_SERVICE_FTP}
  INTERNET_SERVICE_FTP    = 1;
  {$EXTERNALSYM INTERNET_SERVICE_GOPHER}
  INTERNET_SERVICE_GOPHER = 2;
  {$EXTERNALSYM INTERNET_SERVICE_HTTP}
  INTERNET_SERVICE_HTTP   = 3;

// InternetConnectUrl() - a macro which allows you to specify an URL instead of
// the component parts to InternetConnect(). If any API which uses the returned
// connect handle specifies a NULL path then the URL-path part of the URL
// specified in InternetConnectUrl() will be used

{$EXTERNALSYM InternetConnectUrlA}
function InternetConnectUrlA(hInternet: HINTERNET; lpszUrl: PAnsiChar;
  dwFlags, dwContext: DWORD): HINTERNET;
{$EXTERNALSYM InternetConnectUrlW}
function InternetConnectUrlW(hInternet: HINTERNET; lpszUrl: PWideChar;
  dwFlags, dwContext: DWORD): HINTERNET;
{$EXTERNALSYM InternetConnectUrl}
function InternetConnectUrl(hInternet: HINTERNET; lpszUrl: PChar;
  dwFlags, dwContext: DWORD): HINTERNET;

{$EXTERNALSYM InternetOpenUrlA}
function InternetOpenUrlA(hInternet: HINTERNET; lpszUrl, lpszHeaders: PAnsiChar;
  dwHeadersLength, dwFlags, dwContext: DWORD): HINTERNET; stdcall;
{$EXTERNALSYM InternetOpenUrlW}
function InternetOpenUrlW(hInternet: HINTERNET; lpszUrl, lpszHeaders: PWideChar;
  dwHeadersLength, dwFlags, dwContext: DWORD): HINTERNET; stdcall;
{$EXTERNALSYM InternetOpenUrl}
function InternetOpenUrl(hInternet: HINTERNET; lpszUrl, lpszHeaders: PChar;
  dwHeadersLength, dwFlags, dwContext: DWORD): HINTERNET; stdcall;

{$EXTERNALSYM InternetReadFile}
function InternetReadFile(hFile: HINTERNET; lpBuffer: Pointer;
  dwNumberOfBytesToRead: DWORD; var lpdwNumberOfBytesRead: DWORD): BOOL; stdcall;

{$EXTERNALSYM InternetReadFileExA}
function InternetReadFileExA(hFile: HINTERNET;
  var lpBuffersOut: TInternetBuffersA;
  dwFlags, dwContext: DWORD): BOOL; stdcall;
{$EXTERNALSYM InternetReadFileExW}
function InternetReadFileExW(hFile: HINTERNET;
  var lpBuffersOut: TInternetBuffersW;
  dwFlags, dwContext: DWORD): BOOL; stdcall;
{$EXTERNALSYM InternetReadFileEx}
function InternetReadFileEx(hFile: HINTERNET;
  var lpBuffersOut: TInternetBuffers;
  dwFlags, dwContext: DWORD): BOOL; stdcall;

const

// flags for InternetReadFileEx()

  {$EXTERNALSYM IRF_ASYNC}
  IRF_ASYNC       = WININET_API_FLAG_ASYNC;
  {$EXTERNALSYM IRF_SYNC}
  IRF_SYNC        = WININET_API_FLAG_SYNC;
  {$EXTERNALSYM IRF_USE_CONTEXT}
  IRF_USE_CONTEXT = WININET_API_FLAG_USE_CONTEXT;
  {$EXTERNALSYM IRF_NO_WAIT}
  IRF_NO_WAIT     = $00000008;

{$EXTERNALSYM InternetSetFilePointer}
function InternetSetFilePointer(hFile: HINTERNET;
  lDistanceToMove: Longint; pReserved: Pointer;
  dwMoveMethod, dwContext: DWORD): DWORD; stdcall;

{$EXTERNALSYM InternetWriteFile}
function InternetWriteFile(hFile: HINTERNET;
  lpBuffer: Pointer; dwNumberOfBytesToWrite: DWORD;
  var lpdwNumberOfBytesWritten: DWORD): BOOL; stdcall;

{$EXTERNALSYM InternetQueryDataAvailable}
function InternetQueryDataAvailable(hFile: HINTERNET;
  var lpdwNumberOfBytesAvailable: DWORD;
  dwFlags, dwContext: DWORD): BOOL; stdcall;

{$EXTERNALSYM InternetFindNextFileA}
function InternetFindNextFileA(hFind: HINTERNET; lpvFindData: Pointer): BOOL; stdcall;
{$EXTERNALSYM InternetFindNextFileW}
function InternetFindNextFileW(hFind: HINTERNET; lpvFindData: Pointer): BOOL; stdcall;
{$EXTERNALSYM InternetFindNextFile}
function InternetFindNextFile(hFind: HINTERNET; lpvFindData: Pointer): BOOL; stdcall;

{$EXTERNALSYM InternetQueryOptionA}
function InternetQueryOptionA(hInternet: HINTERNET; dwOption: DWORD;
 lpBuffer: Pointer; var lpdwBufferLength: DWORD): BOOL; stdcall;
{$EXTERNALSYM InternetQueryOptionW}
function InternetQueryOptionW(hInternet: HINTERNET; dwOption: DWORD;
 lpBuffer: Pointer; var lpdwBufferLength: DWORD): BOOL; stdcall;
{$EXTERNALSYM InternetQueryOption}
function InternetQueryOption(hInternet: HINTERNET; dwOption: DWORD;
 lpBuffer: Pointer; var lpdwBufferLength: DWORD): BOOL; stdcall;

{$EXTERNALSYM InternetSetOptionA}
function InternetSetOptionA(hInternet: HINTERNET; dwOption: DWORD;
  lpBuffer: Pointer; dwBufferLength: DWORD): BOOL; stdcall;
{$EXTERNALSYM InternetSetOptionW}
function InternetSetOptionW(hInternet: HINTERNET; dwOption: DWORD;
  lpBuffer: Pointer; dwBufferLength: DWORD): BOOL; stdcall;
{$EXTERNALSYM InternetSetOption}
function InternetSetOption(hInternet: HINTERNET; dwOption: DWORD;
  lpBuffer: Pointer; dwBufferLength: DWORD): BOOL; stdcall;

{$EXTERNALSYM InternetSetOptionExA}
function InternetSetOptionExA(hInternet: HINTERNET; dwOption: DWORD;
  lpBuffer: Pointer; dwBufferLength, dwFlags: DWORD): BOOL; stdcall;
{$EXTERNALSYM InternetSetOptionExW}
function InternetSetOptionExW(hInternet: HINTERNET; dwOption: DWORD;
  lpBuffer: Pointer; dwBufferLength, dwFlags: DWORD): BOOL; stdcall;
{$EXTERNALSYM InternetSetOptionEx}
function InternetSetOptionEx(hInternet: HINTERNET; dwOption: DWORD;
  lpBuffer: Pointer; dwBufferLength, dwFlags: DWORD): BOOL; stdcall;

{$EXTERNALSYM InternetLockRequestFile}
function InternetLockRequestFile(hInternet: HINTERNET;
  lphLockRequestInfo: PHandle): BOOL; stdcall;

{$EXTERNALSYM InternetUnlockRequestFile}
function InternetUnlockRequestFile(hLockRequestInfo: THandle): BOOL; stdcall;

const

// flags for InternetSetOptionEx()

  {$EXTERNALSYM ISO_GLOBAL}
  ISO_GLOBAL      = $00000001;  // modify option globally
  {$EXTERNALSYM ISO_REGISTRY}
  ISO_REGISTRY    = $00000002;  // write option to registry (where applicable)
  {$EXTERNALSYM ISO_VALID_FLAGS}
  ISO_VALID_FLAGS = ISO_GLOBAL or ISO_REGISTRY;

// options manifests for Internet{Query|Set}Option

  {$EXTERNALSYM INTERNET_OPTION_CALLBACK}
  INTERNET_OPTION_CALLBACK                = 1;
  {$EXTERNALSYM INTERNET_OPTION_CONNECT_TIMEOUT}
  INTERNET_OPTION_CONNECT_TIMEOUT         = 2;
  {$EXTERNALSYM INTERNET_OPTION_CONNECT_RETRIES}
  INTERNET_OPTION_CONNECT_RETRIES         = 3;
  {$EXTERNALSYM INTERNET_OPTION_CONNECT_BACKOFF}
  INTERNET_OPTION_CONNECT_BACKOFF         = 4;
  {$EXTERNALSYM INTERNET_OPTION_SEND_TIMEOUT}
  INTERNET_OPTION_SEND_TIMEOUT            = 5;
  {$EXTERNALSYM INTERNET_OPTION_CONTROL_SEND_TIMEOUT}
  INTERNET_OPTION_CONTROL_SEND_TIMEOUT    = INTERNET_OPTION_SEND_TIMEOUT;
  {$EXTERNALSYM INTERNET_OPTION_RECEIVE_TIMEOUT}
  INTERNET_OPTION_RECEIVE_TIMEOUT         = 6;
  {$EXTERNALSYM INTERNET_OPTION_CONTROL_RECEIVE_TIMEOUT}
  INTERNET_OPTION_CONTROL_RECEIVE_TIMEOUT = INTERNET_OPTION_RECEIVE_TIMEOUT;
  {$EXTERNALSYM INTERNET_OPTION_DATA_SEND_TIMEOUT}
  INTERNET_OPTION_DATA_SEND_TIMEOUT       = 7;
  {$EXTERNALSYM INTERNET_OPTION_DATA_RECEIVE_TIMEOUT}
  INTERNET_OPTION_DATA_RECEIVE_TIMEOUT    = 8;
  {$EXTERNALSYM INTERNET_OPTION_HANDLE_TYPE}
  INTERNET_OPTION_HANDLE_TYPE             = 9;
  {$EXTERNALSYM INTERNET_OPTION_LISTEN_TIMEOUT}
  INTERNET_OPTION_LISTEN_TIMEOUT          = 11;
  {$EXTERNALSYM INTERNET_OPTION_READ_BUFFER_SIZE}
  INTERNET_OPTION_READ_BUFFER_SIZE        = 12;
  {$EXTERNALSYM INTERNET_OPTION_WRITE_BUFFER_SIZE}
  INTERNET_OPTION_WRITE_BUFFER_SIZE       = 13;

  {$EXTERNALSYM INTERNET_OPTION_ASYNC_ID}
  INTERNET_OPTION_ASYNC_ID                = 15;
  {$EXTERNALSYM INTERNET_OPTION_ASYNC_PRIORITY}
  INTERNET_OPTION_ASYNC_PRIORITY          = 16;

  {$EXTERNALSYM INTERNET_OPTION_PARENT_HANDLE}
  INTERNET_OPTION_PARENT_HANDLE           = 21;
  {$EXTERNALSYM INTERNET_OPTION_KEEP_CONNECTION}
  INTERNET_OPTION_KEEP_CONNECTION         = 22;
  {$EXTERNALSYM INTERNET_OPTION_REQUEST_FLAGS}
  INTERNET_OPTION_REQUEST_FLAGS           = 23;
  {$EXTERNALSYM INTERNET_OPTION_EXTENDED_ERROR}
  INTERNET_OPTION_EXTENDED_ERROR          = 24;

  {$EXTERNALSYM INTERNET_OPTION_OFFLINE_MODE}
  INTERNET_OPTION_OFFLINE_MODE            = 26;
  {$EXTERNALSYM INTERNET_OPTION_CACHE_STREAM_HANDLE}
  INTERNET_OPTION_CACHE_STREAM_HANDLE     = 27;
  {$EXTERNALSYM INTERNET_OPTION_USERNAME}
  INTERNET_OPTION_USERNAME                = 28;
  {$EXTERNALSYM INTERNET_OPTION_PASSWORD}
  INTERNET_OPTION_PASSWORD                = 29;
  {$EXTERNALSYM INTERNET_OPTION_ASYNC}
  INTERNET_OPTION_ASYNC                   = 30;
  {$EXTERNALSYM INTERNET_OPTION_SECURITY_FLAGS}
  INTERNET_OPTION_SECURITY_FLAGS          = 31;
  {$EXTERNALSYM INTERNET_OPTION_SECURITY_CERTIFICATE_STRUCT}
  INTERNET_OPTION_SECURITY_CERTIFICATE_STRUCT = 32;
  {$EXTERNALSYM INTERNET_OPTION_DATAFILE_NAME}
  INTERNET_OPTION_DATAFILE_NAME           = 33;
  {$EXTERNALSYM INTERNET_OPTION_URL}
  INTERNET_OPTION_URL                     = 34;
  {$EXTERNALSYM INTERNET_OPTION_SECURITY_CERTIFICATE}
  INTERNET_OPTION_SECURITY_CERTIFICATE    = 35;
  {$EXTERNALSYM INTERNET_OPTION_SECURITY_KEY_BITNESS}
  INTERNET_OPTION_SECURITY_KEY_BITNESS    = 36;
  {$EXTERNALSYM INTERNET_OPTION_REFRESH}
  INTERNET_OPTION_REFRESH                 = 37;
  {$EXTERNALSYM INTERNET_OPTION_PROXY}
  INTERNET_OPTION_PROXY                   = 38;
  {$EXTERNALSYM INTERNET_OPTION_SETTINGS_CHANGED}
  INTERNET_OPTION_SETTINGS_CHANGED        = 39;
  {$EXTERNALSYM INTERNET_OPTION_VERSION}
  INTERNET_OPTION_VERSION                 = 40;
  {$EXTERNALSYM INTERNET_OPTION_USER_AGENT}
  INTERNET_OPTION_USER_AGENT              = 41;
  {$EXTERNALSYM INTERNET_OPTION_END_BROWSER_SESSION}
  INTERNET_OPTION_END_BROWSER_SESSION     = 42;
  {$EXTERNALSYM INTERNET_OPTION_PROXY_USERNAME}
  INTERNET_OPTION_PROXY_USERNAME          = 43;
  {$EXTERNALSYM INTERNET_OPTION_PROXY_PASSWORD}
  INTERNET_OPTION_PROXY_PASSWORD          = 44;
  {$EXTERNALSYM INTERNET_OPTION_CONTEXT_VALUE}
  INTERNET_OPTION_CONTEXT_VALUE           = 45;
  {$EXTERNALSYM INTERNET_OPTION_CONNECT_LIMIT}
  INTERNET_OPTION_CONNECT_LIMIT           = 46;
  {$EXTERNALSYM INTERNET_OPTION_SECURITY_SELECT_CLIENT_CERT}
  INTERNET_OPTION_SECURITY_SELECT_CLIENT_CERT = 47;
  {$EXTERNALSYM INTERNET_OPTION_POLICY}
  INTERNET_OPTION_POLICY                  = 48;
  {$EXTERNALSYM INTERNET_OPTION_DISCONNECTED_TIMEOUT}
  INTERNET_OPTION_DISCONNECTED_TIMEOUT    = 49;
  {$EXTERNALSYM INTERNET_OPTION_CONNECTED_STATE}
  INTERNET_OPTION_CONNECTED_STATE         = 50;
  {$EXTERNALSYM INTERNET_OPTION_IDLE_STATE}
  INTERNET_OPTION_IDLE_STATE              = 51;
  {$EXTERNALSYM INTERNET_OPTION_OFFLINE_SEMANTICS}
  INTERNET_OPTION_OFFLINE_SEMANTICS       = 52;
  {$EXTERNALSYM INTERNET_OPTION_SECONDARY_CACHE_KEY}
  INTERNET_OPTION_SECONDARY_CACHE_KEY     = 53;
  {$EXTERNALSYM INTERNET_OPTION_CALLBACK_FILTER}
  INTERNET_OPTION_CALLBACK_FILTER         = 54;
  {$EXTERNALSYM INTERNET_OPTION_CONNECT_TIME}
  INTERNET_OPTION_CONNECT_TIME            = 55;
  {$EXTERNALSYM INTERNET_OPTION_SEND_THROUGHPUT}
  INTERNET_OPTION_SEND_THROUGHPUT         = 56;
  {$EXTERNALSYM INTERNET_OPTION_RECEIVE_THROUGHPUT}
  INTERNET_OPTION_RECEIVE_THROUGHPUT      = 57;
  {$EXTERNALSYM INTERNET_OPTION_REQUEST_PRIORITY}
  INTERNET_OPTION_REQUEST_PRIORITY        = 58;
  {$EXTERNALSYM INTERNET_OPTION_HTTP_VERSION}
  INTERNET_OPTION_HTTP_VERSION            = 59;
  {$EXTERNALSYM INTERNET_OPTION_RESET_URLCACHE_SESSION}
  INTERNET_OPTION_RESET_URLCACHE_SESSION  = 60;
  {$EXTERNALSYM INTERNET_OPTION_ERROR_MASK}
  INTERNET_OPTION_ERROR_MASK              = 62;
  {$EXTERNALSYM INTERNET_OPTION_FROM_CACHE_TIMEOUT}
  INTERNET_OPTION_FROM_CACHE_TIMEOUT      = 63;
  {$EXTERNALSYM INTERNET_OPTION_BYPASS_EDITED_ENTRY}
  INTERNET_OPTION_BYPASS_EDITED_ENTRY     = 64;
  {$EXTERNALSYM INTERNET_OPTION_CODEPAGE}
  INTERNET_OPTION_CODEPAGE                = 68;
  {$EXTERNALSYM INTERNET_OPTION_CACHE_TIMESTAMPS}
  INTERNET_OPTION_CACHE_TIMESTAMPS        = 69;
  {$EXTERNALSYM INTERNET_OPTION_DISABLE_AUTODIAL}
  INTERNET_OPTION_DISABLE_AUTODIAL        = 70;
  {$EXTERNALSYM INTERNET_OPTION_MAX_CONNS_PER_SERVER}
  INTERNET_OPTION_MAX_CONNS_PER_SERVER    = 73;
  {$EXTERNALSYM INTERNET_OPTION_MAX_CONNS_PER_1_0_SERVER}
  INTERNET_OPTION_MAX_CONNS_PER_1_0_SERVER = 74;
  {$EXTERNALSYM INTERNET_OPTION_PER_CONNECTION_OPTION}
  INTERNET_OPTION_PER_CONNECTION_OPTION   = 75;
  {$EXTERNALSYM INTERNET_OPTION_DIGEST_AUTH_UNLOAD}
  INTERNET_OPTION_DIGEST_AUTH_UNLOAD      = 76;
  {$EXTERNALSYM INTERNET_OPTION_IGNORE_OFFLINE}
  INTERNET_OPTION_IGNORE_OFFLINE          = 77;

  {$EXTERNALSYM INTERNET_FIRST_OPTION}
  INTERNET_FIRST_OPTION                   = INTERNET_OPTION_CALLBACK;
  {$EXTERNALSYM INTERNET_LAST_OPTION}
  INTERNET_LAST_OPTION                    = INTERNET_OPTION_IGNORE_OFFLINE;


// values for INTERNET_OPTION_PRIORITY

  {$EXTERNALSYM INTERNET_PRIORITY_FOREGROUND}
  INTERNET_PRIORITY_FOREGROUND            = 1000;

// handle types

  {$EXTERNALSYM INTERNET_HANDLE_TYPE_INTERNET}
  INTERNET_HANDLE_TYPE_INTERNET           = 1;
  {$EXTERNALSYM INTERNET_HANDLE_TYPE_CONNECT_FTP}
  INTERNET_HANDLE_TYPE_CONNECT_FTP        = 2;
  {$EXTERNALSYM INTERNET_HANDLE_TYPE_CONNECT_GOPHER}
  INTERNET_HANDLE_TYPE_CONNECT_GOPHER     = 3;
  {$EXTERNALSYM INTERNET_HANDLE_TYPE_CONNECT_HTTP}
  INTERNET_HANDLE_TYPE_CONNECT_HTTP       = 4;
  {$EXTERNALSYM INTERNET_HANDLE_TYPE_FTP_FIND}
  INTERNET_HANDLE_TYPE_FTP_FIND           = 5;
  {$EXTERNALSYM INTERNET_HANDLE_TYPE_FTP_FIND_HTML}
  INTERNET_HANDLE_TYPE_FTP_FIND_HTML      = 6;
  {$EXTERNALSYM INTERNET_HANDLE_TYPE_FTP_FILE}
  INTERNET_HANDLE_TYPE_FTP_FILE           = 7;
  {$EXTERNALSYM INTERNET_HANDLE_TYPE_FTP_FILE_HTML}
  INTERNET_HANDLE_TYPE_FTP_FILE_HTML      = 8;
  {$EXTERNALSYM INTERNET_HANDLE_TYPE_GOPHER_FIND}
  INTERNET_HANDLE_TYPE_GOPHER_FIND        = 9;
  {$EXTERNALSYM INTERNET_HANDLE_TYPE_GOPHER_FIND_HTML}
  INTERNET_HANDLE_TYPE_GOPHER_FIND_HTML   = 10;
  {$EXTERNALSYM INTERNET_HANDLE_TYPE_GOPHER_FILE}
  INTERNET_HANDLE_TYPE_GOPHER_FILE        = 11;
  {$EXTERNALSYM INTERNET_HANDLE_TYPE_GOPHER_FILE_HTML}
  INTERNET_HANDLE_TYPE_GOPHER_FILE_HTML   = 12;
  {$EXTERNALSYM INTERNET_HANDLE_TYPE_HTTP_REQUEST}
  INTERNET_HANDLE_TYPE_HTTP_REQUEST       = 13;
  {$EXTERNALSYM INTERNET_HANDLE_TYPE_FILE_REQUEST}
  INTERNET_HANDLE_TYPE_FILE_REQUEST       = 14;

// values for INTERNET_OPTION_SECURITY_FLAGS

  // query only
  {$EXTERNALSYM SECURITY_FLAG_SECURE}
  SECURITY_FLAG_SECURE                    = $00000001; // can query only
  {$EXTERNALSYM SECURITY_FLAG_STRENGTH_WEAK}
  SECURITY_FLAG_STRENGTH_WEAK             = $10000000;
  {$EXTERNALSYM SECURITY_FLAG_STRENGTH_MEDIUM}
  SECURITY_FLAG_STRENGTH_MEDIUM           = $40000000;
  {$EXTERNALSYM SECURITY_FLAG_STRENGTH_STRONG}
  SECURITY_FLAG_STRENGTH_STRONG           = $20000000;
  {$EXTERNALSYM SECURITY_FLAG_UNKNOWNBIT}
  SECURITY_FLAG_UNKNOWNBIT                = $80000000;
  {$EXTERNALSYM SECURITY_FLAG_FORTEZZA}
  SECURITY_FLAG_FORTEZZA                  = $08000000;
  {$EXTERNALSYM SECURITY_FLAG_NORMALBITNESS}
  SECURITY_FLAG_NORMALBITNESS             = SECURITY_FLAG_STRENGTH_WEAK;

  // The following are unused
  {$EXTERNALSYM SECURITY_FLAG_SSL}
  SECURITY_FLAG_SSL                       = $00000002;
  {$EXTERNALSYM SECURITY_FLAG_SSL3}
  SECURITY_FLAG_SSL3                      = $00000004;
  {$EXTERNALSYM SECURITY_FLAG_PCT}
  SECURITY_FLAG_PCT                       = $00000008;
  {$EXTERNALSYM SECURITY_FLAG_PCT4}
  SECURITY_FLAG_PCT4                      = $00000010;
  {$EXTERNALSYM SECURITY_FLAG_IETFSSL4}
  SECURITY_FLAG_IETFSSL4                  = $00000020;

  // The following are for backwards compatability only.
  {$EXTERNALSYM SECURITY_FLAG_40BIT}
  SECURITY_FLAG_40BIT                     = SECURITY_FLAG_STRENGTH_WEAK;
  {$EXTERNALSYM SECURITY_FLAG_128BIT}
  SECURITY_FLAG_128BIT                    = SECURITY_FLAG_STRENGTH_STRONG;
  {$EXTERNALSYM SECURITY_FLAG_56BIT}
  SECURITY_FLAG_56BIT                     = SECURITY_FLAG_STRENGTH_MEDIUM;

  // setable flags
  {$EXTERNALSYM SECURITY_FLAG_IGNORE_REVOCATION}
  SECURITY_FLAG_IGNORE_REVOCATION         = $00000080;
  {$EXTERNALSYM SECURITY_FLAG_IGNORE_UNKNOWN_CA}
  SECURITY_FLAG_IGNORE_UNKNOWN_CA         = $00000100;
  {$EXTERNALSYM SECURITY_FLAG_IGNORE_WRONG_USAGE}
  SECURITY_FLAG_IGNORE_WRONG_USAGE        = $00000200;

  {$EXTERNALSYM SECURITY_FLAG_IGNORE_CERT_CN_INVALID}
  SECURITY_FLAG_IGNORE_CERT_CN_INVALID    = INTERNET_FLAG_IGNORE_CERT_CN_INVALID;
  {$EXTERNALSYM SECURITY_FLAG_IGNORE_CERT_DATE_INVALID}
  SECURITY_FLAG_IGNORE_CERT_DATE_INVALID  = INTERNET_FLAG_IGNORE_CERT_DATE_INVALID;


  {$EXTERNALSYM SECURITY_FLAG_IGNORE_REDIRECT_TO_HTTPS}
  SECURITY_FLAG_IGNORE_REDIRECT_TO_HTTPS  = INTERNET_FLAG_IGNORE_REDIRECT_TO_HTTPS;
  {$EXTERNALSYM SECURITY_FLAG_IGNORE_REDIRECT_TO_HTTP}
  SECURITY_FLAG_IGNORE_REDIRECT_TO_HTTP   = INTERNET_FLAG_IGNORE_REDIRECT_TO_HTTP;

  {$EXTERNALSYM SECURITY_SET_MASK}
  SECURITY_SET_MASK                       = SECURITY_FLAG_IGNORE_REVOCATION or
                                            SECURITY_FLAG_IGNORE_UNKNOWN_CA or
                                            SECURITY_FLAG_IGNORE_CERT_CN_INVALID or
                                            SECURITY_FLAG_IGNORE_CERT_DATE_INVALID or
                                            SECURITY_FLAG_IGNORE_WRONG_USAGE;
{$EXTERNALSYM InternetGetLastResponseInfoA}
function InternetGetLastResponseInfoA(var lpdwError: DWORD;
  lpszBuffer: PAnsiChar; var lpdwBufferLength: DWORD): BOOL; stdcall;
{$EXTERNALSYM InternetGetLastResponseInfoW}
function InternetGetLastResponseInfoW(var lpdwError: DWORD;
  lpszBuffer: PWideChar; var lpdwBufferLength: DWORD): BOOL; stdcall;
{$EXTERNALSYM InternetGetLastResponseInfo}
function InternetGetLastResponseInfo(var lpdwError: DWORD;
  lpszBuffer: PChar; var lpdwBufferLength: DWORD): BOOL; stdcall;

// callback function for InternetSetStatusCallback

type
  PInternetStatusCallback = ^TInternetStatusCallback;
  {$EXTERNALSYM INTERNET_STATUS_CALLBACK}
  INTERNET_STATUS_CALLBACK = procedure(hInternet: HINTERNET;
    dwContext, dwInternetStatus: DWORD; lpvStatusInformation: Pointer;
    dwStatusInformationLength: DWORD) stdcall;
  TInternetStatusCallback = INTERNET_STATUS_CALLBACK;

{$EXTERNALSYM InternetSetStatusCallbackA}
function InternetSetStatusCallbackA(hInternet: HINTERNET;
  lpfnInternetCallback: TInternetStatusCallback): TInternetStatusCallback; stdcall;
{$EXTERNALSYM InternetSetStatusCallbackW}
function InternetSetStatusCallbackW(hInternet: HINTERNET;
  lpfnInternetCallback: TInternetStatusCallback): TInternetStatusCallback; stdcall;
{$EXTERNALSYM InternetSetStatusCallback}
function InternetSetStatusCallback(hInternet: HINTERNET;
  lpfnInternetCallback: TInternetStatusCallback): TInternetStatusCallback; stdcall;

// status manifests for Internet status callback
const
  {$EXTERNALSYM INTERNET_STATUS_RESOLVING_NAME}
  INTERNET_STATUS_RESOLVING_NAME          = 10;
  {$EXTERNALSYM INTERNET_STATUS_NAME_RESOLVED}
  INTERNET_STATUS_NAME_RESOLVED           = 11;
  {$EXTERNALSYM INTERNET_STATUS_CONNECTING_TO_SERVER}
  INTERNET_STATUS_CONNECTING_TO_SERVER    = 20;
  {$EXTERNALSYM INTERNET_STATUS_CONNECTED_TO_SERVER}
  INTERNET_STATUS_CONNECTED_TO_SERVER     = 21;
  {$EXTERNALSYM INTERNET_STATUS_SENDING_REQUEST}
  INTERNET_STATUS_SENDING_REQUEST         = 30;
  {$EXTERNALSYM INTERNET_STATUS_REQUEST_SENT}
  INTERNET_STATUS_REQUEST_SENT            = 31;
  {$EXTERNALSYM INTERNET_STATUS_RECEIVING_RESPONSE}
  INTERNET_STATUS_RECEIVING_RESPONSE      = 40;
  {$EXTERNALSYM INTERNET_STATUS_RESPONSE_RECEIVED}
  INTERNET_STATUS_RESPONSE_RECEIVED       = 41;
  {$EXTERNALSYM INTERNET_STATUS_CTL_RESPONSE_RECEIVED}
  INTERNET_STATUS_CTL_RESPONSE_RECEIVED   = 42;
  {$EXTERNALSYM INTERNET_STATUS_PREFETCH}
  INTERNET_STATUS_PREFETCH                = 43;
  {$EXTERNALSYM INTERNET_STATUS_CLOSING_CONNECTION}
  INTERNET_STATUS_CLOSING_CONNECTION      = 50;
  {$EXTERNALSYM INTERNET_STATUS_CONNECTION_CLOSED}
  INTERNET_STATUS_CONNECTION_CLOSED       = 51;
  {$EXTERNALSYM INTERNET_STATUS_HANDLE_CREATED}
  INTERNET_STATUS_HANDLE_CREATED          = 60;
  {$EXTERNALSYM INTERNET_STATUS_HANDLE_CLOSING}
  INTERNET_STATUS_HANDLE_CLOSING          = 70;
  {$EXTERNALSYM INTERNET_STATUS_DETECTING_PROXY}
  INTERNET_STATUS_DETECTING_PROXY         = 80;
  {$EXTERNALSYM INTERNET_STATUS_REQUEST_COMPLETE}
  INTERNET_STATUS_REQUEST_COMPLETE        = 100;
  {$EXTERNALSYM INTERNET_STATUS_REDIRECT}
  INTERNET_STATUS_REDIRECT                = 110;
  {$EXTERNALSYM INTERNET_STATUS_INTERMEDIATE_RESPONSE}
  INTERNET_STATUS_INTERMEDIATE_RESPONSE   = 120;
  {$EXTERNALSYM INTERNET_STATUS_USER_INPUT_REQUIRED}
  INTERNET_STATUS_USER_INPUT_REQUIRED     = 140;
  {$EXTERNALSYM INTERNET_STATUS_STATE_CHANGE}
  INTERNET_STATUS_STATE_CHANGE            = 200;

// the following can be indicated in a state change notification:

  {$EXTERNALSYM INTERNET_STATE_CONNECTED}
  INTERNET_STATE_CONNECTED                = $00000001;  // connected state (mutually exclusive with disconnected)
  {$EXTERNALSYM INTERNET_STATE_DISCONNECTED}
  INTERNET_STATE_DISCONNECTED             = $00000002;  // disconnected from network
  {$EXTERNALSYM INTERNET_STATE_DISCONNECTED_BY_USER}
  INTERNET_STATE_DISCONNECTED_BY_USER     = $00000010;  // disconnected by user request
  {$EXTERNALSYM INTERNET_STATE_IDLE}
  INTERNET_STATE_IDLE                     = $00000100;  // no network requests being made (by Wininet)
  {$EXTERNALSYM INTERNET_STATE_BUSY}
  INTERNET_STATE_BUSY                     = $00000200;  // network requests being made (by Wininet)


// if the following value is returned by InternetSetStatusCallback, then
// probably an invalid (non-code) address was supplied for the callback

  {$EXTERNALSYM INTERNET_INVALID_STATUS_CALLBACK}
  INTERNET_INVALID_STATUS_CALLBACK        = PInternetStatusCallback(-1);

//
// FTP
//

// prototypes

{$EXTERNALSYM FtpFindFirstFileA}
function FtpFindFirstFileA(hConnect: HINTERNET;
  lpszSearchFile: PAnsiChar; lpFindFileData: PWin32FindData;
  dwFlags, dwContext: DWORD): HINTERNET; stdcall;
{$EXTERNALSYM FtpFindFirstFileW}
function FtpFindFirstFileW(hConnect: HINTERNET;
  lpszSearchFile: PWideChar; lpFindFileData: PWin32FindData;
  dwFlags, dwContext: DWORD): HINTERNET; stdcall;
{$EXTERNALSYM FtpFindFirstFile}
function FtpFindFirstFile(hConnect: HINTERNET;
  lpszSearchFile: PChar; lpFindFileData: PWin32FindData;
  dwFlags, dwContext: DWORD): HINTERNET; stdcall;

{$EXTERNALSYM FtpGetFileA}
function FtpGetFileA(hConnect: HINTERNET;
  lpszRemoteFile, lpszNewFile: PAnsiChar; fFailIfExists: BOOL;
  dwFlagsAndAttributes, dwFlags, dwContext: DWORD): BOOL; stdcall;
{$EXTERNALSYM FtpGetFileW}
function FtpGetFileW(hConnect: HINTERNET;
  lpszRemoteFile, lpszNewFile: PWideChar; fFailIfExists: BOOL;
  dwFlagsAndAttributes, dwFlags, dwContext: DWORD): BOOL; stdcall;
{$EXTERNALSYM FtpGetFile}
function FtpGetFile(hConnect: HINTERNET;
  lpszRemoteFile, lpszNewFile: PChar; fFailIfExists: BOOL;
  dwFlagsAndAttributes, dwFlags, dwContext: DWORD): BOOL; stdcall;

{$EXTERNALSYM FtpPutFileA}
function FtpPutFileA(hConnect: HINTERNET; lpszLocalFile,
  lpszNewRemoteFile: PAnsiChar; dwFlags, dwContext: DWORD): BOOL; stdcall;
{$EXTERNALSYM FtpPutFileW}
function FtpPutFileW(hConnect: HINTERNET; lpszLocalFile,
  lpszNewRemoteFile: PWideChar; dwFlags, dwContext: DWORD): BOOL; stdcall;
{$EXTERNALSYM FtpPutFile}
function FtpPutFile(hConnect: HINTERNET; lpszLocalFile,
  lpszNewRemoteFile: PChar; dwFlags, dwContext: DWORD): BOOL; stdcall;

{$EXTERNALSYM FtpGetFileEx}
function FtpGetFileEx(hFtpSession: HINTERNET; lpszRemoteFile: LPCSTR;
  lpszNewFile: LPCWSTR; fFailIfExists: BOOL;
  dwFlagsAndAttributes, dwFlags: DWORD; dwContext: DWORD_PTR): BOOL; stdcall;

{$EXTERNALSYM FtpPutFileEx}
function FtpPutFileEx(hFtpSession: HINTERNET; lpszLocalFile: LPCWSTR;
  lpszNewRemoteFile: LPCSTR; dwFlags: DWORD;
  dwContext: DWORD_PTR): BOOL; stdcall;

{$EXTERNALSYM FtpDeleteFileA}
function FtpDeleteFileA(hConnect: HINTERNET; lpszFileName: PAnsiChar): BOOL; stdcall;
{$EXTERNALSYM FtpDeleteFileW}
function FtpDeleteFileW(hConnect: HINTERNET; lpszFileName: PWideChar): BOOL; stdcall;
{$EXTERNALSYM FtpDeleteFile}
function FtpDeleteFile(hConnect: HINTERNET; lpszFileName: PChar): BOOL; stdcall;

{$EXTERNALSYM FtpRenameFileA}
function FtpRenameFileA(hConnect: HINTERNET;
  lpszExisting, lpszNew: PAnsiChar): BOOL; stdcall;
{$EXTERNALSYM FtpRenameFileW}
function FtpRenameFileW(hConnect: HINTERNET;
  lpszExisting, lpszNew: PWideChar): BOOL; stdcall;
{$EXTERNALSYM FtpRenameFile}
function FtpRenameFile(hConnect: HINTERNET;
  lpszExisting, lpszNew: PChar): BOOL; stdcall;

{$EXTERNALSYM FtpOpenFileA}
function FtpOpenFileA(hConnect: HINTERNET; lpszFileName: PAnsiChar;
  dwAccess, dwFlags, dwContext: DWORD): HINTERNET; stdcall;
{$EXTERNALSYM FtpOpenFileW}
function FtpOpenFileW(hConnect: HINTERNET; lpszFileName: PWideChar;
  dwAccess, dwFlags, dwContext: DWORD): HINTERNET; stdcall;
{$EXTERNALSYM FtpOpenFile}
function FtpOpenFile(hConnect: HINTERNET; lpszFileName: PChar;
  dwAccess, dwFlags, dwContext: DWORD): HINTERNET; stdcall;

{$EXTERNALSYM FtpCreateDirectoryA}
function FtpCreateDirectoryA(hConnect: HINTERNET; lpszDirectory: PAnsiChar): BOOL; stdcall;
{$EXTERNALSYM FtpCreateDirectoryW}
function FtpCreateDirectoryW(hConnect: HINTERNET; lpszDirectory: PWideChar): BOOL; stdcall;
{$EXTERNALSYM FtpCreateDirectory}
function FtpCreateDirectory(hConnect: HINTERNET; lpszDirectory: PChar): BOOL; stdcall;

{$EXTERNALSYM FtpRemoveDirectoryA}
function FtpRemoveDirectoryA(hConnect: HINTERNET; lpszDirectory: PAnsiChar): BOOL; stdcall;
{$EXTERNALSYM FtpRemoveDirectoryW}
function FtpRemoveDirectoryW(hConnect: HINTERNET; lpszDirectory: PWideChar): BOOL; stdcall;
{$EXTERNALSYM FtpRemoveDirectory}
function FtpRemoveDirectory(hConnect: HINTERNET; lpszDirectory: PChar): BOOL; stdcall;

{$EXTERNALSYM FtpSetCurrentDirectoryA}
function FtpSetCurrentDirectoryA(hConnect: HINTERNET;
  lpszDirectory: PAnsiChar): BOOL; stdcall;
{$EXTERNALSYM FtpSetCurrentDirectoryW}
function FtpSetCurrentDirectoryW(hConnect: HINTERNET;
  lpszDirectory: PAnsiChar): BOOL; stdcall;
{$EXTERNALSYM FtpSetCurrentDirectory}
function FtpSetCurrentDirectory(hConnect: HINTERNET;
  lpszDirectory: PAnsiChar): BOOL; stdcall;

{$EXTERNALSYM FtpGetCurrentDirectoryA}
function FtpGetCurrentDirectoryA(hConnect: HINTERNET; lpszCurrentDirectory: PAnsiChar;
  var lpdwCurrentDirectory: DWORD): BOOL; stdcall;
{$EXTERNALSYM FtpGetCurrentDirectoryW}
function FtpGetCurrentDirectoryW(hConnect: HINTERNET; lpszCurrentDirectory: PWideChar;
  var lpdwCurrentDirectory: DWORD): BOOL; stdcall;
{$EXTERNALSYM FtpGetCurrentDirectory}
function FtpGetCurrentDirectory(hConnect: HINTERNET; lpszCurrentDirectory: PChar;
  var lpdwCurrentDirectory: DWORD): BOOL; stdcall;

{$EXTERNALSYM FtpCommandA}
function FtpCommandA(hConnect: HINTERNET; fExpectResponse: BOOL;
  dwFlags: DWORD; lpszCommand: PAnsiChar; dwContext: DWORD_PTR;
  out phFtpCommand: HINTERNET): BOOL; stdcall;
{$EXTERNALSYM FtpCommandW}
function FtpCommandW(hConnect: HINTERNET; fExpectResponse: BOOL;
  dwFlags: DWORD; lpszCommand: PWideChar; dwContext: DWORD_PTR;
  out phFtpCommand: HINTERNET): BOOL; stdcall;
{$EXTERNALSYM FtpCommand}
function FtpCommand(hConnect: HINTERNET; fExpectResponse: BOOL;
  dwFlags: DWORD; lpszCommand: PChar; dwContext: DWORD_PTR;
  out phFtpCommand: HINTERNET): BOOL; stdcall;

{$EXTERNALSYM FtpGetFileSize}
function FtpGetFileSize(hFile: HINTERNET;
  out lpdwFileSizeHigh: DWORD): DWORD; stdcall;


//
// Gopher
//

// manifests

// string field lengths (in characters, not bytes)
const
  {$EXTERNALSYM MAX_GOPHER_DISPLAY_TEXT}
  MAX_GOPHER_DISPLAY_TEXT     = 128;
  {$EXTERNALSYM MAX_GOPHER_SELECTOR_TEXT}
  MAX_GOPHER_SELECTOR_TEXT    = 256;
  {$EXTERNALSYM MAX_GOPHER_HOST_NAME}
  MAX_GOPHER_HOST_NAME        = INTERNET_MAX_HOST_NAME_LENGTH; 
  {$EXTERNALSYM MAX_GOPHER_LOCATOR_LENGTH}
  MAX_GOPHER_LOCATOR_LENGTH   = 1 + MAX_GOPHER_DISPLAY_TEXT +
                                1 + MAX_GOPHER_SELECTOR_TEXT +
                                1 + MAX_GOPHER_HOST_NAME +  
                                1 + INTERNET_MAX_PORT_NUMBER_LENGTH +
                                1 + 1 + 2;
 
// structures/types 
 
// GOPHER_FIND_DATA - returns the results of a GopherFindFirstFile()/
// InternetFindNextFile() request 

type 
  PGopherFindDataA = ^TGopherFindDataA;
  PGopherFindDataW = ^TGopherFindDataW;
  PGopherFindData = PGopherFindDataA;
  {$EXTERNALSYM GOPHER_FIND_DATAA}
  GOPHER_FIND_DATAA = record // not packed!
    DisplayString: packed array [0..MAX_GOPHER_DISPLAY_TEXT] of AnsiChar;
    GopherType: DWORD;   // GOPHER_TYPE_, if known 
    SizeLow: DWORD;
    SizeHigh: DWORD;
    LastModificationTime: TFileTime;
    Locator: packed array [0..MAX_GOPHER_LOCATOR_LENGTH] of AnsiChar;
  end;
  {$EXTERNALSYM GOPHER_FIND_DATAW}
  GOPHER_FIND_DATAW = record // not packed!
    DisplayString: packed array [0..MAX_GOPHER_DISPLAY_TEXT] of WideChar;
    GopherType: DWORD;   // GOPHER_TYPE_, if known 
    SizeLow: DWORD;
    SizeHigh: DWORD;
    LastModificationTime: TFileTime;
    Locator: packed array [0..MAX_GOPHER_LOCATOR_LENGTH] of WideChar;
  end;
  {$EXTERNALSYM GOPHER_FIND_DATA}
  GOPHER_FIND_DATA = GOPHER_FIND_DATAA;
  TGopherFindDataA = GOPHER_FIND_DATAA;
  TGopherFindDataW = GOPHER_FIND_DATAW;
  TGopherFindData = TGopherFindDataA;

// manifests for GopherType 
const
  {$EXTERNALSYM GOPHER_TYPE_TEXT_FILE}
  GOPHER_TYPE_TEXT_FILE       = $00000001;
  {$EXTERNALSYM GOPHER_TYPE_DIRECTORY}
  GOPHER_TYPE_DIRECTORY       = $00000002;
  {$EXTERNALSYM GOPHER_TYPE_CSO}
  GOPHER_TYPE_CSO             = $00000004;
  {$EXTERNALSYM GOPHER_TYPE_ERROR}
  GOPHER_TYPE_ERROR           = $00000008;
  {$EXTERNALSYM GOPHER_TYPE_MAC_BINHEX}
  GOPHER_TYPE_MAC_BINHEX      = $00000010;
  {$EXTERNALSYM GOPHER_TYPE_DOS_ARCHIVE}
  GOPHER_TYPE_DOS_ARCHIVE     = $00000020;
  {$EXTERNALSYM GOPHER_TYPE_UNIX_UUENCODED}
  GOPHER_TYPE_UNIX_UUENCODED  = $00000040;
  {$EXTERNALSYM GOPHER_TYPE_INDEX_SERVER}
  GOPHER_TYPE_INDEX_SERVER    = $00000080;
  {$EXTERNALSYM GOPHER_TYPE_TELNET}
  GOPHER_TYPE_TELNET          = $00000100;
  {$EXTERNALSYM GOPHER_TYPE_BINARY}
  GOPHER_TYPE_BINARY          = $00000200;
  {$EXTERNALSYM GOPHER_TYPE_REDUNDANT}
  GOPHER_TYPE_REDUNDANT       = $00000400;
  {$EXTERNALSYM GOPHER_TYPE_TN3270}
  GOPHER_TYPE_TN3270          = $00000800;
  {$EXTERNALSYM GOPHER_TYPE_GIF}
  GOPHER_TYPE_GIF             = $00001000;
  {$EXTERNALSYM GOPHER_TYPE_IMAGE}
  GOPHER_TYPE_IMAGE           = $00002000;
  {$EXTERNALSYM GOPHER_TYPE_BITMAP}
  GOPHER_TYPE_BITMAP          = $00004000;
  {$EXTERNALSYM GOPHER_TYPE_MOVIE}
  GOPHER_TYPE_MOVIE           = $00008000;
  {$EXTERNALSYM GOPHER_TYPE_SOUND}
  GOPHER_TYPE_SOUND           = $00010000;
  {$EXTERNALSYM GOPHER_TYPE_HTML}
  GOPHER_TYPE_HTML            = $00020000;
  {$EXTERNALSYM GOPHER_TYPE_PDF}
  GOPHER_TYPE_PDF             = $00040000;
  {$EXTERNALSYM GOPHER_TYPE_CALENDAR}
  GOPHER_TYPE_CALENDAR        = $00080000;
  {$EXTERNALSYM GOPHER_TYPE_INLINE}
  GOPHER_TYPE_INLINE          = $00100000;
  {$EXTERNALSYM GOPHER_TYPE_UNKNOWN}
  GOPHER_TYPE_UNKNOWN         = $20000000;
  {$EXTERNALSYM GOPHER_TYPE_ASK}
  GOPHER_TYPE_ASK             = $40000000;
  {$EXTERNALSYM GOPHER_TYPE_GOPHER_PLUS}
  GOPHER_TYPE_GOPHER_PLUS     = $80000000;
 
// gopher type macros 

{$EXTERNALSYM IS_GOPHER_FILE}
function IS_GOPHER_FILE(AType: DWORD): BOOL;
{$EXTERNALSYM IS_GOPHER_DIRECTORY}
function IS_GOPHER_DIRECTORY(AType: DWORD): BOOL;
{$EXTERNALSYM IS_GOPHER_PHONE_SERVER}
function IS_GOPHER_PHONE_SERVER(AType: DWORD): BOOL;
{$EXTERNALSYM IS_GOPHER_ERROR}
function IS_GOPHER_ERROR(AType: DWORD): BOOL;
{$EXTERNALSYM IS_GOPHER_INDEX_SERVER}
function IS_GOPHER_INDEX_SERVER(AType: DWORD): BOOL;
{$EXTERNALSYM IS_GOPHER_TELNET_SESSION}
function IS_GOPHER_TELNET_SESSION(AType: DWORD): BOOL;
{$EXTERNALSYM IS_GOPHER_BACKUP_SERVER}
function IS_GOPHER_BACKUP_SERVER(AType: DWORD): BOOL;
{$EXTERNALSYM IS_GOPHER_TN3270_SESSION}
function IS_GOPHER_TN3270_SESSION(AType: DWORD): BOOL;
{$EXTERNALSYM IS_GOPHER_ASK}
function IS_GOPHER_ASK(AType: DWORD): BOOL;
{$EXTERNALSYM IS_GOPHER_PLUS}
function IS_GOPHER_PLUS(AType: DWORD): BOOL;
{$EXTERNALSYM IS_GOPHER_TYPE_KNOWN}
function IS_GOPHER_TYPE_KNOWN(AType: DWORD): BOOL;

// GOPHER_TYPE_FILE_MASK - use this to determine if a locator identifies a
// (known) file type

const 
  GOPHER_TYPE_FILE_MASK = GOPHER_TYPE_TEXT_FILE or 
                          GOPHER_TYPE_MAC_BINHEX or
                          GOPHER_TYPE_DOS_ARCHIVE or
                          GOPHER_TYPE_UNIX_UUENCODED or
                          GOPHER_TYPE_BINARY or
                          GOPHER_TYPE_GIF or
                          GOPHER_TYPE_IMAGE or
                          GOPHER_TYPE_BITMAP or
                          GOPHER_TYPE_MOVIE or
                          GOPHER_TYPE_SOUND or
                          GOPHER_TYPE_HTML or
                          GOPHER_TYPE_PDF or
                          GOPHER_TYPE_CALENDAR or
                          GOPHER_TYPE_INLINE;


// structured gopher attributes (as defined in gopher+ protocol document)

type
  PGopherAdminAttributeType = ^TGopherAdminAttributeType;
  {$EXTERNALSYM GOPHER_ADMIN_ATTRIBUTE_TYPE}
  GOPHER_ADMIN_ATTRIBUTE_TYPE = record // not packed!
    Comment: LPCTSTR;
    EmailAddress: LPCTSTR;
  end;
  TGopherAdminAttributeType = GOPHER_ADMIN_ATTRIBUTE_TYPE;

  PGopherModDateAttributeType = ^TGopherModDateAttributeType;
  {$EXTERNALSYM GOPHER_MOD_DATE_ATTRIBUTE_TYPE}
  GOPHER_MOD_DATE_ATTRIBUTE_TYPE = record // not packed!
    DateAndTime: TFileTime;
  end;
  TGopherModDateAttributeType = GOPHER_MOD_DATE_ATTRIBUTE_TYPE;
 
  PGopherTtlAttributeType = ^TGopherTtlAttributeType;
  {$EXTERNALSYM GOPHER_TTL_ATTRIBUTE_TYPE}
  GOPHER_TTL_ATTRIBUTE_TYPE = record
    Ttl: DWORD;
  end;
  TGopherTtlAttributeType = GOPHER_TTL_ATTRIBUTE_TYPE;

  PGopherScoreAttributeType = ^TGopherScoreAttributeType; 
  {$EXTERNALSYM GOPHER_SCORE_ATTRIBUTE_TYPE}
  GOPHER_SCORE_ATTRIBUTE_TYPE = record
    Score: Integer;
  end;
  TGopherScoreAttributeType = GOPHER_SCORE_ATTRIBUTE_TYPE;
  
  PGopherScoreRangeAttributeType = ^TGopherScoreRangeAttributeType;
  {$EXTERNALSYM GOPHER_SCORE_RANGE_ATTRIBUTE_TYPE}
  GOPHER_SCORE_RANGE_ATTRIBUTE_TYPE = record 
    LowerBound: Integer;
    UpperBound: Integer;
  end;
  TGopherScoreRangeAttributeType = GOPHER_SCORE_RANGE_ATTRIBUTE_TYPE;

  PGopherSiteAttributeType = ^TGopherSiteAttributeType;
  {$EXTERNALSYM GOPHER_SITE_ATTRIBUTE_TYPE}
  GOPHER_SITE_ATTRIBUTE_TYPE = record
    Site: LPCTSTR;
  end;
  TGopherSiteAttributeType = GOPHER_SITE_ATTRIBUTE_TYPE;

  PGopherOrganizationAttributeType = ^TGopherOrganizationAttributeType;
  {$EXTERNALSYM GOPHER_ORGANIZATION_ATTRIBUTE_TYPE}
  GOPHER_ORGANIZATION_ATTRIBUTE_TYPE = record
    Organization: LPCTSTR;
  end;
  TGopherOrganizationAttributeType = GOPHER_ORGANIZATION_ATTRIBUTE_TYPE; 

  PGopherLocationAttributeType = ^TGopherLocationAttributeType;
  {$EXTERNALSYM GOPHER_LOCATION_ATTRIBUTE_TYPE}
  GOPHER_LOCATION_ATTRIBUTE_TYPE = record
    Location: LPCTSTR;
  end;
  TGopherLocationAttributeType = GOPHER_LOCATION_ATTRIBUTE_TYPE; 
 
  PGopherGeographicalLocationAttributeType = ^TGopherGeographicalLocationAttributeType;
  {$EXTERNALSYM GOPHER_GEOGRAPHICAL_LOCATION_ATTRIBUTE_TYPE}
  GOPHER_GEOGRAPHICAL_LOCATION_ATTRIBUTE_TYPE = record
    DegreesNorth: Integer;
    MinutesNorth: Integer;
    SecondsNorth: Integer;
    DegreesEast: Integer;
    MinutesEast: Integer;
    SecondsEast: Integer;
  end;
  TGopherGeographicalLocationAttributeType = GOPHER_GEOGRAPHICAL_LOCATION_ATTRIBUTE_TYPE;
 
  PGopherTimeZoneAttributeType = ^TGopherTimeZoneAttributeType;
  {$EXTERNALSYM GOPHER_TIMEZONE_ATTRIBUTE_TYPE}
  GOPHER_TIMEZONE_ATTRIBUTE_TYPE = record
    Zone: Integer;
  end;
  TGopherTimeZoneAttributeType = GOPHER_TIMEZONE_ATTRIBUTE_TYPE; 

  PGopherProviderAttributeType = ^TGopherProviderAttributeType;
  {$EXTERNALSYM GOPHER_PROVIDER_ATTRIBUTE_TYPE}
  GOPHER_PROVIDER_ATTRIBUTE_TYPE = record
    Provider: LPCTSTR;
  end;
  TGopherProviderAttributeType = GOPHER_PROVIDER_ATTRIBUTE_TYPE;
 
  PGopherVersionAttributeType = ^TGopherVersionAttributeType;
  {$EXTERNALSYM GOPHER_VERSION_ATTRIBUTE_TYPE}
  GOPHER_VERSION_ATTRIBUTE_TYPE = record
    Version: LPCTSTR;
  end;
  TGopherVersionAttributeType = GOPHER_VERSION_ATTRIBUTE_TYPE;

  PGopherAbstractAttributeType= ^TGopherAbstractAttributeType;
  {$EXTERNALSYM GOPHER_ABSTRACT_ATTRIBUTE_TYPE}
  GOPHER_ABSTRACT_ATTRIBUTE_TYPE = record
    ShortAbstract: LPCTSTR;
    AbstractFile: LPCTSTR;
  end;
  TGopherAbstractAttributeType = GOPHER_ABSTRACT_ATTRIBUTE_TYPE; 

  PGopherViewAttributeType = ^TGopherViewAttributeType;
  {$EXTERNALSYM GOPHER_VIEW_ATTRIBUTE_TYPE}
  GOPHER_VIEW_ATTRIBUTE_TYPE = record
    ContentType: LPCTSTR;
    Language: LPCTSTR;
    Size: DWORD;
  end;
  TGopherViewAttributeType = GOPHER_VIEW_ATTRIBUTE_TYPE; 

  PGopherVeronicaAttributeType = ^TGopherVeronicaAttributeType; 
  {$EXTERNALSYM GOPHER_VERONICA_ATTRIBUTE_TYPE}
  GOPHER_VERONICA_ATTRIBUTE_TYPE = record
    TreeWalk: BOOL;
  end;
  TGopherVeronicaAttributeType = GOPHER_VERONICA_ATTRIBUTE_TYPE; 

  PGopherAskAttributeType = ^TGopherAskAttributeType;
  {$EXTERNALSYM GOPHER_ASK_ATTRIBUTE_TYPE}
  GOPHER_ASK_ATTRIBUTE_TYPE = record
    QuestionType: LPCTSTR;
    QuestionText: LPCTSTR;
  end;
  TGopherAskAttributeType = GOPHER_ASK_ATTRIBUTE_TYPE; 
 
  // GOPHER_UNKNOWN_ATTRIBUTE_TYPE - this is returned if we retrieve an attribute 
  // that is not specified in the current gopher/gopher+ documentation. It is up
  // to the application to parse the information 

  PGopherUnknownAttributeType = ^TGopherUnknownAttributeType;
  GOPHER_UNKNOWN_ATTRIBUTE_TYPE = record
    Text: LPCTSTR;
  end;
  TGopherUnknownAttributeType = GOPHER_UNKNOWN_ATTRIBUTE_TYPE;

  // GOPHER_ATTRIBUTE_TYPE - returned in the user's buffer when an enumerated
  // GopherGetAttribute call is made

  PGopherAttributeType = ^TGopherAttributeType;
  {$EXTERNALSYM GOPHER_ATTRIBUTE_TYPE}
  GOPHER_ATTRIBUTE_TYPE = record
    CategoryId: DWORD;   // e.g. GOPHER_CATEGORY_ID_ADMIN
    AttributeId: DWORD;  // e.g. GOPHER_ATTRIBUTE_ID_ADMIN
    AttributeType: record
      case Integer of
         1: (Admin: TGopherAdminAttributeType);
         2: (ModDate: TGopherModDateAttributeType);
         3: (Ttl: TGopherTtlAttributeType);
         4: (Score: TGopherScoreAttributeType);
         5: (ScoreRange: TGopherScoreRangeAttributeType);
         6: (Site: TGopherSiteAttributeType);
         7: (Organization: TGopherOrganizationAttributeType);
         8: (Location: TGopherLocationAttributeType);
         9: (GeographicalLocation: TGopherGeographicalLocationAttributeType);
        10: (TimeZone: TGopherTimeZoneAttributeType);
        12: (Provider: TGopherProviderAttributeType);
        13: (Version: TGopherVersionAttributeType);
        14: (Abstract: TGopherAbstractAttributeType);
        15: (View: TGopherViewAttributeType);
        16: (Veronica: TGopherVeronicaAttributeType);
        17: (Ask: TGopherAskAttributeType);
        18: (Unknown: TGopherUnknownAttributeType);
    end;
  end;
  TGopherAttributeType = GOPHER_ATTRIBUTE_TYPE;

const
  {$EXTERNALSYM MAX_GOPHER_CATEGORY_NAME}
  MAX_GOPHER_CATEGORY_NAME    = 128;     // arbitrary
  {$EXTERNALSYM MAX_GOPHER_ATTRIBUTE_NAME}
  MAX_GOPHER_ATTRIBUTE_NAME   = 128;     //     "
  {$EXTERNALSYM MIN_GOPHER_ATTRIBUTE_LENGTH}
  MIN_GOPHER_ATTRIBUTE_LENGTH = 256;     //     "

// known gopher attribute categories. See below for ordinals

  {$EXTERNALSYM GOPHER_INFO_CATEGORY}
  GOPHER_INFO_CATEGORY        = '+INFO';
  {$EXTERNALSYM GOPHER_ADMIN_CATEGORY}
  GOPHER_ADMIN_CATEGORY       = '+ADMIN';
  {$EXTERNALSYM GOPHER_VIEWS_CATEGORY}
  GOPHER_VIEWS_CATEGORY       = '+VIEWS'; 
  {$EXTERNALSYM GOPHER_ABSTRACT_CATEGORY}
  GOPHER_ABSTRACT_CATEGORY    = '+ABSTRACT'; 
  {$EXTERNALSYM GOPHER_VERONICA_CATEGORY}
  GOPHER_VERONICA_CATEGORY    = '+VERONICA'; 
 
// known gopher attributes. These are the attribute names as defined in the 
// gopher+ protocol document 
 
  {$EXTERNALSYM GOPHER_ADMIN_ATTRIBUTE}
  GOPHER_ADMIN_ATTRIBUTE      = 'Admin'; 
  {$EXTERNALSYM GOPHER_MOD_DATE_ATTRIBUTE}
  GOPHER_MOD_DATE_ATTRIBUTE   = 'Mod-Date'; 
  {$EXTERNALSYM GOPHER_TTL_ATTRIBUTE}
  GOPHER_TTL_ATTRIBUTE        = 'TTL'; 
  {$EXTERNALSYM GOPHER_SCORE_ATTRIBUTE}
  GOPHER_SCORE_ATTRIBUTE      = 'Score';
  {$EXTERNALSYM GOPHER_RANGE_ATTRIBUTE}
  GOPHER_RANGE_ATTRIBUTE      = 'Score-range'; 
  {$EXTERNALSYM GOPHER_SITE_ATTRIBUTE}
  GOPHER_SITE_ATTRIBUTE       = 'Site';
  {$EXTERNALSYM GOPHER_ORG_ATTRIBUTE}
  GOPHER_ORG_ATTRIBUTE        = 'Org'; 
  {$EXTERNALSYM GOPHER_LOCATION_ATTRIBUTE}
  GOPHER_LOCATION_ATTRIBUTE   = 'Loc'; 
  {$EXTERNALSYM GOPHER_GEOG_ATTRIBUTE}
  GOPHER_GEOG_ATTRIBUTE       = 'Geog'; 
  {$EXTERNALSYM GOPHER_TIMEZONE_ATTRIBUTE}
  GOPHER_TIMEZONE_ATTRIBUTE   = 'TZ'; 
  {$EXTERNALSYM GOPHER_PROVIDER_ATTRIBUTE}
  GOPHER_PROVIDER_ATTRIBUTE   = 'Provider';
  {$EXTERNALSYM GOPHER_VERSION_ATTRIBUTE}
  GOPHER_VERSION_ATTRIBUTE    = 'Version'; 
  {$EXTERNALSYM GOPHER_ABSTRACT_ATTRIBUTE}
  GOPHER_ABSTRACT_ATTRIBUTE   = 'Abstract'; 
  {$EXTERNALSYM GOPHER_VIEW_ATTRIBUTE}
  GOPHER_VIEW_ATTRIBUTE       = 'View'; 
  {$EXTERNALSYM GOPHER_TREEWALK_ATTRIBUTE}
  GOPHER_TREEWALK_ATTRIBUTE   = 'treewalk'; 
 
// identifiers for attribute strings 
 
  {$EXTERNALSYM GOPHER_ATTRIBUTE_ID_BASE}
  GOPHER_ATTRIBUTE_ID_BASE        = $ABCCCC00;
  {$EXTERNALSYM GOPHER_CATEGORY_ID_ALL}
  GOPHER_CATEGORY_ID_ALL          = GOPHER_ATTRIBUTE_ID_BASE + 1; 
  {$EXTERNALSYM GOPHER_CATEGORY_ID_INFO}
  GOPHER_CATEGORY_ID_INFO         = GOPHER_ATTRIBUTE_ID_BASE + 2; 
  {$EXTERNALSYM GOPHER_CATEGORY_ID_ADMIN}
  GOPHER_CATEGORY_ID_ADMIN        = GOPHER_ATTRIBUTE_ID_BASE + 3; 
  {$EXTERNALSYM GOPHER_CATEGORY_ID_VIEWS}
  GOPHER_CATEGORY_ID_VIEWS        = GOPHER_ATTRIBUTE_ID_BASE + 4;
  {$EXTERNALSYM GOPHER_CATEGORY_ID_ABSTRACT}
  GOPHER_CATEGORY_ID_ABSTRACT     = GOPHER_ATTRIBUTE_ID_BASE + 5; 
  {$EXTERNALSYM GOPHER_CATEGORY_ID_VERONICA}
  GOPHER_CATEGORY_ID_VERONICA     = GOPHER_ATTRIBUTE_ID_BASE + 6; 
  {$EXTERNALSYM GOPHER_CATEGORY_ID_ASK}
  GOPHER_CATEGORY_ID_ASK          = GOPHER_ATTRIBUTE_ID_BASE + 7; 
  {$EXTERNALSYM GOPHER_CATEGORY_ID_UNKNOWN}
  GOPHER_CATEGORY_ID_UNKNOWN      = GOPHER_ATTRIBUTE_ID_BASE + 8; 
  {$EXTERNALSYM GOPHER_ATTRIBUTE_ID_ALL}
  GOPHER_ATTRIBUTE_ID_ALL         = GOPHER_ATTRIBUTE_ID_BASE + 9; 
  {$EXTERNALSYM GOPHER_ATTRIBUTE_ID_ADMIN}
  GOPHER_ATTRIBUTE_ID_ADMIN       = GOPHER_ATTRIBUTE_ID_BASE + 10; 
  {$EXTERNALSYM GOPHER_ATTRIBUTE_ID_MOD_DATE}
  GOPHER_ATTRIBUTE_ID_MOD_DATE    = GOPHER_ATTRIBUTE_ID_BASE + 11; 
  {$EXTERNALSYM GOPHER_ATTRIBUTE_ID_TTL}
  GOPHER_ATTRIBUTE_ID_TTL         = GOPHER_ATTRIBUTE_ID_BASE + 12; 
  {$EXTERNALSYM GOPHER_ATTRIBUTE_ID_SCORE}
  GOPHER_ATTRIBUTE_ID_SCORE       = GOPHER_ATTRIBUTE_ID_BASE + 13; 
  {$EXTERNALSYM GOPHER_ATTRIBUTE_ID_RANGE}
  GOPHER_ATTRIBUTE_ID_RANGE       = GOPHER_ATTRIBUTE_ID_BASE + 14; 
  {$EXTERNALSYM GOPHER_ATTRIBUTE_ID_SITE}
  GOPHER_ATTRIBUTE_ID_SITE        = GOPHER_ATTRIBUTE_ID_BASE + 15; 
  {$EXTERNALSYM GOPHER_ATTRIBUTE_ID_ORG}
  GOPHER_ATTRIBUTE_ID_ORG         = GOPHER_ATTRIBUTE_ID_BASE + 16; 
  {$EXTERNALSYM GOPHER_ATTRIBUTE_ID_LOCATION}
  GOPHER_ATTRIBUTE_ID_LOCATION    = GOPHER_ATTRIBUTE_ID_BASE + 17; 
  {$EXTERNALSYM GOPHER_ATTRIBUTE_ID_GEOG}
  GOPHER_ATTRIBUTE_ID_GEOG        = GOPHER_ATTRIBUTE_ID_BASE + 18;
  {$EXTERNALSYM GOPHER_ATTRIBUTE_ID_TIMEZONE}
  GOPHER_ATTRIBUTE_ID_TIMEZONE    = GOPHER_ATTRIBUTE_ID_BASE + 19; 
  {$EXTERNALSYM GOPHER_ATTRIBUTE_ID_PROVIDER}
  GOPHER_ATTRIBUTE_ID_PROVIDER    = GOPHER_ATTRIBUTE_ID_BASE + 20; 
  {$EXTERNALSYM GOPHER_ATTRIBUTE_ID_VERSION}
  GOPHER_ATTRIBUTE_ID_VERSION     = GOPHER_ATTRIBUTE_ID_BASE + 21; 
  {$EXTERNALSYM GOPHER_ATTRIBUTE_ID_ABSTRACT}
  GOPHER_ATTRIBUTE_ID_ABSTRACT    = GOPHER_ATTRIBUTE_ID_BASE + 22; 
  {$EXTERNALSYM GOPHER_ATTRIBUTE_ID_VIEW}
  GOPHER_ATTRIBUTE_ID_VIEW        = GOPHER_ATTRIBUTE_ID_BASE + 23; 
  {$EXTERNALSYM GOPHER_ATTRIBUTE_ID_TREEWALK}
  GOPHER_ATTRIBUTE_ID_TREEWALK    = GOPHER_ATTRIBUTE_ID_BASE + 24; 
  {$EXTERNALSYM GOPHER_ATTRIBUTE_ID_UNKNOWN}
  GOPHER_ATTRIBUTE_ID_UNKNOWN     = GOPHER_ATTRIBUTE_ID_BASE + 25;
 
// prototypes 
 
{$EXTERNALSYM GopherCreateLocatorA}
function GopherCreateLocatorA(lpszHost: PAnsiChar; nServerPort: TInternetPort;
  lpszDisplayString, lpszSelectorString: PAnsiChar; dwGopherType: DWORD;
  lpszLocator: PAnsiChar; lpdwBufferLength: DWORD): BOOL; stdcall;
{$EXTERNALSYM GopherCreateLocatorW}
function GopherCreateLocatorW(lpszHost: PWideChar; nServerPort: TInternetPort;
  lpszDisplayString, lpszSelectorString: PWideChar; dwGopherType: DWORD;
  lpszLocator: PWideChar; lpdwBufferLength: DWORD): BOOL; stdcall;
{$EXTERNALSYM GopherCreateLocator}
function GopherCreateLocator(lpszHost: PChar; nServerPort: TInternetPort;
  lpszDisplayString, lpszSelectorString: PChar; dwGopherType: DWORD;
  lpszLocator: PChar; lpdwBufferLength: DWORD): BOOL; stdcall;

{$EXTERNALSYM GopherGetLocatorTypeA}
function GopherGetLocatorTypeA(lpszLocator: PAnsiChar;
  var lpdwGopherType: DWORD): BOOL; stdcall;
{$EXTERNALSYM GopherGetLocatorTypeW}
function GopherGetLocatorTypeW(lpszLocator: PWideChar;
  var lpdwGopherType: DWORD): BOOL; stdcall;
{$EXTERNALSYM GopherGetLocatorType}
function GopherGetLocatorType(lpszLocator: PChar;
  var lpdwGopherType: DWORD): BOOL; stdcall;

{$EXTERNALSYM GopherFindFirstFileA}
function GopherFindFirstFileA(hConnect: HINTERNET; lpszLocator, lpszSearchString: PAnsiChar;
  lpFindDat: PGopherFindDataA; dwFlags, dwContext: DWORD): HINTERNET; stdcall;
{$EXTERNALSYM GopherFindFirstFileW}
function GopherFindFirstFileW(hConnect: HINTERNET; lpszLocator, lpszSearchString: PWideChar;
  lpFindDat: PGopherFindDataW; dwFlags, dwContext: DWORD): HINTERNET; stdcall;
{$EXTERNALSYM GopherFindFirstFile}
function GopherFindFirstFile(hConnect: HINTERNET; lpszLocator, lpszSearchString: PChar;
  lpFindDat: PGopherFindData; dwFlags, dwContext: DWORD): HINTERNET; stdcall;

{$EXTERNALSYM GopherOpenFileA}
function GopherOpenFileA(hConnect: HINTERNET; lpszLocator, lpszView: PAnsiChar;
  dwFlags, dwContext: DWORD): HINTERNET; stdcall;
{$EXTERNALSYM GopherOpenFileW}
function GopherOpenFileW(hConnect: HINTERNET; lpszLocator, lpszView: PWideChar;
  dwFlags, dwContext: DWORD): HINTERNET; stdcall;
{$EXTERNALSYM GopherOpenFile}
function GopherOpenFile(hConnect: HINTERNET; lpszLocator, lpszView: PChar;
  dwFlags, dwContext: DWORD): HINTERNET; stdcall;

type
  {$EXTERNALSYM GOPHER_ATTRIBUTE_ENUMERATOR}
  GOPHER_ATTRIBUTE_ENUMERATOR = function(lpAttributeInfo: PGopherAttributeType;
    dwError: DWORD): BOOL stdcall;
  TGopherAttributeEnumerator = GOPHER_ATTRIBUTE_ENUMERATOR;  
 
{$EXTERNALSYM GopherGetAttributeA}
function GopherGetAttributeA(hConnect: HINTERNET; lpszLocator,
  lpszAttributeName: PAnsiChar; lpBuffer: PByte; dwBufferLength: DWORD;
  var lpdwCharactersReturned: DWORD; lpfnEnumerator:
  TGopherAttributeEnumerator; dwContext: DWORD): BOOL; stdcall;
{$EXTERNALSYM GopherGetAttributeW}
function GopherGetAttributeW(hConnect: HINTERNET; lpszLocator,
  lpszAttributeName: PWideChar; lpBuffer: PByte; dwBufferLength: DWORD;
  var lpdwCharactersReturned: DWORD; lpfnEnumerator:
  TGopherAttributeEnumerator; dwContext: DWORD): BOOL; stdcall;
{$EXTERNALSYM GopherGetAttribute}
function GopherGetAttribute(hConnect: HINTERNET; lpszLocator,
  lpszAttributeName: PChar; lpBuffer: PByte; dwBufferLength: DWORD;
  var lpdwCharactersReturned: DWORD; lpfnEnumerator:
  TGopherAttributeEnumerator; dwContext: DWORD): BOOL; stdcall;

//
// HTTP 
//
 
// manifests 

const
 
// the default major/minor HTTP version numbers 
 
  {$EXTERNALSYM HTTP_MAJOR_VERSION}
  HTTP_MAJOR_VERSION      = 1;
  {$EXTERNALSYM HTTP_MINOR_VERSION}
  HTTP_MINOR_VERSION      = 0;

  {$EXTERNALSYM HTTP_VERSIONA}
  HTTP_VERSIONA            = 'HTTP/1.0';
  {$EXTERNALSYM HTTP_VERSIONW}
  HTTP_VERSIONW            = 'HTTP/1.0';
  {$EXTERNALSYM HTTP_VERSION}
  HTTP_VERSION = HTTP_VERSIONA;


// HttpQueryInfo info levels. Generally, there is one info level
// for each potential RFC822/HTTP/MIME header that an HTTP server
// may send as part of a request response.
//
// The HTTP_QUERY_RAW_HEADERS info level is provided for clients
// that choose to perform their own header parsing.

  {$EXTERNALSYM HTTP_QUERY_MIME_VERSION}
  HTTP_QUERY_MIME_VERSION                 = 0;
  {$EXTERNALSYM HTTP_QUERY_CONTENT_TYPE}
  HTTP_QUERY_CONTENT_TYPE                 = 1;
  {$EXTERNALSYM HTTP_QUERY_CONTENT_TRANSFER_ENCODING}
  HTTP_QUERY_CONTENT_TRANSFER_ENCODING    = 2;
  {$EXTERNALSYM HTTP_QUERY_CONTENT_ID}
  HTTP_QUERY_CONTENT_ID                   = 3;
  {$EXTERNALSYM HTTP_QUERY_CONTENT_DESCRIPTION}
  HTTP_QUERY_CONTENT_DESCRIPTION          = 4;
  {$EXTERNALSYM HTTP_QUERY_CONTENT_LENGTH}
  HTTP_QUERY_CONTENT_LENGTH               = 5;
  {$EXTERNALSYM HTTP_QUERY_CONTENT_LANGUAGE}
  HTTP_QUERY_CONTENT_LANGUAGE             = 6;
  {$EXTERNALSYM HTTP_QUERY_ALLOW}
  HTTP_QUERY_ALLOW                        = 7;
  {$EXTERNALSYM HTTP_QUERY_PUBLIC}
  HTTP_QUERY_PUBLIC                       = 8;
  {$EXTERNALSYM HTTP_QUERY_DATE}
  HTTP_QUERY_DATE                         = 9;
  {$EXTERNALSYM HTTP_QUERY_EXPIRES}
  HTTP_QUERY_EXPIRES                      = 10;
  {$EXTERNALSYM HTTP_QUERY_LAST_MODIFIED}
  HTTP_QUERY_LAST_MODIFIED                = 11;
  {$EXTERNALSYM HTTP_QUERY_MESSAGE_ID}
  HTTP_QUERY_MESSAGE_ID                   = 12;
  {$EXTERNALSYM HTTP_QUERY_URI}
  HTTP_QUERY_URI                          = 13;
  {$EXTERNALSYM HTTP_QUERY_DERIVED_FROM}
  HTTP_QUERY_DERIVED_FROM                 = 14;
  {$EXTERNALSYM HTTP_QUERY_COST}
  HTTP_QUERY_COST                         = 15;
  {$EXTERNALSYM HTTP_QUERY_LINK}
  HTTP_QUERY_LINK                         = 16;
  {$EXTERNALSYM HTTP_QUERY_PRAGMA}
  HTTP_QUERY_PRAGMA                       = 17;
  {$EXTERNALSYM HTTP_QUERY_VERSION}
  HTTP_QUERY_VERSION                      = 18;  // special: part of status line
  {$EXTERNALSYM HTTP_QUERY_STATUS_CODE}
  HTTP_QUERY_STATUS_CODE                  = 19;  // special: part of status line
  {$EXTERNALSYM HTTP_QUERY_STATUS_TEXT}
  HTTP_QUERY_STATUS_TEXT                  = 20;  // special: part of status line
  {$EXTERNALSYM HTTP_QUERY_RAW_HEADERS}
  HTTP_QUERY_RAW_HEADERS                  = 21;  // special: all headers as ASCIIZ
  {$EXTERNALSYM HTTP_QUERY_RAW_HEADERS_CRLF}
  HTTP_QUERY_RAW_HEADERS_CRLF             = 22;  // special: all headers
  {$EXTERNALSYM HTTP_QUERY_CONNECTION}
  HTTP_QUERY_CONNECTION                   = 23;
  {$EXTERNALSYM HTTP_QUERY_ACCEPT}
  HTTP_QUERY_ACCEPT                       = 24;
  {$EXTERNALSYM HTTP_QUERY_ACCEPT_CHARSET}
  HTTP_QUERY_ACCEPT_CHARSET               = 25;
  {$EXTERNALSYM HTTP_QUERY_ACCEPT_ENCODING}
  HTTP_QUERY_ACCEPT_ENCODING              = 26;
  {$EXTERNALSYM HTTP_QUERY_ACCEPT_LANGUAGE}
  HTTP_QUERY_ACCEPT_LANGUAGE              = 27;
  {$EXTERNALSYM HTTP_QUERY_AUTHORIZATION}
  HTTP_QUERY_AUTHORIZATION                = 28;
  {$EXTERNALSYM HTTP_QUERY_CONTENT_ENCODING}
  HTTP_QUERY_CONTENT_ENCODING             = 29;
  {$EXTERNALSYM HTTP_QUERY_FORWARDED}
  HTTP_QUERY_FORWARDED                    = 30;
  {$EXTERNALSYM HTTP_QUERY_FROM}
  HTTP_QUERY_FROM                         = 31;
  {$EXTERNALSYM HTTP_QUERY_IF_MODIFIED_SINCE}
  HTTP_QUERY_IF_MODIFIED_SINCE            = 32;
  {$EXTERNALSYM HTTP_QUERY_LOCATION}
  HTTP_QUERY_LOCATION                     = 33;
  {$EXTERNALSYM HTTP_QUERY_ORIG_URI}
  HTTP_QUERY_ORIG_URI                     = 34;
  {$EXTERNALSYM HTTP_QUERY_REFERER}
  HTTP_QUERY_REFERER                      = 35;
  {$EXTERNALSYM HTTP_QUERY_RETRY_AFTER}
  HTTP_QUERY_RETRY_AFTER                  = 36;
  {$EXTERNALSYM HTTP_QUERY_SERVER}
  HTTP_QUERY_SERVER                       = 37;
  {$EXTERNALSYM HTTP_QUERY_TITLE}
  HTTP_QUERY_TITLE                        = 38;
  {$EXTERNALSYM HTTP_QUERY_USER_AGENT}
  HTTP_QUERY_USER_AGENT                   = 39;
  {$EXTERNALSYM HTTP_QUERY_WWW_AUTHENTICATE}
  HTTP_QUERY_WWW_AUTHENTICATE             = 40;
  {$EXTERNALSYM HTTP_QUERY_PROXY_AUTHENTICATE}
  HTTP_QUERY_PROXY_AUTHENTICATE           = 41;
  {$EXTERNALSYM HTTP_QUERY_ACCEPT_RANGES}
  HTTP_QUERY_ACCEPT_RANGES                = 42;
  {$EXTERNALSYM HTTP_QUERY_SET_COOKIE}
  HTTP_QUERY_SET_COOKIE                   = 43;
  {$EXTERNALSYM HTTP_QUERY_COOKIE}
  HTTP_QUERY_COOKIE                       = 44;
  {$EXTERNALSYM HTTP_QUERY_REQUEST_METHOD}
  HTTP_QUERY_REQUEST_METHOD               = 45;  // special: GET/POST etc.
  {$EXTERNALSYM HTTP_QUERY_REFRESH}
  HTTP_QUERY_REFRESH                      = 46;
  {$EXTERNALSYM HTTP_QUERY_CONTENT_DISPOSITION}
  HTTP_QUERY_CONTENT_DISPOSITION          = 47;

// HTTP 1.1 defined headers

  {$EXTERNALSYM HTTP_QUERY_AGE}
  HTTP_QUERY_AGE                          = 48;
  {$EXTERNALSYM HTTP_QUERY_CACHE_CONTROL}
  HTTP_QUERY_CACHE_CONTROL                = 49;
  {$EXTERNALSYM HTTP_QUERY_CONTENT_BASE}
  HTTP_QUERY_CONTENT_BASE                 = 50;
  {$EXTERNALSYM HTTP_QUERY_CONTENT_LOCATION}
  HTTP_QUERY_CONTENT_LOCATION             = 51;
  {$EXTERNALSYM HTTP_QUERY_CONTENT_MD5}
  HTTP_QUERY_CONTENT_MD5                  = 52;
  {$EXTERNALSYM HTTP_QUERY_CONTENT_RANGE}
  HTTP_QUERY_CONTENT_RANGE                = 53;
  {$EXTERNALSYM HTTP_QUERY_ETAG}
  HTTP_QUERY_ETAG                         = 54;
  {$EXTERNALSYM HTTP_QUERY_HOST}
  HTTP_QUERY_HOST                         = 55;
  {$EXTERNALSYM HTTP_QUERY_IF_MATCH}
  HTTP_QUERY_IF_MATCH                     = 56;
  {$EXTERNALSYM HTTP_QUERY_IF_NONE_MATCH}
  HTTP_QUERY_IF_NONE_MATCH                = 57;
  {$EXTERNALSYM HTTP_QUERY_IF_RANGE}
  HTTP_QUERY_IF_RANGE                     = 58;
  {$EXTERNALSYM HTTP_QUERY_IF_UNMODIFIED_SINCE}
  HTTP_QUERY_IF_UNMODIFIED_SINCE          = 59;
  {$EXTERNALSYM HTTP_QUERY_MAX_FORWARDS}
  HTTP_QUERY_MAX_FORWARDS                 = 60;
  {$EXTERNALSYM HTTP_QUERY_PROXY_AUTHORIZATION}
  HTTP_QUERY_PROXY_AUTHORIZATION          = 61;
  {$EXTERNALSYM HTTP_QUERY_RANGE}
  HTTP_QUERY_RANGE                        = 62;
  {$EXTERNALSYM HTTP_QUERY_TRANSFER_ENCODING}
  HTTP_QUERY_TRANSFER_ENCODING            = 63;
  {$EXTERNALSYM HTTP_QUERY_UPGRADE}
  HTTP_QUERY_UPGRADE                      = 64;
  {$EXTERNALSYM HTTP_QUERY_VARY}
  HTTP_QUERY_VARY                         = 65;
  {$EXTERNALSYM HTTP_QUERY_VIA}
  HTTP_QUERY_VIA                          = 66;
  {$EXTERNALSYM HTTP_QUERY_WARNING}
  HTTP_QUERY_WARNING                      = 67;
  {$EXTERNALSYM HTTP_QUERY_EXPECT}
  HTTP_QUERY_EXPECT                       = 68;
  {$EXTERNALSYM HTTP_QUERY_PROXY_CONNECTION}
  HTTP_QUERY_PROXY_CONNECTION             = 69;
  {$EXTERNALSYM HTTP_QUERY_UNLESS_MODIFIED_SINCE}
  HTTP_QUERY_UNLESS_MODIFIED_SINCE        = 70;

  {$EXTERNALSYM HTTP_QUERY_ECHO_REQUEST}
  HTTP_QUERY_ECHO_REQUEST                 = 71;
  {$EXTERNALSYM HTTP_QUERY_ECHO_REPLY}
  HTTP_QUERY_ECHO_REPLY                   = 72;

// These are the set of headers that should be added back to a request when
// re-doing a request after a RETRY_WITH response.
  {$EXTERNALSYM HTTP_QUERY_ECHO_HEADERS}
  HTTP_QUERY_ECHO_HEADERS                 = 73;
  {$EXTERNALSYM HTTP_QUERY_ECHO_HEADERS_CRLF}
  HTTP_QUERY_ECHO_HEADERS_CRLF            = 74;

  {$EXTERNALSYM HTTP_QUERY_MAX}
  HTTP_QUERY_MAX                          = 74;


  // HTTP_QUERY_CUSTOM - if this special value is supplied as the dwInfoLevel
  // parameter of HttpQueryInfo() then the lpBuffer parameter contains the name
  // of the header we are to query

  {$EXTERNALSYM HTTP_QUERY_CUSTOM}
  HTTP_QUERY_CUSTOM                       = 65535;

  // HTTP_QUERY_FLAG_REQUEST_HEADERS - if this bit is set in the dwInfoLevel
  // parameter of HttpQueryInfo() then the request headers will be queried for the
  // request information

  {$EXTERNALSYM HTTP_QUERY_FLAG_REQUEST_HEADERS}
  HTTP_QUERY_FLAG_REQUEST_HEADERS         = $80000000;

  // HTTP_QUERY_FLAG_SYSTEMTIME - if this bit is set in the dwInfoLevel parameter
  // of HttpQueryInfo() AND the header being queried contains date information,
  // e.g. the 'Expires:' header then lpBuffer will contain a SYSTEMTIME structure
  // containing the date and time information converted from the header string

  {$EXTERNALSYM HTTP_QUERY_FLAG_SYSTEMTIME}
  HTTP_QUERY_FLAG_SYSTEMTIME              = $40000000;

  // HTTP_QUERY_FLAG_NUMBER - if this bit is set in the dwInfoLevel parameter of
  // HttpQueryInfo(), then the value of the header will be converted to a number
  // before being returned to the caller, if applicable

  {$EXTERNALSYM HTTP_QUERY_FLAG_NUMBER}
  HTTP_QUERY_FLAG_NUMBER                  = $20000000;

  // HTTP_QUERY_FLAG_COALESCE - combine the values from several headers of the
  // same name into the output buffer

  {$EXTERNALSYM HTTP_QUERY_FLAG_COALESCE}
  HTTP_QUERY_FLAG_COALESCE                = $10000000;


  {$EXTERNALSYM HTTP_QUERY_MODIFIER_FLAGS_MASK}
  HTTP_QUERY_MODIFIER_FLAGS_MASK          = HTTP_QUERY_FLAG_REQUEST_HEADERS or
                                            HTTP_QUERY_FLAG_SYSTEMTIME or
                                            HTTP_QUERY_FLAG_NUMBER or
                                            HTTP_QUERY_FLAG_COALESCE;

  {$EXTERNALSYM HTTP_QUERY_HEADER_MASK}
  HTTP_QUERY_HEADER_MASK                  = not HTTP_QUERY_MODIFIER_FLAGS_MASK;

  // HTTP Response Status Codes:

  {$EXTERNALSYM HTTP_STATUS_CONTINUE}
  HTTP_STATUS_CONTINUE            = 100; // OK to continue with request
  {$EXTERNALSYM HTTP_STATUS_SWITCH_PROTOCOLS}
  HTTP_STATUS_SWITCH_PROTOCOLS    = 101; // server has switched protocols in upgrade header

  {$EXTERNALSYM HTTP_STATUS_OK}
  HTTP_STATUS_OK                  = 200; // request completed
  {$EXTERNALSYM HTTP_STATUS_CREATED}
  HTTP_STATUS_CREATED             = 201; // object created, reason = new URI
  {$EXTERNALSYM HTTP_STATUS_ACCEPTED}
  HTTP_STATUS_ACCEPTED            = 202; // async completion (TBS)
  {$EXTERNALSYM HTTP_STATUS_PARTIAL}
  HTTP_STATUS_PARTIAL             = 203; // partial completion
  {$EXTERNALSYM HTTP_STATUS_NO_CONTENT}
  HTTP_STATUS_NO_CONTENT          = 204; // no info to return
  {$EXTERNALSYM HTTP_STATUS_RESET_CONTENT}
  HTTP_STATUS_RESET_CONTENT       = 205; // request completed, but clear form
  {$EXTERNALSYM HTTP_STATUS_PARTIAL_CONTENT}
  HTTP_STATUS_PARTIAL_CONTENT     = 206; // partial GET furfilled

  {$EXTERNALSYM HTTP_STATUS_AMBIGUOUS}
  HTTP_STATUS_AMBIGUOUS           = 300; // server couldn't decide what to return
  {$EXTERNALSYM HTTP_STATUS_MOVED}
  HTTP_STATUS_MOVED               = 301; // object permanently moved
  {$EXTERNALSYM HTTP_STATUS_REDIRECT}
  HTTP_STATUS_REDIRECT            = 302; // object temporarily moved
  {$EXTERNALSYM HTTP_STATUS_REDIRECT_METHOD}
  HTTP_STATUS_REDIRECT_METHOD     = 303; // redirection w/ new access method
  {$EXTERNALSYM HTTP_STATUS_NOT_MODIFIED}
  HTTP_STATUS_NOT_MODIFIED        = 304; // if-modified-since was not modified
  {$EXTERNALSYM HTTP_STATUS_USE_PROXY}
  HTTP_STATUS_USE_PROXY           = 305; // redirection to proxy, location header specifies proxy to use
  {$EXTERNALSYM HTTP_STATUS_REDIRECT_KEEP_VERB}
  HTTP_STATUS_REDIRECT_KEEP_VERB  = 307; // HTTP/1.1: keep same verb

  {$EXTERNALSYM HTTP_STATUS_BAD_REQUEST}
  HTTP_STATUS_BAD_REQUEST         = 400; // invalid syntax
  {$EXTERNALSYM HTTP_STATUS_DENIED}
  HTTP_STATUS_DENIED              = 401; // access denied
  {$EXTERNALSYM HTTP_STATUS_PAYMENT_REQ}
  HTTP_STATUS_PAYMENT_REQ         = 402; // payment required
  {$EXTERNALSYM HTTP_STATUS_FORBIDDEN}
  HTTP_STATUS_FORBIDDEN           = 403; // request forbidden
  {$EXTERNALSYM HTTP_STATUS_NOT_FOUND}
  HTTP_STATUS_NOT_FOUND           = 404; // object not found
  {$EXTERNALSYM HTTP_STATUS_BAD_METHOD}
  HTTP_STATUS_BAD_METHOD          = 405; // method is not allowed
  {$EXTERNALSYM HTTP_STATUS_NONE_ACCEPTABLE}
  HTTP_STATUS_NONE_ACCEPTABLE     = 406; // no response acceptable to client found
  {$EXTERNALSYM HTTP_STATUS_PROXY_AUTH_REQ}
  HTTP_STATUS_PROXY_AUTH_REQ      = 407; // proxy authentication required
  {$EXTERNALSYM HTTP_STATUS_REQUEST_TIMEOUT}
  HTTP_STATUS_REQUEST_TIMEOUT     = 408; // server timed out waiting for request
  {$EXTERNALSYM HTTP_STATUS_CONFLICT}
  HTTP_STATUS_CONFLICT            = 409; // user should resubmit with more info
  {$EXTERNALSYM HTTP_STATUS_GONE}
  HTTP_STATUS_GONE                = 410; // the resource is no longer available
  {$EXTERNALSYM HTTP_STATUS_LENGTH_REQUIRED}
  HTTP_STATUS_LENGTH_REQUIRED     = 411; // the server refused to accept request w/o a length
  {$EXTERNALSYM HTTP_STATUS_PRECOND_FAILED}
  HTTP_STATUS_PRECOND_FAILED      = 412; // precondition given in request failed
  {$EXTERNALSYM HTTP_STATUS_REQUEST_TOO_LARGE}
  HTTP_STATUS_REQUEST_TOO_LARGE   = 413; // request entity was too large
  {$EXTERNALSYM HTTP_STATUS_URI_TOO_LONG}
  HTTP_STATUS_URI_TOO_LONG        = 414; // request URI too long
  {$EXTERNALSYM HTTP_STATUS_UNSUPPORTED_MEDIA}
  HTTP_STATUS_UNSUPPORTED_MEDIA   = 415; // unsupported media type
  {$EXTERNALSYM HTTP_STATUS_RETRY_WITH}
  HTTP_STATUS_RETRY_WITH          = 449; // retry after doing the appropriate action.

  {$EXTERNALSYM HTTP_STATUS_SERVER_ERROR}
  HTTP_STATUS_SERVER_ERROR        = 500; // internal server error
  {$EXTERNALSYM HTTP_STATUS_NOT_SUPPORTED}
  HTTP_STATUS_NOT_SUPPORTED       = 501; // required not supported
  {$EXTERNALSYM HTTP_STATUS_BAD_GATEWAY}
  HTTP_STATUS_BAD_GATEWAY         = 502; // error response received from gateway
  {$EXTERNALSYM HTTP_STATUS_SERVICE_UNAVAIL}
  HTTP_STATUS_SERVICE_UNAVAIL     = 503; // temporarily overloaded
  {$EXTERNALSYM HTTP_STATUS_GATEWAY_TIMEOUT}
  HTTP_STATUS_GATEWAY_TIMEOUT     = 504; // timed out waiting for gateway
  {$EXTERNALSYM HTTP_STATUS_VERSION_NOT_SUP}
  HTTP_STATUS_VERSION_NOT_SUP     = 505; // HTTP version not supported

  {$EXTERNALSYM HTTP_STATUS_FIRST}
  HTTP_STATUS_FIRST               = HTTP_STATUS_CONTINUE;
  {$EXTERNALSYM HTTP_STATUS_LAST}
  HTTP_STATUS_LAST                = HTTP_STATUS_VERSION_NOT_SUP;

// prototypes

{$EXTERNALSYM HttpOpenRequestA}
function HttpOpenRequestA(hConnect: HINTERNET; lpszVerb, lpszObjectName,
  lpszVersion,lpszReferrer: PAnsiChar; lplpszAcceptTypes: PAnsiChar;
  dwFlags, dwContext: DWORD): HINTERNET; stdcall;
{$EXTERNALSYM HttpOpenRequestW}
function HttpOpenRequestW(hConnect: HINTERNET; lpszVerb, lpszObjectName,
  lpszVersion,lpszReferrer: PWideChar; lplpszAcceptTypes: PWideChar;
  dwFlags, dwContext: DWORD): HINTERNET; stdcall;
{$EXTERNALSYM HttpOpenRequest}
function HttpOpenRequest(hConnect: HINTERNET; lpszVerb, lpszObjectName,
  lpszVersion,lpszReferrer: PChar; lplpszAcceptTypes: PChar;
  dwFlags, dwContext: DWORD): HINTERNET; stdcall;

{$EXTERNALSYM HttpAddRequestHeadersA}
function HttpAddRequestHeadersA(hRequest: HINTERNET; lpszHeaders: PAnsiChar;
  dwHeadersLength, dwModifiers: DWORD): BOOL; stdcall;
{$EXTERNALSYM HttpAddRequestHeadersW}
function HttpAddRequestHeadersW(hRequest: HINTERNET; lpszHeaders: PWideChar;
  dwHeadersLength, dwModifiers: DWORD): BOOL; stdcall;
{$EXTERNALSYM HttpAddRequestHeaders}
function HttpAddRequestHeaders(hRequest: HINTERNET; lpszHeaders: PChar;
  dwHeadersLength, dwModifiers: DWORD): BOOL; stdcall;

// values for dwModifiers parameter of HttpAddRequestHeaders()

const
  {$EXTERNALSYM HTTP_ADDREQ_INDEX_MASK}
  HTTP_ADDREQ_INDEX_MASK      = $0000FFFF;
  {$EXTERNALSYM HTTP_ADDREQ_FLAGS_MASK}
  HTTP_ADDREQ_FLAGS_MASK      = $FFFF0000;

  // HTTP_ADDREQ_FLAG_ADD_IF_NEW - the header will only be added if it doesn't
  // already exist

  {$EXTERNALSYM HTTP_ADDREQ_FLAG_ADD_IF_NEW}
  HTTP_ADDREQ_FLAG_ADD_IF_NEW = $10000000;

  // HTTP_ADDREQ_FLAG_ADD - if HTTP_ADDREQ_FLAG_REPLACE is set but the header is
  // not found then if this flag is set, the header is added anyway, so long as
  // there is a valid header-value

  {$EXTERNALSYM HTTP_ADDREQ_FLAG_ADD}
  HTTP_ADDREQ_FLAG_ADD        = $20000000;

  // HTTP_ADDREQ_FLAG_COALESCE - coalesce headers with same name. e.g.
  // 'Accept: text/*' and 'Accept: audio/*' with this flag results in a single
  // header: 'Accept: text/*, audio/*'

  {$EXTERNALSYM HTTP_ADDREQ_FLAG_COALESCE_WITH_COMMA}
  HTTP_ADDREQ_FLAG_COALESCE_WITH_COMMA       = $40000000;
  {$EXTERNALSYM HTTP_ADDREQ_FLAG_COALESCE_WITH_SEMICOLON}
  HTTP_ADDREQ_FLAG_COALESCE_WITH_SEMICOLON   = $01000000;
  {$EXTERNALSYM HTTP_ADDREQ_FLAG_COALESCE}
  HTTP_ADDREQ_FLAG_COALESCE                  = HTTP_ADDREQ_FLAG_COALESCE_WITH_COMMA;

  // HTTP_ADDREQ_FLAG_REPLACE - replaces the specified header. Only one header can
  // be supplied in the buffer. If the header to be replaced is not the first
  // in a list of headers with the same name, then the relative index should be
  // supplied in the low 8 bits of the dwModifiers parameter. If the header-value
  // part is missing, then the header is removed

  {$EXTERNALSYM HTTP_ADDREQ_FLAG_REPLACE}
  HTTP_ADDREQ_FLAG_REPLACE    = $80000000;

{$EXTERNALSYM HttpSendRequestA}
function HttpSendRequestA(hRequest: HINTERNET; lpszHeaders: PAnsiChar;
  dwHeadersLength: DWORD; lpOptional: Pointer; dwOptionalLength: DWORD): BOOL; stdcall;
{$EXTERNALSYM HttpSendRequestW}
function HttpSendRequestW(hRequest: HINTERNET; lpszHeaders: PWideChar;
  dwHeadersLength: DWORD; lpOptional: Pointer; dwOptionalLength: DWORD): BOOL; stdcall;
{$EXTERNALSYM HttpSendRequest}
function HttpSendRequest(hRequest: HINTERNET; lpszHeaders: PChar;
  dwHeadersLength: DWORD; lpOptional: Pointer; dwOptionalLength: DWORD): BOOL; stdcall;

{$EXTERNALSYM HttpSendRequestExA}
function HttpSendRequestExA(hRequest: HINTERNET; lpBuffersIn,
  lpBuffersOut: PInternetBuffersA; dwFlags, dwContext: DWORD): BOOL; stdcall;
{$EXTERNALSYM HttpSendRequestExW}
function HttpSendRequestExW(hRequest: HINTERNET; lpBuffersIn,
  lpBuffersOut: PInternetBuffersW; dwFlags, dwContext: DWORD): BOOL; stdcall;
{$EXTERNALSYM HttpSendRequestEx}
function HttpSendRequestEx(hRequest: HINTERNET; lpBuffersIn,
  lpBuffersOut: PInternetBuffers; dwFlags, dwContext: DWORD): BOOL; stdcall;

// flags for HttpSendRequestEx(), HttpEndRequest()
const
  {$EXTERNALSYM HSR_ASYNC}
  HSR_ASYNC       = WININET_API_FLAG_ASYNC;       // force async
  {$EXTERNALSYM HSR_SYNC}
  HSR_SYNC        = WININET_API_FLAG_SYNC;        // force sync
  {$EXTERNALSYM HSR_USE_CONTEXT}
  HSR_USE_CONTEXT = WININET_API_FLAG_USE_CONTEXT; // use dwContext value
  {$EXTERNALSYM HSR_INITIATE}
  HSR_INITIATE    = $00000008;                    // iterative operation (completed by HttpEndRequest)
  {$EXTERNALSYM HSR_DOWNLOAD}
  HSR_DOWNLOAD    = $00000010;                    // download to file
  {$EXTERNALSYM HSR_CHUNKED}
  HSR_CHUNKED     = $00000020;                    // operation is send of chunked data

{$EXTERNALSYM HttpEndRequestA}
function HttpEndRequestA(hRequest: HINTERNET; lpBuffersOut: PInternetBuffersA;
  dwFlags, dwContext: DWORD): BOOL; stdcall;
{$EXTERNALSYM HttpEndRequestW}
function HttpEndRequestW(hRequest: HINTERNET; lpBuffersOut: PInternetBuffersW;
  dwFlags, dwContext: DWORD): BOOL; stdcall;
{$EXTERNALSYM HttpEndRequest}
function HttpEndRequest(hRequest: HINTERNET; lpBuffersOut: PInternetBuffers;
  dwFlags, dwContext: DWORD): BOOL; stdcall;

{$EXTERNALSYM HttpQueryInfoA}
function HttpQueryInfoA(hRequest: HINTERNET; dwInfoLevel: DWORD;
  lpBuffer: Pointer; var lpdwBufferLength, lpdwIndex: DWORD): BOOL; stdcall;
{$EXTERNALSYM HttpQueryInfoW}
function HttpQueryInfoW(hRequest: HINTERNET; dwInfoLevel: DWORD;
  lpBuffer: Pointer; var lpdwBufferLength, lpdwIndex: DWORD): BOOL; stdcall;
{$EXTERNALSYM HttpQueryInfo}
function HttpQueryInfo(hRequest: HINTERNET; dwInfoLevel: DWORD;
  lpBuffer: Pointer; var lpdwBufferLength, lpdwIndex: DWORD): BOOL; stdcall;


//
// Cookie APIs
//

{$EXTERNALSYM InternetSetCookieA}
function InternetSetCookieA(lpszUrl, lpszCookieName,
  lpszCookieData: PAnsiChar): BOOL; stdcall;
{$EXTERNALSYM InternetSetCookieW}
function InternetSetCookieW(lpszUrl, lpszCookieName,
  lpszCookieData: PWideChar): BOOL; stdcall;
{$EXTERNALSYM InternetSetCookie}
function InternetSetCookie(lpszUrl, lpszCookieName,
  lpszCookieData: PChar): BOOL; stdcall;

{$EXTERNALSYM InternetGetCookieA}
function InternetGetCookieA(lpszUrl, lpszCookieName: PAnsiChar;
  lpCookieData: PAnsiChar; var lpdwSize: DWORD): BOOL; stdcall;
{$EXTERNALSYM InternetGetCookieW}
function InternetGetCookieW(lpszUrl, lpszCookieName: PWideChar;
  lpCookieData: PWideChar; var lpdwSize: DWORD): BOOL; stdcall;
{$EXTERNALSYM InternetGetCookie}
function InternetGetCookie(lpszUrl, lpszCookieName: PChar;
  lpCookieData: PChar; var lpdwSize: DWORD): BOOL; stdcall;


//
// offline browsing
//

function InternetAttemptConnect(dwReserved: DWORD): DWORD; stdcall;

{$EXTERNALSYM InternetCheckConnectionA}
function InternetCheckConnectionA(lpszUrl: PAnsiChar;
  dwFlags, dwReserved: DWORD): BOOL; stdcall;
{$EXTERNALSYM InternetCheckConnectionW}
function InternetCheckConnectionW(lpszUrl: PWideChar;
  dwFlags, dwReserved: DWORD): BOOL; stdcall;
{$EXTERNALSYM InternetCheckConnection}
function InternetCheckConnection(lpszUrl: PChar;
  dwFlags, dwReserved: DWORD): BOOL; stdcall;

const
  {$EXTERNALSYM FLAG_ICC_FORCE_CONNECTION}
  FLAG_ICC_FORCE_CONNECTION       = $00000001;


//
// Internet UI
//

// InternetErrorDlg - Provides UI for certain Errors.

  {$EXTERNALSYM FLAGS_ERROR_UI_FILTER_FOR_ERRORS}
  FLAGS_ERROR_UI_FILTER_FOR_ERRORS        = $01;
  {$EXTERNALSYM FLAGS_ERROR_UI_FLAGS_CHANGE_OPTIONS}
  FLAGS_ERROR_UI_FLAGS_CHANGE_OPTIONS     = $02;
  {$EXTERNALSYM FLAGS_ERROR_UI_FLAGS_GENERATE_DATA}
  FLAGS_ERROR_UI_FLAGS_GENERATE_DATA      = $04;
  {$EXTERNALSYM FLAGS_ERROR_UI_FLAGS_NO_UI}
  FLAGS_ERROR_UI_FLAGS_NO_UI              = $08;
  {$EXTERNALSYM FLAGS_ERROR_UI_SERIALIZE_DIALOGS}
  FLAGS_ERROR_UI_SERIALIZE_DIALOGS        = $10;

// If SERIALIZE_DIALOGS flag set, client should implement thread-safe non-blocking callback...

{$EXTERNALSYM InternetAuthNotifyCallback}
function InternetAuthNotifyCallback(dwContext: DWORD_PTR; dwReturn: DWORD;
  lpReserved: Pointer): DWORD; stdcall;

type
  {$EXTERNALSYM PFN_AUTH_NOTIFY}
  PFN_AUTH_NOTIFY = function(dwContext: DWORD_PTR; dwReturn: DWORD;
    lpReserved: Pointer): DWORD stdcall;
  PFNAuthNotify = PFN_AUTH_NOTIFY;

//
// ... and last parameter of InternetErrorDlg should point to...
//

type
  PInternetAuthNotifyData = ^TInternetAuthNotifyData;
  {$EXTERNALSYM INTERNET_AUTH_NOTIFY_DATA}
  INTERNET_AUTH_NOTIFY_DATA = record
    cbStruct: DWORD;    // size of this structure
    dwOptions: DWORD;   // reserved: must set to 0
    pfnNotify: PFNAuthNotify;  // notification callback to retry InternetErrorDlg
    dwContext: DWORD_PTR;  // context to pass to to notification function
  end;
  TInternetAuthNotifyData = INTERNET_AUTH_NOTIFY_DATA;

{$EXTERNALSYM ResumeSuspendedDownload}
function ResumeSuspendedDownload(hRequest: HINTERNET;
  dwResultCode: DWORD): BOOL; stdcall;


{$EXTERNALSYM InternetErrorDlg}
function InternetErrorDlg(hWnd: HWND; hRequest: HINTERNET;
  dwError, dwFlags: DWORD; var lppvData: Pointer): DWORD; stdcall;

{$EXTERNALSYM InternetConfirmZoneCrossingA}
function InternetConfirmZoneCrossingA(hWnd: HWND; szUrlPrev, szUrlNew: PAnsiChar;
  bPost: BOOL): DWORD; stdcall;
{$EXTERNALSYM InternetConfirmZoneCrossingW}
function InternetConfirmZoneCrossingW(hWnd: HWND; szUrlPrev, szUrlNew: PWideChar;
  bPost: BOOL): DWORD; stdcall;
{$EXTERNALSYM InternetConfirmZoneCrossing}
function InternetConfirmZoneCrossing(hWnd: HWND; szUrlPrev, szUrlNew: PChar;
  bPost: BOOL): DWORD; stdcall;

//
// Internet API error returns
//

const
  {$EXTERNALSYM INTERNET_ERROR_BASE}
  INTERNET_ERROR_BASE                     = 12000;

  {$EXTERNALSYM ERROR_INTERNET_OUT_OF_HANDLES}
  ERROR_INTERNET_OUT_OF_HANDLES           = INTERNET_ERROR_BASE + 1;
  {$EXTERNALSYM ERROR_INTERNET_TIMEOUT}
  ERROR_INTERNET_TIMEOUT                  = INTERNET_ERROR_BASE + 2;
  {$EXTERNALSYM ERROR_INTERNET_EXTENDED_ERROR}
  ERROR_INTERNET_EXTENDED_ERROR           = INTERNET_ERROR_BASE + 3;
  {$EXTERNALSYM ERROR_INTERNET_INTERNAL_ERROR}
  ERROR_INTERNET_INTERNAL_ERROR           = INTERNET_ERROR_BASE + 4;
  {$EXTERNALSYM ERROR_INTERNET_INVALID_URL}
  ERROR_INTERNET_INVALID_URL              = INTERNET_ERROR_BASE + 5;
  {$EXTERNALSYM ERROR_INTERNET_UNRECOGNIZED_SCHEME}
  ERROR_INTERNET_UNRECOGNIZED_SCHEME      = INTERNET_ERROR_BASE + 6;
  {$EXTERNALSYM ERROR_INTERNET_NAME_NOT_RESOLVED}
  ERROR_INTERNET_NAME_NOT_RESOLVED        = INTERNET_ERROR_BASE + 7;
  {$EXTERNALSYM ERROR_INTERNET_PROTOCOL_NOT_FOUND}
  ERROR_INTERNET_PROTOCOL_NOT_FOUND       = INTERNET_ERROR_BASE + 8;
  {$EXTERNALSYM ERROR_INTERNET_INVALID_OPTION}
  ERROR_INTERNET_INVALID_OPTION           = INTERNET_ERROR_BASE + 9;
  {$EXTERNALSYM ERROR_INTERNET_BAD_OPTION_LENGTH}
  ERROR_INTERNET_BAD_OPTION_LENGTH        = INTERNET_ERROR_BASE + 10;
  {$EXTERNALSYM ERROR_INTERNET_OPTION_NOT_SETTABLE}
  ERROR_INTERNET_OPTION_NOT_SETTABLE      = INTERNET_ERROR_BASE + 11;
  {$EXTERNALSYM ERROR_INTERNET_SHUTDOWN}
  ERROR_INTERNET_SHUTDOWN                 = INTERNET_ERROR_BASE + 12;
  {$EXTERNALSYM ERROR_INTERNET_INCORRECT_USER_NAME}
  ERROR_INTERNET_INCORRECT_USER_NAME      = INTERNET_ERROR_BASE + 13;
  {$EXTERNALSYM ERROR_INTERNET_INCORRECT_PASSWORD}
  ERROR_INTERNET_INCORRECT_PASSWORD       = INTERNET_ERROR_BASE + 14;
  {$EXTERNALSYM ERROR_INTERNET_LOGIN_FAILURE}
  ERROR_INTERNET_LOGIN_FAILURE            = INTERNET_ERROR_BASE + 15;
  {$EXTERNALSYM ERROR_INTERNET_INVALID_OPERATION}
  ERROR_INTERNET_INVALID_OPERATION        = INTERNET_ERROR_BASE + 16;
  {$EXTERNALSYM ERROR_INTERNET_OPERATION_CANCELLED}
  ERROR_INTERNET_OPERATION_CANCELLED      = INTERNET_ERROR_BASE + 17;
  {$EXTERNALSYM ERROR_INTERNET_INCORRECT_HANDLE_TYPE}
  ERROR_INTERNET_INCORRECT_HANDLE_TYPE    = INTERNET_ERROR_BASE + 18;
  {$EXTERNALSYM ERROR_INTERNET_INCORRECT_HANDLE_STATE}
  ERROR_INTERNET_INCORRECT_HANDLE_STATE   = INTERNET_ERROR_BASE + 19;
  {$EXTERNALSYM ERROR_INTERNET_NOT_PROXY_REQUEST}
  ERROR_INTERNET_NOT_PROXY_REQUEST        = INTERNET_ERROR_BASE + 20;
  {$EXTERNALSYM ERROR_INTERNET_REGISTRY_VALUE_NOT_FOUND}
  ERROR_INTERNET_REGISTRY_VALUE_NOT_FOUND = INTERNET_ERROR_BASE + 21;
  {$EXTERNALSYM ERROR_INTERNET_BAD_REGISTRY_PARAMETER}
  ERROR_INTERNET_BAD_REGISTRY_PARAMETER   = INTERNET_ERROR_BASE + 22;
  {$EXTERNALSYM ERROR_INTERNET_NO_DIRECT_ACCESS}
  ERROR_INTERNET_NO_DIRECT_ACCESS         = INTERNET_ERROR_BASE + 23;
  {$EXTERNALSYM ERROR_INTERNET_NO_CONTEXT}
  ERROR_INTERNET_NO_CONTEXT               = INTERNET_ERROR_BASE + 24;
  {$EXTERNALSYM ERROR_INTERNET_NO_CALLBACK}
  ERROR_INTERNET_NO_CALLBACK              = INTERNET_ERROR_BASE + 25;
  {$EXTERNALSYM ERROR_INTERNET_REQUEST_PENDING}
  ERROR_INTERNET_REQUEST_PENDING          = INTERNET_ERROR_BASE + 26;
  {$EXTERNALSYM ERROR_INTERNET_INCORRECT_FORMAT}
  ERROR_INTERNET_INCORRECT_FORMAT         = INTERNET_ERROR_BASE + 27;
  {$EXTERNALSYM ERROR_INTERNET_ITEM_NOT_FOUND}
  ERROR_INTERNET_ITEM_NOT_FOUND           = INTERNET_ERROR_BASE + 28;
  {$EXTERNALSYM ERROR_INTERNET_CANNOT_CONNECT}
  ERROR_INTERNET_CANNOT_CONNECT           = INTERNET_ERROR_BASE + 29;
  {$EXTERNALSYM ERROR_INTERNET_CONNECTION_ABORTED}
  ERROR_INTERNET_CONNECTION_ABORTED       = INTERNET_ERROR_BASE + 30;
  {$EXTERNALSYM ERROR_INTERNET_CONNECTION_RESET}
  ERROR_INTERNET_CONNECTION_RESET         = INTERNET_ERROR_BASE + 31;
  {$EXTERNALSYM ERROR_INTERNET_FORCE_RETRY}
  ERROR_INTERNET_FORCE_RETRY              = INTERNET_ERROR_BASE + 32;
  {$EXTERNALSYM ERROR_INTERNET_INVALID_PROXY_REQUEST}
  ERROR_INTERNET_INVALID_PROXY_REQUEST    = INTERNET_ERROR_BASE + 33;
  {$EXTERNALSYM ERROR_INTERNET_NEED_UI}
  ERROR_INTERNET_NEED_UI                  = INTERNET_ERROR_BASE + 34;

  {$EXTERNALSYM ERROR_INTERNET_HANDLE_EXISTS}
  ERROR_INTERNET_HANDLE_EXISTS            = INTERNET_ERROR_BASE + 36;
  {$EXTERNALSYM ERROR_INTERNET_SEC_CERT_DATE_INVALID}
  ERROR_INTERNET_SEC_CERT_DATE_INVALID    = INTERNET_ERROR_BASE + 37;
  {$EXTERNALSYM ERROR_INTERNET_SEC_CERT_CN_INVALID}
  ERROR_INTERNET_SEC_CERT_CN_INVALID      = INTERNET_ERROR_BASE + 38;
  {$EXTERNALSYM ERROR_INTERNET_HTTP_TO_HTTPS_ON_REDIR}
  ERROR_INTERNET_HTTP_TO_HTTPS_ON_REDIR   = INTERNET_ERROR_BASE + 39;
  {$EXTERNALSYM ERROR_INTERNET_HTTPS_TO_HTTP_ON_REDIR}
  ERROR_INTERNET_HTTPS_TO_HTTP_ON_REDIR   = INTERNET_ERROR_BASE + 40;
  {$EXTERNALSYM ERROR_INTERNET_MIXED_SECURITY}
  ERROR_INTERNET_MIXED_SECURITY           = INTERNET_ERROR_BASE + 41;
  {$EXTERNALSYM ERROR_INTERNET_CHG_POST_IS_NON_SECURE}
  ERROR_INTERNET_CHG_POST_IS_NON_SECURE   = INTERNET_ERROR_BASE + 42;
  {$EXTERNALSYM ERROR_INTERNET_POST_IS_NON_SECURE}
  ERROR_INTERNET_POST_IS_NON_SECURE       = INTERNET_ERROR_BASE + 43;
  {$EXTERNALSYM ERROR_INTERNET_CLIENT_AUTH_CERT_NEEDED}
  ERROR_INTERNET_CLIENT_AUTH_CERT_NEEDED  = INTERNET_ERROR_BASE + 44;
  {$EXTERNALSYM ERROR_INTERNET_INVALID_CA}
  ERROR_INTERNET_INVALID_CA               = INTERNET_ERROR_BASE + 45;
  {$EXTERNALSYM ERROR_INTERNET_CLIENT_AUTH_NOT_SETUP}
  ERROR_INTERNET_CLIENT_AUTH_NOT_SETUP    = INTERNET_ERROR_BASE + 46;
  {$EXTERNALSYM ERROR_INTERNET_ASYNC_THREAD_FAILED}
  ERROR_INTERNET_ASYNC_THREAD_FAILED      = INTERNET_ERROR_BASE + 47;
  {$EXTERNALSYM ERROR_INTERNET_REDIRECT_SCHEME_CHANGE}
  ERROR_INTERNET_REDIRECT_SCHEME_CHANGE   = INTERNET_ERROR_BASE + 48;
  {$EXTERNALSYM ERROR_INTERNET_DIALOG_PENDING}
  ERROR_INTERNET_DIALOG_PENDING           = INTERNET_ERROR_BASE + 49;
  {$EXTERNALSYM ERROR_INTERNET_RETRY_DIALOG}
  ERROR_INTERNET_RETRY_DIALOG             = INTERNET_ERROR_BASE + 50;
  {$EXTERNALSYM ERROR_INTERNET_HTTPS_HTTP_SUBMIT_REDIR}
  ERROR_INTERNET_HTTPS_HTTP_SUBMIT_REDIR  = INTERNET_ERROR_BASE + 52;
  {$EXTERNALSYM ERROR_INTERNET_INSERT_CDROM}
  ERROR_INTERNET_INSERT_CDROM             = INTERNET_ERROR_BASE + 53;
  {$EXTERNALSYM ERROR_INTERNET_FORTEZZA_LOGIN_NEEDED}
  ERROR_INTERNET_FORTEZZA_LOGIN_NEEDED    = INTERNET_ERROR_BASE + 54;
  {$EXTERNALSYM ERROR_INTERNET_SEC_CERT_ERRORS}
  ERROR_INTERNET_SEC_CERT_ERRORS          = INTERNET_ERROR_BASE + 55;
  {$EXTERNALSYM ERROR_INTERNET_SEC_CERT_NO_REV}
  ERROR_INTERNET_SEC_CERT_NO_REV          = INTERNET_ERROR_BASE + 56;
  {$EXTERNALSYM ERROR_INTERNET_SEC_CERT_REV_FAILED}
  ERROR_INTERNET_SEC_CERT_REV_FAILED      = INTERNET_ERROR_BASE + 57;


// FTP API errors

  {$EXTERNALSYM ERROR_FTP_TRANSFER_IN_PROGRESS}
  ERROR_FTP_TRANSFER_IN_PROGRESS          = INTERNET_ERROR_BASE + 110;
  {$EXTERNALSYM ERROR_FTP_DROPPED}
  ERROR_FTP_DROPPED                       = INTERNET_ERROR_BASE + 111;
  {$EXTERNALSYM ERROR_FTP_NO_PASSIVE_MODE}
  ERROR_FTP_NO_PASSIVE_MODE               = INTERNET_ERROR_BASE + 112;

  // gopher API errors

  {$EXTERNALSYM ERROR_GOPHER_PROTOCOL_ERROR}
  ERROR_GOPHER_PROTOCOL_ERROR             = INTERNET_ERROR_BASE + 130;
  {$EXTERNALSYM ERROR_GOPHER_NOT_FILE}
  ERROR_GOPHER_NOT_FILE                   = INTERNET_ERROR_BASE + 131;
  {$EXTERNALSYM ERROR_GOPHER_DATA_ERROR}
  ERROR_GOPHER_DATA_ERROR                 = INTERNET_ERROR_BASE + 132;
  {$EXTERNALSYM ERROR_GOPHER_END_OF_DATA}
  ERROR_GOPHER_END_OF_DATA                = INTERNET_ERROR_BASE + 133;
  {$EXTERNALSYM ERROR_GOPHER_INVALID_LOCATOR}
  ERROR_GOPHER_INVALID_LOCATOR            = INTERNET_ERROR_BASE + 134;
  {$EXTERNALSYM ERROR_GOPHER_INCORRECT_LOCATOR_TYPE}
  ERROR_GOPHER_INCORRECT_LOCATOR_TYPE     = INTERNET_ERROR_BASE + 135;
  {$EXTERNALSYM ERROR_GOPHER_NOT_GOPHER_PLUS}
  ERROR_GOPHER_NOT_GOPHER_PLUS            = INTERNET_ERROR_BASE + 136;
  {$EXTERNALSYM ERROR_GOPHER_ATTRIBUTE_NOT_FOUND}
  ERROR_GOPHER_ATTRIBUTE_NOT_FOUND        = INTERNET_ERROR_BASE + 137;
  {$EXTERNALSYM ERROR_GOPHER_UNKNOWN_LOCATOR}
  ERROR_GOPHER_UNKNOWN_LOCATOR            = INTERNET_ERROR_BASE + 138;

  // HTTP API errors

  {$EXTERNALSYM ERROR_HTTP_HEADER_NOT_FOUND}
  ERROR_HTTP_HEADER_NOT_FOUND             = INTERNET_ERROR_BASE + 150;
  {$EXTERNALSYM ERROR_HTTP_DOWNLEVEL_SERVER}
  ERROR_HTTP_DOWNLEVEL_SERVER             = INTERNET_ERROR_BASE + 151;
  {$EXTERNALSYM ERROR_HTTP_INVALID_SERVER_RESPONSE}
  ERROR_HTTP_INVALID_SERVER_RESPONSE      = INTERNET_ERROR_BASE + 152;
  {$EXTERNALSYM ERROR_HTTP_INVALID_HEADER}
  ERROR_HTTP_INVALID_HEADER               = INTERNET_ERROR_BASE + 153;
  {$EXTERNALSYM ERROR_HTTP_INVALID_QUERY_REQUEST}
  ERROR_HTTP_INVALID_QUERY_REQUEST        = INTERNET_ERROR_BASE + 154;
  {$EXTERNALSYM ERROR_HTTP_HEADER_ALREADY_EXISTS}
  ERROR_HTTP_HEADER_ALREADY_EXISTS        = INTERNET_ERROR_BASE + 155;
  {$EXTERNALSYM ERROR_HTTP_REDIRECT_FAILED}
  ERROR_HTTP_REDIRECT_FAILED              = INTERNET_ERROR_BASE + 156;
  {$EXTERNALSYM ERROR_HTTP_NOT_REDIRECTED}
  ERROR_HTTP_NOT_REDIRECTED               = INTERNET_ERROR_BASE + 160;
  {$EXTERNALSYM ERROR_HTTP_COOKIE_NEEDS_CONFIRMATION}
  ERROR_HTTP_COOKIE_NEEDS_CONFIRMATION    = INTERNET_ERROR_BASE + 161;
  {$EXTERNALSYM ERROR_HTTP_COOKIE_DECLINED}
  ERROR_HTTP_COOKIE_DECLINED              = INTERNET_ERROR_BASE + 162;
  {$EXTERNALSYM ERROR_HTTP_REDIRECT_NEEDS_CONFIRMATION}
  ERROR_HTTP_REDIRECT_NEEDS_CONFIRMATION  = INTERNET_ERROR_BASE + 168;

  // additional Internet API error codes

  {$EXTERNALSYM ERROR_INTERNET_SECURITY_CHANNEL_ERROR}
  ERROR_INTERNET_SECURITY_CHANNEL_ERROR   = INTERNET_ERROR_BASE + 157;
  {$EXTERNALSYM ERROR_INTERNET_UNABLE_TO_CACHE_FILE}
  ERROR_INTERNET_UNABLE_TO_CACHE_FILE     = INTERNET_ERROR_BASE + 158;
  {$EXTERNALSYM ERROR_INTERNET_TCPIP_NOT_INSTALLED}
  ERROR_INTERNET_TCPIP_NOT_INSTALLED      = INTERNET_ERROR_BASE + 159;
  {$EXTERNALSYM ERROR_INTERNET_DISCONNECTED}
  ERROR_INTERNET_DISCONNECTED             = INTERNET_ERROR_BASE + 163;
  {$EXTERNALSYM ERROR_INTERNET_SERVER_UNREACHABLE}
  ERROR_INTERNET_SERVER_UNREACHABLE       = INTERNET_ERROR_BASE + 164;
  {$EXTERNALSYM ERROR_INTERNET_PROXY_SERVER_UNREACHABLE}
  ERROR_INTERNET_PROXY_SERVER_UNREACHABLE = INTERNET_ERROR_BASE + 165;

  {$EXTERNALSYM ERROR_INTERNET_BAD_AUTO_PROXY_SCRIPT}
  ERROR_INTERNET_BAD_AUTO_PROXY_SCRIPT    = INTERNET_ERROR_BASE + 166;
  {$EXTERNALSYM ERROR_INTERNET_UNABLE_TO_DOWNLOAD_SCRIPT}
  ERROR_INTERNET_UNABLE_TO_DOWNLOAD_SCRIPT = INTERNET_ERROR_BASE + 167;
  {$EXTERNALSYM ERROR_INTERNET_SEC_INVALID_CERT}
  ERROR_INTERNET_SEC_INVALID_CERT         = INTERNET_ERROR_BASE + 169;
  {$EXTERNALSYM ERROR_INTERNET_SEC_CERT_REVOKED}
  ERROR_INTERNET_SEC_CERT_REVOKED         = INTERNET_ERROR_BASE + 170;

// InternetAutodial specific errors

  {$EXTERNALSYM ERROR_INTERNET_FAILED_DUETOSECURITYCHECK}
  ERROR_INTERNET_FAILED_DUETOSECURITYCHECK = INTERNET_ERROR_BASE + 171;
  {$EXTERNALSYM ERROR_INTERNET_NOT_INITIALIZED}
  ERROR_INTERNET_NOT_INITIALIZED          = INTERNET_ERROR_BASE + 172;
  {$EXTERNALSYM ERROR_INTERNET_NEED_MSN_SSPI_PKG}
  ERROR_INTERNET_NEED_MSN_SSPI_PKG        = INTERNET_ERROR_BASE + 173;
  {$EXTERNALSYM ERROR_INTERNET_LOGIN_FAILURE_DISPLAY_ENTITY_BODY}
  ERROR_INTERNET_LOGIN_FAILURE_DISPLAY_ENTITY_BODY = INTERNET_ERROR_BASE + 174;

  {$EXTERNALSYM INTERNET_ERROR_LAST}
  INTERNET_ERROR_LAST = ERROR_INTERNET_LOGIN_FAILURE_DISPLAY_ENTITY_BODY;



//
// URLCACHE APIs
//

// datatype definitions.

// cache entry type flags.

  {$EXTERNALSYM NORMAL_CACHE_ENTRY}
  NORMAL_CACHE_ENTRY              = $00000001;
  {$EXTERNALSYM STICKY_CACHE_ENTRY}
  STICKY_CACHE_ENTRY              = $00000004;
  {$EXTERNALSYM EDITED_CACHE_ENTRY}
  EDITED_CACHE_ENTRY              = $00000008;
  {$EXTERNALSYM TRACK_OFFLINE_CACHE_ENTRY}
  TRACK_OFFLINE_CACHE_ENTRY       = $00000010;
  {$EXTERNALSYM TRACK_ONLINE_CACHE_ENTRY}
  TRACK_ONLINE_CACHE_ENTRY        = $00000020;
  {$EXTERNALSYM COOKIE_CACHE_ENTRY}
  COOKIE_CACHE_ENTRY              = $00100000;
  {$EXTERNALSYM URLHISTORY_CACHE_ENTRY}
  URLHISTORY_CACHE_ENTRY          = $00200000;
  {$EXTERNALSYM SPARSE_CACHE_ENTRY}
  SPARSE_CACHE_ENTRY              = $00010000;

  {$EXTERNALSYM URLCACHE_FIND_DEFAULT_FILTER}
  URLCACHE_FIND_DEFAULT_FILTER    = NORMAL_CACHE_ENTRY or
                                    COOKIE_CACHE_ENTRY or
                                    URLHISTORY_CACHE_ENTRY or
                                    TRACK_OFFLINE_CACHE_ENTRY or
                                    TRACK_ONLINE_CACHE_ENTRY or
                                    STICKY_CACHE_ENTRY;

type

  PInternetCacheEntryInfoA = ^TInternetCacheEntryInfoA;
  PInternetCacheEntryInfoW = ^TInternetCacheEntryInfoW;
  PInternetCacheEntryInfo = PInternetCacheEntryInfoA;
  {$EXTERNALSYM _INTERNET_CACHE_ENTRY_INFOA}
  _INTERNET_CACHE_ENTRY_INFOA = record
    dwStructSize: DWORD;          // version of cache system.
    lpszSourceUrlName: PAnsiChar; // embedded pointer to the URL name string.
    lpszLocalFileName: PAnsiChar; // embedded pointer to the local file name.
    CacheEntryType: DWORD;        // cache type bit mask.
    dwUseCount: DWORD;            // current users count of the cache entry.
    dwHitRate: DWORD;             // num of times the cache entry was retrieved.
    dwSizeLow: DWORD;             // low DWORD of the file size.
    dwSizeHigh: DWORD;            // high DWORD of the file size.
    LastModifiedTime: TFileTime;  // last modified time of the file in GMT format.
    ExpireTime: TFileTime;        // expire time of the file in GMT format
    LastAccessTime: TFileTime;    // last accessed time in GMT format
    LastSyncTime: TFileTime;      // last time the URL was synchronized
                                  // with the source
    lpHeaderInfo: PByte;          // embedded pointer to the header info.
    dwHeaderInfoSiz: DWORD;       // size of the above header.
    lpszFileExtension: PAnsiChar;    // File extension used to retrive the urldata as a file.
    case Integer of
      1: (dwReserved: DWORD);
      2: (dwExemptDelta: DWORD);  // Exemption delta from last access time.
  end;
  {$EXTERNALSYM _INTERNET_CACHE_ENTRY_INFOW}
  _INTERNET_CACHE_ENTRY_INFOW = record
    dwStructSize: DWORD;          // version of cache system.
    lpszSourceUrlName: PWideChar; // embedded pointer to the URL name string.
    lpszLocalFileName: PWideChar; // embedded pointer to the local file name.
    CacheEntryType: DWORD;        // cache type bit mask.
    dwUseCount: DWORD;            // current users count of the cache entry.
    dwHitRate: DWORD;             // num of times the cache entry was retrieved.
    dwSizeLow: DWORD;             // low DWORD of the file size.
    dwSizeHigh: DWORD;            // high DWORD of the file size.
    LastModifiedTime: TFileTime;  // last modified time of the file in GMT format.
    ExpireTime: TFileTime;        // expire time of the file in GMT format
    LastAccessTime: TFileTime;    // last accessed time in GMT format
    LastSyncTime: TFileTime;      // last time the URL was synchronized
                                  // with the source
    lpHeaderInfo: PByte;          // embedded pointer to the header info.
    dwHeaderInfoSiz: DWORD;       // size of the above header.
    lpszFileExtension: PWideChar;    // File extension used to retrive the urldata as a file.
    case Integer of
      1: (dwReserved: DWORD);
      2: (dwExemptDelta: DWORD);  // Exemption delta from last access time.
  end;
  {$EXTERNALSYM _INTERNET_CACHE_ENTRY_INFO}
  _INTERNET_CACHE_ENTRY_INFO = _INTERNET_CACHE_ENTRY_INFOA;
  {$EXTERNALSYM INTERNET_CACHE_ENTRY_INFOA}
  INTERNET_CACHE_ENTRY_INFOA = _INTERNET_CACHE_ENTRY_INFOA;
  {$EXTERNALSYM INTERNET_CACHE_ENTRY_INFOW}
  INTERNET_CACHE_ENTRY_INFOW = _INTERNET_CACHE_ENTRY_INFOW;
  {$EXTERNALSYM INTERNET_CACHE_ENTRY_INFO}
  INTERNET_CACHE_ENTRY_INFO = INTERNET_CACHE_ENTRY_INFOA;
  TInternetCacheEntryInfoA = _INTERNET_CACHE_ENTRY_INFOA;
  TInternetCacheEntryInfoW = _INTERNET_CACHE_ENTRY_INFOW;
  TInternetCacheEntryInfo = TInternetCacheEntryInfoA;

type
  PInternetCacheTimeStamps = ^TInternetCacheTimeStamps;
  {$EXTERNALSYM _INTERNET_CACHE_TIMESTAMPS}
  _INTERNET_CACHE_TIMESTAMPS = record
    ftExpires: TFileTime;
    ftLastModified: TFileTime;
  end;
  {$EXTERNALSYM INTERNET_CACHE_TIMESTAMPS}
  INTERNET_CACHE_TIMESTAMPS = _INTERNET_CACHE_TIMESTAMPS;
  TInternetCacheTimeStamps = _INTERNET_CACHE_TIMESTAMPS;


//
// Cache Group
//
type
  {$EXTERNALSYM GROUPID}
  GROUPID = Int64;
  TGroupID = GROUPID;

//
// Cache Group Flags
//
const
  {$EXTERNALSYM CACHEGROUP_ATTRIBUTE_GET_ALL}
  CACHEGROUP_ATTRIBUTE_GET_ALL      = $FFFFFFFF;
  {$EXTERNALSYM CACHEGROUP_ATTRIBUTE_BASIC}
  CACHEGROUP_ATTRIBUTE_BASIC        = $00000001;
  {$EXTERNALSYM CACHEGROUP_ATTRIBUTE_FLAG}
  CACHEGROUP_ATTRIBUTE_FLAG         = $00000002;
  {$EXTERNALSYM CACHEGROUP_ATTRIBUTE_TYPE}
  CACHEGROUP_ATTRIBUTE_TYPE         = $00000004;
  {$EXTERNALSYM CACHEGROUP_ATTRIBUTE_QUOTA}
  CACHEGROUP_ATTRIBUTE_QUOTA        = $00000008;
  {$EXTERNALSYM CACHEGROUP_ATTRIBUTE_GROUPNAME}
  CACHEGROUP_ATTRIBUTE_GROUPNAME    = $00000010;
  {$EXTERNALSYM CACHEGROUP_ATTRIBUTE_STORAGE}
  CACHEGROUP_ATTRIBUTE_STORAGE      = $00000020;

  {$EXTERNALSYM CACHEGROUP_FLAG_NONPURGEABLE}
  CACHEGROUP_FLAG_NONPURGEABLE      = $00000001;
  {$EXTERNALSYM CACHEGROUP_FLAG_GIDONLY}
  CACHEGROUP_FLAG_GIDONLY           = $00000004;

  {$EXTERNALSYM CACHEGROUP_FLAG_FLUSHURL_ONDELETE}
  CACHEGROUP_FLAG_FLUSHURL_ONDELETE = $00000002;

  {$EXTERNALSYM CACHEGROUP_SEARCH_ALL}
  CACHEGROUP_SEARCH_ALL             = $00000000;
  {$EXTERNALSYM CACHEGROUP_SEARCH_BYURL}
  CACHEGROUP_SEARCH_BYURL           = $00000001;

  {$EXTERNALSYM CACHEGROUP_TYPE_INVALID}
  CACHEGROUP_TYPE_INVALID           = $00000001;


//
// updatable cache group fields
//

  {$EXTERNALSYM CACHEGROUP_READWRITE_MASK}
  CACHEGROUP_READWRITE_MASK = CACHEGROUP_ATTRIBUTE_TYPE or
                              CACHEGROUP_ATTRIBUTE_QUOTA or
                              CACHEGROUP_ATTRIBUTE_GROUPNAME or
                              CACHEGROUP_ATTRIBUTE_STORAGE;

//
// INTERNET_CACHE_GROUP_INFO
//

  {$EXTERNALSYM GROUPNAME_MAX_LENGTH}
  GROUPNAME_MAX_LENGTH     = 120;
  {$EXTERNALSYM GROUP_OWNER_STORAGE_SIZE}
  GROUP_OWNER_STORAGE_SIZE = 4;

type
  PInternetCacheGroupInfoA = ^TInternetCacheGroupInfoA;
  PInternetCacheGroupInfoW = ^TInternetCacheGroupInfoW;
  PInternetCacheGroupInfo = PInternetCacheGroupInfoA;
  {$EXTERNALSYM _INTERNET_CACHE_GROUP_INFOA}
  _INTERNET_CACHE_GROUP_INFOA = record
    dwGroupSize: DWORD;
    dwGroupFlags: DWORD;
    dwGroupType: DWORD;
    dwDiskUsage: DWORD;    // in KB
    dwDiskQuota: DWORD;    // in KB
    dwOwnerStorage: array[0..GROUP_OWNER_STORAGE_SIZE - 1] of DWORD;
    szGroupName: array[0..GROUPNAME_MAX_LENGTH - 1] of AnsiChar;
  end;
  {$EXTERNALSYM _INTERNET_CACHE_GROUP_INFOW}
  _INTERNET_CACHE_GROUP_INFOW = record
    dwGroupSize: DWORD;
    dwGroupFlags: DWORD;
    dwGroupType: DWORD;
    dwDiskUsage: DWORD;    // in KB
    dwDiskQuota: DWORD;    // in KB
    dwOwnerStorage: array[0..GROUP_OWNER_STORAGE_SIZE - 1] of DWORD;
    szGroupName: array[0..GROUPNAME_MAX_LENGTH - 1] of WideChar;
  end;
  {$EXTERNALSYM _INTERNET_CACHE_GROUP_INFO}
  _INTERNET_CACHE_GROUP_INFO = _INTERNET_CACHE_GROUP_INFOA;
  {$EXTERNALSYM INTERNET_CACHE_GROUP_INFOA}
  INTERNET_CACHE_GROUP_INFOA = _INTERNET_CACHE_GROUP_INFOA;
  {$EXTERNALSYM INTERNET_CACHE_GROUP_INFOW}
  INTERNET_CACHE_GROUP_INFOW = _INTERNET_CACHE_GROUP_INFOW;
  {$EXTERNALSYM INTERNET_CACHE_GROUP_INFO}
  INTERNET_CACHE_GROUP_INFO = INTERNET_CACHE_GROUP_INFOA;
  TInternetCacheGroupInfoA = _INTERNET_CACHE_GROUP_INFOA;
  TInternetCacheGroupInfoW = _INTERNET_CACHE_GROUP_INFOW;
  TInternetCacheGroupInfo = TInternetCacheGroupInfoA;

//
// Cache APIs
//

{$EXTERNALSYM CreateUrlCacheEntryA}
function CreateUrlCacheEntryA(lpszUrlName: PAnsiChar; dwExpectedFileSize: DWORD;
 lpszFileExtension: PAnsiChar; lpszFileName: PAnsiChar; dwReserved: DWORD): BOOL; stdcall;
{$EXTERNALSYM CreateUrlCacheEntryW}
function CreateUrlCacheEntryW(lpszUrlName: PWideChar; dwExpectedFileSize: DWORD;
 lpszFileExtension: PWideChar; lpszFileName: PWideChar; dwReserved: DWORD): BOOL; stdcall;
{$EXTERNALSYM CreateUrlCacheEntry}
function CreateUrlCacheEntry(lpszUrlName: PChar; dwExpectedFileSize: DWORD;
 lpszFileExtension: PChar; lpszFileName: PChar; dwReserved: DWORD): BOOL; stdcall;

// Temporary state of affairs until we reconcile our apis.

// Why are we doing this? HeaderInfo _should_ be string data.
// However, one group is passing binary data instead. For the
// unicode api, we've decided to disallow this, but this
// brings up an inconsistency between the u and a apis, which
// is undesirable.

// For Beta 1, we'll go with this behaviour, but in future releases
// we want to make these apis consistent.

{$EXTERNALSYM CommitUrlCacheEntryA}
function CommitUrlCacheEntryA(lpszUrlName, lpszLocalFileName: PAnsiChar;
  ExpireTime, LastModifiedTime: TFileTime; CacheEntryType: DWORD;
  lpHeaderInfo: PByte; dwHeaderSize: DWORD; lpszFileExtension: PAnsiChar;
  lpszOriginalUrl: PAnsiChar): BOOL; stdcall;
{$EXTERNALSYM CommitUrlCacheEntryW}
function CommitUrlCacheEntryW(lpszUrlName, lpszLocalFileName: PWideChar;
  ExpireTime, LastModifiedTime: TFileTime; CacheEntryType: DWORD;
  lpHeaderInfo: PByte; dwHeaderSize: DWORD; lpszFileExtension: PWideChar;
  lpszOriginalUrl: PWideChar): BOOL; stdcall;
{$EXTERNALSYM CommitUrlCacheEntry}
function CommitUrlCacheEntry(lpszUrlName, lpszLocalFileName: PChar;
  ExpireTime, LastModifiedTime: TFileTime; CacheEntryType: DWORD;
  lpHeaderInfo: PByte; dwHeaderSize: DWORD; lpszFileExtension: PChar;
  lpszOriginalUrl: PChar): BOOL; stdcall;

{$EXTERNALSYM RetrieveUrlCacheEntryFileA}
function RetrieveUrlCacheEntryFileA(lpszUrlName: PAnsiChar; lpCacheEntryInfo:
  PInternetCacheEntryInfoA; var lpdwCacheEntryInfoBufferSize: DWORD;
  dwReserved: DWORD): BOOL; stdcall;
{$EXTERNALSYM RetrieveUrlCacheEntryFileW}
function RetrieveUrlCacheEntryFileW(lpszUrlName: PAnsiChar; lpCacheEntryInfo:
  PInternetCacheEntryInfoW; var lpdwCacheEntryInfoBufferSize: DWORD;
  dwReserved: DWORD): BOOL; stdcall;
{$EXTERNALSYM RetrieveUrlCacheEntryFile}
function RetrieveUrlCacheEntryFile(lpszUrlName: PAnsiChar; lpCacheEntryInfo:
  PInternetCacheEntryInfo; var lpdwCacheEntryInfoBufferSize: DWORD;
  dwReserved: DWORD): BOOL; stdcall;

{$EXTERNALSYM UnlockUrlCacheEntryFileA}
function UnlockUrlCacheEntryFileA(lpszUrlName: PAnsiChar;
  dwReserved: DWORD): BOOL; stdcall;
{$EXTERNALSYM UnlockUrlCacheEntryFileW}
function UnlockUrlCacheEntryFileW(lpszUrlName: PWideChar;
  dwReserved: DWORD): BOOL; stdcall;
{$EXTERNALSYM UnlockUrlCacheEntryFile}
function UnlockUrlCacheEntryFile(lpszUrlName: PChar;
  dwReserved: DWORD): BOOL; stdcall;

{$EXTERNALSYM RetrieveUrlCacheEntryStreamA}
function RetrieveUrlCacheEntryStreamA(lpszUrlName: PAnsiChar; lpCacheEntryInfo:
  PInternetCacheEntryInfoA; var lpdwCacheEntryInfoBufferSize: DWORD;
  fRandomRead: BOOL; dwReserved: DWORD): THandle; stdcall;
{$EXTERNALSYM RetrieveUrlCacheEntryStreamW}
function RetrieveUrlCacheEntryStreamW(lpszUrlName: PWideChar; lpCacheEntryInfo:
  PInternetCacheEntryInfoW; var lpdwCacheEntryInfoBufferSize: DWORD;
  fRandomRead: BOOL; dwReserved: DWORD): THandle; stdcall;
{$EXTERNALSYM RetrieveUrlCacheEntryStream}
function RetrieveUrlCacheEntryStream(lpszUrlName: PChar; lpCacheEntryInfo:
  PInternetCacheEntryInfo; var lpdwCacheEntryInfoBufferSize: DWORD;
  fRandomRead: BOOL; dwReserved: DWORD): THandle; stdcall;

{$EXTERNALSYM ReadUrlCacheEntryStream}
function ReadUrlCacheEntryStream(hUrlCacheStream: THandle; dwLocation: DWORD;
  lpBuffer: Pointer; var lpdwLen: DWORD; Reserved: DWORD): BOOL; stdcall;
{$EXTERNALSYM UnlockUrlCacheEntryStream}
function UnlockUrlCacheEntryStream(hUrlCacheStream: THandle; Reserved: DWORD): BOOL; stdcall;

{$EXTERNALSYM GetUrlCacheEntryInfoA}
function GetUrlCacheEntryInfoA(lpszUrlName: PAnsiChar; lpCacheEntryInfo:
  PInternetCacheEntryInfoA; var lpdwCacheEntryInfoBufferSize: DWORD): BOOL; stdcall;
{$EXTERNALSYM GetUrlCacheEntryInfoW}
function GetUrlCacheEntryInfoW(lpszUrlName: PWideChar; lpCacheEntryInfo:
  PInternetCacheEntryInfoW; var lpdwCacheEntryInfoBufferSize: DWORD): BOOL; stdcall;
{$EXTERNALSYM GetUrlCacheEntryInfo}
function GetUrlCacheEntryInfo(lpszUrlName: PChar; lpCacheEntryInfo:
  PInternetCacheEntryInfo; var lpdwCacheEntryInfoBufferSize: DWORD): BOOL; stdcall;

//
// Cache Group Functions
//

{$EXTERNALSYM FindFirstUrlCacheGroup}
function FindFirstUrlCacheGroup(dwFlags, dwFilter: DWORD;
  lpSearchCondition: Pointer; dwSearchCondition: DWORD;
  var lpGroupId: GROUPID; lpReserved: Pointer): THandle; stdcall;

{$EXTERNALSYM FindNextUrlCacheGroup}
function FindNextUrlCacheGroup(hFind: THandle;
 var lpGroupId: GROUPID; lpReserved: Pointer): BOOL; stdcall;

{$EXTERNALSYM GetUrlCacheGroupAttributeA}
function GetUrlCacheGroupAttributeA(gid: GROUPID;
  dwFlags, dwAttributes: DWORD; var GroupInfo: TInternetCacheGroupInfoA;
  var dwGroupInfo: DWORD; lpReserved: Pointer): BOOL; stdcall;
{$EXTERNALSYM GetUrlCacheGroupAttributeW}
function GetUrlCacheGroupAttributeW(gid: GROUPID;
  dwFlags, dwAttributes: DWORD; var GroupInfo: TInternetCacheGroupInfoW;
  var dwGroupInfo: DWORD; lpReserved: Pointer): BOOL; stdcall;
{$EXTERNALSYM GetUrlCacheGroupAttribute}
function GetUrlCacheGroupAttribute(gid: GROUPID;
  dwFlags, dwAttributes: DWORD; var GroupInfo: TInternetCacheGroupInfo;
  var dwGroupInfo: DWORD; lpReserved: Pointer): BOOL; stdcall;

{$EXTERNALSYM SetUrlCacheGroupAttributeA}
function SetUrlCacheGroupAttributeA(gid: GROUPID;
  dwFlags, dwAttributes: DWORD;
  var lpGroupInfo: TInternetCacheGroupInfoA;
  lpReserved: Pointer): BOOL; stdcall;
{$EXTERNALSYM SetUrlCacheGroupAttributeW}
function SetUrlCacheGroupAttributeW(gid: GROUPID;
  dwFlags, dwAttributes: DWORD;
  var lpGroupInfo: TInternetCacheGroupInfoW;
  lpReserved: Pointer): BOOL; stdcall;
{$EXTERNALSYM SetUrlCacheGroupAttribute}
function SetUrlCacheGroupAttribute(gid: GROUPID;
  dwFlags, dwAttributes: DWORD;
  var lpGroupInfo: TInternetCacheGroupInfo;
  lpReserved: Pointer): BOOL; stdcall;

{$EXTERNALSYM CreateUrlCacheGroup}
function CreateUrlCacheGroup(dwFlags: DWORD;
  lpReserved: Pointer): GROUPID; stdcall;

{$EXTERNALSYM DeleteUrlCacheGroup}
function DeleteUrlCacheGroup(GroupId: GROUPID; dwFlags: DWORD;
  lpReserved: Pointer): BOOL; stdcall;

{$EXTERNALSYM GetUrlCacheEntryInfoExA}
function GetUrlCacheEntryInfoExA(lpszUrl: PAnsiChar; lpCacheEntryInfo:
  PInternetCacheEntryInfoA; var lpdwCacheEntryInfoBufSize: DWORD;
  lpszReserved: PAnsiChar; lpdwReserved: LPDWORD; lpReserved: Pointer;
  dwFlag: DWORD): BOOL; stdcall;
{$EXTERNALSYM GetUrlCacheEntryInfoExW}
function GetUrlCacheEntryInfoExW(lpszUrl: PWideChar; lpCacheEntryInfo:
  PInternetCacheEntryInfoW; var lpdwCacheEntryInfoBufSize: DWORD;
  lpszReserved: PWideChar; lpdwReserved: LPDWORD; lpReserved: Pointer;
  dwFlag: DWORD): BOOL; stdcall;
{$EXTERNALSYM GetUrlCacheEntryInfoEx}
function GetUrlCacheEntryInfoEx(lpszUrl: PChar; lpCacheEntryInfo:
  PInternetCacheEntryInfo; var lpdwCacheEntryInfoBufSize: DWORD;
  lpszReserved: PChar; lpdwReserved: LPDWORD; lpReserved: Pointer;
  dwFlag: DWORD): BOOL; stdcall;

const
  {$EXTERNALSYM CACHE_ENTRY_ATTRIBUTE_FC}
  CACHE_ENTRY_ATTRIBUTE_FC    = $00000004;
  {$EXTERNALSYM CACHE_ENTRY_HITRATE_FC}
  CACHE_ENTRY_HITRATE_FC      = $00000010;
  {$EXTERNALSYM CACHE_ENTRY_MODTIME_FC}
  CACHE_ENTRY_MODTIME_FC      = $00000040;
  {$EXTERNALSYM CACHE_ENTRY_EXPTIME_FC}
  CACHE_ENTRY_EXPTIME_FC      = $00000080;
  {$EXTERNALSYM CACHE_ENTRY_ACCTIME_FC}
  CACHE_ENTRY_ACCTIME_FC      = $00000100;
  {$EXTERNALSYM CACHE_ENTRY_SYNCTIME_FC}
  CACHE_ENTRY_SYNCTIME_FC     = $00000200;
  {$EXTERNALSYM CACHE_ENTRY_HEADERINFO_FC}
  CACHE_ENTRY_HEADERINFO_FC   = $00000400;
  {$EXTERNALSYM CACHE_ENTRY_EXEMPT_DELTA_FC}
  CACHE_ENTRY_EXEMPT_DELTA_FC = $00000800;


{$EXTERNALSYM SetUrlCacheEntryInfoA}
function SetUrlCacheEntryInfoA(lpszUrlName: PAnsiChar; lpCacheEntryInfo:
  PInternetCacheEntryInfoA; dwFieldControl: DWORD): BOOL; stdcall;
{$EXTERNALSYM SetUrlCacheEntryInfoW}
function SetUrlCacheEntryInfoW(lpszUrlName: PWideChar; lpCacheEntryInfo:
  PInternetCacheEntryInfoW; dwFieldControl: DWORD): BOOL; stdcall;
{$EXTERNALSYM SetUrlCacheEntryInfo}
function SetUrlCacheEntryInfo(lpszUrlName: PChar; lpCacheEntryInfo:
  PInternetCacheEntryInfo; dwFieldControl: DWORD): BOOL; stdcall;

// Flags for SetUrlCacheEntryGroup
const
  {$EXTERNALSYM INTERNET_CACHE_GROUP_ADD}
  INTERNET_CACHE_GROUP_ADD      = 0;
  {$EXTERNALSYM INTERNET_CACHE_GROUP_REMOVE}
  INTERNET_CACHE_GROUP_REMOVE   = 1;

{$EXTERNALSYM SetUrlCacheEntryGroupA}
function SetUrlCacheEntryGroupA(lpszUrlName: PAnsiChar; dwFlags: DWORD; GroupId: GROUPID;
  pbGroupAttributes: PByte; cbGroupAttributes: DWORD; lpReserved: Pointer): BOOL; stdcall;
{$EXTERNALSYM SetUrlCacheEntryGroupW}
function SetUrlCacheEntryGroupW(lpszUrlName: PWideChar; dwFlags: DWORD; GroupId: GROUPID;
  pbGroupAttributes: PByte; cbGroupAttributes: DWORD; lpReserved: Pointer): BOOL; stdcall;
{$EXTERNALSYM SetUrlCacheEntryGroup}
function SetUrlCacheEntryGroup(lpszUrlName: PChar; dwFlags: DWORD; GroupId: GROUPID;
  pbGroupAttributes: PByte; cbGroupAttributes: DWORD; lpReserved: Pointer): BOOL; stdcall;

{$EXTERNALSYM FindFirstUrlCacheEntryExA}
function FindFirstUrlCacheEntryExA(lpszUrlSearchPattern: PAnsiChar; dwFlags,
  dwFilter: DWORD; GroupId: TGroupID; lpFirstCacheEntryInfo:
  PInternetCacheEntryInfoA; var lpdwFirstCacheEntryInfoBufferSize: DWORD;
  lpGroupAttributes: Pointer; pcbGroupAttributes: LPDWORD;
  lpReserved: Pointer): THandle; stdcall;
{$EXTERNALSYM FindFirstUrlCacheEntryExW}
function FindFirstUrlCacheEntryExW(lpszUrlSearchPattern: PWideChar; dwFlags,
  dwFilter: DWORD; GroupId: TGroupID; lpFirstCacheEntryInfo:
  PInternetCacheEntryInfoW; var lpdwFirstCacheEntryInfoBufferSize: DWORD;
  lpGroupAttributes: Pointer; pcbGroupAttributes: LPDWORD;
  lpReserved: Pointer): THandle; stdcall;
{$EXTERNALSYM FindFirstUrlCacheEntryEx}
function FindFirstUrlCacheEntryEx(lpszUrlSearchPattern: PChar; dwFlags,
  dwFilter: DWORD; GroupId: TGroupID; lpFirstCacheEntryInfo:
  PInternetCacheEntryInfo; var lpdwFirstCacheEntryInfoBufferSize: DWORD;
  lpGroupAttributes: Pointer; pcbGroupAttributes: LPDWORD;
  lpReserved: Pointer): THandle; stdcall;

{$EXTERNALSYM FindNextUrlCacheEntryExA}
function FindNextUrlCacheEntryExA(hEnumHandle: THandle; lpFirstCacheEntryInfo:
  PInternetCacheEntryInfoA; var lpdwFirstCacheEntryInfoBufferSize: DWORD;
  lpGroupAttributes: Pointer; pcbGroupAttributes: LPDWORD;
  lpReserved: Pointer): BOOL; stdcall;
{$EXTERNALSYM FindNextUrlCacheEntryExW}
function FindNextUrlCacheEntryExW(hEnumHandle: THandle; lpFirstCacheEntryInfo:
  PInternetCacheEntryInfoW; var lpdwFirstCacheEntryInfoBufferSize: DWORD;
  lpGroupAttributes: Pointer; pcbGroupAttributes: LPDWORD;
  lpReserved: Pointer): BOOL; stdcall;
{$EXTERNALSYM FindNextUrlCacheEntryEx}
function FindNextUrlCacheEntryEx(hEnumHandle: THandle; lpFirstCacheEntryInfo:
  PInternetCacheEntryInfo; var lpdwFirstCacheEntryInfoBufferSize: DWORD;
  lpGroupAttributes: Pointer; pcbGroupAttributes: LPDWORD;
  lpReserved: Pointer): BOOL; stdcall;

{$EXTERNALSYM FindFirstUrlCacheEntryA}
function FindFirstUrlCacheEntryA(lpszUrlSearchPattern: PAnsiChar;
  lpFirstCacheEntryInfo: PInternetCacheEntryInfoA;
  var lpdwFirstCacheEntryInfoBufferSize: DWORD): THandle; stdcall;
{$EXTERNALSYM FindFirstUrlCacheEntryW}
function FindFirstUrlCacheEntryW(lpszUrlSearchPattern: PWideChar;
  lpFirstCacheEntryInfo: PInternetCacheEntryInfoW;
  var lpdwFirstCacheEntryInfoBufferSize: DWORD): THandle; stdcall;
{$EXTERNALSYM FindFirstUrlCacheEntry}
function FindFirstUrlCacheEntry(lpszUrlSearchPattern: PChar;
  lpFirstCacheEntryInfo: PInternetCacheEntryInfo;
  var lpdwFirstCacheEntryInfoBufferSize: DWORD): THandle; stdcall;

{$EXTERNALSYM FindNextUrlCacheEntryA}
function FindNextUrlCacheEntryA(hEnumHandle: THandle; lpNextCacheEntryInfo:
  PInternetCacheEntryInfoA; var lpdwNextCacheEntryInfoBufferSize: DWORD): BOOL; stdcall;
{$EXTERNALSYM FindNextUrlCacheEntryW}
function FindNextUrlCacheEntryW(hEnumHandle: THandle; lpNextCacheEntryInfo:
  PInternetCacheEntryInfoW; var lpdwNextCacheEntryInfoBufferSize: DWORD): BOOL; stdcall;
{$EXTERNALSYM FindNextUrlCacheEntry}
function FindNextUrlCacheEntry(hEnumHandle: THandle; lpNextCacheEntryInfo:
  PInternetCacheEntryInfo; var lpdwNextCacheEntryInfoBufferSize: DWORD): BOOL; stdcall;

{$EXTERNALSYM FindCloseUrlCache}
function FindCloseUrlCache(hEnumHandle: THandle): BOOL; stdcall;

{$EXTERNALSYM DeleteUrlCacheEntry}
function DeleteUrlCacheEntryA(lpszUrlName: PAnsiChar): BOOL; stdcall;
{$EXTERNALSYM DeleteUrlCacheEntry}
function DeleteUrlCacheEntryW(lpszUrlName: PWideChar): BOOL; stdcall;
{$EXTERNALSYM DeleteUrlCacheEntry}
function DeleteUrlCacheEntry(lpszUrlName: PChar): BOOL; stdcall;

//
// Autodial APIs
//

{$EXTERNALSYM InternetDialA}
function InternetDialA(hwndParent: HWND; lpszConnectoid: PAnsiChar; dwFlags: DWORD;
  out lpdwConnection: DWORD_PTR; dwReserved: DWORD): DWORD; stdcall;
{$EXTERNALSYM InternetDialW}
function InternetDialW(hwndParent: HWND; lpszConnectoid: PWideChar; dwFlags: DWORD;
  out lpdwConnection: DWORD_PTR; dwReserved: DWORD): DWORD; stdcall;
{$EXTERNALSYM InternetDial}
function InternetDial(hwndParent: HWND; lpszConnectoid: PChar; dwFlags: DWORD;
  out lpdwConnection: DWORD_PTR; dwReserved: DWORD): DWORD; stdcall;

// Flags for InternetDial - must not conflict with InternetAutodial flags
//                          as they are valid here also.
const
  {$EXTERNALSYM INTERNET_DIAL_FORCE_PROMPT}
  INTERNET_DIAL_FORCE_PROMPT = $2000;
  {$EXTERNALSYM INTERNET_DIAL_SHOW_OFFLINE}
  INTERNET_DIAL_SHOW_OFFLINE = $4000;
  {$EXTERNALSYM INTERNET_DIAL_UNATTENDED}
  INTERNET_DIAL_UNATTENDED   = $8000;

{$EXTERNALSYM InternetHangUp}
function InternetHangUp(dwConnection, dwReserved: DWORD): DWORD; stdcall;

const
  {$EXTERNALSYM INTERENT_GOONLINE_REFRESH}
  INTERENT_GOONLINE_REFRESH = $00000001;
  {$EXTERNALSYM INTERENT_GOONLINE_MASK}
  INTERENT_GOONLINE_MASK    = $00000001;


{$EXTERNALSYM InternetGoOnlineA}
function InternetGoOnlineA(lpszURL: PAnsiChar; hwndParent: HWND; dwFlag: DWORD): BOOL; stdcall;
{$EXTERNALSYM InternetGoOnlineW}
function InternetGoOnlineW(lpszURL: PWideChar; hwndParent: HWND; dwFlag: DWORD): BOOL; stdcall;
{$EXTERNALSYM InternetGoOnline}
function InternetGoOnline(lpszURL: PChar; hwndParent: HWND; dwFlag: DWORD): BOOL; stdcall;
{$EXTERNALSYM InternetAutodial}
function InternetAutodial(dwFlags, dwReserved: DWORD): BOOL; stdcall;

// Flags for InternetAutodial
const
  {$EXTERNALSYM INTERNET_AUTODIAL_FORCE_ONLINE}
  INTERNET_AUTODIAL_FORCE_ONLINE          = 1;
  {$EXTERNALSYM INTERNET_AUTODIAL_FORCE_UNATTENDED}
  INTERNET_AUTODIAL_FORCE_UNATTENDED      = 2;
  {$EXTERNALSYM INTERNET_AUTODIAL_FAILIFSECURITYCHECK}
  INTERNET_AUTODIAL_FAILIFSECURITYCHECK   = 4;
  {$EXTERNALSYM INTERNET_AUTODIAL_FLAGS_MASK}
  INTERNET_AUTODIAL_FLAGS_MASK            = INTERNET_AUTODIAL_FORCE_ONLINE or
                                            INTERNET_AUTODIAL_FORCE_UNATTENDED or
                                            INTERNET_AUTODIAL_FAILIFSECURITYCHECK;

{$EXTERNALSYM InternetAutodialHangup}
function InternetAutodialHangup(dwReserved: DWORD): DWORD; stdcall;
{$EXTERNALSYM InternetGetConnectedState}
function InternetGetConnectedState(var lpdwFlags: DWORD; dwReserved: DWORD): BOOL; stdcall;

{$EXTERNALSYM InternetGetConnectedStateExA}
function InternetGetConnectedStateExA(out lpdwFlags: DWORD;
  lpszConnectionName: PAnsiChar; dwNameLen, dwReserved: DWORD): BOOL; stdcall;
{$EXTERNALSYM InternetGetConnectedStateExW}
function InternetGetConnectedStateExW(out lpdwFlags: DWORD;
  lpszConnectionName: PWideChar; dwNameLen, dwReserved: DWORD): BOOL; stdcall;
{$EXTERNALSYM InternetGetConnectedStateEx}
function InternetGetConnectedStateEx(out lpdwFlags: DWORD;
  lpszConnectionName: PChar; dwNameLen, dwReserved: DWORD): BOOL; stdcall;

{$EXTERNALSYM InternetInitializeAutoProxyDll}
function InternetInitializeAutoProxyDll(dwReserved: DWORD): BOOL; stdcall;


// Flags for InternetGetConnectedState and Ex
const
  {$EXTERNALSYM INTERNET_CONNECTION_MODEM}
  INTERNET_CONNECTION_MODEM           = $01;
  {$EXTERNALSYM INTERNET_CONNECTION_LAN}
  INTERNET_CONNECTION_LAN             = $02;
  {$EXTERNALSYM INTERNET_CONNECTION_PROXY}
  INTERNET_CONNECTION_PROXY           = $04;
  {$EXTERNALSYM INTERNET_CONNECTION_MODEM_BUSY}
  INTERNET_CONNECTION_MODEM_BUSY      = $08; // no longer used
  {$EXTERNALSYM INTERNET_RAS_INSTALLED}
  INTERNET_RAS_INSTALLED              = $10;
  {$EXTERNALSYM INTERNET_CONNECTION_OFFLINE}
  INTERNET_CONNECTION_OFFLINE         = $20;
  {$EXTERNALSYM INTERNET_CONNECTION_CONFIGURED}
  INTERNET_CONNECTION_CONFIGURED      = $40;

//
// Custom dial handler functions
//

// Custom dial handler prototype
type
  {$EXTERNALSYM PFN_DIAL_HANDLER}
  PFN_DIAL_HANDLER = function(p1: HWND; p2: LPCSTR; p3: DWORD;
                       var p4: DWORD): DWORD stdcall;
  PFNDialHandler = PFN_DIAL_HANDLER;

// Flags for custom dial handler
const
  {$EXTERNALSYM INTERNET_CUSTOMDIAL_CONNECT}
  INTERNET_CUSTOMDIAL_CONNECT         = 0;
  {$EXTERNALSYM INTERNET_CUSTOMDIAL_UNATTENDED}
  INTERNET_CUSTOMDIAL_UNATTENDED      = 1;
  {$EXTERNALSYM INTERNET_CUSTOMDIAL_DISCONNECT}
  INTERNET_CUSTOMDIAL_DISCONNECT      = 2;
  {$EXTERNALSYM INTERNET_CUSTOMDIAL_SHOWOFFLINE}
  INTERNET_CUSTOMDIAL_SHOWOFFLINE     = 4;

  // Custom dial handler supported functionality flags
  {$EXTERNALSYM INTERNET_CUSTOMDIAL_SAFE_FOR_UNATTENDED}
  INTERNET_CUSTOMDIAL_SAFE_FOR_UNATTENDED = 1;
  {$EXTERNALSYM INTERNET_CUSTOMDIAL_WILL_SUPPLY_STATE}
  INTERNET_CUSTOMDIAL_WILL_SUPPLY_STATE   = 2;
  {$EXTERNALSYM INTERNET_CUSTOMDIAL_CAN_HANGUP}
  INTERNET_CUSTOMDIAL_CAN_HANGUP          = 4;

{$EXTERNALSYM InternetSetDialStateA}
function InternetSetDialStateA(lpszConnectoid: PAnsiChar;
  dwState, dwReserved: DWORD): BOOL; stdcall;
{$EXTERNALSYM InternetSetDialStateW}
function InternetSetDialStateW(lpszConnectoid: PWideChar;
  dwState, dwReserved: DWORD): BOOL; stdcall;
{$EXTERNALSYM InternetSetDialState}
function InternetSetDialState(lpszConnectoid: PChar;
  dwState, dwReserved: DWORD): BOOL; stdcall;

const
// States for InternetSetDialState
  {$EXTERNALSYM INTERNET_DIALSTATE_DISCONNECTED}
  INTERNET_DIALSTATE_DISCONNECTED     = 1;

{$ENDIF JWA_IMPLEMENTATIONSECTION}

{$IFNDEF JWA_OMIT_SECTIONS}
implementation

{$ENDIF JWA_OMIT_SECTIONS}

{$IFNDEF JWA_INTERFACESECTION}

{$IFNDEF JWA_INCLUDEMODE}
const
  winetdll = 'wininet.dll';
{$ENDIF JWA_INCLUDEMODE}

function InternetConnectUrlA(hInternet: HINTERNET; lpszUrl: PAnsiChar;
  dwFlags, dwContext: DWORD): HINTERNET;
begin
  Result := InternetConnectA(hInternet, lpszUrl, INTERNET_INVALID_PORT_NUMBER,
    nil, nil, INTERNET_SERVICE_URL, dwFlags, dwContext);
end;
function InternetConnectUrlW(hInternet: HINTERNET; lpszUrl: PWideChar;
  dwFlags, dwContext: DWORD): HINTERNET;
begin
  Result := InternetConnectW(hInternet, lpszUrl, INTERNET_INVALID_PORT_NUMBER,
    nil, nil, INTERNET_SERVICE_URL, dwFlags, dwContext);
end;
function InternetConnectUrl(hInternet: HINTERNET; lpszUrl: PChar;
  dwFlags, dwContext: DWORD): HINTERNET;
begin
  Result := InternetConnect(hInternet, lpszUrl, INTERNET_INVALID_PORT_NUMBER,
    nil, nil, INTERNET_SERVICE_URL, dwFlags, dwContext);
end;

function IS_GOPHER_FILE(AType: DWORD): BOOL;
begin
  Result := AType and GOPHER_TYPE_FILE_MASK <> 0;
end;

function IS_GOPHER_DIRECTORY(AType: DWORD): BOOL;
begin
  Result := AType and GOPHER_TYPE_DIRECTORY <> 0;
end;

function IS_GOPHER_PHONE_SERVER(AType: DWORD): BOOL;
begin
  Result := AType and GOPHER_TYPE_CSO <> 0;
end;

function IS_GOPHER_ERROR(AType: DWORD): BOOL;
begin
  Result := AType and GOPHER_TYPE_ERROR <> 0;
end;

function IS_GOPHER_INDEX_SERVER(AType: DWORD): BOOL;
begin
  Result := AType and GOPHER_TYPE_INDEX_SERVER <> 0;
end;

function IS_GOPHER_TELNET_SESSION(AType: DWORD): BOOL;
begin
  Result := AType and GOPHER_TYPE_TELNET <> 0;
end;

function IS_GOPHER_BACKUP_SERVER(AType: DWORD): BOOL;
begin
  Result := AType and GOPHER_TYPE_REDUNDANT <> 0;
end;

function IS_GOPHER_TN3270_SESSION(AType: DWORD): BOOL;
begin
  Result := AType and GOPHER_TYPE_TN3270 <> 0;
end;

function IS_GOPHER_ASK(AType: DWORD): BOOL;
begin
  Result := AType and GOPHER_TYPE_ASK <> 0;
end;

function IS_GOPHER_PLUS(AType: DWORD): BOOL;
begin
  Result := AType and GOPHER_TYPE_GOPHER_PLUS <> 0;
end;

function IS_GOPHER_TYPE_KNOWN(AType: DWORD): BOOL;
begin
  Result := AType and GOPHER_TYPE_UNKNOWN = 0;
end;


{$IFDEF DYNAMIC_LINK}

var
  _InternetConnectA: Pointer;

function InternetConnectA;
begin
  GetProcedureAddress(_InternetConnectA, winetdll, 'InternetConnectA');
  asm
        MOV     ESP, EBP
        POP     EBP
        JMP     [_InternetConnectA]
  end;
end;

var
  _InternetConnectW: Pointer;

function InternetConnectW;
begin
  GetProcedureAddress(_InternetConnectW, winetdll, 'InternetConnectW');
  asm
        MOV     ESP, EBP
        POP     EBP
        JMP     [_InternetConnectW]
  end;
end;

var
  _InternetConnect: Pointer;

function InternetConnect;
begin
  GetProcedureAddress(_InternetConnect, winetdll, 'InternetConnect');
  asm
        MOV     ESP, EBP
        POP     EBP
        JMP     [_InternetConnect]
  end;
end;

var
  _InternetCloseHandle: Pointer;

function InternetCloseHandle;
begin
  GetProcedureAddress(_InternetCloseHandle, winetdll, 'InternetCloseHandle');
  asm
        MOV     ESP, EBP
        POP     EBP
        JMP     [_InternetCloseHandle]
  end;
end;

var
  _InternetTimeFromSystemTimeA: Pointer;

function InternetTimeFromSystemTimeA;
begin
  GetProcedureAddress(_InternetTimeFromSystemTimeA, winetdll, 'InternetTimeFromSystemTimeA');
  asm
        MOV     ESP, EBP
        POP     EBP
        JMP     [_InternetTimeFromSystemTimeA]
  end;
end;

var
  _InternetTimeToSystemTimeA: Pointer;

function InternetTimeToSystemTimeA;
begin
  GetProcedureAddress(_InternetTimeToSystemTimeA, winetdll, 'InternetTimeToSystemTimeA');
  asm
        MOV     ESP, EBP
        POP     EBP
        JMP     [_InternetTimeToSystemTimeA]
  end;
end;

var
  _InternetCrackUrlA: Pointer;

function InternetCrackUrlA;
begin
  GetProcedureAddress(_InternetCrackUrlA, winetdll, 'InternetCrackUrlA');
  asm
        MOV     ESP, EBP
        POP     EBP
        JMP     [_InternetCrackUrlA]
  end;
end;

var
  _InternetCreateUrlA: Pointer;

function InternetCreateUrlA;
begin
  GetProcedureAddress(_InternetCreateUrlA, winetdll, 'InternetCreateUrlA');
  asm
        MOV     ESP, EBP
        POP     EBP
        JMP     [_InternetCreateUrlA]
  end;
end;

var
  _InternetCanonicalizeUrlA: Pointer;

function InternetCanonicalizeUrlA;
begin
  GetProcedureAddress(_InternetCanonicalizeUrlA, winetdll, 'InternetCanonicalizeUrlA');
  asm
        MOV     ESP, EBP
        POP     EBP
        JMP     [_InternetCanonicalizeUrlA]
  end;
end;

var
  _InternetCombineUrlA: Pointer;

function InternetCombineUrlA;
begin
  GetProcedureAddress(_InternetCombineUrlA, winetdll, 'InternetCombineUrlA');
  asm
        MOV     ESP, EBP
        POP     EBP
        JMP     [_InternetCombineUrlA]
  end;
end;

var
  _InternetOpenUrlA: Pointer;

function InternetOpenUrlA;
begin
  GetProcedureAddress(_InternetOpenUrlA, winetdll, 'InternetOpenUrlA');
  asm
        MOV     ESP, EBP
        POP     EBP
        JMP     [_InternetOpenUrlA]
  end;
end;

var
  _InternetTimeFromSystemTimeW: Pointer;

function InternetTimeFromSystemTimeW;
begin
  GetProcedureAddress(_InternetTimeFromSystemTimeW, winetdll, 'InternetTimeFromSystemTimeW');
  asm
        MOV     ESP, EBP
        POP     EBP
        JMP     [_InternetTimeFromSystemTimeW]
  end;
end;

var
  _InternetTimeToSystemTimeW: Pointer;

function InternetTimeToSystemTimeW;
begin
  GetProcedureAddress(_InternetTimeToSystemTimeW, winetdll, 'InternetTimeToSystemTimeW');
  asm
        MOV     ESP, EBP
        POP     EBP
        JMP     [_InternetTimeToSystemTimeW]
  end;
end;

var
  _InternetCrackUrlW: Pointer;

function InternetCrackUrlW;
begin
  GetProcedureAddress(_InternetCrackUrlW, winetdll, 'InternetCrackUrlW');
  asm
        MOV     ESP, EBP
        POP     EBP
        JMP     [_InternetCrackUrlW]
  end;
end;

var
  _InternetCreateUrlW: Pointer;

function InternetCreateUrlW;
begin
  GetProcedureAddress(_InternetCreateUrlW, winetdll, 'InternetCreateUrlW');
  asm
        MOV     ESP, EBP
        POP     EBP
        JMP     [_InternetCreateUrlW]
  end;
end;

var
  _InternetCanonicalizeUrlW: Pointer;

function InternetCanonicalizeUrlW;
begin
  GetProcedureAddress(_InternetCanonicalizeUrlW, winetdll, 'InternetCanonicalizeUrlW');
  asm
        MOV     ESP, EBP
        POP     EBP
        JMP     [_InternetCanonicalizeUrlW]
  end;
end;

var
  _InternetCombineUrlW: Pointer;

function InternetCombineUrlW;
begin
  GetProcedureAddress(_InternetCombineUrlW, winetdll, 'InternetCombineUrlW');
  asm
        MOV     ESP, EBP
        POP     EBP
        JMP     [_InternetCombineUrlW]
  end;
end;

var
  _InternetOpenUrlW: Pointer;

function InternetOpenUrlW;
begin
  GetProcedureAddress(_InternetOpenUrlW, winetdll, 'InternetOpenUrlW');
  asm
        MOV     ESP, EBP
        POP     EBP
        JMP     [_InternetOpenUrlW]
  end;
end;

var
  _InternetTimeFromSystemTime: Pointer;

function InternetTimeFromSystemTime;
begin
  GetProcedureAddress(_InternetTimeFromSystemTime, winetdll, 'InternetTimeFromSystemTime');
  asm
        MOV     ESP, EBP
        POP     EBP
        JMP     [_InternetTimeFromSystemTime]
  end;
end;

var
  _InternetTimeToSystemTime: Pointer;

function InternetTimeToSystemTime;
begin
  GetProcedureAddress(_InternetTimeToSystemTime, winetdll, 'InternetTimeToSystemTime');
  asm
        MOV     ESP, EBP
        POP     EBP
        JMP     [_InternetTimeToSystemTime]
  end;
end;

var
  _InternetCrackUrl: Pointer;

function InternetCrackUrl;
begin
  GetProcedureAddress(_InternetCrackUrl, winetdll, 'InternetCrackUrl');
  asm
        MOV     ESP, EBP
        POP     EBP
        JMP     [_InternetCrackUrl]
  end;
end;

var
  _InternetCreateUrl: Pointer;

function InternetCreateUrl;
begin
  GetProcedureAddress(_InternetCreateUrl, winetdll, 'InternetCreateUrl');
  asm
        MOV     ESP, EBP
        POP     EBP
        JMP     [_InternetCreateUrl]
  end;
end;

var
  _InternetCanonicalizeUrl: Pointer;

function InternetCanonicalizeUrl;
begin
  GetProcedureAddress(_InternetCanonicalizeUrl, winetdll, 'InternetCanonicalizeUrl');
  asm
        MOV     ESP, EBP
        POP     EBP
        JMP     [_InternetCanonicalizeUrl]
  end;
end;

var
  _InternetCombineUrl: Pointer;

function InternetCombineUrl;
begin
  GetProcedureAddress(_InternetCombineUrl, winetdll, 'InternetCombineUrl');
  asm
        MOV     ESP, EBP
        POP     EBP
        JMP     [_InternetCombineUrl]
  end;
end;

var
  _InternetOpenUrl: Pointer;

function InternetOpenUrl;
begin
  GetProcedureAddress(_InternetOpenUrl, winetdll, 'InternetOpenUrl');
  asm
        MOV     ESP, EBP
        POP     EBP
        JMP     [_InternetOpenUrl]
  end;
end;

var
  _InternetReadFile: Pointer;

function InternetReadFile;
begin
  GetProcedureAddress(_InternetReadFile, winetdll, 'InternetReadFile');
  asm
        MOV     ESP, EBP
        POP     EBP
        JMP     [_InternetReadFile]
  end;
end;

var
  _InternetReadFileExA: Pointer;

function InternetReadFileExA;
begin
  GetProcedureAddress(_InternetReadFileExA, winetdll, 'InternetReadFileExA');
  asm
        MOV     ESP, EBP
        POP     EBP
        JMP     [_InternetReadFileExA]
  end;
end;

var
  _InternetReadFileExW: Pointer;

function InternetReadFileExW;
begin
  GetProcedureAddress(_InternetReadFileExW, winetdll, 'InternetReadFileExW');
  asm
        MOV     ESP, EBP
        POP     EBP
        JMP     [_InternetReadFileExW]
  end;
end;

var
  _InternetReadFileEx: Pointer;

function InternetReadFileEx;
begin
  GetProcedureAddress(_InternetReadFileEx, winetdll, 'InternetReadFileEx');
  asm
        MOV     ESP, EBP
        POP     EBP
        JMP     [_InternetReadFileEx]
  end;
end;

var
  _InternetSetFilePointer: Pointer;

function InternetSetFilePointer;
begin
  GetProcedureAddress(_InternetSetFilePointer, winetdll, 'InternetSetFilePointer');
  asm
        MOV     ESP, EBP
        POP     EBP
        JMP     [_InternetSetFilePointer]
  end;
end;

var
  _InternetWriteFile: Pointer;

function InternetWriteFile;
begin
  GetProcedureAddress(_InternetWriteFile, winetdll, 'InternetWriteFile');
  asm
        MOV     ESP, EBP
        POP     EBP
        JMP     [_InternetWriteFile]
  end;
end;

var
  _InternetQueryDataAvailable: Pointer;

function InternetQueryDataAvailable;
begin
  GetProcedureAddress(_InternetQueryDataAvailable, winetdll, 'InternetQueryDataAvailable');
  asm
        MOV     ESP, EBP
        POP     EBP
        JMP     [_InternetQueryDataAvailable]
  end;
end;

var
  _InternetFindNextFileA: Pointer;

function InternetFindNextFileA;
begin
  GetProcedureAddress(_InternetFindNextFileA, winetdll, 'InternetFindNextFileA');
  asm
        MOV     ESP, EBP
        POP     EBP
        JMP     [_InternetFindNextFileA]
  end;
end;

var
  _InternetQueryOptionA: Pointer;

function InternetQueryOptionA;
begin
  GetProcedureAddress(_InternetQueryOptionA, winetdll, 'InternetQueryOptionA');
  asm
        MOV     ESP, EBP
        POP     EBP
        JMP     [_InternetQueryOptionA]
  end;
end;

var
  _InternetSetOptionA: Pointer;

function InternetSetOptionA;
begin
  GetProcedureAddress(_InternetSetOptionA, winetdll, 'InternetSetOptionA');
  asm
        MOV     ESP, EBP
        POP     EBP
        JMP     [_InternetSetOptionA]
  end;
end;

var
  _InternetSetOptionExA: Pointer;

function InternetSetOptionExA;
begin
  GetProcedureAddress(_InternetSetOptionExA, winetdll, 'InternetSetOptionExA');
  asm
        MOV     ESP, EBP
        POP     EBP
        JMP     [_InternetSetOptionExA]
  end;
end;

var
  _InternetFindNextFileW: Pointer;

function InternetFindNextFileW;
begin
  GetProcedureAddress(_InternetFindNextFileW, winetdll, 'InternetFindNextFileW');
  asm
        MOV     ESP, EBP
        POP     EBP
        JMP     [_InternetFindNextFileW]
  end;
end;

var
  _InternetQueryOptionW: Pointer;

function InternetQueryOptionW;
begin
  GetProcedureAddress(_InternetQueryOptionW, winetdll, 'InternetQueryOptionW');
  asm
        MOV     ESP, EBP
        POP     EBP
        JMP     [_InternetQueryOptionW]
  end;
end;

var
  _InternetSetOptionW: Pointer;

function InternetSetOptionW;
begin
  GetProcedureAddress(_InternetSetOptionW, winetdll, 'InternetSetOptionW');
  asm
        MOV     ESP, EBP
        POP     EBP
        JMP     [_InternetSetOptionW]
  end;
end;

var
  _InternetSetOptionExW: Pointer;

function InternetSetOptionExW;
begin
  GetProcedureAddress(_InternetSetOptionExW, winetdll, 'InternetSetOptionExW');
  asm
        MOV     ESP, EBP
        POP     EBP
        JMP     [_InternetSetOptionExW]
  end;
end;

var
  _InternetFindNextFile: Pointer;

function InternetFindNextFile;
begin
  GetProcedureAddress(_InternetFindNextFile, winetdll, 'InternetFindNextFile');
  asm
        MOV     ESP, EBP
        POP     EBP
        JMP     [_InternetFindNextFile]
  end;
end;

var
  _InternetQueryOption: Pointer;

function InternetQueryOption;
begin
  GetProcedureAddress(_InternetQueryOption, winetdll, 'InternetQueryOption');
  asm
        MOV     ESP, EBP
        POP     EBP
        JMP     [_InternetQueryOption]
  end;
end;

var
  _InternetSetOption: Pointer;

function InternetSetOption;
begin
  GetProcedureAddress(_InternetSetOption, winetdll, 'InternetSetOption');
  asm
        MOV     ESP, EBP
        POP     EBP
        JMP     [_InternetSetOption]
  end;
end;

var
  _InternetSetOptionEx: Pointer;

function InternetSetOptionEx;
begin
  GetProcedureAddress(_InternetSetOptionEx, winetdll, 'InternetSetOptionEx');
  asm
        MOV     ESP, EBP
        POP     EBP
        JMP     [_InternetSetOptionEx]
  end;
end;

var
  _InternetLockRequestFile: Pointer;

function InternetLockRequestFile;
begin
  GetProcedureAddress(_InternetLockRequestFile, winetdll, 'InternetLockRequestFile');
  asm
        MOV     ESP, EBP
        POP     EBP
        JMP     [_InternetLockRequestFile]
  end;
end;

var
  _InternetUnlockRequestFile: Pointer;

function InternetUnlockRequestFile;
begin
  GetProcedureAddress(_InternetUnlockRequestFile, winetdll, 'InternetUnlockRequestFile');
  asm
        MOV     ESP, EBP
        POP     EBP
        JMP     [_InternetUnlockRequestFile]
  end;
end;

var
  _InternetGetLastResponseInfoA: Pointer;

function InternetGetLastResponseInfoA;
begin
  GetProcedureAddress(_InternetGetLastResponseInfoA, winetdll, 'InternetGetLastResponseInfoA');
  asm
        MOV     ESP, EBP
        POP     EBP
        JMP     [_InternetGetLastResponseInfoA]
  end;
end;

var
  _InternetSetStatusCallbackA: Pointer;

function InternetSetStatusCallbackA;
begin
  GetProcedureAddress(_InternetSetStatusCallbackA, winetdll, 'InternetSetStatusCallbackA');
  asm
        MOV     ESP, EBP
        POP     EBP
        JMP     [_InternetSetStatusCallbackA]
  end;
end;

var
  _FtpFindFirstFileA: Pointer;

function FtpFindFirstFileA;
begin
  GetProcedureAddress(_FtpFindFirstFileA, winetdll, 'FtpFindFirstFileA');
  asm
        MOV     ESP, EBP
        POP     EBP
        JMP     [_FtpFindFirstFileA]
  end;
end;

var
  _FtpGetFileA: Pointer;

function FtpGetFileA;
begin
  GetProcedureAddress(_FtpGetFileA, winetdll, 'FtpGetFileA');
  asm
        MOV     ESP, EBP
        POP     EBP
        JMP     [_FtpGetFileA]
  end;
end;

var
  _FtpPutFileA: Pointer;

function FtpPutFileA;
begin
  GetProcedureAddress(_FtpPutFileA, winetdll, 'FtpPutFileA');
  asm
        MOV     ESP, EBP
        POP     EBP
        JMP     [_FtpPutFileA]
  end;
end;

var
  _InternetGetLastResponseInfoW: Pointer;

function InternetGetLastResponseInfoW;
begin
  GetProcedureAddress(_InternetGetLastResponseInfoW, winetdll, 'InternetGetLastResponseInfoW');
  asm
        MOV     ESP, EBP
        POP     EBP
        JMP     [_InternetGetLastResponseInfoW]
  end;
end;

var
  _InternetSetStatusCallbackW: Pointer;

function InternetSetStatusCallbackW;
begin
  GetProcedureAddress(_InternetSetStatusCallbackW, winetdll, 'InternetSetStatusCallbackW');
  asm
        MOV     ESP, EBP
        POP     EBP
        JMP     [_InternetSetStatusCallbackW]
  end;
end;

var
  _FtpFindFirstFileW: Pointer;

function FtpFindFirstFileW;
begin
  GetProcedureAddress(_FtpFindFirstFileW, winetdll, 'FtpFindFirstFileW');
  asm
        MOV     ESP, EBP
        POP     EBP
        JMP     [_FtpFindFirstFileW]
  end;
end;

var
  _FtpGetFileW: Pointer;

function FtpGetFileW;
begin
  GetProcedureAddress(_FtpGetFileW, winetdll, 'FtpGetFileW');
  asm
        MOV     ESP, EBP
        POP     EBP
        JMP     [_FtpGetFileW]
  end;
end;

var
  _FtpPutFileW: Pointer;

function FtpPutFileW;
begin
  GetProcedureAddress(_FtpPutFileW, winetdll, 'FtpPutFileW');
  asm
        MOV     ESP, EBP
        POP     EBP
        JMP     [_FtpPutFileW]
  end;
end;

var
  _InternetGetLastResponseInfo: Pointer;

function InternetGetLastResponseInfo;
begin
  GetProcedureAddress(_InternetGetLastResponseInfo, winetdll, 'InternetGetLastResponseInfo');
  asm
        MOV     ESP, EBP
        POP     EBP
        JMP     [_InternetGetLastResponseInfo]
  end;
end;

var
  _InternetSetStatusCallback: Pointer;

function InternetSetStatusCallback;
begin
  GetProcedureAddress(_InternetSetStatusCallback, winetdll, 'InternetSetStatusCallback');
  asm
        MOV     ESP, EBP
        POP     EBP
        JMP     [_InternetSetStatusCallback]
  end;
end;

var
  _FtpFindFirstFile: Pointer;

function FtpFindFirstFile;
begin
  GetProcedureAddress(_FtpFindFirstFile, winetdll, 'FtpFindFirstFile');
  asm
        MOV     ESP, EBP
        POP     EBP
        JMP     [_FtpFindFirstFile]
  end;
end;

var
  _FtpGetFile: Pointer;

function FtpGetFile;
begin
  GetProcedureAddress(_FtpGetFile, winetdll, 'FtpGetFile');
  asm
        MOV     ESP, EBP
        POP     EBP
        JMP     [_FtpGetFile]
  end;
end;

var
  _FtpPutFile: Pointer;

function FtpPutFile;
begin
  GetProcedureAddress(_FtpPutFile, winetdll, 'FtpPutFile');
  asm
        MOV     ESP, EBP
        POP     EBP
        JMP     [_FtpPutFile]
  end;
end;

var
  _FtpGetFileEx: Pointer;

function FtpGetFileEx;
begin
  GetProcedureAddress(_FtpGetFileEx, winetdll, 'FtpGetFileEx');
  asm
        MOV     ESP, EBP
        POP     EBP
        JMP     [_FtpGetFileEx]
  end;
end;

var
  _FtpPutFileEx: Pointer;

function FtpPutFileEx;
begin
  GetProcedureAddress(_FtpPutFileEx, winetdll, 'FtpPutFileEx');
  asm
        MOV     ESP, EBP
        POP     EBP
        JMP     [_FtpPutFileEx]
  end;
end;

var
  _FtpDeleteFileA: Pointer;

function FtpDeleteFileA;
begin
  GetProcedureAddress(_FtpDeleteFileA, winetdll, 'FtpDeleteFileA');
  asm
        MOV     ESP, EBP
        POP     EBP
        JMP     [_FtpDeleteFileA]
  end;
end;

var
  _FtpRenameFileA: Pointer;

function FtpRenameFileA;
begin
  GetProcedureAddress(_FtpRenameFileA, winetdll, 'FtpRenameFileA');
  asm
        MOV     ESP, EBP
        POP     EBP
        JMP     [_FtpRenameFileA]
  end;
end;

var
  _FtpOpenFileA: Pointer;

function FtpOpenFileA;
begin
  GetProcedureAddress(_FtpOpenFileA, winetdll, 'FtpOpenFileA');
  asm
        MOV     ESP, EBP
        POP     EBP
        JMP     [_FtpOpenFileA]
  end;
end;

var
  _FtpCreateDirectoryA: Pointer;

function FtpCreateDirectoryA;
begin
  GetProcedureAddress(_FtpCreateDirectoryA, winetdll, 'FtpCreateDirectoryA');
  asm
        MOV     ESP, EBP
        POP     EBP
        JMP     [_FtpCreateDirectoryA]
  end;
end;

var
  _FtpRemoveDirectoryA: Pointer;

function FtpRemoveDirectoryA;
begin
  GetProcedureAddress(_FtpRemoveDirectoryA, winetdll, 'FtpRemoveDirectoryA');
  asm
        MOV     ESP, EBP
        POP     EBP
        JMP     [_FtpRemoveDirectoryA]
  end;
end;

var
  _FtpSetCurrentDirectoryA: Pointer;

function FtpSetCurrentDirectoryA;
begin
  GetProcedureAddress(_FtpSetCurrentDirectoryA, winetdll, 'FtpSetCurrentDirectoryA');
  asm
        MOV     ESP, EBP
        POP     EBP
        JMP     [_FtpSetCurrentDirectoryA]
  end;
end;

var
  _FtpGetCurrentDirectoryA: Pointer;

function FtpGetCurrentDirectoryA;
begin
  GetProcedureAddress(_FtpGetCurrentDirectoryA, winetdll, 'FtpGetCurrentDirectoryA');
  asm
        MOV     ESP, EBP
        POP     EBP
        JMP     [_FtpGetCurrentDirectoryA]
  end;
end;

var
  _FtpCommandA: Pointer;

function FtpCommandA;
begin
  GetProcedureAddress(_FtpCommandA, winetdll, 'FtpCommandA');
  asm
        MOV     ESP, EBP
        POP     EBP
        JMP     [_FtpCommandA]
  end;
end;

var
  _FtpDeleteFileW: Pointer;

function FtpDeleteFileW;
begin
  GetProcedureAddress(_FtpDeleteFileW, winetdll, 'FtpDeleteFileW');
  asm
        MOV     ESP, EBP
        POP     EBP
        JMP     [_FtpDeleteFileW]
  end;
end;

var
  _FtpRenameFileW: Pointer;

function FtpRenameFileW;
begin
  GetProcedureAddress(_FtpRenameFileW, winetdll, 'FtpRenameFileW');
  asm
        MOV     ESP, EBP
        POP     EBP
        JMP     [_FtpRenameFileW]
  end;
end;

var
  _FtpOpenFileW: Pointer;

function FtpOpenFileW;
begin
  GetProcedureAddress(_FtpOpenFileW, winetdll, 'FtpOpenFileW');
  asm
        MOV     ESP, EBP
        POP     EBP
        JMP     [_FtpOpenFileW]
  end;
end;

var
  _FtpCreateDirectoryW: Pointer;

function FtpCreateDirectoryW;
begin
  GetProcedureAddress(_FtpCreateDirectoryW, winetdll, 'FtpCreateDirectoryW');
  asm
        MOV     ESP, EBP
        POP     EBP
        JMP     [_FtpCreateDirectoryW]
  end;
end;

var
  _FtpRemoveDirectoryW: Pointer;

function FtpRemoveDirectoryW;
begin
  GetProcedureAddress(_FtpRemoveDirectoryW, winetdll, 'FtpRemoveDirectoryW');
  asm
        MOV     ESP, EBP
        POP     EBP
        JMP     [_FtpRemoveDirectoryW]
  end;
end;

var
  _FtpSetCurrentDirectoryW: Pointer;

function FtpSetCurrentDirectoryW;
begin
  GetProcedureAddress(_FtpSetCurrentDirectoryW, winetdll, 'FtpSetCurrentDirectoryW');
  asm
        MOV     ESP, EBP
        POP     EBP
        JMP     [_FtpSetCurrentDirectoryW]
  end;
end;

var
  _FtpGetCurrentDirectoryW: Pointer;

function FtpGetCurrentDirectoryW;
begin
  GetProcedureAddress(_FtpGetCurrentDirectoryW, winetdll, 'FtpGetCurrentDirectoryW');
  asm
        MOV     ESP, EBP
        POP     EBP
        JMP     [_FtpGetCurrentDirectoryW]
  end;
end;

var
  _FtpCommandW: Pointer;

function FtpCommandW;
begin
  GetProcedureAddress(_FtpCommandW, winetdll, 'FtpCommandW');
  asm
        MOV     ESP, EBP
        POP     EBP
        JMP     [_FtpCommandW]
  end;
end;

var
  _FtpDeleteFile: Pointer;

function FtpDeleteFile;
begin
  GetProcedureAddress(_FtpDeleteFile, winetdll, 'FtpDeleteFile');
  asm
        MOV     ESP, EBP
        POP     EBP
        JMP     [_FtpDeleteFile]
  end;
end;

var
  _FtpRenameFile: Pointer;

function FtpRenameFile;
begin
  GetProcedureAddress(_FtpRenameFile, winetdll, 'FtpRenameFile');
  asm
        MOV     ESP, EBP
        POP     EBP
        JMP     [_FtpRenameFile]
  end;
end;

var
  _FtpOpenFile: Pointer;

function FtpOpenFile;
begin
  GetProcedureAddress(_FtpOpenFile, winetdll, 'FtpOpenFile');
  asm
        MOV     ESP, EBP
        POP     EBP
        JMP     [_FtpOpenFile]
  end;
end;

var
  _FtpCreateDirectory: Pointer;

function FtpCreateDirectory;
begin
  GetProcedureAddress(_FtpCreateDirectory, winetdll, 'FtpCreateDirectory');
  asm
        MOV     ESP, EBP
        POP     EBP
        JMP     [_FtpCreateDirectory]
  end;
end;

var
  _FtpRemoveDirectory: Pointer;

function FtpRemoveDirectory;
begin
  GetProcedureAddress(_FtpRemoveDirectory, winetdll, 'FtpRemoveDirectory');
  asm
        MOV     ESP, EBP
        POP     EBP
        JMP     [_FtpRemoveDirectory]
  end;
end;

var
  _FtpSetCurrentDirectory: Pointer;

function FtpSetCurrentDirectory;
begin
  GetProcedureAddress(_FtpSetCurrentDirectory, winetdll, 'FtpSetCurrentDirectory');
  asm
        MOV     ESP, EBP
        POP     EBP
        JMP     [_FtpSetCurrentDirectory]
  end;
end;

var
  _FtpGetCurrentDirectory: Pointer;

function FtpGetCurrentDirectory;
begin
  GetProcedureAddress(_FtpGetCurrentDirectory, winetdll, 'FtpGetCurrentDirectory');
  asm
        MOV     ESP, EBP
        POP     EBP
        JMP     [_FtpGetCurrentDirectory]
  end;
end;

var
  _FtpCommand: Pointer;

function FtpCommand;
begin
  GetProcedureAddress(_FtpCommand, winetdll, 'FtpCommand');
  asm
        MOV     ESP, EBP
        POP     EBP
        JMP     [_FtpCommand]
  end;
end;

var
  _FtpGetFileSize: Pointer;

function FtpGetFileSize;
begin
  GetProcedureAddress(_FtpGetFileSize, winetdll, 'FtpGetFileSize');
  asm
        MOV     ESP, EBP
        POP     EBP
        JMP     [_FtpGetFileSize]
  end;
end;

var
  _GopherCreateLocatorA: Pointer;

function GopherCreateLocatorA;
begin
  GetProcedureAddress(_GopherCreateLocatorA, winetdll, 'GopherCreateLocatorA');
  asm
        MOV     ESP, EBP
        POP     EBP
        JMP     [_GopherCreateLocatorA]
  end;
end;

var
  _GopherGetLocatorTypeA: Pointer;

function GopherGetLocatorTypeA;
begin
  GetProcedureAddress(_GopherGetLocatorTypeA, winetdll, 'GopherGetLocatorTypeA');
  asm
        MOV     ESP, EBP
        POP     EBP
        JMP     [_GopherGetLocatorTypeA]
  end;
end;

var
  _GopherFindFirstFileA: Pointer;

function GopherFindFirstFileA;
begin
  GetProcedureAddress(_GopherFindFirstFileA, winetdll, 'GopherFindFirstFileA');
  asm
        MOV     ESP, EBP
        POP     EBP
        JMP     [_GopherFindFirstFileA]
  end;
end;

var
  _GopherOpenFileA: Pointer;

function GopherOpenFileA;
begin
  GetProcedureAddress(_GopherOpenFileA, winetdll, 'GopherOpenFileA');
  asm
        MOV     ESP, EBP
        POP     EBP
        JMP     [_GopherOpenFileA]
  end;
end;

var
  _GopherGetAttributeA: Pointer;

function GopherGetAttributeA;
begin
  GetProcedureAddress(_GopherGetAttributeA, winetdll, 'GopherGetAttributeA');
  asm
        MOV     ESP, EBP
        POP     EBP
        JMP     [_GopherGetAttributeA]
  end;
end;

var
  _HttpOpenRequestA: Pointer;

function HttpOpenRequestA;
begin
  GetProcedureAddress(_HttpOpenRequestA, winetdll, 'HttpOpenRequestA');
  asm
        MOV     ESP, EBP
        POP     EBP
        JMP     [_HttpOpenRequestA]
  end;
end;

var
  _HttpAddRequestHeadersA: Pointer;

function HttpAddRequestHeadersA;
begin
  GetProcedureAddress(_HttpAddRequestHeadersA, winetdll, 'HttpAddRequestHeadersA');
  asm
        MOV     ESP, EBP
        POP     EBP
        JMP     [_HttpAddRequestHeadersA]
  end;
end;

var
  _HttpSendRequestA: Pointer;

function HttpSendRequestA;
begin
  GetProcedureAddress(_HttpSendRequestA, winetdll, 'HttpSendRequestA');
  asm
        MOV     ESP, EBP
        POP     EBP
        JMP     [_HttpSendRequestA]
  end;
end;

var
  _HttpSendRequestExA: Pointer;

function HttpSendRequestExA;
begin
  GetProcedureAddress(_HttpSendRequestExA, winetdll, 'HttpSendRequestExA');
  asm
        MOV     ESP, EBP
        POP     EBP
        JMP     [_HttpSendRequestExA]
  end;
end;

var
  _HttpEndRequestA: Pointer;

function HttpEndRequestA;
begin
  GetProcedureAddress(_HttpEndRequestA, winetdll, 'HttpEndRequestA');
  asm
        MOV     ESP, EBP
        POP     EBP
        JMP     [_HttpEndRequestA]
  end;
end;

var
  _HttpQueryInfoA: Pointer;

function HttpQueryInfoA;
begin
  GetProcedureAddress(_HttpQueryInfoA, winetdll, 'HttpQueryInfoA');
  asm
        MOV     ESP, EBP
        POP     EBP
        JMP     [_HttpQueryInfoA]
  end;
end;

var
  _InternetSetCookieA: Pointer;

function InternetSetCookieA;
begin
  GetProcedureAddress(_InternetSetCookieA, winetdll, 'InternetSetCookieA');
  asm
        MOV     ESP, EBP
        POP     EBP
        JMP     [_InternetSetCookieA]
  end;
end;

var
  _InternetGetCookieA: Pointer;

function InternetGetCookieA;
begin
  GetProcedureAddress(_InternetGetCookieA, winetdll, 'InternetGetCookieA');
  asm
        MOV     ESP, EBP
        POP     EBP
        JMP     [_InternetGetCookieA]
  end;
end;

var
  _GopherCreateLocatorW: Pointer;

function GopherCreateLocatorW;
begin
  GetProcedureAddress(_GopherCreateLocatorW, winetdll, 'GopherCreateLocatorW');
  asm
        MOV     ESP, EBP
        POP     EBP
        JMP     [_GopherCreateLocatorW]
  end;
end;

var
  _GopherGetLocatorTypeW: Pointer;

function GopherGetLocatorTypeW;
begin
  GetProcedureAddress(_GopherGetLocatorTypeW, winetdll, 'GopherGetLocatorTypeW');
  asm
        MOV     ESP, EBP
        POP     EBP
        JMP     [_GopherGetLocatorTypeW]
  end;
end;

var
  _GopherFindFirstFileW: Pointer;

function GopherFindFirstFileW;
begin
  GetProcedureAddress(_GopherFindFirstFileW, winetdll, 'GopherFindFirstFileW');
  asm
        MOV     ESP, EBP
        POP     EBP
        JMP     [_GopherFindFirstFileW]
  end;
end;

var
  _GopherOpenFileW: Pointer;

function GopherOpenFileW;
begin
  GetProcedureAddress(_GopherOpenFileW, winetdll, 'GopherOpenFileW');
  asm
        MOV     ESP, EBP
        POP     EBP
        JMP     [_GopherOpenFileW]
  end;
end;

var
  _GopherGetAttributeW: Pointer;

function GopherGetAttributeW;
begin
  GetProcedureAddress(_GopherGetAttributeW, winetdll, 'GopherGetAttributeW');
  asm
        MOV     ESP, EBP
        POP     EBP
        JMP     [_GopherGetAttributeW]
  end;
end;

var
  _HttpOpenRequestW: Pointer;

function HttpOpenRequestW;
begin
  GetProcedureAddress(_HttpOpenRequestW, winetdll, 'HttpOpenRequestW');
  asm
        MOV     ESP, EBP
        POP     EBP
        JMP     [_HttpOpenRequestW]
  end;
end;

var
  _HttpAddRequestHeadersW: Pointer;

function HttpAddRequestHeadersW;
begin
  GetProcedureAddress(_HttpAddRequestHeadersW, winetdll, 'HttpAddRequestHeadersW');
  asm
        MOV     ESP, EBP
        POP     EBP
        JMP     [_HttpAddRequestHeadersW]
  end;
end;

var
  _HttpSendRequestW: Pointer;

function HttpSendRequestW;
begin
  GetProcedureAddress(_HttpSendRequestW, winetdll, 'HttpSendRequestW');
  asm
        MOV     ESP, EBP
        POP     EBP
        JMP     [_HttpSendRequestW]
  end;
end;

var
  _HttpSendRequestExW: Pointer;

function HttpSendRequestExW;
begin
  GetProcedureAddress(_HttpSendRequestExW, winetdll, 'HttpSendRequestExW');
  asm
        MOV     ESP, EBP
        POP     EBP
        JMP     [_HttpSendRequestExW]
  end;
end;

var
  _HttpEndRequestW: Pointer;

function HttpEndRequestW;
begin
  GetProcedureAddress(_HttpEndRequestW, winetdll, 'HttpEndRequestW');
  asm
        MOV     ESP, EBP
        POP     EBP
        JMP     [_HttpEndRequestW]
  end;
end;

var
  _HttpQueryInfoW: Pointer;

function HttpQueryInfoW;
begin
  GetProcedureAddress(_HttpQueryInfoW, winetdll, 'HttpQueryInfoW');
  asm
        MOV     ESP, EBP
        POP     EBP
        JMP     [_HttpQueryInfoW]
  end;
end;

var
  _InternetSetCookieW: Pointer;

function InternetSetCookieW;
begin
  GetProcedureAddress(_InternetSetCookieW, winetdll, 'InternetSetCookieW');
  asm
        MOV     ESP, EBP
        POP     EBP
        JMP     [_InternetSetCookieW]
  end;
end;

var
  _InternetGetCookieW: Pointer;

function InternetGetCookieW;
begin
  GetProcedureAddress(_InternetGetCookieW, winetdll, 'InternetGetCookieW');
  asm
        MOV     ESP, EBP
        POP     EBP
        JMP     [_InternetGetCookieW]
  end;
end;

var
  _GopherCreateLocator: Pointer;

function GopherCreateLocator;
begin
  GetProcedureAddress(_GopherCreateLocator, winetdll, 'GopherCreateLocator');
  asm
        MOV     ESP, EBP
        POP     EBP
        JMP     [_GopherCreateLocator]
  end;
end;

var
  _GopherGetLocatorType: Pointer;

function GopherGetLocatorType;
begin
  GetProcedureAddress(_GopherGetLocatorType, winetdll, 'GopherGetLocatorType');
  asm
        MOV     ESP, EBP
        POP     EBP
        JMP     [_GopherGetLocatorType]
  end;
end;

var
  _GopherFindFirstFile: Pointer;

function GopherFindFirstFile;
begin
  GetProcedureAddress(_GopherFindFirstFile, winetdll, 'GopherFindFirstFile');
  asm
        MOV     ESP, EBP
        POP     EBP
        JMP     [_GopherFindFirstFile]
  end;
end;

var
  _GopherOpenFile: Pointer;

function GopherOpenFile;
begin
  GetProcedureAddress(_GopherOpenFile, winetdll, 'GopherOpenFile');
  asm
        MOV     ESP, EBP
        POP     EBP
        JMP     [_GopherOpenFile]
  end;
end;

var
  _GopherGetAttribute: Pointer;

function GopherGetAttribute;
begin
  GetProcedureAddress(_GopherGetAttribute, winetdll, 'GopherGetAttribute');
  asm
        MOV     ESP, EBP
        POP     EBP
        JMP     [_GopherGetAttribute]
  end;
end;

var
  _HttpOpenRequest: Pointer;

function HttpOpenRequest;
begin
  GetProcedureAddress(_HttpOpenRequest, winetdll, 'HttpOpenRequest');
  asm
        MOV     ESP, EBP
        POP     EBP
        JMP     [_HttpOpenRequest]
  end;
end;

var
  _HttpAddRequestHeaders: Pointer;

function HttpAddRequestHeaders;
begin
  GetProcedureAddress(_HttpAddRequestHeaders, winetdll, 'HttpAddRequestHeaders');
  asm
        MOV     ESP, EBP
        POP     EBP
        JMP     [_HttpAddRequestHeaders]
  end;
end;

var
  _HttpSendRequest: Pointer;

function HttpSendRequest;
begin
  GetProcedureAddress(_HttpSendRequest, winetdll, 'HttpSendRequest');
  asm
        MOV     ESP, EBP
        POP     EBP
        JMP     [_HttpSendRequest]
  end;
end;

var
  _HttpSendRequestEx: Pointer;

function HttpSendRequestEx;
begin
  GetProcedureAddress(_HttpSendRequestEx, winetdll, 'HttpSendRequestEx');
  asm
        MOV     ESP, EBP
        POP     EBP
        JMP     [_HttpSendRequestEx]
  end;
end;

var
  _HttpEndRequest: Pointer;

function HttpEndRequest;
begin
  GetProcedureAddress(_HttpEndRequest, winetdll, 'HttpEndRequest');
  asm
        MOV     ESP, EBP
        POP     EBP
        JMP     [_HttpEndRequest]
  end;
end;

var
  _HttpQueryInfo: Pointer;

function HttpQueryInfo;
begin
  GetProcedureAddress(_HttpQueryInfo, winetdll, 'HttpQueryInfo');
  asm
        MOV     ESP, EBP
        POP     EBP
        JMP     [_HttpQueryInfo]
  end;
end;

var
  _InternetSetCookie: Pointer;

function InternetSetCookie;
begin
  GetProcedureAddress(_InternetSetCookie, winetdll, 'InternetSetCookie');
  asm
        MOV     ESP, EBP
        POP     EBP
        JMP     [_InternetSetCookie]
  end;
end;

var
  _InternetGetCookie: Pointer;

function InternetGetCookie;
begin
  GetProcedureAddress(_InternetGetCookie, winetdll, 'InternetGetCookie');
  asm
        MOV     ESP, EBP
        POP     EBP
        JMP     [_InternetGetCookie]
  end;
end;

var
  _InternetAttemptConnect: Pointer;

function InternetAttemptConnect;
begin
  GetProcedureAddress(_InternetAttemptConnect, winetdll, 'InternetAttemptConnect');
  asm
        MOV     ESP, EBP
        POP     EBP
        JMP     [_InternetAttemptConnect]
  end;
end;

var
  _InternetCheckConnectionA: Pointer;

function InternetCheckConnectionA;
begin
  GetProcedureAddress(_InternetCheckConnectionA, winetdll, 'InternetCheckConnectionA');
  asm
        MOV     ESP, EBP
        POP     EBP
        JMP     [_InternetCheckConnectionA]
  end;
end;

var
  _InternetCheckConnectionW: Pointer;

function InternetCheckConnectionW;
begin
  GetProcedureAddress(_InternetCheckConnectionW, winetdll, 'InternetCheckConnectionW');
  asm
        MOV     ESP, EBP
        POP     EBP
        JMP     [_InternetCheckConnectionW]
  end;
end;

var
  _InternetCheckConnection: Pointer;

function InternetCheckConnection;
begin
  GetProcedureAddress(_InternetCheckConnection, winetdll, 'InternetCheckConnection');
  asm
        MOV     ESP, EBP
        POP     EBP
        JMP     [_InternetCheckConnection]
  end;
end;

var
  _InternetAuthNotifyCallback: Pointer;

function InternetAuthNotifyCallback;
begin
  GetProcedureAddress(_InternetAuthNotifyCallback, winetdll, 'InternetAuthNotifyCallback');
  asm
        MOV     ESP, EBP
        POP     EBP
        JMP     [_InternetAuthNotifyCallback]
  end;
end;

var
  _InternetErrorDlg: Pointer;

function InternetErrorDlg;
begin
  GetProcedureAddress(_InternetErrorDlg, winetdll, 'InternetErrorDlg');
  asm
        MOV     ESP, EBP
        POP     EBP
        JMP     [_InternetErrorDlg]
  end;
end;

var
  _ResumeSuspendedDownload: Pointer;

function ResumeSuspendedDownload;
begin
  GetProcedureAddress(_ResumeSuspendedDownload, winetdll, 'ResumeSuspendedDownload');
  asm
        MOV     ESP, EBP
        POP     EBP
        JMP     [_ResumeSuspendedDownload]
  end;
end;

var
  _InternetConfirmZoneCrossingA: Pointer;

function InternetConfirmZoneCrossingA;
begin
  GetProcedureAddress(_InternetConfirmZoneCrossingA, winetdll, 'InternetConfirmZoneCrossingA');
  asm
        MOV     ESP, EBP
        POP     EBP
        JMP     [_InternetConfirmZoneCrossingA]
  end;
end;

var
  _CreateUrlCacheEntryA: Pointer;

function CreateUrlCacheEntryA;
begin
  GetProcedureAddress(_CreateUrlCacheEntryA, winetdll, 'CreateUrlCacheEntryA');
  asm
        MOV     ESP, EBP
        POP     EBP
        JMP     [_CreateUrlCacheEntryA]
  end;
end;

var
  _CommitUrlCacheEntryA: Pointer;

function CommitUrlCacheEntryA;
begin
  GetProcedureAddress(_CommitUrlCacheEntryA, winetdll, 'CommitUrlCacheEntryA');
  asm
        MOV     ESP, EBP
        POP     EBP
        JMP     [_CommitUrlCacheEntryA]
  end;
end;

var
  _RetrieveUrlCacheEntryFileA: Pointer;

function RetrieveUrlCacheEntryFileA;
begin
  GetProcedureAddress(_RetrieveUrlCacheEntryFileA, winetdll, 'RetrieveUrlCacheEntryFileA');
  asm
        MOV     ESP, EBP
        POP     EBP
        JMP     [_RetrieveUrlCacheEntryFileA]
  end;
end;

var
  _UnlockUrlCacheEntryFileA: Pointer;

function UnlockUrlCacheEntryFileA;
begin
  GetProcedureAddress(_UnlockUrlCacheEntryFileA, winetdll, 'UnlockUrlCacheEntryFileA');
  asm
        MOV     ESP, EBP
        POP     EBP
        JMP     [_UnlockUrlCacheEntryFileA]
  end;
end;

var
  _RetrieveUrlCacheEntryStreamA: Pointer;

function RetrieveUrlCacheEntryStreamA;
begin
  GetProcedureAddress(_RetrieveUrlCacheEntryStreamA, winetdll, 'RetrieveUrlCacheEntryStreamA');
  asm
        MOV     ESP, EBP
        POP     EBP
        JMP     [_RetrieveUrlCacheEntryStreamA]
  end;
end;

var
  _InternetConfirmZoneCrossingW: Pointer;

function InternetConfirmZoneCrossingW;
begin
  GetProcedureAddress(_InternetConfirmZoneCrossingW, winetdll, 'InternetConfirmZoneCrossingW');
  asm
        MOV     ESP, EBP
        POP     EBP
        JMP     [_InternetConfirmZoneCrossingW]
  end;
end;

var
  _CreateUrlCacheEntryW: Pointer;

function CreateUrlCacheEntryW;
begin
  GetProcedureAddress(_CreateUrlCacheEntryW, winetdll, 'CreateUrlCacheEntryW');
  asm
        MOV     ESP, EBP
        POP     EBP
        JMP     [_CreateUrlCacheEntryW]
  end;
end;

var
  _CommitUrlCacheEntryW: Pointer;

function CommitUrlCacheEntryW;
begin
  GetProcedureAddress(_CommitUrlCacheEntryW, winetdll, 'CommitUrlCacheEntryW');
  asm
        MOV     ESP, EBP
        POP     EBP
        JMP     [_CommitUrlCacheEntryW]
  end;
end;

var
  _RetrieveUrlCacheEntryFileW: Pointer;

function RetrieveUrlCacheEntryFileW;
begin
  GetProcedureAddress(_RetrieveUrlCacheEntryFileW, winetdll, 'RetrieveUrlCacheEntryFileW');
  asm
        MOV     ESP, EBP
        POP     EBP
        JMP     [_RetrieveUrlCacheEntryFileW]
  end;
end;

var
  _UnlockUrlCacheEntryFileW: Pointer;

function UnlockUrlCacheEntryFileW;
begin
  GetProcedureAddress(_UnlockUrlCacheEntryFileW, winetdll, 'UnlockUrlCacheEntryFileW');
  asm
        MOV     ESP, EBP
        POP     EBP
        JMP     [_UnlockUrlCacheEntryFileW]
  end;
end;

var
  _RetrieveUrlCacheEntryStreamW: Pointer;

function RetrieveUrlCacheEntryStreamW;
begin
  GetProcedureAddress(_RetrieveUrlCacheEntryStreamW, winetdll, 'RetrieveUrlCacheEntryStreamW');
  asm
        MOV     ESP, EBP
        POP     EBP
        JMP     [_RetrieveUrlCacheEntryStreamW]
  end;
end;

var
  _InternetConfirmZoneCrossing: Pointer;

function InternetConfirmZoneCrossing;
begin
  GetProcedureAddress(_InternetConfirmZoneCrossing, winetdll, 'InternetConfirmZoneCrossing');
  asm
        MOV     ESP, EBP
        POP     EBP
        JMP     [_InternetConfirmZoneCrossing]
  end;
end;

var
  _CreateUrlCacheEntry: Pointer;

function CreateUrlCacheEntry;
begin
  GetProcedureAddress(_CreateUrlCacheEntry, winetdll, 'CreateUrlCacheEntry');
  asm
        MOV     ESP, EBP
        POP     EBP
        JMP     [_CreateUrlCacheEntry]
  end;
end;

var
  _CommitUrlCacheEntry: Pointer;

function CommitUrlCacheEntry;
begin
  GetProcedureAddress(_CommitUrlCacheEntry, winetdll, 'CommitUrlCacheEntry');
  asm
        MOV     ESP, EBP
        POP     EBP
        JMP     [_CommitUrlCacheEntry]
  end;
end;

var
  _RetrieveUrlCacheEntryFile: Pointer;

function RetrieveUrlCacheEntryFile;
begin
  GetProcedureAddress(_RetrieveUrlCacheEntryFile, winetdll, 'RetrieveUrlCacheEntryFile');
  asm
        MOV     ESP, EBP
        POP     EBP
        JMP     [_RetrieveUrlCacheEntryFile]
  end;
end;

var
  _UnlockUrlCacheEntryFile: Pointer;

function UnlockUrlCacheEntryFile;
begin
  GetProcedureAddress(_UnlockUrlCacheEntryFile, winetdll, 'UnlockUrlCacheEntryFile');
  asm
        MOV     ESP, EBP
        POP     EBP
        JMP     [_UnlockUrlCacheEntryFile]
  end;
end;

var
  _RetrieveUrlCacheEntryStream: Pointer;

function RetrieveUrlCacheEntryStream;
begin
  GetProcedureAddress(_RetrieveUrlCacheEntryStream, winetdll, 'RetrieveUrlCacheEntryStream');
  asm
        MOV     ESP, EBP
        POP     EBP
        JMP     [_RetrieveUrlCacheEntryStream]
  end;
end;

var
  _ReadUrlCacheEntryStream: Pointer;

function ReadUrlCacheEntryStream;
begin
  GetProcedureAddress(_ReadUrlCacheEntryStream, winetdll, 'ReadUrlCacheEntryStream');
  asm
        MOV     ESP, EBP
        POP     EBP
        JMP     [_ReadUrlCacheEntryStream]
  end;
end;

var
  _UnlockUrlCacheEntryStream: Pointer;

function UnlockUrlCacheEntryStream;
begin
  GetProcedureAddress(_UnlockUrlCacheEntryStream, winetdll, 'UnlockUrlCacheEntryStream');
  asm
        MOV     ESP, EBP
        POP     EBP
        JMP     [_UnlockUrlCacheEntryStream]
  end;
end;

var
  _GetUrlCacheEntryInfoA: Pointer;

function GetUrlCacheEntryInfoA;
begin
  GetProcedureAddress(_GetUrlCacheEntryInfoA, winetdll, 'GetUrlCacheEntryInfoA');
  asm
        MOV     ESP, EBP
        POP     EBP
        JMP     [_GetUrlCacheEntryInfoA]
  end;
end;

var
  _GetUrlCacheEntryInfoW: Pointer;

function GetUrlCacheEntryInfoW;
begin
  GetProcedureAddress(_GetUrlCacheEntryInfoW, winetdll, 'GetUrlCacheEntryInfoW');
  asm
        MOV     ESP, EBP
        POP     EBP
        JMP     [_GetUrlCacheEntryInfoW]
  end;
end;

var
  _GetUrlCacheEntryInfo: Pointer;

function GetUrlCacheEntryInfo;
begin
  GetProcedureAddress(_GetUrlCacheEntryInfo, winetdll, 'GetUrlCacheEntryInfo');
  asm
        MOV     ESP, EBP
        POP     EBP
        JMP     [_GetUrlCacheEntryInfo]
  end;
end;

var
  _FindFirstUrlCacheGroup: Pointer;

function FindFirstUrlCacheGroup;
begin
  GetProcedureAddress(_FindFirstUrlCacheGroup, winetdll, 'FindFirstUrlCacheGroup');
  asm
        MOV     ESP, EBP
        POP     EBP
        JMP     [_FindFirstUrlCacheGroup]
  end;
end;

var
  _FindNextUrlCacheGroup: Pointer;

function FindNextUrlCacheGroup;
begin
  GetProcedureAddress(_FindNextUrlCacheGroup, winetdll, 'FindNextUrlCacheGroup');
  asm
        MOV     ESP, EBP
        POP     EBP
        JMP     [_FindNextUrlCacheGroup]
  end;
end;

var
  _GetUrlCacheGroupAttributeA: Pointer;

function GetUrlCacheGroupAttributeA;
begin
  GetProcedureAddress(_GetUrlCacheGroupAttributeA, winetdll, 'GetUrlCacheGroupAttributeA');
  asm
        MOV     ESP, EBP
        POP     EBP
        JMP     [_GetUrlCacheGroupAttributeA]
  end;
end;

var
  _SetUrlCacheGroupAttributeA: Pointer;

function SetUrlCacheGroupAttributeA;
begin
  GetProcedureAddress(_SetUrlCacheGroupAttributeA, winetdll, 'SetUrlCacheGroupAttributeA');
  asm
        MOV     ESP, EBP
        POP     EBP
        JMP     [_SetUrlCacheGroupAttributeA]
  end;
end;

var
  _GetUrlCacheEntryInfoExA: Pointer;

function GetUrlCacheEntryInfoExA;
begin
  GetProcedureAddress(_GetUrlCacheEntryInfoExA, winetdll, 'GetUrlCacheEntryInfoExA');
  asm
        MOV     ESP, EBP
        POP     EBP
        JMP     [_GetUrlCacheEntryInfoExA]
  end;
end;

var
  _SetUrlCacheEntryInfoA: Pointer;

function SetUrlCacheEntryInfoA;
begin
  GetProcedureAddress(_SetUrlCacheEntryInfoA, winetdll, 'SetUrlCacheEntryInfoA');
  asm
        MOV     ESP, EBP
        POP     EBP
        JMP     [_SetUrlCacheEntryInfoA]
  end;
end;

var
  _GetUrlCacheGroupAttributeW: Pointer;

function GetUrlCacheGroupAttributeW;
begin
  GetProcedureAddress(_GetUrlCacheGroupAttributeW, winetdll, 'GetUrlCacheGroupAttributeW');
  asm
        MOV     ESP, EBP
        POP     EBP
        JMP     [_GetUrlCacheGroupAttributeW]
  end;
end;

var
  _SetUrlCacheGroupAttributeW: Pointer;

function SetUrlCacheGroupAttributeW;
begin
  GetProcedureAddress(_SetUrlCacheGroupAttributeW, winetdll, 'SetUrlCacheGroupAttributeW');
  asm
        MOV     ESP, EBP
        POP     EBP
        JMP     [_SetUrlCacheGroupAttributeW]
  end;
end;

var
  _GetUrlCacheEntryInfoExW: Pointer;

function GetUrlCacheEntryInfoExW;
begin
  GetProcedureAddress(_GetUrlCacheEntryInfoExW, winetdll, 'GetUrlCacheEntryInfoExW');
  asm
        MOV     ESP, EBP
        POP     EBP
        JMP     [_GetUrlCacheEntryInfoExW]
  end;
end;

var
  _SetUrlCacheEntryInfoW: Pointer;

function SetUrlCacheEntryInfoW;
begin
  GetProcedureAddress(_SetUrlCacheEntryInfoW, winetdll, 'SetUrlCacheEntryInfoW');
  asm
        MOV     ESP, EBP
        POP     EBP
        JMP     [_SetUrlCacheEntryInfoW]
  end;
end;

var
  _GetUrlCacheGroupAttribute: Pointer;

function GetUrlCacheGroupAttribute;
begin
  GetProcedureAddress(_GetUrlCacheGroupAttribute, winetdll, 'GetUrlCacheGroupAttribute');
  asm
        MOV     ESP, EBP
        POP     EBP
        JMP     [_GetUrlCacheGroupAttribute]
  end;
end;

var
  _SetUrlCacheGroupAttribute: Pointer;

function SetUrlCacheGroupAttribute;
begin
  GetProcedureAddress(_SetUrlCacheGroupAttribute, winetdll, 'SetUrlCacheGroupAttribute');
  asm
        MOV     ESP, EBP
        POP     EBP
        JMP     [_SetUrlCacheGroupAttribute]
  end;
end;

var
  _GetUrlCacheEntryInfoEx: Pointer;

function GetUrlCacheEntryInfoEx;
begin
  GetProcedureAddress(_GetUrlCacheEntryInfoEx, winetdll, 'GetUrlCacheEntryInfoEx');
  asm
        MOV     ESP, EBP
        POP     EBP
        JMP     [_GetUrlCacheEntryInfoEx]
  end;
end;

var
  _SetUrlCacheEntryInfo: Pointer;

function SetUrlCacheEntryInfo;
begin
  GetProcedureAddress(_SetUrlCacheEntryInfo, winetdll, 'SetUrlCacheEntryInfo');
  asm
        MOV     ESP, EBP
        POP     EBP
        JMP     [_SetUrlCacheEntryInfo]
  end;
end;

var
  _CreateUrlCacheGroup: Pointer;

function CreateUrlCacheGroup;
begin
  GetProcedureAddress(_CreateUrlCacheGroup, winetdll, 'CreateUrlCacheGroup');
  asm
        MOV     ESP, EBP
        POP     EBP
        JMP     [_CreateUrlCacheGroup]
  end;
end;

var
  _DeleteUrlCacheGroup: Pointer;

function DeleteUrlCacheGroup;
begin
  GetProcedureAddress(_DeleteUrlCacheGroup, winetdll, 'DeleteUrlCacheGroup');
  asm
        MOV     ESP, EBP
        POP     EBP
        JMP     [_DeleteUrlCacheGroup]
  end;
end;

var
  _SetUrlCacheEntryGroupA: Pointer;

function SetUrlCacheEntryGroupA;
begin
  GetProcedureAddress(_SetUrlCacheEntryGroupA, winetdll, 'SetUrlCacheEntryGroupA');
  asm
        MOV     ESP, EBP
        POP     EBP
        JMP     [_SetUrlCacheEntryGroupA]
  end;
end;

var
  _FindFirstUrlCacheEntryExA: Pointer;

function FindFirstUrlCacheEntryExA;
begin
  GetProcedureAddress(_FindFirstUrlCacheEntryExA, winetdll, 'FindFirstUrlCacheEntryExA');
  asm
        MOV     ESP, EBP
        POP     EBP
        JMP     [_FindFirstUrlCacheEntryExA]
  end;
end;

var
  _FindNextUrlCacheEntryExA: Pointer;

function FindNextUrlCacheEntryExA;
begin
  GetProcedureAddress(_FindNextUrlCacheEntryExA, winetdll, 'FindNextUrlCacheEntryExA');
  asm
        MOV     ESP, EBP
        POP     EBP
        JMP     [_FindNextUrlCacheEntryExA]
  end;
end;

var
  _FindFirstUrlCacheEntryA: Pointer;

function FindFirstUrlCacheEntryA;
begin
  GetProcedureAddress(_FindFirstUrlCacheEntryA, winetdll, 'FindFirstUrlCacheEntryA');
  asm
        MOV     ESP, EBP
        POP     EBP
        JMP     [_FindFirstUrlCacheEntryA]
  end;
end;

var
  _FindNextUrlCacheEntryA: Pointer;

function FindNextUrlCacheEntryA;
begin
  GetProcedureAddress(_FindNextUrlCacheEntryA, winetdll, 'FindNextUrlCacheEntryA');
  asm
        MOV     ESP, EBP
        POP     EBP
        JMP     [_FindNextUrlCacheEntryA]
  end;
end;

var
  _SetUrlCacheEntryGroupW: Pointer;

function SetUrlCacheEntryGroupW;
begin
  GetProcedureAddress(_SetUrlCacheEntryGroupW, winetdll, 'SetUrlCacheEntryGroupW');
  asm
        MOV     ESP, EBP
        POP     EBP
        JMP     [_SetUrlCacheEntryGroupW]
  end;
end;

var
  _FindFirstUrlCacheEntryExW: Pointer;

function FindFirstUrlCacheEntryExW;
begin
  GetProcedureAddress(_FindFirstUrlCacheEntryExW, winetdll, 'FindFirstUrlCacheEntryExW');
  asm
        MOV     ESP, EBP
        POP     EBP
        JMP     [_FindFirstUrlCacheEntryExW]
  end;
end;

var
  _FindNextUrlCacheEntryExW: Pointer;

function FindNextUrlCacheEntryExW;
begin
  GetProcedureAddress(_FindNextUrlCacheEntryExW, winetdll, 'FindNextUrlCacheEntryExW');
  asm
        MOV     ESP, EBP
        POP     EBP
        JMP     [_FindNextUrlCacheEntryExW]
  end;
end;

var
  _FindFirstUrlCacheEntryW: Pointer;

function FindFirstUrlCacheEntryW;
begin
  GetProcedureAddress(_FindFirstUrlCacheEntryW, winetdll, 'FindFirstUrlCacheEntryW');
  asm
        MOV     ESP, EBP
        POP     EBP
        JMP     [_FindFirstUrlCacheEntryW]
  end;
end;

var
  _FindNextUrlCacheEntryW: Pointer;

function FindNextUrlCacheEntryW;
begin
  GetProcedureAddress(_FindNextUrlCacheEntryW, winetdll, 'FindNextUrlCacheEntryW');
  asm
        MOV     ESP, EBP
        POP     EBP
        JMP     [_FindNextUrlCacheEntryW]
  end;
end;

var
  _SetUrlCacheEntryGroup: Pointer;

function SetUrlCacheEntryGroup;
begin
  GetProcedureAddress(_SetUrlCacheEntryGroup, winetdll, 'SetUrlCacheEntryGroup');
  asm
        MOV     ESP, EBP
        POP     EBP
        JMP     [_SetUrlCacheEntryGroup]
  end;
end;

var
  _FindFirstUrlCacheEntryEx: Pointer;

function FindFirstUrlCacheEntryEx;
begin
  GetProcedureAddress(_FindFirstUrlCacheEntryEx, winetdll, 'FindFirstUrlCacheEntryEx');
  asm
        MOV     ESP, EBP
        POP     EBP
        JMP     [_FindFirstUrlCacheEntryEx]
  end;
end;

var
  _FindNextUrlCacheEntryEx: Pointer;

function FindNextUrlCacheEntryEx;
begin
  GetProcedureAddress(_FindNextUrlCacheEntryEx, winetdll, 'FindNextUrlCacheEntryEx');
  asm
        MOV     ESP, EBP
        POP     EBP
        JMP     [_FindNextUrlCacheEntryEx]
  end;
end;

var
  _FindFirstUrlCacheEntry: Pointer;

function FindFirstUrlCacheEntry;
begin
  GetProcedureAddress(_FindFirstUrlCacheEntry, winetdll, 'FindFirstUrlCacheEntry');
  asm
        MOV     ESP, EBP
        POP     EBP
        JMP     [_FindFirstUrlCacheEntry]
  end;
end;

var
  _FindNextUrlCacheEntry: Pointer;

function FindNextUrlCacheEntry;
begin
  GetProcedureAddress(_FindNextUrlCacheEntry, winetdll, 'FindNextUrlCacheEntry');
  asm
        MOV     ESP, EBP
        POP     EBP
        JMP     [_FindNextUrlCacheEntry]
  end;
end;

var
  _FindCloseUrlCache: Pointer;

function FindCloseUrlCache;
begin
  GetProcedureAddress(_FindCloseUrlCache, winetdll, 'FindCloseUrlCache');
  asm
        MOV     ESP, EBP
        POP     EBP
        JMP     [_FindCloseUrlCache]
  end;
end;

var
  _DeleteUrlCacheEntryA: Pointer;

function DeleteUrlCacheEntryA;
begin
  GetProcedureAddress(_DeleteUrlCacheEntryA, winetdll, 'DeleteUrlCacheEntryA');
  asm
        MOV     ESP, EBP
        POP     EBP
        JMP     [_DeleteUrlCacheEntryA]
  end;
end;

var
  _InternetDialA: Pointer;

function InternetDialA;
begin
  GetProcedureAddress(_InternetDialA, winetdll, 'InternetDialA');
  asm
        MOV     ESP, EBP
        POP     EBP
        JMP     [_InternetDialA]
  end;
end;

var
  _DeleteUrlCacheEntryW: Pointer;

function DeleteUrlCacheEntryW;
begin
  GetProcedureAddress(_DeleteUrlCacheEntryW, winetdll, 'DeleteUrlCacheEntryW');
  asm
        MOV     ESP, EBP
        POP     EBP
        JMP     [_DeleteUrlCacheEntryW]
  end;
end;

var
  _InternetDialW: Pointer;

function InternetDialW;
begin
  GetProcedureAddress(_InternetDialW, winetdll, 'InternetDialW');
  asm
        MOV     ESP, EBP
        POP     EBP
        JMP     [_InternetDialW]
  end;
end;

var
  _DeleteUrlCacheEntry: Pointer;

function DeleteUrlCacheEntry;
begin
  GetProcedureAddress(_DeleteUrlCacheEntry, winetdll, 'DeleteUrlCacheEntry');
  asm
        MOV     ESP, EBP
        POP     EBP
        JMP     [_DeleteUrlCacheEntry]
  end;
end;

var
  _InternetDial: Pointer;

function InternetDial;
begin
  GetProcedureAddress(_InternetDial, winetdll, 'InternetDial');
  asm
        MOV     ESP, EBP
        POP     EBP
        JMP     [_InternetDial]
  end;
end;

var
  _InternetHangUp: Pointer;

function InternetHangUp;
begin
  GetProcedureAddress(_InternetHangUp, winetdll, 'InternetHangUp');
  asm
        MOV     ESP, EBP
        POP     EBP
        JMP     [_InternetHangUp]
  end;
end;

var
  _InternetGoOnlineA: Pointer;

function InternetGoOnlineA;
begin
  GetProcedureAddress(_InternetGoOnlineA, winetdll, 'InternetGoOnlineA');
  asm
        MOV     ESP, EBP
        POP     EBP
        JMP     [_InternetGoOnlineA]
  end;
end;

var
  _InternetGoOnlineW: Pointer;

function InternetGoOnlineW;
begin
  GetProcedureAddress(_InternetGoOnlineW, winetdll, 'InternetGoOnlineW');
  asm
        MOV     ESP, EBP
        POP     EBP
        JMP     [_InternetGoOnlineW]
  end;
end;

var
  _InternetGoOnline: Pointer;

function InternetGoOnline;
begin
  GetProcedureAddress(_InternetGoOnline, winetdll, 'InternetGoOnline');
  asm
        MOV     ESP, EBP
        POP     EBP
        JMP     [_InternetGoOnline]
  end;
end;

var
  _InternetAutodial: Pointer;

function InternetAutodial;
begin
  GetProcedureAddress(_InternetAutodial, winetdll, 'InternetAutodial');
  asm
        MOV     ESP, EBP
        POP     EBP
        JMP     [_InternetAutodial]
  end;
end;

var
  _InternetAutodialHangup: Pointer;

function InternetAutodialHangup;
begin
  GetProcedureAddress(_InternetAutodialHangup, winetdll, 'InternetAutodialHangup');
  asm
        MOV     ESP, EBP
        POP     EBP
        JMP     [_InternetAutodialHangup]
  end;
end;

var
  _InternetGetConnectedState: Pointer;

function InternetGetConnectedState;
begin
  GetProcedureAddress(_InternetGetConnectedState, winetdll, 'InternetGetConnectedState');
  asm
        MOV     ESP, EBP
        POP     EBP
        JMP     [_InternetGetConnectedState]
  end;
end;

var
  _InternetGetConnectedStateExA: Pointer;

function InternetGetConnectedStateExA;
begin
  GetProcedureAddress(_InternetGetConnectedStateExA, winetdll, 'InternetGetConnectedStateExA');
  asm
        MOV     ESP, EBP
        POP     EBP
        JMP     [_InternetGetConnectedStateExA]
  end;
end;

var
  _InternetGetConnectedStateExW: Pointer;

function InternetGetConnectedStateExW;
begin
  GetProcedureAddress(_InternetGetConnectedStateExW, winetdll, 'InternetGetConnectedStateExW');
  asm
        MOV     ESP, EBP
        POP     EBP
        JMP     [_InternetGetConnectedStateExW]
  end;
end;

var
  _InternetGetConnectedStateEx: Pointer;

function InternetGetConnectedStateEx;
begin
  GetProcedureAddress(_InternetGetConnectedStateEx, winetdll, 'InternetGetConnectedStateEx');
  asm
        MOV     ESP, EBP
        POP     EBP
        JMP     [_InternetGetConnectedStateEx]
  end;
end;

var
  _InternetInitializeAutoProxyDll: Pointer;

function InternetInitializeAutoProxyDll;
begin
  GetProcedureAddress(_InternetInitializeAutoProxyDll, winetdll, 'InternetInitializeAutoProxyDll');
  asm
        MOV     ESP, EBP
        POP     EBP
        JMP     [_InternetInitializeAutoProxyDll]
  end;
end;

var
  _InternetSetDialStateA: Pointer;

function InternetSetDialStateA;
begin
  GetProcedureAddress(_InternetSetDialStateA, winetdll, 'InternetSetDialStateA');
  asm
        MOV     ESP, EBP
        POP     EBP
        JMP     [_InternetSetDialStateA]
  end;
end;

var
  _InternetOpenA: Pointer;

function InternetOpenA;
begin
  GetProcedureAddress(_InternetOpenA, winetdll, 'InternetOpenA');
  asm
        MOV     ESP, EBP
        POP     EBP
        JMP     [_InternetOpenA]
  end;
end;

var
  _InternetSetDialStateW: Pointer;

function InternetSetDialStateW;
begin
  GetProcedureAddress(_InternetSetDialStateW, winetdll, 'InternetSetDialStateW');
  asm
        MOV     ESP, EBP
        POP     EBP
        JMP     [_InternetSetDialStateW]
  end;
end;

var
  _InternetOpenW: Pointer;

function InternetOpenW;
begin
  GetProcedureAddress(_InternetOpenW, winetdll, 'InternetOpenW');
  asm
        MOV     ESP, EBP
        POP     EBP
        JMP     [_InternetOpenW]
  end;
end;

var
  _InternetSetDialState: Pointer;

function InternetSetDialState;
begin
  GetProcedureAddress(_InternetSetDialState, winetdll, 'InternetSetDialState');
  asm
        MOV     ESP, EBP
        POP     EBP
        JMP     [_InternetSetDialState]
  end;
end;

var
  _InternetOpen: Pointer;

function InternetOpen;
begin
  GetProcedureAddress(_InternetOpen, winetdll, 'InternetOpen');
  asm
        MOV     ESP, EBP
        POP     EBP
        JMP     [_InternetOpen]
  end;
end;



{$ELSE}

function InternetConnectA; external winetdll name 'InternetConnectA';
function InternetConnectW; external winetdll name 'InternetConnectW';
function InternetConnect; external winetdll name 'InternetConnectA';
function InternetCloseHandle; external winetdll name 'InternetCloseHandle';
function InternetTimeFromSystemTimeA; external winetdll name 'InternetTimeFromSystemTimeA';
function InternetTimeToSystemTimeA; external winetdll name 'InternetTimeToSystemTimeA';
function InternetCrackUrlA; external winetdll name 'InternetCrackUrlA';
function InternetCreateUrlA; external winetdll name 'InternetCreateUrlA';
function InternetCanonicalizeUrlA; external winetdll name 'InternetCanonicalizeUrlA';
function InternetCombineUrlA; external winetdll name 'InternetCombineUrlA';
function InternetOpenUrlA; external winetdll name 'InternetOpenUrlA';
function InternetTimeFromSystemTimeW; external winetdll name 'InternetTimeFromSystemTimeW';
function InternetTimeToSystemTimeW; external winetdll name 'InternetTimeToSystemTimeW';
function InternetCrackUrlW; external winetdll name 'InternetCrackUrlW';
function InternetCreateUrlW; external winetdll name 'InternetCreateUrlW';
function InternetCanonicalizeUrlW; external winetdll name 'InternetCanonicalizeUrlW';
function InternetCombineUrlW; external winetdll name 'InternetCombineUrlW';
function InternetOpenUrlW; external winetdll name 'InternetOpenUrlW';
function InternetTimeFromSystemTime; external winetdll name 'InternetTimeFromSystemTimeA';
function InternetTimeToSystemTime; external winetdll name 'InternetTimeToSystemTimeA';
function InternetCrackUrl; external winetdll name 'InternetCrackUrlA';
function InternetCreateUrl; external winetdll name 'InternetCreateUrlA';
function InternetCanonicalizeUrl; external winetdll name 'InternetCanonicalizeUrlA';
function InternetCombineUrl; external winetdll name 'InternetCombineUrlA';
function InternetOpenUrl; external winetdll name 'InternetOpenUrlA';
function InternetReadFile; external winetdll name 'InternetReadFile';
function InternetReadFileExA; external winetdll name 'InternetReadFileExA';
function InternetReadFileExW; external winetdll name 'InternetReadFileExW';
function InternetReadFileEx; external winetdll name 'InternetReadFileExA';
function InternetSetFilePointer; external winetdll name 'InternetSetFilePointer';
function InternetWriteFile; external winetdll name 'InternetWriteFile';
function InternetQueryDataAvailable; external winetdll name 'InternetQueryDataAvailable';
function InternetFindNextFileA; external winetdll name 'InternetFindNextFileA';
function InternetQueryOptionA; external winetdll name 'InternetQueryOptionA';
function InternetSetOptionA; external winetdll name 'InternetSetOptionA';
function InternetSetOptionExA; external winetdll name 'InternetSetOptionExA';
function InternetFindNextFileW; external winetdll name 'InternetFindNextFileW';
function InternetQueryOptionW; external winetdll name 'InternetQueryOptionW';
function InternetSetOptionW; external winetdll name 'InternetSetOptionW';
function InternetSetOptionExW; external winetdll name 'InternetSetOptionExW';
function InternetFindNextFile; external winetdll name 'InternetFindNextFileA';
function InternetQueryOption; external winetdll name 'InternetQueryOptionA';
function InternetSetOption; external winetdll name 'InternetSetOptionA';
function InternetSetOptionEx; external winetdll name 'InternetSetOptionExA';
function InternetLockRequestFile; external winetdll name 'InternetLockRequestFile';
function InternetUnlockRequestFile; external winetdll name 'InternetUnlockRequestFile';
function InternetGetLastResponseInfoA; external winetdll name 'InternetGetLastResponseInfoA';
function InternetSetStatusCallbackA; external winetdll name 'InternetSetStatusCallbackA';
function FtpFindFirstFileA; external winetdll name 'FtpFindFirstFileA';
function FtpGetFileA; external winetdll name 'FtpGetFileA';
function FtpPutFileA; external winetdll name 'FtpPutFileA';
function InternetGetLastResponseInfoW; external winetdll name 'InternetGetLastResponseInfoW';
function InternetSetStatusCallbackW; external winetdll name 'InternetSetStatusCallbackW';
function FtpFindFirstFileW; external winetdll name 'FtpFindFirstFileW';
function FtpGetFileW; external winetdll name 'FtpGetFileW';
function FtpPutFileW; external winetdll name 'FtpPutFileW';
function InternetGetLastResponseInfo; external winetdll name 'InternetGetLastResponseInfoA';
function InternetSetStatusCallback; external winetdll name 'InternetSetStatusCallbackA';
function FtpFindFirstFile; external winetdll name 'FtpFindFirstFileA';
function FtpGetFile; external winetdll name 'FtpGetFileA';
function FtpPutFile; external winetdll name 'FtpPutFileA';
function FtpGetFileEx; external winetdll name 'FtpGetFileEx';
function FtpPutFileEx; external winetdll name 'FtpPutFileEx';
function FtpDeleteFileA; external winetdll name 'FtpDeleteFileA';
function FtpRenameFileA; external winetdll name 'FtpRenameFileA';
function FtpOpenFileA; external winetdll name 'FtpOpenFileA';
function FtpCreateDirectoryA; external winetdll name 'FtpCreateDirectoryA';
function FtpRemoveDirectoryA; external winetdll name 'FtpRemoveDirectoryA';
function FtpSetCurrentDirectoryA; external winetdll name 'FtpSetCurrentDirectoryA';
function FtpGetCurrentDirectoryA; external winetdll name 'FtpGetCurrentDirectoryA';
function FtpCommandA; external winetdll name 'FtpCommandA';
function FtpDeleteFileW; external winetdll name 'FtpDeleteFileW';
function FtpRenameFileW; external winetdll name 'FtpRenameFileW';
function FtpOpenFileW; external winetdll name 'FtpOpenFileW';
function FtpCreateDirectoryW; external winetdll name 'FtpCreateDirectoryW';
function FtpRemoveDirectoryW; external winetdll name 'FtpRemoveDirectoryW';
function FtpSetCurrentDirectoryW; external winetdll name 'FtpSetCurrentDirectoryW';
function FtpGetCurrentDirectoryW; external winetdll name 'FtpGetCurrentDirectoryW';
function FtpCommandW; external winetdll name 'FtpCommandW';
function FtpDeleteFile; external winetdll name 'FtpDeleteFileA';
function FtpRenameFile; external winetdll name 'FtpRenameFileA';
function FtpOpenFile; external winetdll name 'FtpOpenFileA';
function FtpCreateDirectory; external winetdll name 'FtpCreateDirectoryA';
function FtpRemoveDirectory; external winetdll name 'FtpRemoveDirectoryA';
function FtpSetCurrentDirectory; external winetdll name 'FtpSetCurrentDirectoryA';
function FtpGetCurrentDirectory; external winetdll name 'FtpGetCurrentDirectoryA';
function FtpCommand; external winetdll name 'FtpCommandA';
function FtpGetFileSize; external winetdll name 'FtpGetFileSize';
function GopherCreateLocatorA; external winetdll name 'GopherCreateLocatorA';
function GopherGetLocatorTypeA; external winetdll name 'GopherGetLocatorTypeA';
function GopherFindFirstFileA; external winetdll name 'GopherFindFirstFileA';
function GopherOpenFileA; external winetdll name 'GopherOpenFileA';
function GopherGetAttributeA; external winetdll name 'GopherGetAttributeA';
function HttpOpenRequestA; external winetdll name 'HttpOpenRequestA';
function HttpAddRequestHeadersA; external winetdll name 'HttpAddRequestHeadersA';
function HttpSendRequestA; external winetdll name 'HttpSendRequestA';
function HttpSendRequestExA; external winetdll name 'HttpSendRequestExA';
function HttpEndRequestA; external winetdll name 'HttpEndRequestA';
function HttpQueryInfoA; external winetdll name 'HttpQueryInfoA';
function InternetSetCookieA; external winetdll name 'InternetSetCookieA';
function InternetGetCookieA; external winetdll name 'InternetGetCookieA';
function GopherCreateLocatorW; external winetdll name 'GopherCreateLocatorW';
function GopherGetLocatorTypeW; external winetdll name 'GopherGetLocatorTypeW';
function GopherFindFirstFileW; external winetdll name 'GopherFindFirstFileW';
function GopherOpenFileW; external winetdll name 'GopherOpenFileW';
function GopherGetAttributeW; external winetdll name 'GopherGetAttributeW';
function HttpOpenRequestW; external winetdll name 'HttpOpenRequestW';
function HttpAddRequestHeadersW; external winetdll name 'HttpAddRequestHeadersW';
function HttpSendRequestW; external winetdll name 'HttpSendRequestW';
function HttpSendRequestExW; external winetdll name 'HttpSendRequestExW';
function HttpEndRequestW; external winetdll name 'HttpEndRequestW';
function HttpQueryInfoW; external winetdll name 'HttpQueryInfoW';
function InternetSetCookieW; external winetdll name 'InternetSetCookieW';
function InternetGetCookieW; external winetdll name 'InternetGetCookieW';
function GopherCreateLocator; external winetdll name 'GopherCreateLocatorA';
function GopherGetLocatorType; external winetdll name 'GopherGetLocatorTypeA';
function GopherFindFirstFile; external winetdll name 'GopherFindFirstFileA';
function GopherOpenFile; external winetdll name 'GopherOpenFileA';
function GopherGetAttribute; external winetdll name 'GopherGetAttributeA';
function HttpOpenRequest; external winetdll name 'HttpOpenRequestA';
function HttpAddRequestHeaders; external winetdll name 'HttpAddRequestHeadersA';
function HttpSendRequest; external winetdll name 'HttpSendRequestA';
function HttpSendRequestEx; external winetdll name 'HttpSendRequestExA';
function HttpEndRequest; external winetdll name 'HttpEndRequestA';
function HttpQueryInfo; external winetdll name 'HttpQueryInfoA';
function InternetSetCookie; external winetdll name 'InternetSetCookieA';
function InternetGetCookie; external winetdll name 'InternetGetCookieA';
function InternetAttemptConnect; external winetdll name 'InternetAttemptConnect';
function InternetCheckConnectionA; external winetdll name 'InternetCheckConnectionA';
function InternetCheckConnectionW; external winetdll name 'InternetCheckConnectionW';
function InternetCheckConnection; external winetdll name 'InternetCheckConnectionA';
function InternetAuthNotifyCallback; external winetdll name 'InternetAuthNotifyCallback';
function InternetErrorDlg; external winetdll name 'InternetErrorDlg';
function ResumeSuspendedDownload; external winetdll name 'ResumeSuspendedDownload';
function InternetConfirmZoneCrossingA; external winetdll name 'InternetConfirmZoneCrossingA';
function CreateUrlCacheEntryA; external winetdll name 'CreateUrlCacheEntryA';
function CommitUrlCacheEntryA; external winetdll name 'CommitUrlCacheEntryA';
function RetrieveUrlCacheEntryFileA; external winetdll name 'RetrieveUrlCacheEntryFileA';
function UnlockUrlCacheEntryFileA; external winetdll name 'UnlockUrlCacheEntryFileA';
function RetrieveUrlCacheEntryStreamA; external winetdll name 'RetrieveUrlCacheEntryStreamA';
function InternetConfirmZoneCrossingW; external winetdll name 'InternetConfirmZoneCrossingW';
function CreateUrlCacheEntryW; external winetdll name 'CreateUrlCacheEntryW';
function CommitUrlCacheEntryW; external winetdll name 'CommitUrlCacheEntryW';
function RetrieveUrlCacheEntryFileW; external winetdll name 'RetrieveUrlCacheEntryFileW';
function UnlockUrlCacheEntryFileW; external winetdll name 'UnlockUrlCacheEntryFileW';
function RetrieveUrlCacheEntryStreamW; external winetdll name 'RetrieveUrlCacheEntryStreamW';
function InternetConfirmZoneCrossing; external winetdll name 'InternetConfirmZoneCrossingA';
function CreateUrlCacheEntry; external winetdll name 'CreateUrlCacheEntryA';
function CommitUrlCacheEntry; external winetdll name 'CommitUrlCacheEntryA';
function RetrieveUrlCacheEntryFile; external winetdll name 'RetrieveUrlCacheEntryFileA';
function UnlockUrlCacheEntryFile; external winetdll name 'UnlockUrlCacheEntryFileA';
function RetrieveUrlCacheEntryStream; external winetdll name 'RetrieveUrlCacheEntryStreamA';
function ReadUrlCacheEntryStream; external winetdll name 'ReadUrlCacheEntryStream';
function UnlockUrlCacheEntryStream; external winetdll name 'UnlockUrlCacheEntryStream';
function GetUrlCacheEntryInfoA; external winetdll name 'GetUrlCacheEntryInfoA';
function GetUrlCacheEntryInfoW; external winetdll name 'GetUrlCacheEntryInfoW';
function GetUrlCacheEntryInfo; external winetdll name 'GetUrlCacheEntryInfoA';
function FindFirstUrlCacheGroup; external winetdll name 'FindFirstUrlCacheGroup';
function FindNextUrlCacheGroup; external winetdll name 'FindNextUrlCacheGroup';
function GetUrlCacheGroupAttributeA; external winetdll name 'GetUrlCacheGroupAttributeA';
function SetUrlCacheGroupAttributeA; external winetdll name 'SetUrlCacheGroupAttributeA';
function GetUrlCacheEntryInfoExA; external winetdll name 'GetUrlCacheEntryInfoExA';
function SetUrlCacheEntryInfoA; external winetdll name 'SetUrlCacheEntryInfoA';
function GetUrlCacheGroupAttributeW; external winetdll name 'GetUrlCacheGroupAttributeW';
function SetUrlCacheGroupAttributeW; external winetdll name 'SetUrlCacheGroupAttributeW';
function GetUrlCacheEntryInfoExW; external winetdll name 'GetUrlCacheEntryInfoExW';
function SetUrlCacheEntryInfoW; external winetdll name 'SetUrlCacheEntryInfoW';
function GetUrlCacheGroupAttribute; external winetdll name 'GetUrlCacheGroupAttributeA';
function SetUrlCacheGroupAttribute; external winetdll name 'SetUrlCacheGroupAttributeA';
function GetUrlCacheEntryInfoEx; external winetdll name 'GetUrlCacheEntryInfoExA';
function SetUrlCacheEntryInfo; external winetdll name 'SetUrlCacheEntryInfoA';
function CreateUrlCacheGroup; external winetdll name 'CreateUrlCacheGroup';
function DeleteUrlCacheGroup; external winetdll name 'DeleteUrlCacheGroup';
function SetUrlCacheEntryGroupA; external winetdll name 'SetUrlCacheEntryGroupA';
function FindFirstUrlCacheEntryExA; external winetdll name 'FindFirstUrlCacheEntryExA';
function FindNextUrlCacheEntryExA; external winetdll name 'FindNextUrlCacheEntryExA';
function FindFirstUrlCacheEntryA; external winetdll name 'FindFirstUrlCacheEntryA';
function FindNextUrlCacheEntryA; external winetdll name 'FindNextUrlCacheEntryA';
function SetUrlCacheEntryGroupW; external winetdll name 'SetUrlCacheEntryGroupW';
function FindFirstUrlCacheEntryExW; external winetdll name 'FindFirstUrlCacheEntryExW';
function FindNextUrlCacheEntryExW; external winetdll name 'FindNextUrlCacheEntryExW';
function FindFirstUrlCacheEntryW; external winetdll name 'FindFirstUrlCacheEntryW';
function FindNextUrlCacheEntryW; external winetdll name 'FindNextUrlCacheEntryW';
function SetUrlCacheEntryGroup; external winetdll name 'SetUrlCacheEntryGroupA';
function FindFirstUrlCacheEntryEx; external winetdll name 'FindFirstUrlCacheEntryExA';
function FindNextUrlCacheEntryEx; external winetdll name 'FindNextUrlCacheEntryExA';
function FindFirstUrlCacheEntry; external winetdll name 'FindFirstUrlCacheEntryA';
function FindNextUrlCacheEntry; external winetdll name 'FindNextUrlCacheEntryA';
function FindCloseUrlCache; external winetdll name 'FindCloseUrlCache';
function DeleteUrlCacheEntryA; external winetdll name 'DeleteUrlCacheEntryA';
function InternetDialA; external winetdll name 'InternetDialA';
function DeleteUrlCacheEntryW; external winetdll name 'DeleteUrlCacheEntryW';
function InternetDialW; external winetdll name 'InternetDialW';
function DeleteUrlCacheEntry; external winetdll name 'DeleteUrlCacheEntryA';
function InternetDial; external winetdll name 'InternetDialA';
function InternetHangUp; external winetdll name 'InternetHangUp';
function InternetGoOnlineA; external winetdll name 'InternetGoOnlineA';
function InternetGoOnlineW; external winetdll name 'InternetGoOnlineW';
function InternetGoOnline; external winetdll name 'InternetGoOnlineA';
function InternetAutodial; external winetdll name 'InternetAutodial';
function InternetAutodialHangup; external winetdll name 'InternetAutodialHangup';
function InternetGetConnectedState; external winetdll name 'InternetGetConnectedState';
function InternetGetConnectedStateExA; external winetdll name 'InternetGetConnectedStateExA';
function InternetGetConnectedStateExW; external winetdll name 'InternetGetConnectedStateExW';
function InternetGetConnectedStateEx; external winetdll name 'InternetGetConnectedStateExA';
function InternetInitializeAutoProxyDll; external winetdll name 'InternetInitializeAutoProxyDll';
function InternetSetDialStateA; external winetdll name 'InternetSetDialStateA';
function InternetOpenA; external winetdll name 'InternetOpenA';
function InternetSetDialStateW; external winetdll name 'InternetSetDialStateW';
function InternetOpenW; external winetdll name 'InternetOpenW';
function InternetSetDialState; external winetdll name 'InternetSetDialStateA';
function InternetOpen; external winetdll name 'InternetOpenA';

{$ENDIF DYNAMIC_LINK}

{$ENDIF JWA_INTERFACESECTION}

{$IFNDEF JWA_OMIT_SECTIONS}
end.
{$ENDIF JWA_OMIT_SECTIONS}
