{HHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHH H H H M_PASSE.PAS G‚r‚rateur de mots de passe al‚atoires H H H HHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHH} PROGRAM xxx; USES Crt, U_FPUtil, U_GnPsAl; CONST Nc = 10; Nl = 26; Ns = 32; NmaxC = Nc + (2*Nl) + Ns; Lmax = 50; Bmax = 100; TYPE Paire = RECORD c: CHAR; w: Reel END; Lst10C = ARRAY[1..Nc] OF CHAR; Lst26C = ARRAY[1..Nl] OF CHAR; LstNsC = ARRAY[1..Ns] OF CHAR; Lst10P = ARRAY[0..Nc] OF Paire; Lst26P = ARRAY[0..Nl] OF Paire; LstNsP = ARRAY[0..Ns] OF Paire; LstB = ARRAY[1..Bmax+1] OF BYTE; VAR Chff: Lst10C; Lmaj, Lmin: Lst26C; Symb: LstNsC; Lch: Lst10P; Lma, Lmi: Lst26P; Lsy: LstNsP; Lb: LstB; Etat, Imax, Imin, N1, N2, N3, N4, LongC: BYTE; E_Al: GEnt; FactAtt: Reel; MotdePasse: STRING; Fch_T: TEXT; {HHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHH H H H Initialisation et traitement des listes H H H HHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHH} PROCEDURE TirSmb(Fa: Reel; VAR Ca: CHAR); VAR i, k: BYTE; Lim, s: Reel; Ca1: CHAR; BEGIN TirA_R(Lsy[0].w, Lim); i:= 0; s:= 0; REPEAT Inc(i); IncR(s, Lsy[i].w) UNTIL s>Lim; InitC(Lsy[i].c, Ca1); Ca:= Ca1; MltR(Lsy[i].w, Fa); s:= 0; FOR k:= 1 TO Nl DO IncR(s, Lsy[k].w); InitR(s, Lsy[0].w) END; PROCEDURE TirLmi(Fa: Reel; VAR Ca: CHAR); VAR i, k: BYTE; Lim, s: Reel; Ca1: CHAR; BEGIN TirA_R(Lmi[0].w, Lim); i:= 0; s:= 0; REPEAT Inc(i); IncR(s, Lmi[i].w) UNTIL s>Lim; InitC(Lmi[i].c, Ca1); Ca:= Ca1; MltR(Lmi[i].w, Fa); s:= 0; FOR k:= 1 TO Nl DO IncR(s, Lmi[k].w); InitR(s, Lmi[0].w) END; PROCEDURE TirLma(Fa: Reel; VAR Ca: CHAR); VAR i, k: BYTE; Lim, s: Reel; Ca1: CHAR; BEGIN TirA_R(Lma[0].w, Lim); i:= 0; s:= 0; REPEAT Inc(i); IncR(s, Lma[i].w) UNTIL s>Lim; InitC(Lma[i].c, Ca1); Ca:= Ca1; MltR(Lma[i].w, Fa); s:= 0; FOR k:= 1 TO Nl DO IncR(s, Lma[k].w); InitR(s, Lma[0].w) END; PROCEDURE TirChf(Fa: Reel; VAR Ca: CHAR); VAR i, k: BYTE; Lim, s: Reel; Ca1: CHAR; BEGIN TirA_R(Lch[0].w, Lim); i:= 0; s:= 0; REPEAT Inc(i); IncR(s, Lch[i].w) UNTIL s>Lim; InitC(Lch[i].c, Ca1); Ca:= Ca1; MltR(Lch[i].w, Fa); s:= 0; FOR k:= 1 TO Nc DO IncR(s, Lch[k].w); InitR(s, Lch[0].w) END; PROCEDURE InitP(X: Paire; VAR Y: Paire); BEGIN Y:= X END; PROCEDURE InitLp(Jmin, Jmax: BYTE); CONST m = 1.0; VAR k, K1, Lim: BYTE; X: Paire; BEGIN FOR k:= 0 TO Nc DO BEGIN IF k=0 THEN BEGIN X.c:= ' '; X.w:= 1.0 * Nc END ELSE BEGIN InitC(Chff[k], X.c); X.w:= m END; InitP(X, Lch[k]) END; FOR k:= 0 TO Nl DO BEGIN IF k=0 THEN BEGIN X.c:= ' '; X.w:= 1.0 * Nl END ELSE BEGIN InitC(Lmaj[k], X.c); X.w:= m END; InitP(X, Lma[k]) END; FOR k:= 0 TO Nl DO BEGIN IF k=0 THEN BEGIN X.c:= ' '; X.w:= 1.0 * Nl END ELSE BEGIN InitC(Lmin[k], X.c); X.w:= m END; InitP(X, Lmi[k]) END; K1:= Jmax - Jmin; Inc(K1); FOR k:= 0 TO Ns DO BEGIN IF ((kJmax)) THEN BEGIN X.c:= ' '; X.w:= 0.0 END ELSE BEGIN InitC(Symb[k], X.c); X.w:= m END; InitP(X, Lsy[k]) END; InitR(1.0 * K1, Lsy[0].w) END; PROCEDURE CoupureLb(j: BYTE; VAR Li: LstB); VAR k: BYTE; Liste: LstB; BEGIN Liste:= Li; FOR k:= j TO Bmax DO Liste[k]:= Liste[k+1]; Li:= Liste END; PROCEDURE InitLb(K1, K2, K3, K4, Jmin, Jmax: BYTE; VAR Li: LstB); VAR i, k: BYTE; BEGIN i:= 0; IF K1>0 THEN FOR k:= 1 TO K1 DO BEGIN Inc(i); Li[i]:= 1 END; IF K2>0 THEN FOR k:= 1 TO K2 DO BEGIN Inc(i); Li[i]:= 2 END; IF K3>0 THEN FOR k:= 1 TO K3 DO BEGIN Inc(i); Li[i]:= 3 END; IF K4>0 THEN FOR k:= 1 TO K4 DO BEGIN Inc(i); Li[i]:= 4 END; FOR k:= i+1 TO (Bmax+1) DO Li[k]:= 0 END; {HHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHH H H H Tirages al‚atoires H H H HHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHH} PROCEDURE InitG; CONST C1 = 6; L1 = 43; Co = 9; u = 10; VAR i: BYTE; Tch: CHAR; BEGIN Cadre(C1, L1-6, 81-C1, L1+6, Co); Bh(C1+1, 80-C1, L1, Co MOD 100); E(0015); Wt(C1+2, L1-4, 'Initialisation … valeur al‚atoire ("0") '); Write('ou impos‚e (["1".."9"]: '); REPEAT Tch:= ReadKey UNTIL Tch IN ['0'..'9']; E(0012); Write(Tch); i:= Ord(Tch); Dec(i, Ord('0')); { Ord('0') = 48 } E(0008); Wt(49, L1-1, 'Gmax = '); Write(MaxLongInt:u); InitE_Al(i, 16, 56, L1-2); Val_Eal(E_Al); IF i=0 THEN BEGIN E(0015); Wt(11, L1-2, 'Premier entier al‚atoire '); Write('(IN [0..2^31-1]): E = '); E(0010); Write(E_Al:u); END ELSE Curs(81-C1, L1-2, 219, 9); E(0009); Wt(36, L1-1, '..#127') END; {HHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHH H H H Affichage de l'ensemble des caractŠres H H H HHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHH} PROCEDURE AffListe(L1: BYTE); CONST C1 = 5; C2 = 81 - C1; q = 100; K1 = 2; K2 = 3; K3 = 1; K4 = 5; VAR i, k, L2, L3, x, y: BYTE; Co: WORD; BEGIN L2:= L1 + 2 ; L3:= L1 + 10; Cadre(C1, L1-2, C2, L1+11, 09); E(0015); Wt(29, L1, 'CaractŠres disponibles'); F( 6, L2, 27, L3, K1); F(28, L2, 48, L3, K2); F(49, L2, 69, L3, K3); F(70, L2, 75, L3, K4); FOR k:= 1 TO Ns DO BEGIN i:= (k - 1) DIV 10; x:= 2 * k; Inc(x, 6+i); IF k<11 THEN Co:= q * K1 ELSE IF k<21 THEN Co:= q * K2 ELSE IF k<31 THEN Co:= q * K3 ELSE Co:= q * K4; IF k<=Nc THEN BEGIN E(Co+11); Wt(x, L1+3, Chff[k]) END; IF k<=Nl THEN BEGIN E(Co+10); Wt(x, L1+5, Lmaj[k]); E(Co+14); Wt(x, L1+7, Lmin[k]) END; E(Co+12); Wt(x, L1+9, Symb[k]) END END; {HHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHH H H H P1 / P2 / Entr‚e et sortie des donn‚es H H H HHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHH} PROCEDURE EcritureF(Et: BYTE; Ch: STRING); CONST u = 5; BEGIN Assign(Fch_T, Ch); Rewrite(Fch_T); WriteLn(Fch_T, 'Option:', Etat:u); WriteLn(Fch_T, 'NtCar = ', LongC:u); CASE Et OF 1: Write(Fch_T, '(Pr1, Pr2, Pr3, Pr4) ='); 2: Write(Fch_T, '(Nch, Nma, Nmi, Nsy) =') END; WriteLn(Fch_T, N1:u, N2:u, N3:u, N4:u); WriteLn(Fch_T, '(Imin, Imax) = ', Imin:u, Imax:u); WriteLn(Fch_T, 'FactAtt f = ', FactAtt:10:9); WriteLn(Fch_T, 'Graine g = ', E_Al); WriteLn(Fch_T, 'Mot de Passe: = ', MotdePasse); Close(Fch_T); END; PROCEDURE AffR; CONST L1 = 47; Ch_D = 'D:\ZZZ.TXT'; VAR g: GEnt; Tch: CHAR; Chaine, Ch: STRING; TeN, TeO: BOOLEAN; BEGIN A; F(8, L1-2, 73, L1, 0); Bh(36, 65, 42, 0); E(0015); Wt(08, L1-2, 'Mot de Passe:'); E(0014); Wt(74-LongC, L1-2, MotdePasse); E(0015); Wt(08, L1, 'Fichier? (o/n)'); E(0008); Wt(24, L1, 'Oui: "o", "O", "0".."9" '); Write('/ Non: "n", "N", " "'); REPEAT Tch:= ReadKey; TeO:= (((Tch='o') OR (Tch='O')) OR (Tch IN ['0'..'9'])); TeN:= (((Tch='n') OR (Tch='N')) OR (Tch=' ')) UNTIL (TeO OR TeN); IF TeO THEN BEGIN E(0012); Wt(18, L1, 'O'); E(0010); Wt(23, L1, ' Chemin = '); E(0009); Write(Ch_D, ' '); E(0008); Wt(43, L1, ' Valeur par d‚faut:'); E(0015); Rt(33, L1, Ch); IF Ch='' THEN Chaine:= Ch_D ELSE Chaine:= Ch; Bh(33, 73, L1, 0); E(0111); Wt(33, L1, Chaine); EcritureF(Etat, Chaine) END ELSE BEGIN E(0012); Wt(20, L1, 'N'); Bh(24, 73, L1, 3) END END; PROCEDURE SaisieB(c, l, Min, Max: BYTE; VAR Ni: BYTE); CONST s = 1E-3; VAR n: WORD; Lim1, Lim2, r: Reel; BEGIN Lim1:= 1.0 * Min; DecR(Lim1, s); Lim2:= 1.0 * Max; IncR(Lim2, s); REPEAT Rr(c, l, r) UNTIL ((Lim1