complexity is simplicity
This commit is contained in:
@@ -4,11 +4,14 @@ import argparse
|
|||||||
import curses
|
import curses
|
||||||
import hashlib
|
import hashlib
|
||||||
import os
|
import os
|
||||||
|
import random
|
||||||
|
import re
|
||||||
import sys
|
import sys
|
||||||
import termios
|
import termios
|
||||||
|
import time
|
||||||
import tty
|
import tty
|
||||||
|
|
||||||
__version__ = "20250309.a"
|
__version__ = "20250310.a"
|
||||||
|
|
||||||
|
|
||||||
class getch:
|
class getch:
|
||||||
@@ -49,37 +52,64 @@ def termsize():
|
|||||||
|
|
||||||
|
|
||||||
class bc:
|
class bc:
|
||||||
m = "\033[95m"
|
m = "\033[35m"
|
||||||
b = "\033[94m"
|
b = "\033[34m"
|
||||||
g = "\033[92m"
|
g = "\033[32m"
|
||||||
y = "\033[93m"
|
y = "\033[33m"
|
||||||
r = "\033[91m"
|
r = "\033[31m"
|
||||||
c = "\033[96m"
|
c = "\033[36m"
|
||||||
B = "\033[1m"
|
k = "\033[30m\033[40m"
|
||||||
|
M = "\033[95m"
|
||||||
|
B = "\033[94m"
|
||||||
|
G = "\033[92m"
|
||||||
|
Y = "\033[93m"
|
||||||
|
R = "\033[91m"
|
||||||
|
C = "\033[96m"
|
||||||
|
bold = "\033[1m"
|
||||||
z = "\033[0m"
|
z = "\033[0m"
|
||||||
|
|
||||||
def disable(self):
|
def disable(self):
|
||||||
for x in "rgbcmyBz":
|
for x in "rgbcmyzkRGBCMY":
|
||||||
setattr(self, x, "")
|
setattr(self, x, "")
|
||||||
|
setattr(self, "bold", "")
|
||||||
|
|
||||||
|
|
||||||
def animchar(i, pos, colorpos, width, c):
|
def pwscore(s):
|
||||||
|
score = len(s) / 8
|
||||||
|
simple = False
|
||||||
|
if re.search("[A-Z]", s):
|
||||||
|
score *= 2
|
||||||
|
simple = True
|
||||||
|
if re.search("[a-z]", s):
|
||||||
|
score *= 1.5
|
||||||
|
simple = True
|
||||||
|
if re.search("[0-9]", s):
|
||||||
|
score *= 1.5
|
||||||
|
simple = True
|
||||||
|
if not simple:
|
||||||
|
score *= 2
|
||||||
|
return score
|
||||||
|
|
||||||
|
|
||||||
|
def animchar(i, pos, colorpos, width, c, user_input):
|
||||||
if i < 0:
|
if i < 0:
|
||||||
return " "
|
return " "
|
||||||
if pos == colorpos:
|
if pos == colorpos:
|
||||||
clr = c.c
|
clr = c.C
|
||||||
else:
|
else:
|
||||||
if i < 10:
|
clr = c.r
|
||||||
clr = c.r
|
score = pwscore(user_input)
|
||||||
elif i < 20:
|
for limit in ((c.r, 2), (c.y, 4), (c.c, 8), (c.g, 14)):
|
||||||
clr = c.y
|
if score > limit[1] - 1 + 2 * random.random():
|
||||||
else:
|
clr = limit[0]
|
||||||
clr = c.g
|
else:
|
||||||
return clr + "▁▂▃▄▅▆▇█▇▆▅▄▃▂"[int(i / width) % 14]
|
break
|
||||||
|
|
||||||
|
return clr + "▁▂▃▄▅▆▇█▇▆▅▄▃▂"[int(random.randint(-1, 1) + (i / width)) % 14]
|
||||||
|
|
||||||
|
|
||||||
def pquit(s="", e=0):
|
def pquit(s="", e=0, c=bc()):
|
||||||
print("", file=sys.stderr)
|
print(c.z, file=sys.stderr)
|
||||||
print(s, end="", file=sys.stdout if e == 0 else sys.stderr)
|
print(s, end="", file=sys.stdout if e == 0 else sys.stderr)
|
||||||
sys.exit(e)
|
sys.exit(e)
|
||||||
|
|
||||||
@@ -91,28 +121,32 @@ if __name__ == "__main__":
|
|||||||
# 127 = backspace
|
# 127 = backspace
|
||||||
ch = getch()
|
ch = getch()
|
||||||
user_input = ""
|
user_input = ""
|
||||||
display = "**** ****"
|
|
||||||
|
dot = "•"
|
||||||
|
display = f"{dot*4} {dot*4}"
|
||||||
c = bc()
|
c = bc()
|
||||||
if opts.no_color:
|
if opts.no_color:
|
||||||
c.disable()
|
c.disable()
|
||||||
if opts.title:
|
if opts.title:
|
||||||
print(f"{c.y}{c.B}{opts.title}{c.z}", file=sys.stderr)
|
print(f"{c.Y}{opts.title}{c.z}", file=sys.stderr)
|
||||||
enter_exitcode = 0
|
enter_exitcode = 0
|
||||||
while True:
|
while True:
|
||||||
try:
|
try:
|
||||||
if opts.w > 0:
|
if opts.w > 0:
|
||||||
dot_color = c.m
|
dot_color = c.m
|
||||||
|
dot = "•"
|
||||||
if opts.expect_sha256:
|
if opts.expect_sha256:
|
||||||
enter_exitcode = 10
|
enter_exitcode = 10
|
||||||
if hashlib.sha256(user_input.encode("utf-8")).hexdigest() == opts.expect_sha256:
|
if hashlib.sha256(user_input.encode("utf-8")).hexdigest() == opts.expect_sha256:
|
||||||
dot_color = c.g + c.B
|
dot_color = c.G
|
||||||
|
dot = "♥"
|
||||||
enter_exitcode = 0
|
enter_exitcode = 0
|
||||||
colorpos = len(user_input) % opts.w
|
colorpos = len(user_input) % opts.w
|
||||||
display = dot_color + "•••• "
|
display = dot_color + f"{dot*4} "
|
||||||
for i in range(opts.w):
|
for i in range(opts.w):
|
||||||
display += animchar(len(user_input) - i, i, colorpos, opts.w, c)
|
display += animchar(len(user_input) - i, i, colorpos, opts.w, c, user_input)
|
||||||
display += dot_color + " ••••" + c.z
|
display += dot_color + f" {dot*4}" + c.z
|
||||||
print("\r" + display, file=sys.stderr, end="")
|
print("\r" + c.z + display + "\r" + c.k, file=sys.stderr, end="")
|
||||||
sys.stderr.flush()
|
sys.stderr.flush()
|
||||||
key = ch.get()
|
key = ch.get()
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user