home *** CD-ROM | disk | FTP | other *** search
- {---------------------------------------------------------------------------}
- { PASSWORT.PAS }
-
- PROGRAM passwort_demo;
-
- VAR Zugriff_erlaubt: BOOLEAN;
-
- {--------------------------------------------------------------------------}
- { Uebernimmt ein Passwort von der Tastatur, ohne es anzuzeigen. }
- { Ferner muss ein genauer Takt bei der Eingabe eingehalten werden. }
-
- FUNCTION passworteingabe: BOOLEAN;
-
- CONST AnzahlBuchstaben = 8; { Anzahl der Buchstaben des Passwortes }
- Wartezeit = 5000; { Wartezeit fuer den Takt,gibt die Ge- }
- { schwindigkeit des Taktes an. }
-
- VAR warte : ARRAY [1..AnzahlBuchstaben] OF BOOLEAN;
- Zaehlerwarten: ARRAY [1..AnzahlBuchstaben] OF INTEGER;
- Pass,
- Passwort : STRING[AnzahlBuchstaben];
- WarteFlag :BOOLEAN;
- i :INTEGER;
-
- {-------------------------------------------------------------------------}
- { Hier muss das Passwort und der Takt eingegeben werden. }
-
- PROCEDURE tempus;
-
- BEGIN
- Pass:='MEINWORT'; { Passwort }
-
- { warte[3]:=TRUE bedeutet: Vor der Eingabe des dritten Zeichens }
- { muss eine Zeitlang gewartet werden. }
- { warte[4]:=FALSE bedeutet: Die Eingabe des vierten Zeichens }
- { muss schnell erfolgen. }
- { Die Wartezeit ist abhaengig von der Konstanten WARTEZEIT. }
- { Es muessen so viele warte[i] eingegeben werden, wie Buchstaben }
- { im Passwort vorhanden sind - in diesem Fall acht. }
-
- warte[1] := TRUE;
- warte[2] := FALSE;
- warte[3] := TRUE;
- warte[4] := FALSE;
- warte[5] := TRUE;
- warte[6] := FALSE;
- warte[7] := TRUE;
- warte[8] := FALSE;
- END;
-
- {-------------------------------------------------------------------------}
-
- BEGIN { Passworteingabe }
- FOR i := 1 TO AnzahlBuchstaben DO { Alle Zaehler werden }
- Zaehlerwarten[i] := 0; { auf Null gesetzt. }
- tempus; { Es wird das Passwort und der Takt uebernommen }
- Write('Bitte geben Sie das Passwort ein: ');
- { Jetzt wird das Passwort eingegeben und die Zeit gezaehlt, }
- { die der Benutzer braucht, um die einzelnen Buchstaben einzugeben. }
- FOR i := 1 TO AnzahlBuchstaben DO
- BEGIN
- REPEAT
- Zaehlerwarten[i] := Succ(Zaehlerwarten[i]);
- UNTIL KeyPressed;
- Read(Kbd, Passwort[i]); { Liest ein Zeichen von der Tastatur, }
- { ohne es anzuzeigen. }
- Passwort[i] := UpCase(Passwort[i]); { Der eingegebene Buchstabe }
- { wird in einen Grossbuch- }
- { staben umgewandelt. }
- Write('.'); { Es erscheint anstatt des Buchstabens ein Punkt. }
- END;
- WriteLn;
- { Jetzt wird ueberprueft, ob Passwort und Takt richtig eingegeben wurden }
- i := 0;
- REPEAT
- i := Succ(i);
- IF warte[i] THEN WarteFlag:= (Zaehlerwarten[i] < Wartezeit)
- ELSE WarteFlag:= (Zaehlerwarten[i] > Wartezeit);
-
- { folgende Zeile muss bei der richtigen Passworteingabe entfernt werden! }
- { Sie zeigt die eingegebenen Buchstaben und die Zeit zum Test: }
- WriteLn(Passwort[i],' , ', Zaehlerwarten[i]:10);
-
- UNTIL WarteFlag OR (i > AnzahlBuchstaben) OR (Pass[i] <> Passwort[i]);
- { Es wird solange ueberprueft, bis alle Buchstaben richtig sind, }
- { oder ein Buchstabe oder der Takt falsch ist. }
- passworteingabe := (i > AnzahlBuchstaben);
- { Die Funktion gibt den Wert TRUE aus, wenn das Passwort richtig }
- { eingegeben wurde. }
- END;
-
- {--------------------------------------------------------------------------}
-
- BEGIN { passwort_demo }
- Zugriff_erlaubt := passworteingabe;
- IF Zugriff_erlaubt THEN Write('Passwort erkannt.')
- ELSE Write('Passwort falsch!!!');
- END.