home *** CD-ROM | disk | FTP | other *** search
- /*************************************************************************
- * Programm SETCOM-I zum interaktiven Setzen der Parameter der *
- * seriellen Schnittstellen COM1 - COM4. *
- * Compiler : MicroSoft - QUICK-C *
- *************************************************************************/
-
- #include <dos.h>
- #include <stdio.h>
- #include <string.h>
- #include <conio.h>
- #include <process.h>
-
- #include "baudtab.h"
- #include "getcom.c"
- #include "setcom.c"
-
- #define FALSE 0
- #define TRUE !FALSE
-
- int main(void);
-
-
- /*=======================================================================*/
-
- int main()
- {
- char *VersionString="SETCOM-I V2.3 (C) 1990 Richard Franz/c't\n\n";
- int com; /* Schnittstelle */
- int dbit; /* Datenbits */
- int sbit; /* Stopbits */
- int i,j; /* Laufvariablen für Schleifen */
- int inp_ok; /* Flag für Input-Überprüfung */
- long baud; /* Baudrate */
- char *par="none"; /* Parity */
- char fehler[255]; /* String für Fehleingaben */
- unsigned char far *maxcom; /* FAR-Pointer in DOS-Tabelle */
- int commax; /* Anzahl vorhandener Schnittst.*/
- int setcom(); /* Deklaration Funktion setcom */
- int getcom(); /* Deklaration Funktion getcom */
- inp_ok = FALSE; /* Vorbesetzung */
-
-
- /*===== Gewünschte Schnittstelle einlesen und auf Gültigkeit prüfen ====*/
-
- FP_SEG(maxcom) = 0x0040;
- FP_OFF(maxcom) = 0x0011; /* Anzahl COM-Schnittstellen */
- commax = (*maxcom & 0x0e) >> 1; /* aus Equipmentword isolieren */
- printf("%sSchnittstelle COM",VersionString);
- com = getche() - '0'; /* Umwandlung Char in Int */
- if( (com > commax) || (com < 1) ) /* Angegebene Schnittstelle */
- { /* vorhanden ? */
- printf("\nSchnittstelle COM%d existiert nicht !\n",com);
- exit(1); /* Errorlevel = 1 bei Fehler */
- }
-
- /*========== Ausgabe der momentanen Schnittstellen-Parameter ===========*/
-
- getcom(com);
-
- /*===== Einlesen der Baudrate, bis eine gültige Eingabe erfolgt ist=====*/
-
- while (inp_ok == FALSE) /* bis gültige Eingabe erfolgt */
- {
- printf("\nBaudrate (50..115200) : ");
- if (scanf("%ld",&baud) != 1) /* minimale Fehlerbehandlung */
- scanf("%s",fehler); /* für alpha - Eingaben */
- for (i=0 ; i<BDMAX ; i++) /* Für alle erlaubten Baudraten */
- {
- if (baud == bd[i][0]) /* Eingabewert in Liste ? */
- {
- inp_ok = TRUE; /* Ja -> weiter */
- break;
- }
- }
- if ( ! inp_ok ) /* Nein -> Ausgabe der erlaub- */
- /* ten Werte auf Schirm */
- {
- printf("\nBaudrate ungültig, gültige Werte sind :\n");
- printf( "═══════════════════════════════════════\n");
- for (i=0 ; i<BDMAX ; i++)
- {
- printf("%6ld, ",bd[i][0]);
- if (! ( (i+1) % 5)) /* Ausgabe mehrspaltig */
- printf("\n");
- }
- printf("\n");
- }
- }
-
- /*===== Einlesen der Datenbits, bis eine gültige Eingabe erfolgt ist ===*/
-
- inp_ok = FALSE; /* Default -> Falsche Eingabe */
-
- while (inp_ok == FALSE) /* bis gültige Eingabe erfolgt */
- {
- printf("Datenbits (5 bis 8) : ");
- dbit = getche() - '0'; /* Einlesen eines Zeichens */
- if ((dbit >= 5) && (dbit <= 8)) /* Eingabe gültig ? */
- inp_ok = TRUE; /* Ja -> weiter */
- else
- printf("\n"); /* Nein -> erneut anfordern */
- }
-
- /*===== Einlesen der Stopbits, bis eine gültige Eingabe erfolgt ist ====*/
-
- inp_ok = FALSE; /* Default -> Falsche Eingabe */
-
- while (inp_ok == FALSE) /* bis gültige Eingabe erfolgt */
- {
- printf("\nStopbits (1 oder 2) : ");
- sbit = getche() - '0'; /* Einlesen eines Zeichens */
- if ((sbit == 1) || (sbit == 2)) /* Eingabe gültig ? */
- inp_ok = TRUE; /* Ja -> weiter */
- } /* Nein -> erneut anfordern */
-
- /*====== Einlesen der Parität, bis eine gültige Eingabe erfolgt ist ====*/
-
- inp_ok = FALSE; /* Default -> Falsche Eingabe */
-
- while (inp_ok == FALSE) /* bis gültige Eingabe erfolgt */
- {
- printf("\nParity (None, Odd, Even) : ");
- par[0] = getche(); /* Einlesen eines Zeichens */
- strupr(par); /* Umwandlung in Großbuchstabe */
- if ((par[0] == 'N') || (par[0] == 'O') || (par[0] == 'E'))
- inp_ok = TRUE;
- }
- printf("\n");
-
- /*============ den Rest erledigt die Funktion SETCOM ===================*/
-
- /* Setzen der neuen Parameter */
- if ( setcom(com,baud,dbit,sbit,par) ) /* Muß immer 0 ergeben */
- { /* Trotzdem ! */
- printf("\nParameter wurden nicht akzeptiert !!\n");
- return(1); /* Errorlevel auf 1 setzen */
- }
-
- getcom(com); /* Erneute Abfrage der Parameter*/
-
- return(0); /* Errorlevel auf 0 setzen */
- }
-