home *** CD-ROM | disk | FTP | other *** search
/ OS/2 Shareware BBS: 10 Tools / 10-Tools.zip / VSCPPv7.zip / VACPP / IBMCPP / smarts / ICLUI / HELPHDLR.CPP next >
Text File  |  1995-06-02  |  6KB  |  126 lines

  1.  
  2. %PROLOG%
  3.  
  4. #include <ihelphdr.hpp>
  5. #include <ireslib.hpp>
  6. #include <imsgbox.hpp>
  7.  
  8. #define INCL_DOSSESMGR      //  For DosStartSession
  9. #define INCL_WINHELP        //  For HM_TUTORIAL message
  10. #include <os2.h>
  11.  
  12. #include "helphdlr.hpp"
  13. #include "%FILE_NAME%.h"
  14.  
  15. /****************** AppHelpHandler Implementation **********************/
  16.  
  17.  
  18. /***********************************************************/
  19. /* This function handles the show Tutorial request by      */
  20. /* using DosStartSession to start VIEW.EXE on the tutorial */
  21. /* INF file.                                               */
  22. /***********************************************************/
  23. Boolean AppHelpHandler :: showTutorial( IHelpTutorialEvent &tutorialEvent )
  24. {
  25.   IResourceLibrary resLib;           /* Resource library */
  26.  
  27.   STARTDATA StartData;               /* Start session data structure */
  28.   ULONG     SessID;                  /* Session ID - returned */
  29.   PID       PID;                     /* Process ID - returned */
  30.   CHAR      bResultBuf[BUFFERSIZE];  /* Result buffers for searches */
  31.   CHAR      bPathBuf1[BUFFERSIZE];                
  32.   CHAR      bPathBuf2[BUFFERSIZE];                
  33.   CHAR      szObjectBuffer[BUFFERSIZE];                /* Object buffer */
  34.   CHAR      szHelpTutorialBuffer[BUFFERSIZE] = {'\0'}; /* Tutorial path name */
  35.  
  36.   /* Check whether tutorial viewer program, VIEW.EXE, and its supporting program, */
  37.   /* VIEWDOC.EXE is present along the PATH.                                       */
  38.   _searchenv (TUTORIAL_PROGRAM, "PATH", bPathBuf1);
  39.   _searchenv (TUTORIAL_PROGRAM2,"PATH", bPathBuf2);
  40.  
  41.   if ( !(strcmp (bPathBuf1,"") && strcmp (bPathBuf2,"")) )
  42.    {
  43.       /* Display error message - can't find VIEW.EXE */
  44.       IMessageBox errorMsg( tutorialEvent.window() );
  45.       errorMsg.setTitle( IResourceId(IDW_FRAME_WINDOW));
  46.       errorMsg.show( IResourceId(IDS_ERROR_VIEW_NOT_FOUND),
  47.                      IMessageBox::catastrophic);
  48.       return true;
  49.    }
  50.  
  51.   /* Check whether tutorial INF file is present along the HELP path */
  52.   _searchenv (TUTORIAL_FILE, "HELP", bResultBuf);
  53.   if (!strcmp(bResultBuf, "")) 
  54.    {
  55.       /* Display error message - can't find tutorial file */
  56.       IMessageBox errorMsg( tutorialEvent.window() );
  57.       errorMsg.setTitle( IResourceId(IDW_FRAME_WINDOW));
  58.       errorMsg.show( IResourceId(IDS_ERROR_NO_TUTORIAL),
  59.                      IMessageBox::catastrophic);
  60.       return true;
  61.    }
  62.  
  63.   /* Initialize the start session structure */
  64.   StartData.Length   = sizeof(STARTDATA);   /* Length of STARTDATA structure */
  65.   StartData.Related  = SSF_RELATED_CHILD;   /* Child session */
  66.   StartData.FgBg     = SSF_FGBG_FORE;       /* Start child session in foreground */
  67.   StartData.TraceOpt = SSF_TRACEOPT_NONE;   /* Do not trace session */
  68.   StartData.PgmTitle = (PSZ)(resLib.loadString(IDS_OPEN_FILE));  
  69.                                             /* Session Title string */
  70.   StartData.PgmName  = TUTORIAL_PROGRAM;    /* Tutorial program path name */
  71.  
  72.   /*-----------------------------------------------------------------------------*/
  73.   /* Pass the tutorial INF file name as input arguments to the VIEW program.     */
  74.   /* Single and then double quote the filename in case the file name is specified*/
  75.   /* as a list of files concatenated with plus (+) signs.  Otherwise the VIEW    */
  76.   /* program interprets the file name as one long file name with plus signs.     */
  77.   /*-----------------------------------------------------------------------------*/
  78.   strcpy(szHelpTutorialBuffer,"\'\"");        /* Single followed by double quote */
  79.   strcat(szHelpTutorialBuffer,bResultBuf); /* Fully-qualified tutorial filename found above */
  80.   strcat(szHelpTutorialBuffer,"\"\'");     /* Double followed by single quote */
  81.   StartData.PgmInputs   = (PBYTE)szHelpTutorialBuffer;
  82.  
  83.   StartData.TermQ       = 0;               /* Assume no termination queue  */
  84.   StartData.Environment = 0;               /* Assume no environment string */
  85.  
  86.   /* Inherit environment and open file handles from parent */
  87.   StartData.InheritOpt  = SSF_INHERTOPT_PARENT;
  88.  
  89.   StartData.SessionType = SSF_TYPE_DEFAULT;    /* Let Shell establish session type */
  90.   StartData.IconFile    = 0;                   /* No specific icon file provided */
  91.   StartData.PgmHandle   = 0;                   /* Do not use the installation file */
  92.   StartData.PgmControl  = SSF_CONTROL_VISIBLE; /* Start program visible and maximized */
  93.  
  94.   /* Initial window coordinates and size */
  95.   StartData.InitXPos    = 30;
  96.   StartData.InitYPos    = 40;
  97.   StartData.InitXSize   = 0;
  98.   StartData.InitYSize   = 0;
  99.  
  100.   StartData.Reserved      = 0;                     /* Reserved, must be zero */
  101.   StartData.ObjectBuffer  = (PSZ)szObjectBuffer;   /* Buffer to hold failure causes */
  102.   StartData.ObjectBuffLen = sizeof(szObjectBuffer);
  103.  
  104.   /*----------------------------------------------------------------------*/
  105.   /* On successful return, the variable SessID contains the session ID    */
  106.   /* of the new session, and the variable PID contains the process ID     */
  107.   /* of the new process.                                                  */
  108.   /*----------------------------------------------------------------------*/
  109.   if (DosStartSession(&StartData, &SessID, &PID))
  110.   {
  111.     /* Display error message - can't find VIEW.EXE */
  112.     IMessageBox errorMsg( tutorialEvent.window() );
  113.     errorMsg.setTitle( IResourceId(IDW_FRAME_WINDOW));
  114.     errorMsg.show( IResourceId(IDS_ERROR_STARTING_TUTORIAL),
  115.                    IMessageBox::catastrophic);
  116.     return true;
  117.   }
  118.  
  119.   return true;   // Set event result to true (handled!)
  120. }
  121.  
  122.  
  123.  
  124.  
  125.  
  126.