home *** CD-ROM | disk | FTP | other *** search
/ Turbo Toolbox / Turbo_Toolbox.iso / 1987 / 07 / passwort.pas < prev    next >
Encoding:
Pascal/Delphi Source File  |  1987-06-10  |  4.3 KB  |  98 lines

  1. {---------------------------------------------------------------------------}
  2. {                             PASSWORT.PAS                                  }
  3.  
  4. PROGRAM passwort_demo;
  5.  
  6. VAR Zugriff_erlaubt: BOOLEAN;
  7.  
  8.  {--------------------------------------------------------------------------}
  9.  {     Uebernimmt ein Passwort von der Tastatur, ohne es anzuzeigen.        }
  10.  {     Ferner muss ein genauer Takt bei der Eingabe eingehalten werden.     }
  11.  
  12.   FUNCTION passworteingabe: BOOLEAN;
  13.  
  14.   CONST AnzahlBuchstaben = 8;        { Anzahl der Buchstaben des Passwortes }
  15.         Wartezeit = 5000;            { Wartezeit fuer den Takt,gibt die Ge- }
  16.                                      { schwindigkeit des Taktes an.         }
  17.  
  18.    VAR warte        : ARRAY [1..AnzahlBuchstaben] OF BOOLEAN;
  19.        Zaehlerwarten: ARRAY [1..AnzahlBuchstaben] OF INTEGER;
  20.        Pass,
  21.        Passwort     : STRING[AnzahlBuchstaben];
  22.        WarteFlag    :BOOLEAN;
  23.        i            :INTEGER;
  24.  
  25.   {-------------------------------------------------------------------------}
  26.   {            Hier muss das Passwort und der Takt eingegeben werden.       }
  27.  
  28.     PROCEDURE tempus;
  29.  
  30.      BEGIN
  31.        Pass:='MEINWORT';                                         { Passwort }
  32.  
  33.           { warte[3]:=TRUE bedeutet:  Vor der Eingabe des dritten Zeichens  }
  34.           {                           muss eine Zeitlang gewartet werden.   }
  35.           { warte[4]:=FALSE bedeutet: Die Eingabe des vierten Zeichens      }
  36.           {                           muss schnell erfolgen.                }
  37.           { Die Wartezeit ist abhaengig von der Konstanten WARTEZEIT.       }
  38.           { Es muessen so viele warte[i] eingegeben werden, wie Buchstaben  }
  39.           { im Passwort vorhanden sind - in diesem Fall acht.               }
  40.  
  41.        warte[1] := TRUE;
  42.        warte[2] := FALSE;
  43.        warte[3] := TRUE;
  44.        warte[4] := FALSE;
  45.        warte[5] := TRUE;
  46.        warte[6] := FALSE;
  47.        warte[7] := TRUE;
  48.        warte[8] := FALSE;
  49.      END;
  50.  
  51.   {-------------------------------------------------------------------------}
  52.  
  53.   BEGIN  { Passworteingabe }
  54.     FOR i := 1 TO AnzahlBuchstaben DO                { Alle Zaehler werden  }
  55.       Zaehlerwarten[i] := 0;                         { auf Null gesetzt.    }
  56.     tempus;                 { Es wird das Passwort und der Takt uebernommen }
  57.     Write('Bitte geben Sie das Passwort ein: ');
  58.         { Jetzt wird das Passwort eingegeben und die Zeit gezaehlt,         }
  59.         { die der Benutzer braucht, um die einzelnen Buchstaben einzugeben. }
  60.     FOR i := 1 TO AnzahlBuchstaben DO
  61.       BEGIN
  62.         REPEAT
  63.            Zaehlerwarten[i] := Succ(Zaehlerwarten[i]);
  64.         UNTIL KeyPressed;
  65.         Read(Kbd, Passwort[i]);       { Liest ein Zeichen von der Tastatur, }
  66.                                       { ohne es anzuzeigen.                 }
  67.         Passwort[i] := UpCase(Passwort[i]);    { Der eingegebene Buchstabe  }
  68.                                                { wird in einen Grossbuch-   }
  69.                                                { staben umgewandelt.        }
  70.         Write('.');      { Es erscheint anstatt des Buchstabens ein Punkt.  }
  71.       END;
  72.     WriteLn;
  73.    { Jetzt wird ueberprueft, ob Passwort und Takt richtig eingegeben wurden }
  74.     i := 0;
  75.     REPEAT
  76.       i := Succ(i);
  77.       IF warte[i] THEN WarteFlag:= (Zaehlerwarten[i] < Wartezeit)
  78.                   ELSE WarteFlag:= (Zaehlerwarten[i] > Wartezeit);
  79.  
  80.    { folgende Zeile muss bei der richtigen Passworteingabe entfernt werden! }
  81.    { Sie zeigt die eingegebenen Buchstaben und die Zeit zum Test:           }
  82.       WriteLn(Passwort[i],' , ', Zaehlerwarten[i]:10);
  83.  
  84.     UNTIL WarteFlag OR (i > AnzahlBuchstaben) OR (Pass[i] <> Passwort[i]);
  85.            { Es wird solange ueberprueft, bis alle Buchstaben richtig sind, }
  86.            { oder ein Buchstabe oder der Takt falsch ist.                   }
  87.     passworteingabe := (i > AnzahlBuchstaben);
  88.           { Die Funktion gibt den Wert TRUE aus, wenn das Passwort richtig  }
  89.           { eingegeben wurde.                                               }
  90.   END;
  91.  
  92.  {--------------------------------------------------------------------------}
  93.  
  94. BEGIN { passwort_demo }
  95.   Zugriff_erlaubt := passworteingabe;
  96.   IF Zugriff_erlaubt THEN Write('Passwort erkannt.')
  97.                      ELSE Write('Passwort falsch!!!');
  98. END.