]> git.saurik.com Git - wxWidgets.git/blobdiff - samples/console/console.cpp
generate wxEVT_GRID_{COL,ROW}_SIZE events when the user double clicks the separating...
[wxWidgets.git] / samples / console / console.cpp
index ce887b1a5904ff1383290a04df68751d8748d9f6..b9965739353db01242796f72800921df3b384fcd 100644 (file)
@@ -9,6 +9,57 @@
 // Licence:     wxWindows license
 /////////////////////////////////////////////////////////////////////////////
 
+// IMPORTANT NOTE FOR WXWIDGETS USERS:
+// If you're a wxWidgets user and you're looking at this file to learn how to
+// structure a wxWidgets console application, then you don't have much to learn.
+// This application is used more for testing rather than as sample but
+// basically the following simple block is enough for you to start your
+// own console application:
+
+/*
+    int main(int argc, char **argv)
+    {
+        wxApp::CheckBuildOptions(WX_BUILD_OPTIONS_SIGNATURE, "program");
+
+        wxInitializer initializer;
+        if ( !initializer )
+        {
+            fprintf(stderr, "Failed to initialize the wxWidgets library, aborting.");
+            return -1;
+        }
+
+        static const wxCmdLineEntryDesc cmdLineDesc[] =
+        {
+            { wxCMD_LINE_SWITCH, "h", "help", "show this help message",
+                wxCMD_LINE_VAL_NONE, wxCMD_LINE_OPTION_HELP },
+            // ... your other command line options here...
+
+            { wxCMD_LINE_NONE }
+        };
+
+        wxCmdLineParser parser(cmdLineDesc, argc, wxArgv);
+        switch ( parser.Parse() )
+        {
+            case -1:
+                wxLogMessage(_T("Help was given, terminating."));
+                break;
+
+            case 0:
+                // everything is ok; proceed
+                break;
+
+            default:
+                wxLogMessage(_T("Syntax error detected, aborting."));
+                break;
+        }
+
+        // do something useful here
+
+        return 0;
+    }
+*/
+
+
 // ============================================================================
 // declarations
 // ============================================================================
@@ -23,6 +74,7 @@
 
 #include "wx/string.h"
 #include "wx/file.h"
+#include "wx/filename.h"
 #include "wx/app.h"
 #include "wx/log.h"
 #include "wx/apptrait.h"
     #define TEST_DIR
     #define TEST_DYNLIB
     #define TEST_ENVIRON
-    #define TEST_EXECUTE
     #define TEST_FILE
     #define TEST_FILECONF
     #define TEST_FILENAME
     #define TEST_FILETIME
- //   #define TEST_FTP  --FIXME! (RN)
+    #define TEST_FTP
     #define TEST_INFO_FUNCTIONS
     #define TEST_LOCALE
     #define TEST_LOG
     #define TEST_TEXTSTREAM
     #define TEST_THREADS
     #define TEST_TIMER
-    // #define TEST_VCARD            -- don't enable this (VZ)
 //    #define TEST_VOLUME   --FIXME! (RN)
     #define TEST_WCHAR
     #define TEST_ZIP
 #else // #if TEST_ALL
-    #define TEST_EXECUTE
+    #define TEST_FTP
 #endif
 
 // some tests are interactive, define this to run them
