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

操作系统开发

开发平台:

DOS

  1. /*
  2.  * advanced TTY terminal example demonstrating SIO serial i/o library
  3.  *
  4.  * Gets settings from term.ini, or creates one if none exists
  5.  *
  6.  * We create a thread for the keyboard input/serial output, and a
  7.  * second thread for serial input/console output.  Both threads
  8.  * block while waiting for their input.
  9.  *
  10.  */
  11. #include <dos.h>
  12. #include <stdio.h>
  13. #include <rtos.h>
  14. #include <sio.h>
  15. #include <kconio.h>
  16. #include <inifile.h>
  17. /*********************************************************************/
  18. void kbd_thread( DWORD port )
  19. {
  20.     BYTE ch;
  21.     do {
  22.         ch = kgetch();      /* blocks thread until keystrokes available */
  23.         /* exit on ~ character */
  24.         if ( ch == '~' ) break;
  25.         sio_writebyte( port, ch );
  26.     } while ( 1 );
  27.     kwritemessage( kmainthread, 0, 0 );
  28. }
  29. /*********************************************************************/
  30. void serial_thread( DWORD port )
  31. {
  32.     BYTE ch;
  33.     do {
  34.         ch = sio_readbyte( port );     /* busy waits */
  35.         putch( ch );
  36.     } while ( 1 );
  37. }
  38. /*********************************************************************/
  39. void extra_thread( DWORD port )
  40. {
  41.     do {
  42.         rt_sleep(0);
  43.     } while ( 1 );
  44. }
  45. /*********************************************************************/
  46. main()
  47. {
  48.     int comport = 1;        /* com port */
  49.     WORD port = 0x3f8;      /* its i/o port base */
  50.     int baud = 9600;
  51.     int irq = 4;
  52.     int temp;
  53.     DWORD dummy;
  54.     rt_init( 100 );
  55.     kpreemptive = 1;
  56.     if (( comport = GetIniDWORD( "term.ini", "com", "port", 0 )) == 0 ){
  57.         comport = 1;
  58.         SetIniDWORD("term.ini","com","port", comport );
  59.     }
  60.     if ( comport == 2 ) {
  61.         port = 0x2f8;
  62.         irq = 3;
  63.     }
  64.     if (( baud = GetIniDWORD( "term.ini", "com", "baud", 0 )) == 0 ){
  65.         baud = 9600;
  66.         SetIniDWORD("term.ini","com","baud", baud );
  67.     }
  68.     sio_init( comport, port, irq, 4096, 4096, NULL, 0 );
  69.     sio_setup( comport, baud, 8, 0, 1 , 1);
  70.     cprintf("Press ~ to exitrn");
  71.     rt_newthread( kbd_thread, comport, 4096, 0, "keyboard thread" );
  72.     rt_newthread( serial_thread, comport, 4096, 0, "serial input thread");
  73.     rt_newthread( extra_thread, comport, 4096, 0, "dummy thread");
  74.     /* wait until we're done */
  75.     kreadmessage( &temp, &dummy );
  76.     sio_close( comport );
  77. }