home *** CD-ROM | disk | FTP | other *** search
/ Power-Programmierung / CD2.mdf / c / library / dos / communic / rsutil / setcom-i.c < prev    next >
Encoding:
C/C++ Source or Header  |  1990-11-04  |  4.6 KB  |  143 lines

  1. /*************************************************************************
  2. *     Programm SETCOM-I zum interaktiven Setzen der Parameter der     *
  3. *        seriellen Schnittstellen COM1 - COM4.             *
  4. *           Compiler : MicroSoft - QUICK-C             *
  5. *************************************************************************/
  6.  
  7. #include <dos.h>
  8. #include <stdio.h>
  9. #include <string.h>
  10. #include <conio.h>
  11. #include <process.h>
  12.  
  13. #include "baudtab.h"
  14. #include "getcom.c"
  15. #include "setcom.c"
  16.  
  17. #define FALSE 0
  18. #define TRUE  !FALSE
  19.  
  20. int main(void);
  21.  
  22.  
  23. /*=======================================================================*/
  24.  
  25. int main()
  26. {
  27.  char *VersionString="SETCOM-I  V2.3 (C) 1990 Richard Franz/c't\n\n";
  28.  int com;                /* Schnittstelle        */
  29.  int dbit;                /* Datenbits            */
  30.  int sbit;                /* Stopbits            */
  31.  int i,j;                /* Laufvariablen für Schleifen    */
  32.  int inp_ok;                /* Flag für Input-Überprüfung    */
  33.  long baud;                /* Baudrate            */
  34.  char *par="none";            /* Parity            */
  35.  char fehler[255];            /* String für Fehleingaben    */
  36.  unsigned char far *maxcom;        /* FAR-Pointer in DOS-Tabelle    */
  37.  int commax;                /* Anzahl vorhandener Schnittst.*/
  38.  int setcom();                /* Deklaration Funktion setcom    */
  39.  int getcom();                /* Deklaration Funktion getcom    */
  40.  inp_ok = FALSE;            /* Vorbesetzung            */
  41.  
  42.  
  43. /*===== Gewünschte Schnittstelle einlesen und auf Gültigkeit prüfen ====*/
  44.  
  45.  FP_SEG(maxcom) = 0x0040;
  46.  FP_OFF(maxcom) = 0x0011;        /* Anzahl COM-Schnittstellen    */
  47.  commax = (*maxcom & 0x0e) >> 1;    /* aus Equipmentword isolieren    */
  48.  printf("%sSchnittstelle COM",VersionString);
  49.  com = getche() - '0';            /* Umwandlung Char in Int    */
  50.  if( (com > commax) || (com < 1) )    /* Angegebene Schnittstelle    */
  51.   {                    /*  vorhanden ?            */
  52.    printf("\nSchnittstelle COM%d existiert nicht !\n",com);
  53.    exit(1);                /* Errorlevel = 1 bei Fehler    */
  54.   }
  55.  
  56. /*========== Ausgabe der momentanen Schnittstellen-Parameter ===========*/
  57.  
  58.   getcom(com);
  59.  
  60. /*===== Einlesen der Baudrate, bis eine gültige Eingabe erfolgt ist=====*/
  61.  
  62.   while (inp_ok == FALSE)        /* bis gültige Eingabe erfolgt    */
  63.    {
  64.     printf("\nBaudrate (50..115200) : ");
  65.     if (scanf("%ld",&baud) != 1)    /* minimale Fehlerbehandlung    */
  66.     scanf("%s",fehler);        /* für alpha - Eingaben        */
  67.     for (i=0 ; i<BDMAX ; i++)        /* Für alle erlaubten Baudraten */
  68.      {
  69.       if (baud == bd[i][0])        /* Eingabewert in Liste ?    */
  70.        {
  71.     inp_ok = TRUE;            /* Ja -> weiter            */
  72.     break;
  73.        }
  74.      }
  75.     if ( ! inp_ok )            /* Nein -> Ausgabe der erlaub-    */
  76.                     /* ten Werte auf Schirm        */
  77.      {
  78.       printf("\nBaudrate ungültig, gültige Werte sind :\n");
  79.       printf(  "═══════════════════════════════════════\n");
  80.       for (i=0 ; i<BDMAX ; i++)
  81.        {
  82.      printf("%6ld, ",bd[i][0]);
  83.      if (! ( (i+1) % 5))        /* Ausgabe mehrspaltig        */
  84.        printf("\n");
  85.        }
  86.       printf("\n");
  87.      }
  88.    }
  89.  
  90. /*===== Einlesen der Datenbits, bis eine gültige Eingabe erfolgt ist ===*/
  91.  
  92.  inp_ok = FALSE;            /* Default -> Falsche Eingabe    */
  93.  
  94.  while (inp_ok == FALSE)        /* bis gültige Eingabe erfolgt    */
  95.   {
  96.    printf("Datenbits (5 bis 8)  : ");
  97.    dbit = getche() - '0';        /* Einlesen eines Zeichens    */
  98.    if ((dbit >= 5) && (dbit <= 8))    /* Eingabe gültig ?        */
  99.      inp_ok = TRUE;            /* Ja -> weiter            */
  100.    else
  101.      printf("\n");            /* Nein -> erneut anfordern    */
  102.   }
  103.  
  104. /*===== Einlesen der Stopbits, bis eine gültige Eingabe erfolgt ist ====*/
  105.  
  106.  inp_ok = FALSE;            /* Default -> Falsche Eingabe    */
  107.  
  108.  while (inp_ok == FALSE)        /* bis gültige Eingabe erfolgt    */
  109.   {
  110.    printf("\nStopbits  (1 oder 2) : ");
  111.    sbit = getche() - '0';        /* Einlesen eines Zeichens    */
  112.    if ((sbit == 1) || (sbit == 2))    /* Eingabe gültig ?        */
  113.      inp_ok = TRUE;            /* Ja -> weiter            */
  114.   }                    /* Nein -> erneut anfordern    */
  115.  
  116. /*====== Einlesen der Parität, bis eine gültige Eingabe erfolgt ist ====*/
  117.  
  118.  inp_ok = FALSE;            /* Default -> Falsche Eingabe    */
  119.  
  120.  while (inp_ok == FALSE)        /* bis gültige Eingabe erfolgt    */
  121.   {
  122.     printf("\nParity (None, Odd, Even)  : ");
  123.     par[0] = getche();            /* Einlesen eines Zeichens    */
  124.     strupr(par);            /* Umwandlung in Großbuchstabe    */
  125.     if ((par[0] == 'N') || (par[0] == 'O') || (par[0] == 'E'))
  126.       inp_ok = TRUE;
  127.   }
  128.  printf("\n");
  129.  
  130. /*============ den Rest erledigt die Funktion SETCOM ===================*/
  131.  
  132.                     /* Setzen der neuen Parameter    */
  133.  if ( setcom(com,baud,dbit,sbit,par) )    /* Muß immer 0 ergeben        */
  134.    {                    /* Trotzdem !            */
  135.      printf("\nParameter wurden nicht akzeptiert !!\n");
  136.      return(1);                /* Errorlevel auf 1 setzen    */
  137.    }
  138.  
  139.  getcom(com);                /* Erneute Abfrage der Parameter*/
  140.  
  141.  return(0);                /* Errorlevel auf 0 setzen    */
  142. }
  143.