Example #1
0
BOOL InstallPort(void)
{
//APIRET APIENTRY SplPdInstallPort(HAB hab,PSZ pszPortName)
    PFN pfnProcess;
    APIRET rc;

    sprintf(szMessage,"Installing %s",szPortName);
    PrintString(szMessage,3);
    if (hMod != 0)
    {
        if (DosQueryProcAddr(hMod,0,"SPLPDINSTALLPORT",&pfnProcess) == NO_ERROR)
            rc = pfnProcess(habAnchorBlock,szPortName);
        else
        {
            ErrorNotify("Error Getting INSTALLPORT Address");
            return(FALSE);
        }
    }
    else
    {
        sprintf(szMessage,"Error Loading Module %s",szModuleName);
        ErrorNotify(szMessage);
        return(FALSE);
    }

    if (rc != NO_ERROR)
    {
        sprintf(szMessage,"Error Installing Port - rc = %X",rc);
        ErrorNotify(szMessage);
        return(FALSE);
    }
    sprintf(szMessage,"Port %s Installed",szPortName);
    PrintString(szMessage,4);
    return(TRUE);
}
Example #2
0
ULONG QueryPort(char achBuffer[],ULONG cbBuffSize)
{
//APIRET APIENTRY SplPdQueryPort(HAB hab,PSZ pszPortName,PVOID pBufIn,ULONG cbBuf,PULONG cItems)
    PFN pfnProcess;
    ULONG ulItemCount = 0;
    APIRET rc;

    sprintf(szMessage,"Querying %s",szPortName);
    PrintString(szMessage,3);
    if (hMod != 0)
    {
        if (DosQueryProcAddr(hMod,0,"SPLPDQUERYPORT",&pfnProcess) == NO_ERROR)
            rc = pfnProcess(habAnchorBlock,szPortName,achBuffer,cbBuffSize,&ulItemCount);
        else
        {
            ErrorNotify("Error Getting QUERYPORT Address");
            return(FALSE);
        }
    }
    else
    {
        sprintf(szMessage,"Error Loading Module %s",szModuleName);
        ErrorNotify(szMessage);
        return(FALSE);
    }
    if (rc != NO_ERROR)
    {
        sprintf(szMessage,"Error Querying Port - rc = %X",rc);
        ErrorNotify(szMessage);
        return(0);
    }
    sprintf(szMessage,"%s -> %s",szPortName,achBuffer);
    PrintString(szMessage,4);
    return(ulItemCount);
}
Example #3
0
BOOL RemovePort(void)
{
    PFN pfnProcess;
    APIRET rc;

    sprintf(szMessage,"Removing %s",szPortName);
    PrintString(szMessage,3);
    if (hMod != 0)
    {
        if (DosQueryProcAddr(hMod,0,"SPLPDREMOVEPORT",&pfnProcess) == NO_ERROR)
            rc = pfnProcess(habAnchorBlock,szPortName);
        else
        {
            ErrorNotify("Error Getting REMOVEPORT Address");
            return(FALSE);
        }
    }
    else
    {
        sprintf(szMessage,"Error Loading Module %s",szModuleName);
        ErrorNotify(szMessage);
        return(FALSE);
    }
    if (rc != NO_ERROR)
    {
        sprintf(szMessage,"Error Removing Port - rc = %X",rc);
        ErrorNotify(szMessage);
        return(FALSE);
    }
    sprintf(szMessage,"Port %s Removed",szPortName);
    PrintString(szMessage,4);
    return(TRUE);
}
Example #4
0
void APIENTRY ReadLoopThread()
  {
  THREAD *pstThd = pstThread;
  CONFIG *pCfg = &pstThd->stCfg;
  THREADCTRL *pThread = &pstThd->stThread;
  BOOL bReadComplete;
  CHAR *pString;
  APIRET rc;
  BOOL bSkipRead = FALSE;
  char szMessage[80];
  ULONG ulStringLength;
  ULONG ulPostCount;


//  DosSetPriority(PRTYS_THREAD,PRTYC_FOREGROUNDSERVER,-28L,0);
  DosSetPriority(PRTYS_THREAD,PRTYC_REGULAR,-10L,0);
  ulStringLength = pCfg->wReadStringLength;
  DosAllocMem((PPVOID)&pString,10010,(PAG_COMMIT | PAG_WRITE | PAG_READ));
  while (!pThread->bStopThread)
    {
    if (ulStringLength != pCfg->wReadStringLength)
      {
      DosFreeMem(pString);
      ulStringLength = pCfg->wReadStringLength;
      DosAllocMem((PPVOID)&pString,(ulStringLength + 10),(PAG_COMMIT | PAG_WRITE | PAG_READ));
      }
    if (pCfg->bHalfDuplex)
      {
      while ((rc = DosWaitEventSem(hevStartReadSem,10000)) != 0)
        if (rc == ERROR_SEM_TIMEOUT)
          {
          ErrorNotify(pstThd,"Read start semaphore timed out");
          bSkipRead = TRUE;
          }
        else
          {
          sprintf(szMessage,"Read start semaphore error - rc = %u",rc);
          ErrorNotify(pstThd,szMessage);
          }
      DosResetEventSem(hevStartReadSem,&ulPostCount);
      }
    if (bSkipRead)
      bSkipRead = FALSE;
    else
      {
      if (!pCfg->bReadCharacters)
        bReadComplete = ReadString(pstThd,pString);
      else
        bReadComplete = ReadCharacters(pstThd,pString);
      if (bReadComplete)
        DosPostEventSem(hevStartWriteSem);
      }
    }
  DosFreeMem(pString);
  DosPostEventSem(hevKillReadThreadSem);
  DosExit(EXIT_THREAD,0);
  }
