home *** CD-ROM | disk | FTP | other *** search
/ The C Users' Group Library 1994 August / wc-cdrom-cusersgrouplibrary-1994-08.iso / vol_300 / 309_01 / serial.h < prev    next >
Text File  |  1990-03-20  |  4KB  |  144 lines

  1. /* SERIAL.H */
  2.  
  3. #define BASE        0x93f0
  4. #define RBR         8
  5. #define TBR         8
  6. #define DIVL        8
  7. #define DIVH        9
  8. #define LCR         11
  9. #define IER         9
  10. #define LSR         13
  11. #define MCR         11
  12.  
  13. #code
  14.  
  15. init8250()      /*initialises COM1 (PC serial card) to 9600,n,8,2 */
  16. {
  17.         char *com1;
  18.         com1 = BASE;
  19.         com1[LCR] = 0x80;       /*access BRG*/
  20.         com1[DIVL] = 0x0c;
  21.         com1[DIVH] = 0x00;
  22.         com1[LCR] = 0x03;
  23.         com1[IER] = 0x00;
  24.         com1[MCR] = 0x03;     /*assert DTR and RTS*/
  25. }
  26.  
  27. pcgetchne()       /* gets character from COM1, non-echo */
  28. {
  29.         char *com1;
  30.         com1 = BASE;
  31.         while( (com1[LSR] & 1) != 1 )
  32.                 ;
  33.         return com1[RBR];
  34. }
  35.  
  36. pcgetchar()     /*gets character from COM1, echoes to COM1*/
  37. {
  38.         char ch;
  39.         ch = pcgetchne();
  40.         pcputchar(ch);
  41.         return ch;
  42. }
  43.  
  44. pcgetint()      /*read integer from COM1*/
  45. {
  46.    int value, lp;
  47.    char ch, sign, str[8], nl, cr;
  48.    nl = 10; cr = 13; lp = 0; value = 0;
  49.    ch = pcgetchar();
  50.    while( (ch == ' ') || (ch == cr) || (ch == nl) || (ch == '\t') )
  51.         ch = pcgetchar();
  52.    while( (ch != ' ') && (ch != cr) && (ch != nl) && (ch != '\t') ) {
  53.         if( ((ch >= 'A') && (ch <= 'Z')) || ((ch >= 'a') && (ch <= 'z')) ) break;
  54.         str[lp] = ch; lp++; ch = pcgetchar();
  55.    }
  56.    str[lp] = '\0';
  57.    lp = 0;
  58.    if( str[0] == '-' || str[0] == '+' ) { sign = str[0]; lp++; }
  59.    while( str[lp] ) {
  60.            value = 10 * value + (str[lp] - '0');
  61.            lp++;
  62.    }
  63.    pcputchar(cr); pcputchar(nl);
  64.    if( sign == '-' ) return (-value); else return value;
  65. }
  66.  
  67. pcgets(s)        /*read string from COM1*/
  68. char *s;
  69. {
  70.         char ch, cr, nl;
  71.         int lp;
  72.         cr = 13; nl = 10; lp = 0;
  73.         ch = pcgetchne();
  74.         while( (ch != cr ) && (ch != nl) ) {
  75.                 s[lp] = ch;
  76.                 lp++;
  77.                 pcputchar( ch );
  78.                 ch = pcgetchne();
  79.         }
  80.         s[lp] = '\0';
  81.         pcputchar(cr);  /* send CR/LF */
  82.         pcputchar(nl);
  83. }
  84.  
  85. pckbhit()       /*checks for recieve character from COM1, 1=ready, 0=not*/
  86. {
  87.         char *com1;
  88.         com1 = BASE;
  89.         return ( (com1[LSR] & 1) );
  90. }
  91.  
  92. pcputchar(ch)     /*outputs character to COM1  */
  93. char ch;
  94. {
  95.         char *com1;
  96.         com1 = BASE;
  97.         while( (com1[LSR] & 0x20) != 0x20)
  98.                 ;
  99.         com1[TBR] = ch;
  100. }
  101.  
  102. pcputint(value)      /*outputs integer as a string to COM1*/
  103. int value;
  104. {
  105.         /* right justified, field size 6 characters including sign*/
  106.         char str[7], sign;
  107.         int x;
  108.         for( x = 0; x < 7; x++ )  str[x] = ' ';
  109.         if( value < 0 ) {
  110.                 sign = '-';
  111.                 value = (-value);
  112.         }
  113.         else sign = '+';
  114.         x = 6;
  115.         do {
  116.                 str[x] = (value % 10) + '0';
  117.                 value = value / 10;
  118.                 x--;
  119.         } while( value > 0 );
  120.         str[x] = sign;
  121.         for( x = 0; x < 7; x++ ) pcputchar( str[x] );
  122. }
  123.  
  124. pcputs(s)        /*outputs string to COM1, appends CR/LF*/
  125. char *s;
  126. {
  127.         /* compiler handles \\ \' \n \r \f \b \t */
  128.         while( *s ) {
  129.                pcputchar(*s);
  130.                s++;
  131.         }
  132.         pcputchar(10);
  133.         pcputchar(13);
  134. }
  135.  
  136.  
  137. pcstatus()      /*returns LSR status of 8250*/
  138. {
  139.         char *com1;
  140.         com1 = BASE;
  141.         return (com1[LSR]);
  142. }
  143.  
  144.