Silent pw entry not working
#11
(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.
Reply
#12
(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
If eggs are brain food, Biden takes his scrambled.
Reply
#13
They're called "Programmable Keyboards".   I'd love to have one!
Reply
#14
(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
Reply
#15
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!  Tongue
Reply
#16
@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
Reply
#17
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...  Wink
Reply
#18
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 Big Grin
Reply
#19
i got the idea from linux hahaha
3 out of 2 people have trouble with fractions

Reply
#20
@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
3 out of 2 people have trouble with fractions

Reply




Users browsing this thread: 16 Guest(s)