Example #5
0
BOOL TerminatePort(void)
{
//APIRET APIENTRY SplPdInitPort(HFILE hCom,PSZ pszPortName)
    PFN pfnProcess;
    APIRET rc;
    HFILE hCom;
    ULONG ulAction;

    sprintf(szMessage,"Terminating %s",szPortName);
    PrintString(szMessage,3);
    if ((rc = DosOpen(szPortName,&hCom,&ulAction,0L,0L,0x0001,0x21c2,0L)) == NO_ERROR)
    {
        if (hMod != 0)
        {
            if (DosQueryProcAddr(hMod,0,"SPLPDTERMPORT",&pfnProcess) == NO_ERROR)
                rc = pfnProcess(hCom,szPortName);
            else
            {
                ErrorNotify("Error Getting TERMPORT Address");
                return(FALSE);
            }
        }
        else
        {
            sprintf(szMessage,"Error Loading Module %s",szModuleName);
            ErrorNotify(szMessage);
            return(FALSE);
        }
        DosClose(hCom);
    }
    if (rc != NO_ERROR)
    {
        sprintf(szMessage,"Error Terminating Port - rc = %X",rc);
        ErrorNotify(szMessage);
        return(FALSE);
    }
    sprintf(szMessage,"Port %s terminated",szPortName);
    PrintString(szMessage,4);
    return(TRUE);
}
Example #6
0
ULONG EnumeratePorts(char achBuffer[],ULONG cbBuffSize)
{
//APIRET APIENTRY SplPdEnumPort(HAB hab,PVOID pBuf,ULONG cbBuf,PULONG pulReturned,PULONG pulTotal,PULONG pcbRequired);
    ULONG ulReturned;
    ULONG ulTotal = 0;
    ULONG cbRequired;
    PFN pfnProcess;
    APIRET rc;

    if (hMod != 0)
    {
        if (DosQueryProcAddr(hMod,0,"SPLPDENUMPORT",&pfnProcess) == NO_ERROR)
        {
            if (pfnProcess(habAnchorBlock,0,0,&ulReturned,&ulTotal,&cbRequired) == ERROR_MORE_DATA)
                if (cbRequired <= cbBuffSize)
                    rc = pfnProcess(habAnchorBlock,achBuffer,cbBuffSize,&ulReturned,&ulTotal,&cbRequired);
                else
                    ulTotal = 0;
        }
        else
        {
            ErrorNotify("Error Getting ENUMPORT Address");
            return(FALSE);
        }
    }
    else
    {
        sprintf(szMessage,"Error Loading Module %s",szModuleName);
        ErrorNotify(szMessage);
        return(FALSE);
    }
    if (rc != NO_ERROR)
    {
        sprintf(szMessage,"Error Enumerating Port - rc = %X",rc);
        ErrorNotify(szMessage);
        return(0);
    }
    return(ulTotal);
}
Example #7
0
BOOL SetupPort(void)
{
//APIRET EXPENTRY SplPdSetPort(HAB hab,PSZ pszPortName,PULONG flModified)
    PFN pfnProcess;
    BOOL bModified = FALSE;
    APIRET rc;

    sprintf(szMessage,"Configuring %s",szPortName);
    PrintString(szMessage,3);
    if (hMod != 0)
    {
        if (DosQueryProcAddr(hMod,0,"SPLPDSETPORT",&pfnProcess) == NO_ERROR)
            rc = pfnProcess(habAnchorBlock,szPortName,&bModified);
        else
        {
            ErrorNotify("Error Getting SETPORT Address");
            return(FALSE);
        }
    }
    else
    {
        sprintf(szMessage,"Error Loading Module %s",szModuleName);
        ErrorNotify(szMessage);
        return(FALSE);
    }
    if (rc != NO_ERROR)
    {
        sprintf(szMessage,"Error Setting-up Port - rc = %X",rc);
        ErrorNotify(szMessage);
        return(FALSE);
    }
    if (bModified)
        sprintf(szMessage,"Port %s was configured",szPortName);
    else
        sprintf(szMessage,"Port %s was not configured",szPortName);
    PrintString(szMessage,4);
    return(bModified);
}
Example #8
0
void LuaDebug::readline_handler( const system::error_code& e,std::size_t size )
{
	if( e )
	{
		mSocket.reset();
		return;
	}

	string str;
	istream is(&mInbuf);
	if( getline(is,str) )
	{
		xpressive::sregex setbp = xpressive::sregex::compile("break<([^\?<>|\"*]+)>@(\\d+)");
		xpressive::sregex infop = xpressive::sregex::compile("info:([^\\n]+)");
		xpressive::sregex errorp = xpressive::sregex::compile("error<([^<^>]*)>");
		xpressive::sregex errorpt = xpressive::sregex::compile("error<([^\?<>|\"*]+)>@(\\d+)");
		xpressive::smatch what;
		if( xpressive::regex_match(str,what,setbp) )
		{
			if( Break )
				Break( what[1],boost::lexical_cast<int>(what[2]) );
		}
		else if( xpressive::regex_match(str,what,infop) )
		{
			if( GetInfoNotify )
				GetInfoNotify(what[1]);
		}
		else if( xpressive::regex_match(str,what,errorpt) )
		{
			if( Error )
				Error( what[1],boost::lexical_cast<int>(what[2]) );
		}
		else if( xpressive::regex_match(str,what,errorp) )
		{
			if( ErrorNotify )
				ErrorNotify(what[1]);
		}
	}
	boost::asio::async_read_until( 
		*mSocket,
		mInbuf,
		'\n',
		bind(&LuaDebug::readline_handler,this,placeholders::error,placeholders::signal_number) );
}
Example #9
0
void ColumnSize(SCREEN *pstScreen,LONG lReadEdge,LONG lWriteEdge,BOOL bTrackSibling)
  {
  APIRET rc;
  char szMessage[80];
  RECTL rclClient;
  BOOL bOddScreen;
  BOOL bResetScrollBar = FALSE;

  if (pstScreen->hwndScroll != (HWND)NULL)
    {
    ClearColScrollBar(pstScreen);
    bResetScrollBar = TRUE;
    }
  if ((rc = DosRequestMutexSem(hmtxColGioBlockedSem,10000)) != NO_ERROR)
    {
    sprintf(szMessage,"DosRequestMutexSem error in ColumnSize: return code = %ld", rc);
    ErrorNotify(szMessage);
    }

  if (bTrackSibling)
    {
    if (lReadEdge != 0L)
      pstScreen->rcl.xLeft = lReadEdge;
    else
      if (lWriteEdge != 0L)
        pstScreen->rcl.xRight = lWriteEdge;
    }
  else
    {
    WinQueryWindowRect(hwndClient,&rclClient);

    if (stCFG.fLockWidth == LOCK_NONE)
      {
      if ((rclClient.xRight / 2) % stCell.cx)
        bOddScreen = TRUE;
      else
        bOddScreen = FALSE;

      if (pstScreen->wDirection == CS_WRITE)
        {
        if (bOddScreen)
          rclClient.xRight -= stCell.cx;
        pstScreen->rcl.xRight = (rclClient.xRight / 2);
        pstScreen->rcl.xLeft = rclClient.xLeft;
        }
      else
        {
        pstScreen->rcl.xRight = rclClient.xRight;
        pstScreen->rcl.xLeft = (rclClient.xRight / 2);
        if (bOddScreen)
          pstScreen->rcl.xLeft -= (stCell.cx / 2);
        }
      }
    else
      {
      if (pstScreen->wDirection == CS_WRITE)
        if (stCFG.fLockWidth == LOCK_WRITE)
          pstScreen->rcl.xRight = (stCFG.lLockWidth * stCell.cx);
        else
          pstScreen->rcl.xRight = (rclClient.xRight - (stCFG.lLockWidth * stCell.cx));
      else
        {
        if (stCFG.fLockWidth == LOCK_WRITE)
          pstScreen->rcl.xLeft = (stCFG.lLockWidth * stCell.cx);
        else
          pstScreen->rcl.xLeft = (rclClient.xRight - (stCFG.lLockWidth * stCell.cx));
        pstScreen->rcl.xRight = rclClient.xRight;
        }
      }
    pstScreen->rcl.yBottom = (rclClient.yBottom + lStatusHeight);
    pstScreen->rcl.yTop = rclClient.yTop;
    pstScreen->lHeight = (pstScreen->rcl.yTop - pstScreen->rcl.yBottom - stCell.cy);
    pstScreen->lCharHeight = ((pstScreen->lHeight / stCell.cy) + 1);
    stColTrack.ptlMaxTrackSize.y = (stCell.cy * pstScreen->lCharHeight);
//    SetColScrollRowCount(pstScreen);
    }
  pstScreen->lWidth = (pstScreen->rcl.xRight - pstScreen->rcl.xLeft - stCell.cx);
  pstScreen->lCharWidth = ((pstScreen->lWidth  / stCell.cx) + 1);
  pstScreen->lCharSize = (pstScreen->lCharWidth * pstScreen->lCharHeight);
  pstScreen->rclDisp.xRight = (pstScreen->lWidth + stCell.cx);
  stColTrack.ptlMaxTrackSize.x = (stCell.cx * (stRead.lCharWidth + stWrite.lCharWidth - 6));

  WinSetWindowPos(pstScreen->hwnd,
                 0L,
                 pstScreen->rcl.xLeft,
                 pstScreen->rcl.yBottom,
                (pstScreen->rcl.xRight - pstScreen->rcl.xLeft),
                (pstScreen->rcl.yTop - pstScreen->rcl.yBottom),
                (SWP_MOVE | SWP_SIZE));

  if ((rc = DosReleaseMutexSem(hmtxColGioBlockedSem)) != NO_ERROR)
    {
    sprintf(szMessage,"DosReleaseMutexSem error in ColumnSize: return code = %ld", rc);
    ErrorNotify(szMessage);
    }
  if (bResetScrollBar)
    SetupColScrolling(pstScreen);
  WinInvalidateRect(hwndStatus,(PRECTL)NULL,FALSE);
  }
