home *** CD-ROM | disk | FTP | other *** search
- /*=====================================================
- Funktion GETCOM. Ermittelt die Parameter der seriellen
- Schnittstellen COM1 - COM4. Keine Überprüfung, ob die
- angewählte Schnittstelle wirklich existiert.
- =======================================================*/
-
- #include "baudtab.h" /* Baudraten-Tabelle einbinden */
-
- int getcom(int com)
- {
- int combd;
- int comlcr;
- unsigned char bdlow = 0;
- unsigned char bdhigh = 0;
- unsigned char parity = 0;
- unsigned char datab = 0;
- unsigned char stopb = 0;
- unsigned char mode = 0;
- long baud = 0;
- int i;
- int far *combasis;
- unsigned char far *maxcom; /* FAR-Pointer in DOS-Tabelle */
- int commax; /* Anzahl vorhandener Schnittst.*/
-
- FP_SEG(maxcom) = 0x0040;
- FP_OFF(maxcom) = 0x0011; /* Anzahl COM-Schnittstellen */
- commax = (*maxcom & 0x0e) >> 1; /* aus Equipmentword isolieren */
-
- if( (com > commax) || (com < 1) ) /* Abbruch wenn Schnittstelle */
- return(1); /* nicht vorhanden ist */
-
- FP_SEG(combasis) = 0x0040;
- FP_OFF(combasis) = (com - 1) * 2;
- combd = *combasis;
- comlcr = combd + 3;
-
- printf("\nCOM%d: ",com);
-
- mode = inp(comlcr); /* Lesen des Mode-Bytes */
- outp(comlcr,0x80); /* Divisor-Low-Byte ansprechen */
- bdlow = inp(combd); /* und auslesen */
- bdhigh= inp(combd+1); /* Divisor-High-Byte lesen */
- outp(comlcr,mode); /* zur Sicherheit rückschreiben */
-
- for (i=0 ; i<BDMAX ; i++) /* Eingestellte Baudrate aus */
- { /* Tabelle suchen */
- if ( (bdhigh == bd[i][1]) && (bdlow == bd[i][2]) )
- baud = bd[i][0];
- }
- printf("%ld, ",baud); /* Baudrate ausgeben */
-
- datab = mode & 0x03; /* Datenbits selektieren */
- printf("%d, ",datab + 5); /* und ausgeben */
-
- stopb = mode & 0x04; /* Stopbits selektieren */
- if (stopb == 4) /* und ausgeben */
- if (!datab)
- printf("1.5, "); /* Bei 5 Bit -> 1,5 Stopbit */
- else
- printf("2, ");
- else
- printf("1, ");
-
- parity = mode & 0x18; /* Parity selektieren */
- if (parity == 0x00)
- printf("None\n"); /* und ausgeben */
- if (parity == 0x08)
- printf("Odd\n");
- if (parity == 0x18)
- printf("Even\n");
-
- return(0); /* Return mit ERRORLEVEL 0 */
- }