www.pudn.com > vcʵÏÖftp.rar > MINIFTP.RTF


{\rtf1\ansi \deff0\deflang1033{\fonttbl{\f0\froman\fcharset0\fprq2 Tms Rmn{\*\falt Times New Roman};}{\f2\fswiss\fcharset0\fprq2 Helv{\*\falt Arial};}{\f5\fswiss\fcharset0\fprq2 Arial;} 
{\f7\fswiss\fcharset0\fprq2 MS Sans Serif;}{\f9\fswiss\fcharset0\fprq2 Helvetica{\*\falt Arial};}{\f11\fmodern\fcharset0\fprq1 Courier New;}}{\colortbl;\red0\green0\blue0;\red0\green0\blue255;\red0\green255\blue255;\red0\green255\blue0; 
\red255\green0\blue255;\red255\green0\blue0;\red255\green255\blue0;\red255\green255\blue255;\red0\green0\blue128;\red0\green128\blue128;\red0\green128\blue0;\red128\green0\blue128;\red128\green0\blue0;\red128\green128\blue0;\red128\green128\blue128; 
\red192\green192\blue192;}{\stylesheet{\nowidctlpar \fs20 \snext0 Normal;}{\s1\sb240\nowidctlpar \b\f2\ul \sbasedon0\snext0 heading 1;}{\s2\sb120\nowidctlpar \b\f2 \sbasedon0\snext0 heading 2;}{\s3\li360\nowidctlpar \b \sbasedon0\snext17 heading 3;}{ 
\s4\li360\nowidctlpar \ul \sbasedon0\snext17 heading 4;}{\s5\li720\nowidctlpar \b\fs20 \sbasedon0\snext17 heading 5;}{\s6\li720\nowidctlpar \fs20\ul \sbasedon0\snext17 heading 6;}{\s7\li720\nowidctlpar \i\fs20 \sbasedon0\snext17 heading 7;}{ 
\s8\li720\nowidctlpar \i\fs20 \sbasedon0\snext17 heading 8;}{\s9\li720\nowidctlpar \i\fs20 \sbasedon0\snext17 heading 9;}{\*\cs10 \additive Default Paragraph Font;}{\*\cs15 \additive\f0\fs16\up6\lang1033 \sbasedon10 footnote reference;}{\s16\nowidctlpar  
\fs20 \sbasedon0\snext16 footnote text;}{\s17\li720\nowidctlpar \fs20 \sbasedon0\snext17 Normal Indent;}{\s18\fi-240\li480\sb80\nowidctlpar\tx480 \f9 \sbasedon0\snext18 nscba;}{\s19\fi-240\li240\sa20\nowidctlpar \f9 \sbasedon0\snext19 j;}{ 
\s20\li480\sa20\nowidctlpar \f9 \sbasedon0\snext20 ij;}{\s21\sb80\sa20\nowidctlpar \f9 \sbasedon0\snext21 btb;}{\s22\fi-240\li2400\sb20\sa20\nowidctlpar \f9\fs20 \sbasedon0\snext22 ctcb;}{\s23\fi-240\li480\sa40\nowidctlpar\tx480 \f9 \sbasedon0\snext23  
ns;}{\s24\sa120\nowidctlpar \f9\fs28 \sbasedon0\snext24 TT;}{\s25\fi-240\li2400\sa20\nowidctlpar \f9 \sbasedon0\snext25 crtj;}{\s26\fi-240\li480\nowidctlpar\tx480 \f9 \sbasedon0\snext26 nsca;}{\s27\sa20\nowidctlpar \f9 \sbasedon0\snext27 bt;}{ 
\s28\li240\sb120\sa40\nowidctlpar \f9 \sbasedon0\snext28 Hf;}{\s29\li240\sb120\sa40\nowidctlpar \f9 \sbasedon0\snext29 Hs;}{\s30\li480\sb120\sa40\nowidctlpar \f9 \sbasedon0\snext30 RT;}{\s31\fi-2160\li2160\sb240\sa80\nowidctlpar\tx2160 \f9  
\sbasedon0\snext31 c;}{\s32\li2160\sa20\nowidctlpar \f9 \sbasedon0\snext32 ct;}{\s33\li240\sa20\nowidctlpar \f9 \sbasedon0\snext33 it;}{\s34\li480\nowidctlpar \f9\fs20 \sbasedon0\snext34 nsct;}{\s35\fi-160\li400\sb80\sa40\nowidctlpar \f9  
\sbasedon0\snext35 nscb;}{\s36\fi-2640\li2880\sb120\sa40\nowidctlpar\brdrb\brdrs\brdrw15 \brdrbtw\brdrs\brdrw15 \tx2880 \f9 \sbasedon0\snext36 HC2;}{\s37\fi-2640\li2880\sb120\sa20\nowidctlpar\tx2880 \f9 \sbasedon0\snext37 C2;}{ 
\s38\fi-240\li2400\sa20\nowidctlpar \f9\fs20 \sbasedon0\snext38 ctc;}{\s39\li2160\sb160\nowidctlpar \f9 \sbasedon0\snext39 crt;}{\s40\li480\sb20\sa40\nowidctlpar \f9 \sbasedon0\snext40 or;}{\s41\fi-259\li360\sb40\sa40\nowidctlpar\tx360 \f7\fs20  
\sbasedon0\snext41 Ln1;}{\s42\li115\sb80\sa80\nowidctlpar \f7\fs20 \sbasedon0\snext0 *Intro;}{\s43\li115\sb80\sa80\keepn\nowidctlpar \b\f7 \sbasedon3\snext42 *Title;}{\s44\fi-245\li360\sb80\nowidctlpar \f7\fs20 \snext44 *Jl;}{ 
\s45\li360\sb40\sa40\nowidctlpar \f7\fs20 \snext0 Lp1;}{\s46\fi-1800\li1915\sb60\sl-240\slmult1\nowidctlpar\tx1915 \f7\fs20 \sbasedon0\snext46 Tph;}{\s47\li115\sb120\sa80\nowidctlpar \b\f7\fs20 \snext41 Proch;}{\*\cs48 \additive\super \sbasedon10  
endnote reference;}{\s49\nowidctlpar\tqc\tx4320\tqr\tx8640 \fs20 \sbasedon0\snext49 header;}{\s50\nowidctlpar\tqc\tx4320\tqr\tx8640 \fs20 \sbasedon0\snext50 footer;}{\s51\widctlpar\tx720\tx1440\tx2160\tx2880\tx3600\tx4320\tx5040\tx5760 \f11\fs16  
\sbasedon0\snext51 hdr-file-code;}}{\info{\title AFXCORE}{\subject MFC Core RTF Help}{\author Paul Gerhart}{\operator p}{\creatim\yr1992\mo10\dy7\hr11\min4}{\revtim\yr1997\mo2\dy21\hr14\min59}{\version2}{\edmins8}{\nofpages11}{\nofwords1797} 
{\nofchars10246}{\*\company  }{\vern57431}}\widowctrl\ftnbj\aenddoc\hyphcaps0 \fet0\sectd \linex576\endnhere {\*\pnseclvl1\pnucrm\pnstart1\pnindent720\pnhang{\pntxta .}}{\*\pnseclvl2\pnucltr\pnstart1\pnindent720\pnhang{\pntxta .}}{\*\pnseclvl3 
\pndec\pnstart1\pnindent720\pnhang{\pntxta .}}{\*\pnseclvl4\pnlcltr\pnstart1\pnindent720\pnhang{\pntxta )}}{\*\pnseclvl5\pndec\pnstart1\pnindent720\pnhang{\pntxtb (}{\pntxta )}}{\*\pnseclvl6\pnlcltr\pnstart1\pnindent720\pnhang{\pntxtb (}{\pntxta )}} 
{\*\pnseclvl7\pnlcrm\pnstart1\pnindent720\pnhang{\pntxtb (}{\pntxta )}}{\*\pnseclvl8\pnlcltr\pnstart1\pnindent720\pnhang{\pntxtb (}{\pntxta )}}{\*\pnseclvl9\pnlcrm\pnstart1\pnindent720\pnhang{\pntxtb (}{\pntxta )}}\pard\plain \widctlpar \fs20 {\f5  
\par }{\cs15\f5\fs16\up6 #{\footnote \pard\plain \s16\widctlpar \fs20 {\cs15\fs16\up6 #} main_index}}{\f5\fs16\up6   }{\cs15\fs16\up6 #{\footnote \pard\plain \s16\widctlpar \fs20 {\cs15\fs16\up6 #} HIDD_ABOUTBOX}}{\f5\fs16\up6  }{\b\f5\fs24\up6  
MiniFTP Version 1.1 Help Index}{\b\f5  
\par }{\f5  
\par Welcome to MiniFTP, the 32-bit Windows application which was created as a tutorial (including source code) for using the Winsock API in an MFC environment.  
\par  
\par The application and the source code are free (but copyrighted). 
\par  
\par }{\b\f5 Topics 
\par }{\f5  
\par }\trowd \trgaph108\trleft-108 \cellx720\cellx8622 \pard \widctlpar\intbl {\f5 \cell }\pard \qj\widctlpar\intbl {\f5\uldb Installation}{\v\f5 install_text}{\f5\uldb \cell }\pard \widctlpar\intbl {\f5 \row }\trowd \trgaph108\trleft-108 \cellx720\cellx8622  
\pard \widctlpar\intbl {\f5 \cell }\pard \qj\widctlpar\intbl {\f5\uldb Use and Navigation}{\v\f5 use_text}{\f5 \cell }\pard \widctlpar\intbl {\f5 \row }\pard \widctlpar\intbl {\f5 \cell }\pard \qj\widctlpar\intbl {\f5\uldb Code Tips}{\v\f5 code_text}{\f5  
\cell }\pard \widctlpar\intbl {\f5 \row }\pard \widctlpar\intbl {\f5 \cell }\pard \qj\widctlpar\intbl {\f5 \cell }\pard \widctlpar\intbl {\f5 \row }\pard \widctlpar\intbl {\f5 \cell }\pard \qj\widctlpar\intbl {\f5\uldb Legal}{\v\f5 legal_text}{\f5 \cell  
}\pard \widctlpar\intbl {\f5 \row }\pard \widctlpar\intbl {\f5 \cell }\pard \qj\widctlpar\intbl {\f5 \cell }\pard \widctlpar\intbl {\f5 \row }\pard \widctlpar\intbl {\f5 \cell }\pard \qj\widctlpar\intbl {\f5\uldb Other ShareWare Applications}{\v\f5  
otherapp_text}{\f5 \cell }\pard \widctlpar\intbl {\f5 \row }\trowd \trgaph108\trleft-108 \cellx720\cellx8622 \pard \widctlpar\intbl {\f5 \cell }\pard \qj\widctlpar\intbl {\f5 \cell }\pard \widctlpar\intbl {\f5 \row }\pard \widctlpar {\f5  
\par  
\par  
\par \page  
\par }{\cs15\fs16\up6 #{\footnote \pard\plain \s16\widctlpar \fs20 {\cs15\fs16\up6 #} install_text}}{\f5  }{\cs15\fs16\up6 ${\footnote \pard\plain \s16\widctlpar \fs20 {\cs15\fs16\up6 $} Installation}}{\f5  }{\cs15\fs16\up6 K{\footnote \pard\plain  
\s16\widctlpar \fs20 {\cs15\fs16\up6 K} Installation}}{\f5  }{\b\f5 Installation}{\f5  
\par  
\par Simply copy all files to a new directory of your choice. Read the important }{\f5\uldb Legal}{\v\f5 legal_text}{\f5  information before use. 
\par  
\par The application is miniftp.exe. When launched, MiniFTP creates a log window and a command entry window. Use the Connection Menu  to establish an FTP session with MiniFTP as the \ldblquote client\rdblquote . Type commands into the command window. 
\par  
\par Enjoy the }{\f5\uldb source code}{\v\f5 code_text}{\f5 . 
\par  
\par That's it! 
\par  
\par \page  
\par }{\cs15\f5\fs16\up6 #{\footnote \pard\plain \s16\widctlpar \fs20 {\cs15\fs16\up6 #} code_text}}{\f5  }{\cs15\fs16\up6 K{\footnote \pard\plain \s16\widctlpar \fs20 {\cs15\fs16\up6 K} Code Tips}}{\f5  }{\cs15\fs16\up6 ${\footnote \pard\plain \s16\widctlpar  
\fs20 {\cs15\fs16\up6 $} Code Tips}}{\f5   }{\b\f5 Code Tips}{\f5  
\par  
\par First, this is a tutorial - not a product - showing 
 how one person used MFC and the Winsock API to do a simple function. The design does not attempt to account for every anomaly situation or server oddity - you assume liability for its use. Remember, it is a tutorial. 
\par  
\par Having said that, MiniFTP is a real, working program which can send and receive arbitrarily large files and execute any FTP command supported by a particular server. To begin exploring the source code,  
open View.cpp - search for the OnConnect() handler to get familiar with the program flow. This is the handler for the Connection dialog box which you would use to initiate a FTP session with a particular server. 
\par  
\par Second, this is just one way to implement an FTP client. The author chose to interface to the API itself (ignoring a CSocket or ISAPI approach) so as to reveal how the actual API operates. The \ldblquote Async\rdblquote  method for the sockets 
 was chosen so that it was a message driven approach. 
\par  
\par Third, three socket message handlers exist: Control, Listener; Data. The refer to the Winsock API for how the underlying functions like connect(), AsyncSelect() and bind() et al work  - try http://www.stardust.com/wsresource/winsock1/ws1docs.html to downl 
oad the 1.1 spec or 
\par http://www.stardust.com/wsresource/winsock1/winsock.html for an online version. 
\par  
\par Look at RFC 959 for how FTP operates - try http://www.cis.ohio-state.edu/htbin/rfc/rfc959.html  
\par for an on-line version. 
\par  
\par (Also, note that an early version of the WS_FTP source is freeware on the Web at ftp://ftp.stardust.com/pub/winsock/version1/sample/wsftpsrc.zip with other source code locations referenced by http://www.goodnet.com/~esnible/winsock.html. The WS_FTP source 
 is quite a sophisticated program that accounts for many failure conditions and server oddities. MiniFTP was written as a somewhat simpler tutorial for the beginner. Once you are familiar with the API using MiniFTP, take a stab a underst 
anding the WS_FTP client which uses a synchronous approach.) 
\par  
\par Fourth,  
MiniFTP works by transferring the user commands to the server. The progam makes the assumption that every command needs a Listener socket and a Data socket so it prefaces your desired command with a PORT command. This is not true in the real-world - but i 
t is a simplified approach. Another feature is that the program automatically performs a TYPE before any STOR or RETR (put file or get file, respectively). 
\par  
\par The program will correctly receive and alter a file per the ASCII/ Binary (A/I) TYPE setting. 
\par  
\par The program works by building a CStringList of your desired command, the PORT command and, if you are requesting a STOR or RETR, the TYPE command. It then launches a two-state state machine to pop items off the list to send to the server. The state machin 
e runs based on WM_TIMER messages once per second. When the list is exhausted the timer is killed. There is an application timeout that you can set. In addition, the winsock.dll has its own timeout. 
\par  
\par Fifth, as each socket is created, the AsyncSelect() function is called to establish what events will generate a call back. Each socket has its own call back message handler. Alternately this could have been handled with one message with a \ldblquote  
switch\rdblquote  statement keyin 
g off of the wParam parameter (the socket number). The AsyncSelect() function needs an hWnd member so these are established with the m_hWnd of the main frame window. All the frame does with the callback is to do a SendMessage() to the correct (correspondi 
ng) handler in the View. 
\par  
\par Sixth, yes, this is classic Doc/View MFC app. The Doc is ignored; the view is actually a splitter window with View.cpp handling the upper pane and Sendvw.cpp handling the lower pane. View.cpp does almost  
all the work. Note that a .INI file holds the server name, your USER name and PASS password (un-encrytped plain-text) so this information is preserved across sessions. The program inherits from CEditView for both panes. The upper pane is read-only. 
\par  
\par Seventh, MiniFTP displays some log information to reveal some of the underlying sockets work in addition to all the messages the sockets. This log information uses a prompt of the form \ldblquote MiniFTP Status>\rdblquote  
. These messages usually indicate the socket number, too. 
\par  
\par Lastly, MiniFTP was developed using MFC 4.0 and MSDEV (VC++) 4.0. However, none of the code is Win32-specific so the source can be easily adapted to earlier environments. 
\par  
\par \page  
\par }{\cs15\f5\fs16\up6 #{\footnote \pard\plain \s16\widctlpar \fs20 {\cs15\fs16\up6 #} use_text}}{\f5  }{\cs15\fs16\up6 K{\footnote \pard\plain \s16\widctlpar \fs20 {\cs15\fs16\up6 K} Use and Navigation}}{\f5  }{\cs15\fs16\up6 ${\footnote \pard\plain  
\s16\widctlpar \fs20 {\cs15\fs16\up6 $} Use and Navigation}}{\f5  }{\cs15\fs16\up6 #{\footnote \pard\plain \s16\nowidctlpar \fs20 {\cs15\fs16\up6 #} HIDD_CONN_INFO}#{\footnote \pard\plain \s16\nowidctlpar \fs20 {\cs15\fs16\up6 #} HIDD_FILEDLG}}{\f5  }{ 
\b\f5 Use and Navigation}{\f5  
\par  
\par }\pard \qj\widctlpar {\f5 MiniFTP is a small FTP client designed to be a tutorial for those learning the Winsock API in an MFC context. MiniFTP calls the API directly and does not use CSocket. MiniFTP uses the \ldblquote AsyncSelect\rdblquote  
 approach to the API for callbacks - thus, it is an event (message) driven approach. If you are a software developer, see }{\f5\uldb Code Tips}{\v\f5 code_text}{\f5  
 for more information. If not, you can ignore all these facts and simply use it as an FTP client.  
\par  
\par But you must appreciate that MiniFTP was designed as a tutorial, not a product robust enough to gracefully handle all adverse conditions. 
\par  
\par }\pard \widctlpar {\f5 When launched, MiniFTP creates a log window (upper) and a command input window (lower). Use the Connection Menu to establish a connection by supplying the site name (domain names or \ldblquote dot-style\rdblquote  
 IP addresses are acceptable), your USER name and PASS password. You can set up a timeout also. Remember, you can use \ldblquote anonymous\rdblquote  as a USER name with your email address as the PASS for many server sites. 
\par }\pard \qj\widctlpar {\f5  
\par Once you are logged in you may enter FTP commands into the lower window. The MiniFTP client lets you type anything you want - it expects the server to screen for unsupported commands or illegal syntax. 
\par  
\par The MiniFTP client will automatically establish \ldblquote listening\rdblquote  sockets (and prepar 
e for a data connection with the PORT command) to support the more complex FTP commands (e.g. LIST, RETR and STOR). MiniFTP does this even for simple commands for which \ldblquote listening\rdblquote  is not a requirement (e.g. PWD). 
\par  
\par Use the File > Settings dialog to establish the directory location where incoming files will be placed (as the result of a RETR). Also, this command lets you specify the transfer type (ASCII versus binary) and MiniFTP will automatically establish this for 
 all subsequent RETR transfers. 
\par  
\par }\pard \widctlpar {\f5 Exit gracefully by entering the QUIT command and then closing the MiniFTP application. A crude, but acceptable way to break the connection is in the Connection Menu. (Or just do a crude Alt-F4.) 
\par  
\par }\pard \qj\widctlpar {\f5  
\par \page  
\par }{\cs15\fs16\up6 #{\footnote \pard\plain \s16\widctlpar \fs20 {\cs15\fs16\up6 #} otherapp_text}}{\f5  }{\cs15\fs16\up6 K{\footnote \pard\plain \s16\widctlpar \fs20 {\cs15\fs16\up6 K} Other Applications}}{\f5  }{\cs15\fs16\up6 ${\footnote \pard\plain  
\s16\widctlpar \fs20 {\cs15\fs16\up6 $} Other Applications}}{\f5  }{\b\f5 Other ShareWare Applications by the Author}{\f5  
\par  
\par Check out these other great titles. Contact me by e-mail at pgerhart@voicenet.com or visit my ShareWare site at http://www.voicenet.com/~pgerhart/_shware.html. 
\par  
\par  
\par }\pard \widctlpar {\b\f5 QuickChart 
\par }{\f5  
\par QuickChart permits quick and easy viewing, printing and navigation for financial data stored in MetaStock or CompuTrac format. The user is presented with crisp, clean charts. 
\par  
\par The color scheme of the chart may be user configured. Charts may show volume and user-defined moving averages. 
\par  
\par Toolbar buttons, arrow keys and a right mouse popup menu enable navigation among the charts. In addition, a SlideShow mode is supported to automatically sequence through a portfolio. 
\par  
\par QuickChart is small and fast - an alternative to financial fatware. 
\par  
\par  
\par }{\b\f5 FullDisk 
\par }{\f5  
\par }\pard \qj\widctlpar {\f5 FullDisk permits quick and easy profiling of the contents of a local or network drive. Menu selections permit: 
\par  
\par \tab rescanning as needed 
\par \tab choosing the units for display results (bytes, kilobytes or megabytes) 
\par  
\par When launched, FullDisk searches your drive for all sub-directory trees and the file sizes therein starting with the currently selected drive. A color-coded list box shows the results and a pie-chart depicts the usage within that tree / drive. 
\par }\pard \widctlpar {\f5  
\par  
\par }{\b\f5 MetaFix 
\par }{\f5  
\par }\pard \qj\widctlpar {\f5 MetaFix permits you to modify the disk files for MetaStock or CompuTrac format data including: 
\par  
\par }\trowd \trgaph108\trleft-108 \cellx270\cellx8298 \pard \qj\widctlpar\intbl {\f5 \cell editing a single quote\cell }\pard \widctlpar\intbl {\f5 \row }\trowd \trgaph108\trleft-108 \cellx270\cellx8298 \pard \qj\widctlpar\intbl {\f5 \cell  
adjusting a quote series for a split\cell }\pard \widctlpar\intbl {\f5 \row }\pard \qj\widctlpar\intbl {\f5 \cell adjusting a quote series for Price or Volume multipliers\cell }\pard \widctlpar\intbl {\f5 \row }\pard \qj\widctlpar\intbl {\f5 \cell  
deleting a quote\cell }\pard \widctlpar\intbl {\f5 \row }\pard \qj\widctlpar\intbl {\f5 \cell displaying underlying facts about a quote series\cell }\pard \widctlpar\intbl {\f5 \row }\trowd \trgaph108\trleft-108 \cellx270\cellx8298 \pard  
\qj\widctlpar\intbl {\f5 \cell automatically scanning for potential splits\cell }\pard \widctlpar\intbl {\f5 \row }\pard \widctlpar {\f5  
\par No files are ever deleted - any edited .DAT file is first saved with the extension .BAK. This is unlike comparable applications! Also, the automatic split-search is unique and  
provides suggested split ratios for both forward and reverse splits. The splits can be exported to a file. 
\par  
\par  
\par }{\b\f5 URLegal}{\f5  
\par  
\par Think you\rquote ve gotten some broken WWW links? Well, offer up your bookmark files or HTML pages and URLegal will find those bad links. 
\par  
\par }\pard \qj\widctlpar {\f5  
URLegal is a 32 bit application. You can choose a single file to test or recurse through sub-directories. Each HTTP URL in each file is automatically tested by attempting to connect on the Web to the target site and receive the specified HTML page. 
\par  
\par The results of the test are displayed in a text window and can be exported to a text file or an HTML file. 
\par  
\par A \ldblquote re-run\rdblquote  
 button exists so that, with a single mouse click, you can completely re-test only the failed links (without wasting time re-testing all the good ones). This is useful as URLegal may be forced to declare some links as broken when the real proble 
m is that the target server is very slow. 
\par }\pard \widctlpar {\f5  
\par URLegal offers 21 filtering options on the results so that you can learn all the sordid details of the target URLs or simply the infamous 404 bad boys (the dreaded \ldblquote Not Found\rdblquote  pages). 
\par  
\par }\pard \qj\widctlpar {\f5 URLegal can automatically repair the pages containing the bad links identified by your chosen filtering options. 
\par }\pard \widctlpar {\f5  
\par  
\par  
\par  
\par \page }{\cs15\fs16\up6 #{\footnote \pard\plain \s16\widctlpar \fs20 {\cs15\fs16\up6 #} legal_text}}{\f5  }{\b\f5 Important Legal Stuff 
\par }{\f5  
\par \tab }{\f5\uldb Disclaimer and Agreement}{\v\f5 disc_text}{\f5  
\par \tab }{\f5\uldb Copyright}{\v\f5 copyr_text}{\f5  
\par \tab }{\f5\uldb License}{\v\f5 licen_text}{\f5  
\par  
\par  
\par \page }{\cs15\fs16\up6 #{\footnote \pard\plain \s16\widctlpar \fs20 {\cs15\fs16\up6 #} disc_text}}{\f5  }{\cs15\fs16\up6 K{\footnote \pard\plain \s16\widctlpar \fs20 {\cs15\fs16\up6 K} Disclaimer and Agreement}}{\f5  }{\cs15\fs16\up6 ${\footnote  
\pard\plain \s16\widctlpar \fs20 {\cs15\fs16\up6 $} Disclaimer and Agreement}}{\f5  }{\b\f5 Disclaimer of Warranty 
\par }{\f5  
\par Users of MiniFTP must accept this disclaimer of warranty. If you do not accept this 
\par }\pard \qj\widctlpar {\f5 disclaimer, do not use MiniFTP.  
\par  
\par "MiniFTP IS SUPPLIED AS IS. THE AUTHOR DISCLAIMS ALL WARRANTIES OF ANY KIND, EITHER EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR 
 ANY DAMAGES WHATSOEVER INCLUDING DIRECT, INDIRECT, INCIDENTAL, CONSEQUENTIAL, LOSS OF BUSINESS PROFITS OR SPECIAL DAMAGES, WHICH MAY RESULT FROM THE USE OF MiniFTP EVEN IF THE AUTHOR HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGES." 
\par  
\par  
\par }\pard \widctlpar {\f5  
\par \page }{\cs15\fs16\up6 #{\footnote \pard\plain \s16\widctlpar \fs20 {\cs15\fs16\up6 #} copyr_text}}{\f5  }{\cs15\fs16\up6 K{\footnote \pard\plain \s16\widctlpar \fs20 {\cs15\fs16\up6 K} Copyright}}{\f5  }{\cs15\fs16\up6 ${\footnote \pard\plain  
\s16\widctlpar \fs20 {\cs15\fs16\up6 $} Copyright}}{\f5  }{\b\f5 Copyright 
\par }{\f5  
\par }\pard \qj\widctlpar {\f5 MiniFTP is protected by US and international copyright laws. 
\par  
\par }\pard \widctlpar {\f5 MiniFTP Copyright \'a9 1997 by Paul Gerhart. 
\par  
\par  
\par  
\par  
\par \page }{\cs15\fs16\up6 #{\footnote \pard\plain \s16\widctlpar \fs20 {\cs15\fs16\up6 #} licen_text}} {\cs15\fs16\up6 K{\footnote \pard\plain \s16\widctlpar \fs20 {\cs15\fs16\up6 K} License}}{\f5  }{\cs15\fs16\up6 ${\footnote \pard\plain \s16\widctlpar  
\fs20 {\cs15\fs16\up6 $} License}}{\f5  }{\b\f5 License 
\par }{\f5  
\par You should carefully read the following terms and conditions before using this software.  Use of this software indicates your acceptance of these terms and conditions.  If you do not agree with them, do not use the software. All presumption of warranty is 
 disclaimed - see the }{\f5\uldb Disclaimer of Warranty}{\v\f5 disc_text}{\f5  for the specific language. 
\par  
\par }\pard \nowidctlpar {\f5  
You are hereby licensed to:  use the Freeware Version of the software indefinitely; make as many copies of the Freeware version of this executable and source software and documentation as you wish; give exact copies of the original Freeware version to any 
one; and distribute the Freeware version of the software and documentation in its unmodified form via electronic means.  There is no charge for any of the above. 
\par  
\par You are granted a limited license to use MiniFTP, to copy and distribute it, provided the following conditions are met: 
\par  
\par }\trowd \trgaph108\trleft-108 \cellx450\cellx8622 \pard \widctlpar\intbl {\f5 1.\cell No fee may be charged for such copying and distribution other than actual costs incurred, except for a nominal distribution fee. 
\par }\pard \qj\widctlpar\intbl {\f5 \cell }\pard \widctlpar\intbl {\f5 \row }\trowd \trgaph108\trleft-108 \cellx450\cellx8622 \pard \widctlpar\intbl {\f5 2.\cell  
MiniFTP may ONLY be distributed in its original, unmodified state, complete with data files and this documentation. 
\par \cell }\pard \widctlpar\intbl {\f5 \row }\pard \widctlpar\intbl {\f5 3.\cell MiniFTP may not be distributed as part of a package or group of programs. 
\par \cell }\pard \widctlpar\intbl {\f5 \row }\trowd \trgaph108\trleft-108 \cellx450\cellx8622 \pard \widctlpar\intbl {\f5 4.}{\f5\uldb \cell }\pard \qj\widctlpar\intbl {\f5  
Any use of the source code should indicate and acknowledge the author and his copyrights.\cell }\pard \widctlpar\intbl {\f5 \row }\pard \nowidctlpar {\f5  
\par MiniFTP is distributed as Freeware. 
\par }\pard \widctlpar {\f5  
\par  
\par  
\par }}