RosettaCodeData/Task/Password-generator/PureBasic/password-generator.basic

123 lines
2.5 KiB
Plaintext

EnableExplicit
Procedure.b CheckPW(pw.s)
Define flag.b=#True,
tmp.b=#False,
c.c,
s.s,
i.i
For c='a' To 'z'
tmp=Bool(FindString(pw,Chr(c)))
If tmp : Break : EndIf
Next
flag & tmp
tmp=#False
For c='A' To 'Z'
tmp=Bool(FindString(pw,Chr(c)))
If tmp : Break : EndIf
Next
flag & tmp
tmp=#False
For c='0' To '9'
tmp=Bool(FindString(pw,Chr(c)))
If tmp : Break : EndIf
Next
flag & tmp
tmp=#False
For c='!' To '/'
s+Chr(c)
Next
For c=':' To '@'
s+Chr(c)
Next
s+"[]^_{|}~"
For i=1 To Len(pw)
tmp=Bool(FindString(s,Mid(pw,i,1)))
If tmp : Break : EndIf
Next
flag & tmp
ProcedureReturn flag
EndProcedure
Procedure.s InputHdl(prompt.s="")
Define txt.s,
s.s,
r.i,
hlp.s
Restore Help_01
Read.s hlp
Print(prompt)
Repeat
s=Inkey()
If s<>""
If FindString("0123456789",s)
txt+s
Print(s)
EndIf
If s=Chr(27)
txt="0"
Break
EndIf
ElseIf RawKey()
r=RawKey()
If r=112
PrintN("")
PrintN(hlp)
Print(~"\n"+prompt)
EndIf
EndIf
Delay(20)
Until s=Chr(13)
PrintN("")
ProcedureReturn txt
EndProcedure
NewList PasswordChar.c()
Define c.c,
pwlen.i,
n_of_pw.i,
pwstr.s,
i.i
For c='!' To '~'
If c<>'\' And c<>'`'
AddElement(PasswordChar()) : PasswordChar()=c
EndIf
Next
OpenConsole("Password generator: F1=Help; Esc=End")
Repeat
pwlen=Abs(Val(InputHdl("Length of the password (n>=4): ")))
If pwlen=0 : Break : EndIf
If pwlen<4 : Continue : EndIf
n_of_pw=Abs(Val(InputHdl("Number of passwords (n>=1): ")))
If n_of_pw=0 : Break : EndIf
For i=1 To n_of_pw
Repeat
pwstr=Mid(pwstr,2)
RandomizeList(PasswordChar())
ResetList(PasswordChar())
While NextElement(PasswordChar())
pwstr+Chr(PasswordChar())
If Len(pwstr)>=pwlen : Break : EndIf
Wend
Until CheckPW(pwstr)
PrintN(RSet(Str(i),Len(Str(n_of_pw))," ")+") "+pwstr)
pwstr=""
Next
PrintN("")
ForEver
End
DataSection
Help_01:
Data.s ~"Help: Password generator\n"+
~"------------------------\n"+
~"Blabla bla blabla bla blablabla.\n"+
~"Blabla bla blablabla.\n"+
~"Bla blabla bla blablabla bla.\n"+
~"Blabla bla blabla bla.\n"+
~"Bla blabla bla blablabla blablabla.\n"+
~"Blabla bla blabla bla blablabla.\n"+
~"Blabla blabla bla blablabla."
EndOfHelp:
EndDataSection