home *** CD-ROM | disk | FTP | other *** search
/ World of Shareware - Software Farm 2 / wosw_2.zip / wosw_2 / CPROG / WXWIN140.ZIP / SRC / WX_HELP.CC < prev    next >
C/C++ Source or Header  |  1993-04-18  |  5KB  |  222 lines

  1. /*
  2.  * File:     wx_help.cc
  3.  * Purpose:  API for invoking wxHelp
  4.  *
  5.  *                       wxWindows 1.40
  6.  * Copyright (c) 1993 Artificial Intelligence Applications Institute,
  7.  *                   The University of Edinburgh
  8.  *
  9.  *                     Author: Julian Smart
  10.  *                       Date: 18-4-93
  11.  *
  12.  * Permission to use, copy, modify, and distribute this software and its
  13.  * documentation for any purpose is hereby granted without fee, provided
  14.  * that the above copyright notice, author statement and this permission
  15.  * notice appear in all copies of this software and related documentation.
  16.  *
  17.  * THE SOFTWARE IS PROVIDED "AS-IS" AND WITHOUT WARRANTY OF ANY KIND, EXPRESS,
  18.  * IMPLIED OR OTHERWISE, INCLUDING WITHOUT LIMITATION, ANY WARRANTY OF
  19.  * MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE.
  20.  *
  21.  * IN NO EVENT SHALL THE ARTIFICIAL INTELLIGENCE APPLICATIONS INSTITUTE OR THE
  22.  * UNIVERSITY OF EDINBURGH BE LIABLE FOR ANY SPECIAL, INCIDENTAL, INDIRECT OR
  23.  * CONSEQUENTIAL DAMAGES OF ANY KIND, OR ANY DAMAGES WHATSOEVER RESULTING FROM
  24.  * LOSS OF USE, DATA OR PROFITS, WHETHER OR NOT ADVISED OF THE POSSIBILITY OF
  25.  * DAMAGE, AND ON ANY THEORY OF LIABILITY, ARISING OUT OF OR IN CONNECTION WITH
  26.  * THE USE OR PERFORMANCE OF THIS SOFTWARE.
  27.  */
  28.  
  29. #include <windows.h>
  30. #include <wx.h>
  31. #include <time.h>
  32.  
  33. #ifdef wx_x
  34. #include <netdb.h>
  35. #endif
  36.  
  37. // Timeout in seconds
  38. #define WX_HELP_TIMEOUT 30
  39.  
  40. #include "wx_help.h"
  41.  
  42. Bool wxHelpInstance::Initialize(char *filename, int server)
  43. {
  44. #ifdef wx_x
  45.   char host_buf[400];
  46.   if (-1 != gethostname(host_buf, sizeof(host_buf)))
  47.     helpHost = copystring(host_buf);
  48.   else helpHost = NULL;
  49. #endif
  50. #ifdef wx_msw
  51.   helpHost = copystring("dummy");
  52. #endif
  53.  
  54.   helpFile = copystring(filename);
  55.   helpServer = server;
  56.   wxIPCInitialize();
  57.   return TRUE;
  58. }
  59.  
  60. Bool wxHelpInstance::LoadFile(char *file)
  61. {
  62.   if (!file)
  63.     file = helpFile;
  64.  
  65.   if (!helpRunning)
  66.   {
  67.     if (!Run())
  68.       return FALSE;
  69.   }
  70.   char buf[200];
  71.   sprintf(buf, "f %s", file);
  72.   if (helpConnection)
  73.     return helpConnection->Execute(buf);
  74.   else return FALSE;
  75. }
  76.  
  77. Bool wxHelpInstance::DisplayContents(void)
  78. {
  79.   if (!helpRunning)
  80.   {
  81.     if (!Run())
  82.       return FALSE;
  83.   }
  84.   if (helpConnection)
  85.     return helpConnection->Execute("s -1");
  86.   else return FALSE;
  87. }
  88.  
  89. Bool wxHelpInstance::DisplaySection(int section)
  90. {
  91.   if (!helpRunning)
  92.   {
  93.     if (!Run())
  94.       return FALSE;
  95.   }
  96.   char buf[200];
  97.   sprintf(buf, "s %d", section);
  98.   if (helpConnection)
  99.     return helpConnection->Execute(buf);
  100.   else return FALSE;
  101. }
  102.  
  103. Bool wxHelpInstance::DisplayBlock(long block)
  104. {
  105.   if (!helpRunning)
  106.   {
  107.     if (!Run())
  108.       return FALSE;
  109.   }
  110.   char buf[200];
  111.   sprintf(buf, "b %l", block);
  112.   if (helpConnection)
  113.     return helpConnection->Execute(buf);
  114.   else return FALSE;
  115. }
  116.  
  117. Bool wxHelpInstance::KeywordSearch(char *k)
  118. {
  119.   if (!helpRunning)
  120.   {
  121.     if (!Run())
  122.       return FALSE;
  123.   }
  124.   char buf[500];
  125.   sprintf(buf, "k %s", k);
  126.   if (helpConnection)
  127.     return helpConnection->Execute(buf);
  128.   else return FALSE;
  129. }
  130.  
  131. Bool wxHelpInstance::Quit(void)
  132. {
  133.   if (helpConnection)
  134.     return helpConnection->Disconnect(); // Calls OnQuit via OnDisconnect
  135.   else return FALSE;
  136. }
  137.  
  138. void wxHelpInstance::OnQuit(void)
  139. {
  140. }
  141.  
  142. Bool wxHelpInstance::Run(void)
  143. {
  144. #ifdef wx_x
  145.   if (!helpFile || !helpHost || helpRunning)
  146.     return FALSE;
  147. #endif
  148. #ifdef wx_msw
  149.   if (!helpFile || helpRunning)
  150.     return FALSE;
  151. #endif
  152.  
  153.   char buf[500];
  154.   char buf1[100];
  155.   time_t start_time;
  156.   time_t current_time;
  157.  
  158.   (void)time(¤t_time);
  159.  
  160.   // Invent a server name that's likely to be unique but different from
  161.   // last time
  162. #ifdef wx_x
  163.   if (helpServer == -1)
  164.     helpServer = 4000 + (current_time % 4000);
  165. #endif
  166. #ifdef wx_msw // Only one instance of wxHelp at a time
  167.   helpServer = 4000;
  168. #endif
  169.  
  170.   sprintf(buf1, "%d", helpServer);
  171.  
  172. #ifdef wx_x
  173.   sprintf(buf, "wxhelp -server %d &", helpServer);
  174. #endif
  175. #ifdef wx_msw
  176.   // Only one instance of wxHelp under Windows.
  177.   // See if there's already an instance of wxHelp
  178.   if (helpConnection = (wxHelpConnection *)MakeConnection(helpHost, buf1, "WXHELP"))
  179.   {
  180.     helpRunning = TRUE;
  181.     return TRUE;
  182.   }
  183.  
  184.   sprintf(buf, "wxhelp -server %d", helpServer);
  185. #endif
  186.   wxExecute(buf);
  187.  
  188.   (void)time(&start_time);
  189.   (void)time(¤t_time);
  190.  
  191.   // Give it some time to respond
  192.   while (!helpConnection && ((current_time - start_time) < WX_HELP_TIMEOUT))
  193.   {
  194.     wxSleep(1);
  195.     helpConnection = (wxHelpConnection *)MakeConnection(helpHost, buf1, "WXHELP");
  196.     (void)time(¤t_time);
  197.   }
  198.  
  199.   if (helpConnection)
  200.   {
  201.     helpRunning = TRUE;
  202.     return TRUE;
  203.   }
  204.   else
  205.   {
  206.     sprintf(buf, "Connection to wxHelp timed out in %d seconds", WX_HELP_TIMEOUT);
  207.     (void)wxMessageBox(buf);
  208.     return FALSE;
  209.   }
  210. }
  211.  
  212. Bool wxHelpConnection::OnDisconnect(void)
  213. {
  214.   helpInstance->OnQuit();
  215.   helpInstance->helpRunning = FALSE;
  216.   helpInstance->helpConnection = NULL;
  217.   helpInstance->helpServer = -1;
  218.   delete this;
  219.   return TRUE;
  220. }
  221.  
  222.