home *** CD-ROM | disk | FTP | other *** search
/ rtsi.com / 2014.01.www.rtsi.com.tar / www.rtsi.com / OS9 / OSK / TELECOM / stg_v4.lzh / qd.c < prev    next >
C/C++ Source or Header  |  1994-11-11  |  2KB  |  125 lines

  1. /*
  2.  * qd - quick and dirty terminal program
  3.  *
  4.  * 90/05/10 StG initial version, replacement for losing qc
  5.  * 90/06/09 StG simplified and sped up throughput in both directions
  6. */
  7.  
  8. #include <sgstat.h>
  9.  
  10. #define ERR (-1)
  11. #define BUFSIZ 200  /* buffer size */
  12. struct sgbuf sg,*sav[16];
  13.  
  14. extern int errno;
  15.  
  16. raw(pn)
  17. int pn;
  18. {
  19.     sav[pn]=malloc(sizeof(sg));
  20.     getstat(0,pn,sav[pn]);
  21.  
  22.     getstat(0,pn,&sg);
  23.     sg.sg_echo=0;
  24.     sg.sg_pause=0;
  25.     sg.sg_eorch=0;
  26.     sg.sg_eofch=0;
  27.     sg.sg_psch=0;
  28.     sg.sg_kbich=0;
  29.     sg.sg_kbach=0;
  30. /*     sg.sg_stn=0;    /* really xon/xoff, bug sgstat.h is old */
  31.     sg.sg_xon=0;
  32.     sg.sg_xoff=0;
  33.     setstat(0,pn,&sg);
  34. }
  35.  
  36. cook(pn)
  37. int pn;
  38. {
  39.     setstat(0,pn,sav[pn]);
  40.     free(sav[pn]);
  41. }
  42.  
  43. intr(sig)
  44. {
  45. }
  46.  
  47. int port;
  48. char buf[BUFSIZ];
  49. int sz;
  50. int tics;
  51. char code=0x1a;
  52.  
  53. main(argc,argv)
  54. char **argv;
  55. {
  56.     if (!*++argv) exit(writeln(2,"use: qd (/port)\n",80));
  57.  
  58.     if ((port=open(*argv,3))==ERR) exit(errno,writeln(2,"cant open port\n",80));
  59.  
  60.     setpr(getpid(),200);
  61.     intercept(intr);
  62.     raw(port);
  63.     raw(0);
  64.     tics=0;
  65.  
  66. loop:
  67.     if ((sz=_gs_rdy(port))>0)
  68.     {
  69.         tics=0;
  70.         if (sz>BUFSIZ) sz=BUFSIZ;
  71. if (sz>1) sz=1;
  72.         sz=read(port,buf,sz);
  73.         if (sz<0)
  74.             sz=0;
  75.         else
  76.         if (*(unsigned char *)buf<32)
  77.         {
  78.             write(1,"^",1);
  79.             *buf+=64;
  80.         }
  81.         write(1,buf,sz);
  82.     }
  83.  
  84.     if ((sz=_gs_rdy(0))>0)
  85.     {
  86.         tics=0;
  87.         if (sz>BUFSIZ) sz=BUFSIZ;
  88.         sz=read(0,buf,sz);
  89.         if (sz<0) sz=0;
  90.         if (sz==1 && *buf==code) menu();
  91.         else write(port,buf,sz);
  92.     }
  93.  
  94.     if (tics)
  95.     {
  96.         tsleep(tics);
  97.         if (tics<10) tics++;
  98.     }
  99.     goto loop;
  100. }
  101.  
  102. menu()
  103. {
  104.     write(1,"?\b",2);
  105.     read(0,buf,1);
  106.     if (*buf==code)
  107.     {
  108.         write(port,buf,1);
  109.         return;
  110.     }
  111.     switch (tolower(*buf))
  112.     {
  113.     case 's':
  114.         cook(0);
  115.         system("");
  116.         raw(0);
  117.         break;
  118.     case 'q':
  119.         cook(0);
  120.         cook(port);
  121.         close(port);
  122.         exit(0);
  123.     }
  124. }
  125.