Example #10
0
void ProcessResponse(HWND hwnd,MSG *pMessage)
  {
  NOTIFYLST *pNotifyList;
  USHORT usSubCount;
  USHORT usGroupCount;
  USHORT usMsgLen;
  LOGON *pLogon;
  ULONG *pulSubNum;
  SUBREQLST *pSubList;
  SERVERLST *pServerList;
  SUBRSPLST *pSubResponseList;
  ULONG *pulGroupNum;
  GROUPREQLST *pGroupList;
  GROUPRSPLST *pGroupResponseList;
  USHORT usCount;
  char *pData;
  ULONG ulPostCount;
  int iIndex;
  SUBSCRIBER *pSub;
  GROUP *pGroup;
  ULONG *pulNums;

  sprintf(szMessage,"Response received <%u>",pMessage->ulMessageNumber);
  PrintString(szMessage,9);
  switch (pMessage->fMessageType)
    {
    case RSP_TIMEOUT:
      break;
    case RSP_ACK_LOGON:
      PrintString("Logon acknowledged",10);
      MenuItemEnable(hwndFrame,IDM_CLIENT,TRUE);
      break;
    case RSP_NAK_LOGON:
      sprintf(szMessage,"Logon failed, reason = %u",pMessage->byData);
      PrintString(szMessage,10);
      break;
    case RSP_ACK_NOTIFY:
      PrintString("Notify successfull",10);
      DosPostEventSem(hevNotifyLoopSem);
      break;
    case RSP_NAK_NOTIFY:
      sprintf(szMessage,"Notify failed, reason = %u",pMessage->byData);
      PrintString(szMessage,10);
      break;
    case RSP_NAK_SUBSCRIBER:
      sprintf(szMessage,"Subscriber query failed, reason = %u",pMessage->byData);
      PrintString(szMessage,10);
      break;
    case RSP_ACK_SUBSCRIBER:
      if (pMessage->cbDataSize == 0)
        PrintString("No active subscribers defined at server",10);
      sprintf(szMessage,"Subscriber query succeeded");
      PrintString(szMessage,10);
      break;
    case RSP_NAK_GROUP:
      sprintf(szMessage,"Group query failed, reason = %u",pMessage->byData);
      PrintString(szMessage,10);
      break;
    case RSP_ACK_GROUP:
      sprintf(szMessage,"Group query succeeded");
      PrintString(szMessage,10);
      break;
    case RSP_SERVER:
      if (pMessage->cbDataSize == 0)
        PrintString("No active subscribers or groups defined at server",10);
      else
        {
        pServerList = (SERVERLST *)&pMessage->byData;
        sprintf(szMessage,"Server sends %u Subscribers and %u Groups",pServerList->usSubCount,pServerList->usGroupCount);
        /*
        **  query subscribers
        */
        if ((pulNums = (ULONG *)malloc(pMessage->cbDataSize)) == 0)
          {
          ErrorNotify("Failed to allocate memory for RSP_SERVER message");
          break;
          }
        pServerList = (SERVERLST *)&pMessage->byData;
        pulSubNum = (ULONG *)&pServerList->byData;
        usSubCount = pServerList->usSubCount;
        usGroupCount = pServerList->usGroupCount;
        memcpy(pulNums,pulSubNum,(sizeof(ULONG) * (usSubCount + usGroupCount)));
        if (usSubCount > 0)
          {
          pSubList = (SUBREQLST *)&pMessage->byData;
          pSubList->usSubCount = usSubCount;
          memcpy(&pSubList->ulSubNumber,pulNums,(sizeof(ULONG) * usSubCount));
          pMessage->fMessageType = REQ_QUERY_SUBSCRIBER;
          pMessage->cbDataSize = ((sizeof(ULONG) * (usSubCount - 1)) + sizeof(SUBREQLST));
          pMessage->cbSize = (pMessage->cbDataSize + sizeof(MSG) - 1);
          SendMessage(pMessage);
          }
        if (usGroupCount > 0)
          {
          pGroupList = (GROUPREQLST *)&pMessage->byData;
          pGroupList->usGroupCount = usGroupCount;
          memcpy(&pGroupList->ulGroupNumber,&pulNums[usSubCount],(sizeof(ULONG) * usGroupCount));
          pMessage->fMessageType = REQ_QUERY_GROUP;
          pMessage->cbDataSize = ((sizeof(ULONG) * (usGroupCount - 1)) + sizeof(GROUPREQLST));
          pMessage->cbSize = (pMessage->cbDataSize + sizeof(MSG) - 1);
          SendMessage(pMessage);
          }
        free(pulNums);
        }
      break;
    default:
      sprintf(szMessage,"Unknown response, type = %u",pMessage->fMessageType);
      PrintString(szMessage,10);
      break;
    }
  DosFreeMem(pMessage);
  }