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

操作系统开发

开发平台:

DOS

  1. #include <stdio.h>
  2. #include <rtos.h>
  3. #include <mem.h>
  4. #include <dos.h>
  5. #include <ctype.h>
  6. #include "morse.h"
  7. bq_str *bq = NULL;  /* byte queue */
  8. /*-----------------------------------------------------------------*/
  9. void play_char( char ch )
  10. {
  11.     morse_type *m;
  12.     BYTE *p;
  13.     int i;
  14.     ch = toupper( ch );
  15.     m = ascii_to_morse( ch );
  16.     if ( m != NULL ) {
  17.         p = m->m_code;
  18.         for ( i = 0 ; p[i] != 9 ; ++i ) {
  19.             if ( p[i] == 1 ) sound( 400 );
  20.             else nosound();
  21.             rt_sleep( DELAY );
  22.         }
  23.         nosound();
  24.     }
  25. }
  26. /*-----------------------------------------------------------------*/
  27. void kbd_thread( DWORD dummy )
  28. {
  29.     BYTE ch;
  30.     kwindow( 1,11, 80, 25 );
  31.     cputs("Type text here and it gets translated into Morse codern");
  32.     cputs("Type as fast as you want.  We buffer between the two threadsrn");
  33.     cputs("Press Esc to exitrn");
  34.     do {
  35.         if ( kbhit() ) {
  36.             ch = getch();
  37.             /* exit on ~ character */
  38.             if ( ch == 27 ) break;
  39.             putch( ch );
  40.             bq_writebyte( bq, ch );
  41.         }
  42.         rt_yield();
  43.     } while ( 1 );
  44.     kwritemessage( kmainthread, 0, 0 );
  45. }
  46. /*-----------------------------------------------------------------*/
  47. void sound_thread( DWORD dummy )
  48. {
  49.     char ch;
  50.     kwindow( 1, 1, 80, 10 );
  51.     do {
  52.         bq_readbyte( bq , &ch );
  53.         putch( ch );
  54.         play_char( ch );
  55.     } while ( 1 );
  56. }
  57. /*-----------------------------------------------------------------*/
  58. main()
  59. {
  60.     int temp;
  61.     DWORD dummy;
  62.     rt_init( 100 );
  63.     bq = bq_alloc( 4096 );
  64.     rt_newthread( kbd_thread, 0, 2048, 0, "keyboard thread" );
  65.     rt_newthread( sound_thread, 0, 2048, 0, "sound thread");
  66.     /* wait until we're done */
  67.     kreadmessage( &temp, &dummy );
  68. }