home *** CD-ROM | disk | FTP | other *** search
/ The C Users' Group Library 1994 August / wc-cdrom-cusersgrouplibrary-1994-08.iso / vol_100 / 183_01 / pcm.c < prev    next >
C/C++ Source or Header  |  1984-07-12  |  5KB  |  238 lines

  1. /*
  2.   PCM.C  - a communications program for fast access to mainframes
  3.                with asyn communications and to provide a file
  4.                transfer utility
  5.  
  6.   John Hurst,  July 1984
  7.   adapted from Commterm by Tom Poindexter, March 1984
  8.  
  9. */
  10.  
  11. #include "comsup.h"
  12.  
  13. #define ALT_2  0x7900  /* userid */
  14. #define ALT_5  0x7c00  /* userid */
  15.  
  16. #define F1     0x3B00  /* break */
  17. #define ALT_B  0x3000  /* break */
  18. #define ALT_D  0x2000  /* DPS8 download */
  19. #define ALT_E  0x1200  /* echo  */
  20. #define ALT_H  0x2300  /* help  */
  21. #define ALT_Q  0x1000  /* resume*/
  22. #define ALT_R  0x1300  /* receive */
  23. #define ALT_S  0x1f00  /* pause */
  24. #define ALT_T  0x1400  /* transmit */
  25. #define ALT_U  0x1600  /* DPS8 upload */
  26. #define ALT_X  0x2d00  /* exit  */
  27. #define PGUP   0x4900  /* spare */
  28. #define PGDN   0x5100  /* spare */
  29. #define C_END  0x7500  /* break */
  30. #define C_PGDN 0x7600  /* transmit oct2, ascii 1 */
  31.  
  32. #define NUL    0
  33. #define BS     8
  34. #define LF     10
  35. #define CR     13
  36. #define XON    17
  37. #define XOFF   19
  38. #define ENDFILE 26
  39. #define ESC     27
  40. #define RUBOUT  127
  41. #define HDEL   64
  42. #define DELAY  5000
  43.  
  44. #define IPORT     2
  45. #define IBAUD     2400
  46. #define IPARITY   2
  47. #define IDATA     7
  48. #define ISTOP     1
  49. #define IBUFFER   1024
  50. #define IFLOW     FALSE
  51. #define IECHO     1
  52.  
  53.  
  54. int max;
  55. unsigned total,min_sp;
  56.  
  57. #include "stdio.h"
  58.  
  59. main (argc, argv)
  60. int argc;
  61. char *argv[];
  62.  
  63. {
  64.   int port,baud,parity,data,stop,buff_len;
  65.   int a,c,e,x,i,l,n,x_state,counter;
  66.   int bytecount();
  67.   FILE f;
  68.   char strn1[100],temp[100];
  69.  
  70.   puts("\nPCM ... Personal Communications Manager / File transfer utility ");
  71.   puts("\n        John Hurst, 1984  (adapted from Commterm by Tom Poindexter)\n");
  72.  
  73.   port = IPORT;
  74.   baud = IBAUD;
  75.  
  76.   for (i = 1; i < argc; i++ )
  77.     switch ( l = atoi(*++argv) )
  78.      {
  79.       case 1:
  80.        port = 1;
  81.        break;
  82.       case 2:
  83.        port = 2;
  84.        break;
  85.       case 300:
  86.        baud = 300;
  87.        break;
  88.       case 1200:
  89.        baud = 1200;
  90.        break;
  91.       case 2400:
  92.        baud = 2400;
  93.        break;
  94.       default:
  95.        break;
  96.      }
  97.  
  98.   puts("\n        operating from COM");
  99.   itoa(port, strn1);
  100.   puts(strn1);
  101.   puts(" at ");
  102.   itoa(baud, strn1);
  103.   puts(strn1);
  104.   puts(" baud");
  105.  
  106.   parity = IPARITY;
  107.   data = IDATA;
  108.   stop = ISTOP;
  109.   buff_len = IBUFFER;
  110.   x_state = IFLOW;
  111.   e = IECHO;
  112.  
  113.   if (init_com(port,baud,parity,data,stop,buff_len) == ERROR)
  114.    {
  115.     putchar(7);
  116.     puts("\n\nSorry, cannot open COM port as defined... \n\n");
  117.     exit();
  118.    }
  119.   else
  120.    {
  121.     set_xoff(port,x_state);
  122.     on_com(port,bytecount);
  123.    }
  124.  
  125.   puts("\n\nPress ALT-H for help on special keys.\n\n");
  126.   total = max = c = n = 0;
  127.   min_sp = 0xffff;
  128.  
  129.   while (c != ALT_X)
  130.    {
  131.  
  132.     termin(port,1);
  133.  
  134.     if (com_stat(port) & BREAK_IND)
  135.       puts("\n ** Break ** \n");
  136.  
  137.     c = key_in();
  138.     if (c > 0)
  139.      {
  140.       switch (c)
  141.        {
  142.         case ALT_H:
  143.          puts("\n\nPCM special keys\n\n");
  144.          puts("press ....... for\n");
  145.          puts("Alt-E.........echo key strokes\n");
  146.          puts("Alt-H.........help on keys\n");
  147.          puts("Alt-X.........exit program\n");
  148.          puts("Alt-R.........receive a file\n");
  149.          puts("Alt-D.........download (recv) DPS8 file\n");
  150.          puts("Alt-T.........transmit a file\n");
  151.          puts("Alt-U.........upload (transmit) DPS8 file\n");
  152.          puts("Alt-S.........pause (XOFF)\n");
  153.          puts("Alt-Q.........resume (XON)\n");
  154.          puts("F1............DOS command\n");
  155.          puts("Esc...........IBM PC backspace\n");
  156.          puts("Backspace.....DPS8 delete\n");
  157.          puts("Ctrl-End......send break signal\n");
  158.          puts("Ctrl-PgDn.....send 2400 baud code\n");
  159.          puts("\n\nproceed...\n\n");
  160.          break;
  161.  
  162.         case ALT_B:
  163.          send_brk(port);
  164.          break;
  165.  
  166.         case C_END:
  167.          send_brk(port);
  168.          break;
  169.  
  170.         case ALT_U:
  171.          up_load(port,e,x_state,buff_len,TRUE);
  172.          break;
  173.  
  174.         case ALT_T:
  175.          up_load(port,e,x_state,buff_len,FALSE);
  176.          break;
  177.  
  178.         case ALT_D:
  179.          down_load(port,e,x_state,buff_len,TRUE);
  180.          break;
  181.  
  182.         case ALT_R:
  183.          down_load(port,e,x_state,buff_len,FALSE);
  184.          break;
  185.  
  186.         case ALT_E:
  187.          e = !e;
  188.          break;
  189.  
  190.         case F1:
  191.          puts("\nEnter DOS command string ? ");
  192.          gets(strn1);
  193.          strcpy(temp,"/c:");
  194.          strcat(temp,strn1);
  195.          n = exec("command.com",temp);
  196.          if (n != 0)
  197.              puts("\nExec failed...\n");
  198.          else
  199.              puts("\n\nExec successful, proceed...\n");
  200.          break;
  201.  
  202.         default:
  203.          conout(c,e,port);
  204.          break;
  205.        }
  206.      }
  207.    }
  208.  
  209.   puts("\n\nExiting..\n");
  210.   puts("\nLeave port initialized (y or n)? ");
  211.   getchar(a);
  212.   if ( isupper(a) ) a = tolower(a);
  213.   x = (a == 'y') ? TRUE : FALSE;
  214.  
  215.   uninit_com(port,x);
  216.   puts("\n");
  217.  
  218. /*  printf("\nThe buffer high water mark reached %d of a buffer length of %d",
  219.          max,buff_len);
  220.  
  221.   printf("\nThe total number of characters received was %u",
  222.          total);
  223.  
  224.   printf("\nThe smallest stack space available was %u \n",
  225.          min_sp);  */
  226.  
  227. }  /* end of commterm.c */
  228.  
  229. bytecount () /* on comm routine */
  230. {
  231.  int m;
  232.  
  233.  m = _showsp();
  234.  if (m < min_sp)
  235.    min_sp = m;
  236.  total++;
  237. }
  238.