Example #1
0
static void ti_uart_destroy(EXO* exo)
{
    kstream_close(KERNEL_HANDLE, exo->uart.tx_handle);
    kstream_close(KERNEL_HANDLE, exo->uart.rx_handle);
    kstream_destroy(exo->uart.tx_stream);
    kstream_destroy(exo->uart.rx_stream);
    exo->uart.active = false;
}
Example #2
0
/*
 * FUNCTION: MainWndProc(HWND, UINT, WPARAM, LPARAM)
 *
 * PURPOSE:  Processes messages
 *
 * MESSAGES:
 *
 * WM_COMMAND    - application menu (About dialog box)
 * WM_DESTROY    - destroy window
 */
LRESULT CALLBACK
MainWndProc(HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam)
{
  HGLOBAL hBuffer;
  LPSTR lpBuffer; 
  int iEvent, cnt, ret;
  char *tmpCommaLoc;
  struct sockaddr_in remote_addr;
  struct hostent *remote_host;
	
  switch (message) {
  case WM_MYSCREENCHANGEBKSP:
    if (!con)
      break;
    con->backspace = wParam;
    if (con->backspace == VK_BACK) {
      con->ctrl_backspace = 0x7f;
      WritePrivateProfileString(INI_TELNET, INI_BACKSPACE, 
				INI_BACKSPACE_BS, TELNET_INI);
    }
    else {
      con->ctrl_backspace = VK_BACK;
      WritePrivateProfileString(INI_TELNET, INI_BACKSPACE, 
				INI_BACKSPACE_DEL, TELNET_INI);
    }
    GetPrivateProfileString(INI_HOSTS, INI_HOST "0", "", buf, 128, TELNET_INI);
    tmpCommaLoc = strchr(buf, ',');
    if (tmpCommaLoc == NULL) {
      strcat (buf, ",");
      tmpCommaLoc = strchr(buf, ',');
    }
    if (tmpCommaLoc) {
      tmpCommaLoc++;
      if (con->backspace == VK_BACK)
	strcpy(tmpCommaLoc, INI_HOST_BS);
      else
	strcpy(tmpCommaLoc, INI_HOST_DEL);
    }
    WritePrivateProfileString(INI_HOSTS, INI_HOST "0", buf, TELNET_INI);
    break;

  case WM_MYSCREENCHAR:
    {
      unsigned char c;

      if (!con)
	break;
      if (wParam == VK_BACK)
	c = con->backspace;
      else if (wParam == 0x7f)
	c = con->ctrl_backspace;
      else if (wParam == VK_SPACE && GetKeyState(VK_CONTROL) < 0)
	c = 0;
      else
	c = wParam;
      TelnetSend(con->ks, &c, 1, 0);
    }
  break;

  case WM_MYCURSORKEY:
    /* Acts as a send through: buffer is lParam and length in wParam */
    if (!con)
      break;
    memcpy(buf, (char *)lParam, wParam);
    TelnetSend (con->ks, buf, wParam, 0);
    break;

  case WM_MYSCREENBLOCK:
    if (!con)
      break;
    hBuffer = (HGLOBAL) wParam;
    lpBuffer = GlobalLock(hBuffer);
    TelnetSend(con->ks, lpBuffer, lstrlen(lpBuffer), 0);
    GlobalUnlock(hBuffer);
    break;

  case WM_MYSCREENCLOSE:
#if 0
    if (con)
    {
	kstream_destroy(con->ks);
	con->ks = NULL;
    }
#endif
    DestroyWindow(hWnd);
    break;        

  case WM_QUERYOPEN:
    return(0);
    break;

  case WM_DESTROY:          /* message: window being destroyed */
    if (con)
    {
	kstream_destroy(con->ks);
	free(con);
	WSACleanup();
    }
    PostQuitMessage(0);
    break;

  case WM_NETWORKEVENT: 
    iEvent = WSAGETSELECTEVENT(lParam);

    switch (iEvent) {    	

    case FD_READ:
      if (con == NULL)
	break;
      cnt = kstream_read(con->ks, buf, 1500);
      buf[cnt] = 0;
      parse((CONNECTION *)con, (unsigned char *)buf, cnt);
      ScreenEm(buf, cnt, con->pScreen);
      break;

    case FD_CLOSE:
      kstream_destroy(con->ks);
      free(con);
      con = NULL;
      WSACleanup();
      PostQuitMessage(0);
      break;

    case FD_CONNECT:
      ret = WSAGETSELECTERROR(lParam);
      if (ret) {
	wsprintf(buf, "Error %d on Connect", ret);
	MessageBox(NULL, buf, NULL, MB_OK | MB_ICONEXCLAMATION);
	kstream_destroy(con->ks);
	free(con);
	WSACleanup();
	PostQuitMessage(0);
	break;
      }
      start_negotiation(con->ks);
      break;		
    }

    break;  	        

  case WM_HOSTNAMEFOUND:
    ret = WSAGETASYNCERROR(lParam);
    if (ret) {
      wsprintf(buf, "Error %d on GetHostbyName", ret);
      MessageBox(NULL, buf, NULL, MB_OK | MB_ICONEXCLAMATION);
      kstream_destroy(con->ks);
      free(con);
      WSACleanup();
      PostQuitMessage(0);
      break;
    }

    remote_host = (struct hostent *)hostdata;
    remote_addr.sin_family = AF_INET;
    memcpy(&(remote_addr.sin_addr), &(remote_host->h_addr[0]), 4);
    remote_addr.sin_port = htons(port_no);

    connect(con->socket, (struct sockaddr *)&remote_addr, sizeof(struct sockaddr));
    break;

  case WM_MYSCREENSIZE:
    con->width = LOWORD(lParam);		/* width in characters */
    con->height = HIWORD(lParam);		/* height in characters */
    if (con->bResizeable && con->ks)
      send_naws(con);
    wsprintf(buf, "%d", con->height);
    WritePrivateProfileString(INI_TELNET, INI_HEIGHT, buf, TELNET_INI);
    wsprintf(buf, "%d", con->width);
    WritePrivateProfileString(INI_TELNET, INI_WIDTH, buf, TELNET_INI);
    break;
		
  default:              		/* Passes it on if unproccessed */
    return(DefWindowProc(hWnd, message, wParam, lParam));
  }
  return (0);
}