⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 myprog.c

📁 异步通讯C语言例行子程序
💻 C
字号:
/////////////
/////////////
//// This program is intended to get you started using the ASYNC
//// library. MYPROG is just a simple little dumb (stupid, actually)
//// terminal emulator. It doesn't process ANSI codes, so, depending on
//// what you talk to, you may seem some strange characters from time to
//// time.
////
//// The first thing to do is to make sure that ASYNCS.LIB (assuming
//// that you'll be using the small memory model) and ASYNC.H are in
//// your LIB and INCLUDE directories, respectively. Use CREASYNC.BAT to
//// create the ASYNCx.LIB files if you haven't already done so.
////
//// To compile MYPROG.C, just issue the command
////
////   tcc -ms myprog asyncs.lib
////
//// This will compile MYPROG.C and link it with the functions it needs
//// from ASYNCS.LIB to produce the executable file MYPROG.EXE.
////
//// This program was originally intended to talk to a 2400 baud modem
//// using no parity, 8 data bits, and 1 stop bit. Change the parameters
//// to a_open in main() if you want to change these communication
//// parameters.
/////////////
/////////////

#include <bios.h>
#include <conio.h>
#include <dos.h>
#include <string.h>

#include <async.h>

void dumbterm(ASYNC *port);

int main(void)
{ASYNC *com2;
 //
 // Open COM2 at 2400 buad for no parity, 8 data bits, 1 stop bit, using
 // a 4096-byte input buffer and no output buffer.
 // 
 com2=a_open(2,2400,PAR_NONE,8,1,4096,0);
 if (!com2)
  {cputs("Cannot open COM2.\r\n");
   return 1;
  }
 //
 // Start the dumb terminal emulator.
 //
 dumbterm(com2);
 //
 // Close COM2. (Never forget to do this.)
 //
 a_close(com2,0);
 return 0;
} // end of void main().

void dumbterm(ASYNC *port)
{int ch,x,y;
 //
 // Give the user some last-minute instructions.
 //
 textattr(7);
 cputs("Your in terminal mode now. To return to DOS, press ALT-X.\r\n");
 textattr(2);
 //
 // Keep acting like a terminal until Alt-X is pressed.
 //
 do
  {// If a key has been pressed, read it from the keyboard.
   if (bioskey(1))
     ch=bioskey(0);
   else
     ch=0;
   // If Alt-X was pressed, leave this loop.
   if (ch==0x2d00)
     break;
   // If a key was pressed, the scan code off of ch and transmit it.
   ch&=0xff;
   if (ch)
     a_putc(ch,port);

   // If a character has been received, display it.
   ch=a_getc(port);
   if (ch!=-1)
     switch(ch)
      {case 0: // Ignore null characters.
         break;
       case 7: // Beep for bell characters.
         sound(2000);
         delay(50);
         nosound();
         delay(25);
       case 8: // Do back spaces manually.
         x=wherex()-1;
         y=wherey();
         if (x<1)
          {x=80;
           y--;
           if (y<1)
             x=y=1;
          }
         gotoxy(x,y);
         putch(' ');
         gotoxy(x,y);
         break;
       case '\n': // Ignore linefeeds.
         break;
       case '\r': // Treat carriage returns as carriage return/line feeds.
         cputs("\r\n");
         break;
       default:
         putch(ch);
      }
  }
 while(1);
} // end of dumbterm(port).

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -