home *** CD-ROM | disk | FTP | other *** search
/ OS/2 Shareware BBS: 10 Tools / 10-Tools.zip / ocl150a.zip / OCL / Samples / NextHand / Source / NextBarEvent.cpp < prev    next >
C/C++ Source or Header  |  1996-08-12  |  3KB  |  125 lines

  1. // NextHand
  2. // Next like toolbar
  3.  
  4. // $Header: W:/Projects/OCL/Samples/NextHand/Source/rcs/NextBarEvent.cpp 1.50 1996/08/11 23:48:43 B.STEIN Release $
  5.  
  6. #include "..\Source\NextHand.hpp"
  7.  
  8. NextBarEvent::NextBarEvent()
  9. {
  10.  settings << (PSZ) "";
  11.  session=SSF_TYPE_DEFAULT;
  12.  control=SSF_CONTROL_VISIBLE;
  13.  Bkgr=SSF_FGBG_FORE;
  14. }
  15.  
  16. NextBarEvent::~NextBarEvent() {}
  17.  
  18. void NextBarEvent::startEvent()
  19. {
  20.  OString     Inputs;
  21.  OString     DosSettings;
  22.  STARTDATA   StartData;
  23.  ULONG       SessID;
  24.  PID         Pid;
  25.  APIRET      rc;
  26.  ULONG       ulDriveNumber;
  27.  ULONG       ulLogicalDriveMap;
  28.  
  29.  
  30.  DosQueryCurrentDisk(&ulDriveNumber, &ulLogicalDriveMap);
  31.  if((dir.getText()) && (dir.getText()[1]==':'))
  32.    {
  33.     CHAR       Drive;
  34.  
  35.     Drive=tolower(dir.getText()[0]);
  36.     if(DosSetDefaultDisk(++Drive-'a')) {
  37.        nxh->toolbar->error(ERR_ACCESS_DRIVE);
  38.        return; }
  39.     else if(DosSetCurrentDir(dir)) {
  40.        nxh->toolbar->error(WORKDIR_NOT_FOUND);
  41.        return; }
  42.    }
  43.  else
  44.    {
  45.     if(DosSetCurrentDir("\\")) {
  46.       nxh->toolbar->error(ERR_ACCESS_DRIVE);
  47.       return; }
  48.    }
  49.  
  50.  memset(&StartData, 0, sizeof(STARTDATA));
  51.  StartData.Length      = 50;
  52.  StartData.Related     = SSF_RELATED_INDEPENDENT;
  53.  StartData.FgBg        = Bkgr;
  54.  StartData.TraceOpt    = SSF_TRACEOPT_NONE;
  55.  StartData.PgmTitle    = title.getText();
  56.  StartData.PgmName     = name.getText();
  57.  StartData.PgmInputs   = inputs.getText();
  58.  StartData.InheritOpt  = SSF_INHERTOPT_PARENT;
  59.  StartData.SessionType = session;
  60.  StartData.PgmControl  = control;
  61.  
  62.  switch(StartData.SessionType)
  63.   {
  64.    case PROG_WINDOW_PROT:
  65.    case PROG_31_ENH:
  66.     {
  67.      if(session == PROG_WINDOW_PROT)
  68.        Inputs <<  (PSZ) "/s ";
  69.      if(session == PROG_31_ENH)
  70.        Inputs <<  (PSZ) "/3 ";
  71.     Inputs + name;
  72.     Inputs +  (PSZ) " ";
  73.     Inputs + inputs;
  74.     StartData.PgmName     = "WINOS2.COM";
  75.     StartData.PgmInputs   = Inputs.getText();
  76.     StartData.SessionType = PROG_SEAMLESSCOMMON;
  77.    }
  78.    break;
  79.  
  80.  case SSF_TYPE_VDM:
  81.  case SSF_TYPE_WINDOWEDVDM:
  82.    {
  83.     PSZ  pszTemp;
  84.  
  85.     DosSettings << settings;
  86.     DosSettings + (PSZ) "\n\n";
  87.     for(pszTemp = DosSettings; *pszTemp != '\0'; pszTemp++)
  88.          if(*pszTemp == '\n') *pszTemp = '\0';
  89.     StartData.Environment = DosSettings.getText();
  90.    }
  91.    break;
  92.  }
  93.  
  94.  if(StartData.SessionType==SSF_TYPE_WPSOBJECT) {
  95.    HOBJECT     hWPSObject;
  96.  
  97.    hWPSObject = WinQueryObject(name);
  98.    if(hWPSObject!=NULLHANDLE)
  99. #if ( defined (__TK_21__) || !defined (__IBMCPP__) ) 
  100.      WinSetObjectData(hWPSObject, "OPEN=DEFAULT");
  101. #else
  102.      WinOpenObject(hWPSObject, 0, TRUE);
  103. #endif
  104.    else
  105.      nxh->toolbar->error(NO_WPSO); }
  106.  else {
  107.    rc=DosStartSession(&StartData, &SessID, &Pid);
  108.    switch(rc)
  109.     {
  110.      case 0:
  111.      case 2:
  112.        break;
  113.  
  114.      case ERROR_SMG_START_IN_BACKGROUND:
  115.        nxh->toolbar->error(ERR_START_IN_BACKGROUND);
  116.  
  117.      default:
  118.        nxh->toolbar->error(START_EVENT_FAILED);
  119.     }}
  120.  return;
  121. }
  122.  
  123.  
  124. // end of source
  125.