RE: Silent pw entry not working - mnrvovrfc - 12-11-2022
(12-11-2022, 09:21 PM)RhoSigma Wrote: I never understood the sense of a silent/hidden (or what ever you wanna call) input field. Never use Linux for anything!
Also whoever is mentally sick, because he/she "must" have a crowd while he/she uses a laptop which booted a portable Linux system, and must use "sudo" or become "root" user for any reason. Then complains he/she lost data and the only thing expected forgotten were the cookies loaded by a web browser.
An input field that remains the same blinking the cursor in the same exact place, instead of putting dumb asterisks or dots as placeholders, unnerves more a person who really, really wants to break into a place forbidden to him/her. But what do I know. I hate online places that force me to use more than ten characters for password and the widest range of low-bit ASCII characters that I shouldn't trust them to support.
RE: Silent pw entry not working - Pete - 12-11-2022
(12-11-2022, 09:21 PM)RhoSigma Wrote: I never understood the sense of a silent/hidden (or what ever you wanna call) input field.
Simply don't type your password if too many suspicious creatures hanging around you.
And..., if I would be one of those creatures, then I would follow your fingers on the keyboard, so you should better get a keyboard with blank keys instead.
LOL at blank keys on keyboard. +1
Rho, I'll sell you my patented hacker-proof Cheetos camouflaged keyboard. (At least that's the story I tell my wife, but I really don't think she buys it, either.) Crunch....
Pete
RE: Silent pw entry not working - SMcNeill - 12-11-2022
They're called "Programmable Keyboards". I'd love to have one!
RE: Silent pw entry not working - Pete - 12-12-2022
(12-11-2022, 11:57 PM)SMcNeill Wrote: They're called "Programmable Keyboards". I'd love to have one!
Really? Because if you lick mine... What? Memo from H.R. already! I haven't even finished the sentence yet!!! I was going to reference the Cheetos dust keyboard!!!
Pete
RE: Silent pw entry not working - SMcNeill - 12-12-2022
If one *really* needs a password type routine, there's always ExtendedInput by yours truly.
Code: (Select All) ExtendedInput "{P}Enter your password =>", a$
Print
Print "Your password was =>"; a$
ExtendedInput "{PL08}Enter your password (max 8 digits) =>", a$
Print
Print "Your password was =>"; a$
ExtendedInput "{PL05UI}Enter your 5 digit numeric keycode =>", a$
Print
Print "Your keycode was =>"; a$
Sub ExtendedInput (prompt$, result$) 'Over Engineered Input
'limit VALUES:
'1 = Unsigned
'2 = Integer
'4 = Float
'8 = Who cares. It's handled via internal variables and we don't need to know a type for it.
'Uses {} at the start of the prompt to limit possible input
'P = Password
'U = Unsigned
'I = Integer
'F = Float
'L## = Length of max ##
'X##, Y## = LOCATE before printing
'D = Disable paste option
'V = Move CTRL-V to AFTER paste
'H = Hide Input after finished. (Won't leave prompt, or user input on the screen.)
PCopy 0, 1
A = _AutoDisplay: X = Pos(0): Y = CsrLin
OX = X: OY = Y 'original x and y positions
CP = 0: OldCP = 0 'Cursor Position
_KeyClear
length_limit = -1 'unlimited length input, by default
If Left$(prompt$, 1) = "{" Then 'possible limiter
i = InStr(prompt$, "}")
If i Then 'yep, we have something!
limiter$ = UCase$(Mid$(prompt$, 2, i - 2))
If InStr(limiter$, "U") Then limit = limit Or 1 'Unsigned
If InStr(limiter$, "I") Then 'can't limit to BOTH an integer AND a float
limit = limit Or 2 'Integer
ElseIf InStr(limiter$, "F") Then
limit = limit Or 4 'Float
float_before_limit = KB_GetValue(limiter$, "F")
float_after_limit = KB_GetValue(Mid$(limiter$, InStr(limiter$, "F") + 1), ".")
End If
End If
If InStr(limiter$, "P") Then password_protected = -1: limit = limit Or 8 'don't show passwords.
If InStr(limiter$, "L") Then 'Length Limitation
limit = limit Or 8
length_limit = KB_GetValue(limiter$, "L")
End If
If InStr(limiter$, "X") Then 'X position on screen
limit = limit Or 8
X = KB_GetValue(limiter$, "X")
End If
If InStr(limiter$, "Y") Then 'Y position on scren
limit = limit Or 8
Y = KB_GetValue(limiter$, "Y")
End If
If InStr(limiter$, "D") Then disable_paste = -1: limit = limit Or 8 'disable paste
If InStr(limiter$, "V") Then cursor_after_paste = -1: limit = limit Or 8 'disable paste
If InStr(limiter$, "H") Then clean_exit = -1: limit = limit Or 8 'hide after finished
End If
If limit <> 0 Then prompt$ = Mid$(prompt$, i + 1)
Do
PCopy 1, 0
If _KeyDown(100307) Or _KeyDown(100308) Then AltDown = -1 Else AltDown = 0
k = _KeyHit
If AltDown Then
Select Case k 'ignore all keypresses except ALT-number presses
Case -57 To -48: AltWasDown = -1: alt$ = alt$ + Chr$(-k)
End Select
Else
Select Case k 'without alt, add any keypresses to our input
Case 8
oldin$ = in$
If CP > 0 Then OldCP = CP: CP = CP - 1
in$ = Left$(in$, CP) + Mid$(in$, CP + 2) 'backspace to erase input
Case 9
oldin$ = in$
in$ = Left$(in$, CP) + Space$(4) + Mid$(in$, CP + 1) 'four spaces for any TAB entered
OldCP = CP
CP = CP + 4
Case 32 To 128
If _KeyDown(100305) Or _KeyDown(100306) Then
If k = 118 Or k = 86 Then
If disable_paste = 0 Then
oldin$ = in$
temp$ = _Clipboard$
in$ = Left$(in$, CP) + temp$ + Mid$(in$, CP + 1) 'ctrl-v paste
'CTRL-V leaves cursor in position before the paste, without moving it after.
'Feel free to modify that behavior here, if you want it to move to after the paste.
If cursor_after_paste Then CP = CP + Len(temp$)
End If
End If
If k = 122 Or k = 90 Then Swap in$, oldin$: Swap OldCP, CP 'ctrl-z undo
Else
check_input:
oldin$ = in$
If limit And 1 Then 'unsigned
If k = 43 Or k = 45 Then _Continue 'remove signs +/-
End If
If limit And 2 Then 'integer
If k = 45 And CP = 0 Then GoTo good_input 'only allow a - sign for the first digit
If k < 48 Or k > 57 Then _Continue 'remove anything non-numeric
End If
If limit And 4 Then 'float
If k = 45 And CP = 0 Then GoTo good_input 'only allow a - sign for the first digit
If k = 46 And InStr(in$, ".") = 0 Then GoTo good_input 'only one decimal point
If k < 48 Or k > 57 Then _Continue 'remove anything non-numeric
If Left$(in$, 1) = "-" Then temp$ = Mid$(in$, 2) Else temp$ = in$
If InStr(in$, ".") = 0 Or CP < InStr(in$, ".") Then
If Len(temp$) < float_before_limit Or float_before_limit = -1 Then
in$ = Left$(in$, CP) + Chr$(k) + Mid$(in$, CP + 1) 'add input to our string
OldCP = CP
CP = CP + 1
End If
Else
temp$ = Mid$(in$, InStr(in$, ".") + 1)
If Len(temp$) < float_after_limit Or float_after_limit = -1 Then
in$ = Left$(in$, CP) + Chr$(k) + Mid$(in$, CP + 1) 'add input to our string
OldCP = CP
CP = CP + 1
End If
End If
_Continue
End If
good_input:
If CP < length_limit Or length_limit < 0 Then
in$ = Left$(in$, CP) + Chr$(k) + Mid$(in$, CP + 1) 'add input to our string
OldCP = CP
CP = CP + 1
End If
End If
Case 18176 'Home
CP = 0
Case 20224 'End
CP = Len(in$)
Case 21248 'Delete
oldin$ = in$
in$ = Left$(in$, CP) + Mid$(in$, CP + 2)
Case 19200 'Left
CP = CP - 1
If CP < 0 Then CP = 0
Case 19712 'Right
CP = CP + 1
If CP > Len(in$) Then CP = Len(in$)
End Select
End If
alt$ = Right$(alt$, 3)
If AltWasDown = -1 And AltDown = 0 Then
v = Val(alt$)
If v >= 0 And v <= 255 Then
k = v
alt$ = "": AltWasDown = 0
GoTo check_input
End If
End If
blink = (blink + 1) Mod 30
Locate Y, X
p$ = prompt$
If password_protected Then
p$ = p$ + String$(Len(Left$(in$, CP)), "*")
If blink \ 15 Then p$ = p$ + " " Else p$ = p$ + "_"
p$ = p$ + String$(Len(Mid$(in$, CP + 1)), "*")
Else
p$ = p$ + Left$(in$, CP)
If blink \ 15 Then p$ = p$ + " " Else p$ = p$ + "_"
p$ = p$ + Mid$(in$, CP + 1)
End If
$If FALCON = TRUE Then
QPrint p$
$Else
Print p$
$End If
_Display
_Limit 30
Loop Until k = 13
PCopy 1, 0
Locate OY, OX
If clean_exit = 0 Then
Locate Y, X
If password_protected Then
p$ = prompt$ + String$(Len(in$), "*")
Else
p$ = prompt$ + in$
End If
$If FALCON = TRUE Then
QPrint p$
$Else
Print p$
$End If
End If
result$ = in$
If A Then _AutoDisplay
End Sub
Function KB_GetValue (limiter$, what$)
jstart = InStr(limiter$, what$): j = 0
If Mid$(limiter$, InStr(limiter$, what$) + 1, 1) = "-" Then
GetValue = -1 'unlimited
Exit Function
End If
Do
j = j + 1
m$ = Mid$(limiter$, jstart + j, 1)
Loop Until m$ < "0" Or m$ > "9"
KB_GetValue = Val(Mid$(limiter$, jstart + 1, j - 1))
End Function
It handles passwords, limited input, arrow key navigation, copy/paste into the input, calculating your taxes, and sends vicious spam to your ex... What more could you want an input to possible do? Locate itself to X/Y coordinates of the screen? Fine! It does that too! Need it to erase itself after it's ran? Fine! It can do that too! Do you need it to insult Pete? Sorry.... It doesn't do that -- it figures he's insulting enough all on his on!
RE: Silent pw entry not working - Pete - 12-12-2022
@Ra7eN
To just tweak it a little for backspace, and leave the door open for other tweaks, like arrow keys, home/end, etc...
Code: (Select All) PRINT "-Enter Password: ";: pInput$ = silentInput$
PRINT pInput$ 'DEBUG DELETE AFTER TESTING
FUNCTION silentInput$
DIM Txt$
DIM KeyPress$
Txt$ = ""
' GREAT FOR PASSWORDS
'------------------------------------------------------------------------------------------------
pw = 1 ' Zero to show keyboard typing or 1 to show only asterisks.
start_column = POS(0)
y = CSRLIN: x = POS(0) ' Initial cursor position.
DO
_LIMIT 30
KeyPress$ = INKEY$
IF LEN(KeyPress$) THEN
string_position = POS(0) - start_column ' Track cursor and word position.
SELECT CASE KeyPress$
CASE CHR$(27) ' Esc key.
SYSTEM
CASE CHR$(13) ' Enter key.
EXIT DO
CASE CHR$(8) ' Backspace key.
IF string_position > 0 THEN
Txt$ = MID$(Txt$, 1, string_position - 1) + MID$(Txt$, string_position + 1)
LOCATE , start_column: PRINT SPACE$(LEN(Txt$) + 1);
LOCATE , start_column
IF pw THEN PRINT STRING$(LEN(Txt$), "*"); ELSE PRINT Txt$;
LOCATE , x - 1
END IF
CASE CHR$(32) TO "z"
IF pw THEN PRINT "*"; ELSE PRINT KeyPress$;
Txt$ = Txt$ + KeyPress$
END SELECT
y = CSRLIN: x = POS(0) ' Track cursor.
END IF
LOOP
'------------------------------------------------------------------------------------------------
PRINT
silentInput$ = Txt$
END FUNCTION
Pete
RE: Silent pw entry not working - SMcNeill - 12-12-2022
And now Pete's on the path to an overengineered ExtendedInput. If only one of those could be found somewhere already so somebody could just pop it in and make use of it...
RE: Silent pw entry not working - Pete - 12-12-2022
I code these routines like speed chess. I could use what I have coded in storage, but where's the fun in doing that?
Pete
RE: Silent pw entry not working - Ra7eN - 12-12-2022
i got the idea from linux hahaha
RE: Silent pw entry not working - Ra7eN - 12-12-2022
@pete
thanks I was getting around to that. this is another version of my password locker.
just bored last weekend and felt like programming and wanted to expand on this one
but that will speed stuff up hahaha
|