home *** CD-ROM | disk | FTP | other *** search
/ Power-Programmierung / CD2.mdf / c / library / dos / communic / rsutil / getcom.c < prev    next >
Encoding:
C/C++ Source or Header  |  1990-09-12  |  2.2 KB  |  73 lines

  1. /*=====================================================
  2. Funktion GETCOM. Ermittelt die Parameter der seriellen
  3. Schnittstellen COM1 - COM4. Keine Überprüfung, ob die
  4. angewählte Schnittstelle wirklich existiert.
  5. =======================================================*/
  6.  
  7. #include "baudtab.h"    /* Baudraten-Tabelle einbinden */
  8.  
  9. int getcom(int com)
  10. {
  11.  int combd;
  12.  int comlcr;
  13.  unsigned char     bdlow    = 0;
  14.  unsigned char     bdhigh = 0;
  15.  unsigned char     parity = 0;
  16.  unsigned char     datab    = 0;
  17.  unsigned char     stopb    = 0;
  18.  unsigned char     mode    = 0;
  19.  long         baud    = 0;
  20.  int i;
  21.  int far *combasis;
  22.  unsigned char far  *maxcom;        /* FAR-Pointer in DOS-Tabelle    */
  23.  int commax;                /* Anzahl vorhandener Schnittst.*/
  24.  
  25.  FP_SEG(maxcom) = 0x0040;
  26.  FP_OFF(maxcom) = 0x0011;        /* Anzahl COM-Schnittstellen    */
  27.  commax = (*maxcom & 0x0e) >> 1;    /* aus Equipmentword isolieren    */
  28.  
  29.  if( (com > commax) || (com < 1) )    /* Abbruch wenn Schnittstelle    */
  30.     return(1);                /* nicht vorhanden ist        */
  31.  
  32.  FP_SEG(combasis) = 0x0040;
  33.  FP_OFF(combasis) = (com - 1) * 2;
  34.  combd      = *combasis;
  35.  comlcr   = combd + 3;
  36.  
  37.  printf("\nCOM%d: ",com);
  38.  
  39.  mode = inp(comlcr);            /* Lesen des Mode-Bytes        */
  40.  outp(comlcr,0x80);            /* Divisor-Low-Byte ansprechen    */
  41.  bdlow = inp(combd);            /* und auslesen            */
  42.  bdhigh= inp(combd+1);            /* Divisor-High-Byte lesen    */
  43.  outp(comlcr,mode);            /* zur Sicherheit rückschreiben */
  44.  
  45.  for (i=0 ; i<BDMAX ; i++)        /* Eingestellte Baudrate aus    */
  46.   {                    /* Tabelle suchen        */
  47.    if ( (bdhigh == bd[i][1]) && (bdlow == bd[i][2]) )
  48.      baud = bd[i][0];
  49.   }
  50.  printf("%ld, ",baud);            /* Baudrate ausgeben        */
  51.  
  52.  datab = mode & 0x03;            /* Datenbits selektieren    */
  53.  printf("%d, ",datab + 5);        /* und ausgeben            */
  54.  
  55.  stopb = mode & 0x04;            /* Stopbits selektieren        */
  56.  if (stopb == 4)            /* und ausgeben            */
  57.    if (!datab)
  58.      printf("1.5, ");            /* Bei 5 Bit -> 1,5 Stopbit    */
  59.     else
  60.       printf("2, ");
  61.   else
  62.    printf("1, ");
  63.  
  64.  parity = mode & 0x18;            /* Parity selektieren        */
  65.  if (parity == 0x00)
  66.    printf("None\n");            /* und ausgeben            */
  67.  if (parity == 0x08)
  68.    printf("Odd\n");
  69.  if (parity == 0x18)
  70.    printf("Even\n");
  71.  
  72.  return(0);                /* Return mit ERRORLEVEL 0    */
  73. }