@@ -304,7 +354,7 @@ public:
     virtual wxDirTraverseResult OnDir(const wxString& dirname)
     {
         wxString path, name, ext;
-        wxSplitPath(dirname, &path, &name, &ext);
+        wxFileName::SplitPath(dirname, &path, &name, &ext);
 
         if ( !ext.empty() )
             name << _T('.') << ext;
@@ -523,93 +573,6 @@ static void TestEnvironment()
 
 #endif // TEST_ENVIRON
 
-// ----------------------------------------------------------------------------
-// wxExecute
-// ----------------------------------------------------------------------------
-
-#ifdef TEST_EXECUTE
-
-#include "wx/utils.h"
-
-static void TestExecute()
-{
-    wxPuts(_T("*** testing wxExecute ***"));
-
-#ifdef __UNIX__
-    #define COMMAND "echo hi"
-    #define ASYNC_COMMAND "xclock"
-    #define SHELL_COMMAND "echo hi from shell"
-    #define REDIRECT_COMMAND "cat -n Makefile"
-#elif defined(__WXMSW__)
-    #define COMMAND "command.com /c echo hi"
-    #define ASYNC_COMMAND "notepad"
-    #define SHELL_COMMAND "echo hi"
-    #define REDIRECT_COMMAND COMMAND
-#else
-    #error "no command to exec"
-#endif // OS
-
-    wxPrintf(_T("Testing wxShell: "));
-    fflush(stdout);
-    if ( wxShell(_T(SHELL_COMMAND)) )
-        wxPuts(_T("Ok."));
-    else
-        wxPuts(_T("ERROR."));
-
-    wxPrintf(_T("Testing wxExecute: "));
-    fflush(stdout);
-    if ( wxExecute(_T(COMMAND), wxEXEC_SYNC) == 0 )
-        wxPuts(_T("Ok."));
-    else
-        wxPuts(_T("ERROR."));
-
-    wxPrintf(_T("Testing async wxExecute: "));
-    fflush(stdout);
-    int pid = wxExecute(ASYNC_COMMAND);
-    if ( pid != 0 )
-    {
-        wxPuts(_T("Ok (command launched)."));
-        if ( wxKill(pid) == -1 )
-            wxPuts("ERROR: failed to kill child process.");
-    }
-    else
-        wxPuts(_T("ERROR."));
-
-    wxPrintf(_T("Testing wxExecute with redirection:\n"));
-    wxArrayString output;
-    if ( wxExecute(_T(REDIRECT_COMMAND), output) != 0 )
-    {
-        wxPuts(_T("ERROR."));
-    }
-    else
-    {
-        // don't show too much output, MAX_LINES is enough
-        static const unsigned MAX_LINES = 20;
-
-        const unsigned count = output.size();
-        for ( unsigned n = 0;
-              n < (count > MAX_LINES ? MAX_LINES/2 : count);
-              n++ )
-        {
-            wxPrintf("%04u:\t%s\n", n + 1, output[n]);
-        }
-
-        if ( count > MAX_LINES )
-        {
-            wxPrintf("... skipping %u lines...\n", count - MAX_LINES);
-
-            for ( unsigned n = count - MAX_LINES/2; n < count; n++ )
-            {
-                wxPrintf("%04u:\t%s\n", n + 1, output[n]);
-            }
-        }
-
-        wxPuts(_T("Ok."));
-    }
-}
-
-#endif // TEST_EXECUTE
-
 // ----------------------------------------------------------------------------
 // file
 // ----------------------------------------------------------------------------
@@ -987,7 +950,10 @@ static void TestFileSetTimes()
 #include "wx/intl.h"
 #include "wx/utils.h"   // for wxSetEnv
 
-static wxLocale gs_localeDefault(wxLANGUAGE_ENGLISH);
+static wxLocale gs_localeDefault;
+    // NOTE: don't init it here as it needs a wxAppTraits object
+    //       and thus must be init-ed after creation of the wxInitializer
+    //       class in the main()
 
 // find the name of the language from its value
 static const wxChar *GetLangName(int lang)
@@ -1236,6 +1202,8 @@ static void TestDefaultLang()
 {
     wxPuts(_T("*** Testing wxLocale::GetSystemLanguage ***"));
 
+    gs_localeDefault.Init(wxLANGUAGE_ENGLISH);
+
     static const wxChar *langStrings[] =
     {
         NULL,               // system default
@@ -1626,7 +1594,7 @@ static void TestPathList()
 // regular expressions
 // ----------------------------------------------------------------------------
 
-#ifdef TEST_REGEX
+#if defined TEST_REGEX && TEST_INTERACTIVE
 
 #include "wx/regex.h"
 
@@ -1703,7 +1671,7 @@ static void TestRegExInteractive()
     #undef wxPrintf
     #undef wxSprintf
 
-    // NB: do _not_ use ATTRIBUTE_PRINTF here, we have some invalid formats
+    // NB: do _not_ use WX_ATTRIBUTE_PRINTF here, we have some invalid formats
     //     in the tests below
     int wxPrintf( const wxChar *format, ... );
     int wxSprintf( wxChar *str, const wxChar *format, ... );
@@ -2398,11 +2366,12 @@ static void TestSocketClient()
 #ifdef TEST_FTP
 
 #include "wx/protocol/ftp.h"
-
-static wxFTP ftp;
+#include "wx/protocol/log.h"
 
 #define FTP_ANONYMOUS
 
+static wxFTP *ftp;
+
 #ifdef FTP_ANONYMOUS
     static const wxChar *directory = _T("/pub");
     static const wxChar *filename = _T("welcome.msg");
@@ -2425,18 +2394,18 @@ static bool TestFtpConnect()
     wxChar user[256];
     wxFgets(user, WXSIZEOF(user), stdin);
     user[wxStrlen(user) - 1] = '\0'; // chop off '\n'
-    ftp.SetUser(user);
+    ftp->SetUser(user);
 
     wxChar password[256];
     wxPrintf(_T("Password for %s: "), password);
     wxFgets(password, WXSIZEOF(password), stdin);
     password[wxStrlen(password) - 1] = '\0'; // chop off '\n'
-    ftp.SetPassword(password);
+    ftp->SetPassword(password);
 
     wxPrintf(_T("--- Attempting to connect to %s:21 as %s...\n"), hostname, user);
 #endif // FTP_ANONYMOUS/!FTP_ANONYMOUS
 
-    if ( !ftp.Connect(hostname) )
+    if ( !ftp->Connect(hostname) )
     {
         wxPrintf(_T("ERROR: failed to connect to %s\n"), hostname);
 
@@ -2445,72 +2414,34 @@ static bool TestFtpConnect()
     else
     {
         wxPrintf(_T("--- Connected to %s, current directory is '%s'\n"),
-                 hostname, ftp.Pwd().c_str());
-        ftp.Close();
+                 hostname, ftp->Pwd().c_str());
+        ftp->Close();
     }
 
     return true;
 }
 
-// test (fixed?) wxFTP bug with wu-ftpd >= 2.6.0?
-static void TestFtpWuFtpd()
-{
-    wxFTP ftp;
-    static const wxChar *hostname = _T("ftp.eudora.com");
-    if ( !ftp.Connect(hostname) )
-    {
-        wxPrintf(_T("ERROR: failed to connect to %s\n"), hostname);
-    }
-    else
-    {
-        static const wxChar *filename = _T("eudora/pubs/draft-gellens-submit-09.txt");
-        wxInputStream *in = ftp.GetInputStream(filename);
-        if ( !in )
-        {
-            wxPrintf(_T("ERROR: couldn't get input stream for %s\n"), filename);
-        }
-        else
-        {
-            size_t size = in->GetSize();
-            wxPrintf(_T("Reading file %s (%u bytes)..."), filename, size);
-
-            wxChar *data = new wxChar[size];
-            if ( !in->Read(data, size) )
-            {
-                wxPuts(_T("ERROR: read error"));
-            }
-            else
-            {
-                wxPrintf(_T("Successfully retrieved the file.\n"));
-            }
-
-            delete [] data;
-            delete in;
-        }
-    }
-}
-
 static void TestFtpList()
 {
     wxPuts(_T("*** Testing wxFTP file listing ***\n"));
 
     // test CWD
-    if ( !ftp.ChDir(directory) )
+    if ( !ftp->ChDir(directory) )
     {
         wxPrintf(_T("ERROR: failed to cd to %s\n"), directory);
     }
 
-    wxPrintf(_T("Current directory is '%s'\n"), ftp.Pwd().c_str());
+    wxPrintf(_T("Current directory is '%s'\n"), ftp->Pwd().c_str());
 
     // test NLIST and LIST
     wxArrayString files;
-    if ( !ftp.GetFilesList(files) )
+    if ( !ftp->GetFilesList(files) )
     {
         wxPuts(_T("ERROR: failed to get NLIST of files"));
     }
     else
     {
-        wxPrintf(_T("Brief list of files under '%s':\n"), ftp.Pwd().c_str());
+        wxPrintf(_T("Brief list of files under '%s':\n"), ftp->Pwd().c_str());
         size_t count = files.GetCount();
         for ( size_t n = 0; n < count; n++ )
         {
@@ -2519,13 +2450,13 @@ static void TestFtpList()
         wxPuts(_T("End of the file list"));
     }
 
-    if ( !ftp.GetDirList(files) )
+    if ( !ftp->GetDirList(files) )
     {
         wxPuts(_T("ERROR: failed to get LIST of files"));
     }
     else
     {
-        wxPrintf(_T("Detailed list of files under '%s':\n"), ftp.Pwd().c_str());
+        wxPrintf(_T("Detailed list of files under '%s':\n"), ftp->Pwd().c_str());
         size_t count = files.GetCount();
         for ( size_t n = 0; n < count; n++ )
         {
@@ -2534,12 +2465,12 @@ static void TestFtpList()
         wxPuts(_T("End of the file list"));
     }
 
-    if ( !ftp.ChDir(_T("..")) )
+    if ( !ftp->ChDir(_T("..")) )
     {
         wxPuts(_T("ERROR: failed to cd to .."));
     }
 
-    wxPrintf(_T("Current directory is '%s'\n"), ftp.Pwd().c_str());
+    wxPrintf(_T("Current directory is '%s'\n"), ftp->Pwd().c_str());
 }
 
 static void TestFtpDownload()
@@ -2547,7 +2478,7 @@ static void TestFtpDownload()
     wxPuts(_T("*** Testing wxFTP download ***\n"));
 
     // test RETR
-    wxInputStream *in = ftp.GetInputStream(filename);
+    wxInputStream *in = ftp->GetInputStream(filename);
     if ( !in )
     {
         wxPrintf(_T("ERROR: couldn't get input stream for %s\n"), filename);
@@ -2577,16 +2508,16 @@ static void TestFtpFileSize()
 {
     wxPuts(_T("*** Testing FTP SIZE command ***"));
 
-    if ( !ftp.ChDir(directory) )
+    if ( !ftp->ChDir(directory) )
     {
         wxPrintf(_T("ERROR: failed to cd to %s\n"), directory);
     }
 
-    wxPrintf(_T("Current directory is '%s'\n"), ftp.Pwd().c_str());
+    wxPrintf(_T("Current directory is '%s'\n"), ftp->Pwd().c_str());
 
-    if ( ftp.FileExists(filename) )
+    if ( ftp->FileExists(filename) )
     {
-        int size = ftp.GetFileSize(filename);
+        int size = ftp->GetFileSize(filename);
         if ( size == -1 )
             wxPrintf(_T("ERROR: couldn't get size of '%s'\n"), filename);
         else
@@ -2602,26 +2533,28 @@ static void TestFtpMisc()
 {
     wxPuts(_T("*** Testing miscellaneous wxFTP functions ***"));
 
-    if ( ftp.SendCommand(_T("STAT")) != '2' )
+    if ( ftp->SendCommand(_T("STAT")) != '2' )
     {
         wxPuts(_T("ERROR: STAT failed"));
     }
     else
     {
-        wxPrintf(_T("STAT returned:\n\n%s\n"), ftp.GetLastResult().c_str());
+        wxPrintf(_T("STAT returned:\n\n%s\n"), ftp->GetLastResult().c_str());
     }
 
-    if ( ftp.SendCommand(_T("HELP SITE")) != '2' )
+    if ( ftp->SendCommand(_T("HELP SITE")) != '2' )
     {
         wxPuts(_T("ERROR: HELP SITE failed"));
     }
     else
     {
         wxPrintf(_T("The list of site-specific commands:\n\n%s\n"),
-               ftp.GetLastResult().c_str());
+               ftp->GetLastResult().c_str());
     }
 }
 
+#if TEST_INTERACTIVE
+
 static void TestFtpInteractive()
 {
     wxPuts(_T("\n*** Interactive wxFTP test ***"));
@@ -2647,14 +2580,14 @@ static void TestFtpInteractive()
                 wildcard = buf + 5;
 
             wxArrayString files;
-            if ( !ftp.GetList(files, wildcard, start == _T("LIST")) )
+            if ( !ftp->GetList(files, wildcard, start == _T("LIST")) )
             {
                 wxPrintf(_T("ERROR: failed to get %s of files\n"), start.c_str());
             }
             else
             {
                 wxPrintf(_T("--- %s of '%s' under '%s':\n"),
-                       start.c_str(), wildcard.c_str(), ftp.Pwd().c_str());
+                       start.c_str(), wildcard.c_str(), ftp->Pwd().c_str());
                 size_t count = files.GetCount();
                 for ( size_t n = 0; n < count; n++ )
                 {
@@ -2665,20 +2598,22 @@ static void TestFtpInteractive()
         }
         else // !list
         {
-            wxChar ch = ftp.SendCommand(buf);
+            wxChar ch = ftp->SendCommand(buf);
             wxPrintf(_T("Command %s"), ch ? _T("succeeded") : _T("failed"));
             if ( ch )
             {
                 wxPrintf(_T(" (return code %c)"), ch);
             }
 
-            wxPrintf(_T(", server reply:\n%s\n\n"), ftp.GetLastResult().c_str());
+            wxPrintf(_T(", server reply:\n%s\n\n"), ftp->GetLastResult().c_str());
         }
     }
 
     wxPuts(_T("\n*** done ***"));
 }
 
+#endif // TEST_INTERACTIVE
+
 static void TestFtpUpload()
 {
     wxPuts(_T("*** Testing wxFTP uploading ***\n"));
@@ -2686,7 +2621,7 @@ static void TestFtpUpload()
     // upload a file
     static const wxChar *file1 = _T("test1");
     static const wxChar *file2 = _T("test2");
-    wxOutputStream *out = ftp.GetOutputStream(file1);
+    wxOutputStream *out = ftp->GetOutputStream(file1);
     if ( out )
     {
         wxPrintf(_T("--- Uploading to %s ---\n"), file1);
@@ -2695,17 +2630,17 @@ static void TestFtpUpload()
     }
 
     // send a command to check the remote file
-    if ( ftp.SendCommand(wxString(_T("STAT ")) + file1) != '2' )
+    if ( ftp->SendCommand(wxString(_T("STAT ")) + file1) != '2' )
     {
         wxPrintf(_T("ERROR: STAT %s failed\n"), file1);
     }
     else
     {
         wxPrintf(_T("STAT %s returned:\n\n%s\n"),
-               file1, ftp.GetLastResult().c_str());
+               file1, ftp->GetLastResult().c_str());
     }
 
-    out = ftp.GetOutputStream(file2);
+    out = ftp->GetOutputStream(file2);
     if ( out )
     {
         wxPrintf(_T("--- Uploading to %s ---\n"), file1);
@@ -2734,11 +2669,11 @@ public:
     {
     }
 
-    virtual void Walk(size_t skip = 1)
+    virtual void Walk(size_t skip = 1, size_t maxdepth = wxSTACKWALKER_MAX_DEPTH)
     {
         wxPuts(_T("Stack dump:"));
 
-        wxStackWalker::Walk(skip);
+        wxStackWalker::Walk(skip, maxdepth);
     }
 
 protected:
@@ -2768,8 +2703,8 @@ protected:
         wxString type, val;
         for ( size_t n = 0; frame.GetParam(n, &type, &name, &val); n++ )
         {
-            printf("\t%s %s = %s\n", (const char*)type.mb_str(), 
-                                     (const char*)name.mb_str(), 
+            printf("\t%s %s = %s\n", (const char*)type.mb_str(),
+                                     (const char*)name.mb_str(),
                                      (const char*)val.mb_str());
         }
     }
@@ -2847,9 +2782,10 @@ static void TestFileStream()
     {
         wxFileInputStream fsIn(filename);
         wxPrintf(_T("File stream size: %u\n"), fsIn.GetSize());
-        while ( !fsIn.Eof() )
+        int c;
+        while ( (c=fsIn.GetC()) != wxEOF  )
         {
-            wxPutchar(fsIn.GetC());
+            wxPutchar(c);
         }
     }
 
@@ -2884,9 +2820,10 @@ static void TestMemoryStream()
 
     wxMemoryInputStream memInpStream(buf, len);
     wxPrintf(_T("Memory stream size: %u\n"), memInpStream.GetSize());
-    while ( !memInpStream.Eof() )
+    int c;
+    while ( (c=memInpStream.GetC()) != wxEOF )
     {
-        wxPutchar(memInpStream.GetC());
+        wxPutchar(c);
     }
 
     wxPuts(_T("\n*** wxMemoryInputStream test done ***"));
@@ -3001,248 +2938,6 @@ void TestTimer()
 
 #endif // TEST_TIMER
 
-// ----------------------------------------------------------------------------
-// vCard support
-// ----------------------------------------------------------------------------
-
-#ifdef TEST_VCARD
-
-#include "wx/vcard.h"
-
-static void DumpVObject(size_t level, const wxVCardObject& vcard)
-{
-    void *cookie;
-    wxVCardObject *vcObj = vcard.GetFirstProp(&cookie);
-    while ( vcObj )
-    {
-        wxPrintf(_T("%s%s"),
-               wxString(_T('\t'), level).c_str(),
-               vcObj->GetName().c_str());
-
-        wxString value;
-        switch ( vcObj->GetType() )
-        {
-            case wxVCardObject::String:
-            case wxVCardObject::UString:
-                {
-                    wxString val;
-                    vcObj->GetValue(&val);
-                    value << _T('"') << val << _T('"');
-                }
-                break;
-
-            case wxVCardObject::Int:
-                {
-                    unsigned int i;
-                    vcObj->GetValue(&i);
-                    value.Printf(_T("%u"), i);
-                }
-                break;
-
-            case wxVCardObject::Long:
-                {
-                    unsigned long l;
-                    vcObj->GetValue(&l);
-                    value.Printf(_T("%lu"), l);
-                }
-                break;
-
-            case wxVCardObject::None:
-                break;
-
-            case wxVCardObject::Object:
-                value = _T("<node>");
-                break;
-
-            default:
-                value = _T("<unknown value type>");
-        }
-
-        if ( !!value )
-            wxPrintf(_T(" = %s"), value.c_str());
-        wxPutchar('\n');
-
-        DumpVObject(level + 1, *vcObj);
-
-        delete vcObj;
-        vcObj = vcard.GetNextProp(&cookie);
-    }
-}
-
-static void DumpVCardAddresses(const wxVCard& vcard)
-{
-    wxPuts(_T("\nShowing all addresses from vCard:\n"));
-
-    size_t nAdr = 0;
-    void *cookie;
-    wxVCardAddress *addr = vcard.GetFirstAddress(&cookie);
-    while ( addr )
-    {
-        wxString flagsStr;
-        int flags = addr->GetFlags();
-        if ( flags & wxVCardAddress::Domestic )
-        {
-            flagsStr << _T("domestic ");
-        }
-        if ( flags & wxVCardAddress::Intl )
-        {
-            flagsStr << _T("international ");
-        }
-        if ( flags & wxVCardAddress::Postal )
-        {
-            flagsStr << _T("postal ");
-        }
-        if ( flags & wxVCardAddress::Parcel )
-        {
-            flagsStr << _T("parcel ");
-        }
-        if ( flags & wxVCardAddress::Home )
-        {
-            flagsStr << _T("home ");
-        }
-        if ( flags & wxVCardAddress::Work )
-        {
-            flagsStr << _T("work ");
-        }
-
-        wxPrintf(_T("Address %u:\n")
-               "\tflags = %s\n"
-               "\tvalue = %s;%s;%s;%s;%s;%s;%s\n",
-               ++nAdr,
-               flagsStr.c_str(),
-               addr->GetPostOffice().c_str(),
-               addr->GetExtAddress().c_str(),
-               addr->GetStreet().c_str(),
-               addr->GetLocality().c_str(),
-               addr->GetRegion().c_str(),
-               addr->GetPostalCode().c_str(),
-               addr->GetCountry().c_str()
-               );
-
-        delete addr;
-        addr = vcard.GetNextAddress(&cookie);
-    }
-}
-
-static void DumpVCardPhoneNumbers(const wxVCard& vcard)
-{
-    wxPuts(_T("\nShowing all phone numbers from vCard:\n"));
-
-    size_t nPhone = 0;
-    void *cookie;
-    wxVCardPhoneNumber *phone = vcard.GetFirstPhoneNumber(&cookie);
-    while ( phone )
-    {
-        wxString flagsStr;
-        int flags = phone->GetFlags();
-        if ( flags & wxVCardPhoneNumber::Voice )
-        {
-            flagsStr << _T("voice ");
-        }
-        if ( flags & wxVCardPhoneNumber::Fax )
-        {
-            flagsStr << _T("fax ");
-        }
-        if ( flags & wxVCardPhoneNumber::Cellular )
-        {
-            flagsStr << _T("cellular ");
-        }
-        if ( flags & wxVCardPhoneNumber::Modem )
-        {
-            flagsStr << _T("modem ");
-        }
-        if ( flags & wxVCardPhoneNumber::Home )
-        {
-            flagsStr << _T("home ");
-        }
-        if ( flags & wxVCardPhoneNumber::Work )
-        {
-            flagsStr << _T("work ");
-        }
-
-        wxPrintf(_T("Phone number %u:\n")
-               "\tflags = %s\n"
-               "\tvalue = %s\n",
-               ++nPhone,
-               flagsStr.c_str(),
-               phone->GetNumber().c_str()
-               );
-
-        delete phone;
-        phone = vcard.GetNextPhoneNumber(&cookie);
-    }
-}
-
-static void TestVCardRead()
-{
-    wxPuts(_T("*** Testing wxVCard reading ***\n"));
-
-    wxVCard vcard(_T("vcard.vcf"));
-    if ( !vcard.IsOk() )
-    {
-        wxPuts(_T("ERROR: couldn't load vCard."));
-    }
-    else
-    {
-        // read individual vCard properties
-        wxVCardObject *vcObj = vcard.GetProperty("FN");
-        wxString value;
-        if ( vcObj )
-        {
-            vcObj->GetValue(&value);
-            delete vcObj;
-        }
-        else
-        {
-            value = _T("<none>");
-        }
-
-        wxPrintf(_T("Full name retrieved directly: %s\n"), value.c_str());
-
-
-        if ( !vcard.GetFullName(&value) )
-        {
-            value = _T("<none>");
-        }
-
-        wxPrintf(_T("Full name from wxVCard API: %s\n"), value.c_str());
-
-        // now show how to deal with multiply occurring properties
-        DumpVCardAddresses(vcard);
-        DumpVCardPhoneNumbers(vcard);
-
-        // and finally show all
-        wxPuts(_T("\nNow dumping the entire vCard:\n")
-             "-----------------------------\n");
-
-        DumpVObject(0, vcard);
-    }
-}
-
-static void TestVCardWrite()
-{
-    wxPuts(_T("*** Testing wxVCard writing ***\n"));
-
-    wxVCard vcard;
-    if ( !vcard.IsOk() )
-    {
-        wxPuts(_T("ERROR: couldn't create vCard."));
-    }
-    else
-    {
-        // set some fields
-        vcard.SetName("Zeitlin", "Vadim");
-        vcard.SetFullName("Vadim Zeitlin");
-        vcard.SetOrganization("wxWidgets", "R&D");
-
-        // just dump the vCard back
-        wxPuts(_T("Entire vCard follows:\n"));
-        wxPuts(vcard.Write());
-    }
-}
-
-#endif // TEST_VCARD
-
 // ----------------------------------------------------------------------------
 // wxVolume tests
 // ----------------------------------------------------------------------------
@@ -3436,16 +3131,17 @@ static void TestZipStreamRead()
 
     static const wxString filename = _T("foo");
     wxFFileInputStream in(TESTFILE_ZIP);
-    wxZipInputStream istr(in); 
+    wxZipInputStream istr(in);
     wxZipEntry entry(filename);
     istr.OpenEntry(entry);
 
     wxPrintf(_T("Archive size: %u\n"), istr.GetSize());
 
     wxPrintf(_T("Dumping the file '%s':\n"), filename.c_str());
-    while ( !istr.Eof() )
+    int c;
+    while ( (c=istr.GetC()) != wxEOF )
     {
-        wxPutchar(istr.GetC());
+        wxPutchar(c);
         fflush(stdout);
     }
 
@@ -4122,39 +3818,6 @@ static void TestThreadConditions()
     wxThread::Sleep(500);
 }
 
-#include "wx/utils.h"
-
-class MyExecThread : public wxThread
-{
-public:
-    MyExecThread(const wxString& command) : wxThread(wxTHREAD_JOINABLE),
-                                            m_command(command)
-    {
-        Create();
-    }
-
-    virtual ExitCode Entry()
-    {
-        return (ExitCode)wxExecute(m_command, wxEXEC_SYNC);
-    }
-
-private:
-    wxString m_command;
-};
-
-static void TestThreadExec()
-{
-    wxPuts(_T("*** Testing wxExecute interaction with threads ***\n"));
-
-    MyExecThread thread(_T("true"));
-    thread.Run();
-
-    wxPrintf(_T("Main program exit code: %ld.\n"),
-             wxExecute(_T("false"), wxEXEC_SYNC));
-
-    wxPrintf(_T("Thread exit code: %ld.\n"), (long)thread.Wait());
-}
-
 // semaphore tests
 #include "wx/datetime.h"
 
@@ -4346,10 +4009,6 @@ int main(int argc, char **argv)
     TestEnvironment();
 #endif // TEST_ENVIRON
 
-#ifdef TEST_EXECUTE
-    TestExecute();
-#endif // TEST_EXECUTE
-
 #ifdef TEST_FILECONF
     TestFileConfRead();
 #endif // TEST_FILECONF
@@ -4406,6 +4065,12 @@ int main(int argc, char **argv)
 
 #ifdef TEST_FTP
     wxLog::AddTraceMask(FTP_TRACE_MASK);
+
+    // wxFTP cannot be a static variable as its ctor needs to access
+    // wxWidgets internals after it has been initialized
+    ftp = new wxFTP;
+    ftp->SetLog(new wxProtocolLog(FTP_TRACE_MASK));
+
     if ( TestFtpConnect() )
     {
         #if TEST_ALL
@@ -4417,14 +4082,12 @@ int main(int argc, char **argv)
         #endif // TEST_ALL
 
         #if TEST_INTERACTIVE
-            TestFtpInteractive();
+            //TestFtpInteractive();
         #endif
     }
     //else: connecting to the FTP server failed
 
-    #if 0
-        TestFtpWuFtpd();
-    #endif
+    delete ftp;
 #endif // TEST_FTP
 
 #ifdef TEST_MIME
@@ -4501,7 +4164,6 @@ int main(int argc, char **argv)
         TestThreadSuspend();
         TestThreadDelete();
         TestThreadConditions();
-        TestThreadExec();
         TestSemaphore();
     #endif
 #endif // TEST_THREADS
@@ -4548,11 +4210,6 @@ int main(int argc, char **argv)
     wxUsleep(3000);
 #endif // TEST_USLEEP
 
-#ifdef TEST_VCARD
-    TestVCardRead();
-    TestVCardWrite();
-#endif // TEST_VCARD
-
 #ifdef TEST_VOLUME
     TestFSVolume();
 #endif // TEST_VOLUME