[Back to ENTRY SWAG index] [Back to Main SWAG index] [Original]

    {
    Someone earlier wanted a routine that would make the person type in a
    capital letter first, and then all lower case letters.  Well, here it
    is.  This also has a masking feature for passwords, and allows BACKSPACE
    and TAB.  It passes back a string...

    {Scott Mitchell, 1995
        Tested
        I take no waranty whatsoever if this program makes your computer
        blow up or whatever...}

    PROGRAM ForceCapital;
    USES crt;
    CONST  Enter=13;   BackSpace=8;   Tab=9;  {ASCII values}

    VAR Answer:string;

    {--------------------------------------------------------------------}

    function LChar(ch:char):char;

    {This simply first checks to see if the character is a capital letter,
    and then, if it is, it adds 32, making the letter lower-case...}

    begin
           if (ord(ch)>=65) and (ord(ch)<=90) then
                ch:=chr(ord(ch)+32);
           LChar:=ch;
    end;

    {---------------------------------------------------------------------}

    procedure GetInput(var s:string; filler:char; capital:boolean);

    {S is the string that will be returned.
    Filler is a character.  This can be used for masking, like if a user
     is entering in a password or whatever.  If you want this (let's say to
     mask with a "!") then the syntax would be:

                   GetInput (answer, '!', true);

    Capital is a TRUE or FALSE value.  If you choose TRUE it will make each
     the letters after a space be capital, and all the other letters
     lowercase.  However, the string returned will not have the unique
     capitalization, although the code can be easily modified for that to
     occur.}

    var done:boolean;
       ch:char;
       temp,count,x,y:byte;
       reply:packed array[0..255] of char;

    begin
        MEM[$0040:$001A]:=MEM[$0040:$001C];     {Clears Keyboard Buffer!}

        x:=wherex;  y:=wherey;
        count:=0;   done:=false;

        repeat
        repeat until keypressed;
        ch:=readkey;
        case ord(ch) of
             Enter:begin
                     done:=true;
                     reply[0]:=chr(count);
                end;
             Tab:begin
                    if not(count>245) then begin
                       inc(x,5);
                       gotoxy(x,y);
                       for temp:=1 to 5 do
                           reply[count+temp]:=' ';
                       inc(count,5);
                    end;
               end;
             BackSpace:begin
                    if not(count=0) then begin
                       reply[count]:=' ';
                       dec(count);
                       dec(x);
                       gotoxy(x,y);
                       write(' ');
                       gotoxy(x,y);
                    end;
               end;
             else
                 begin
                    inc(count);  inc(x);
                    if (filler<>' ') and (ch<>' ') then
                       write(filler)
                    else
                       if capital then begin
                            if count>1 then
                               if reply[count-1]=' ' then
                                  write(upcase(ch))
                               else write(lchar(ch))
                            else
                                write(upcase(ch));
                       end
                       else write(ch);

                    reply[count]:=ch;
                 end;
        end;
        until done;

        for x:=1 to ord(reply[0]) do
            s:=s+reply[x];
    end;

    {---------------------------------------------------------------------}

    begin
           clrscr;
           write(' What is your name:     ');
           GetInput(answer, ' ', true);
           writeln; writeln; writeln;
           write('  Welcome to the BBS, ', answer,'!');
           readln;
    end.

[Back to ENTRY SWAG index] [Back to Main SWAG index] [Original]