MODEM.C
上传用户:sunrenlu
上传日期:2022-06-13
资源大小:1419k
文件大小:2k
源码类别:

操作系统开发

开发平台:

DOS

  1. /*
  2.  * modem - simple terminal server
  3.  *       - allows one to TELNET in and connect to COM1
  4.  */
  5. #include <dos.h>
  6. #include <stdio.h>
  7. #include <rtos.h>
  8. #include <sio.h>
  9. #include <telnetd.h>
  10. #include <process.h>
  11. void modem_server( DWORD comport )
  12. {
  13. #define CBUFSIZ 128
  14.     BYTE ch;
  15.     BYTE buffer[ CBUFSIZ ];
  16.     teld_str *t;
  17.     int i;
  18.     do {
  19.         cputs("Listenning... ");
  20.         t = teld_listen( 0 );
  21.         cputs("connection arrivedrn");
  22.         sock_mode( t, TCP_MODE_NONAGLE );
  23.         do {
  24.             /* way to break out */
  25.             if ( kbhit() ) exit( 0 );
  26.             /* look for TELNET arriving chars */
  27.             ch = teld_getc( t );
  28.             if ( ch == 255 ) break;
  29.             if ( ch != 0 )
  30.                 sio_writebyte( comport, ch );
  31.             /* look for serial chars coming in, group them for speed */
  32.             for ( i = 0 ; i < BUFSIZ ; ++i ) {
  33.                 if ( sio_recv_waiting( comport ) ) {
  34.                     ch = sio_readbyte( comport );
  35.                     buffer[ i ] = ch;
  36.                 } else break;
  37.             }
  38.             if ( i == CBUFSIZ ) i--;
  39.             if ( i != 0 )
  40.                 teld_write( t, buffer, i );
  41.             rt_yield();
  42.         } while ( 1 );
  43.         teld_close( t );
  44.         cputs("Connection closedrn");
  45.     } while ( 1 );
  46. }
  47. main()
  48. {
  49.     int comport = 1;        /* com port */
  50.     WORD port = 0x3f8;      /* its i/o port base */
  51.     int baud = 9600;
  52.     int temp;
  53.     DWORD dummy;
  54.     rt_init( 100 );
  55.     sock_init();
  56.     kdebug = 0;
  57.     sio_init( comport, port, 4, 4096, 4096 , NULL, 0 );
  58.     sio_setup( comport, baud, 8, 0, 1 , 1);
  59.     cputs("Press any key to exitrn");
  60.     rt_newthread( &modem_server, comport, 4096, 0, "modem thread");
  61.     while ( 1 ) {
  62.         if ( kbhit() ) break;
  63.         rt_sleep( 1000 );
  64.     }
  65.     sio_close( comport );
  66. }