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

    {
    SEAN PALMER

    > name:_______________) problem, how do you make a field where you
    > define the max Chars in the field and doNOT let the person Type more
    > than that.  stop the users keyboard at the last Char in this Case its
    > 78 Chars max and the field looks like this

    Try this. Send it a default value, the length of the field, and a set of
    Char containing all the valid Characters For the field.

    }
    Uses uInput,Crt;

    Function getName : String;
    Const
      nameMax = 20;
    Var
      Count    : Integer;
      attrsave : Byte;
    begin
      GotoXY(12, 2);
      Write('ENTER NAME:');
      attrsave := TextAttr;
      TextColor(0);
      TextBackground(7);
      GotoXY(26, 2);
      for Count := 1 to nameMax do
        Write(' ');  {draw inverse field}
      GotoXY(26, 2);
      getName  := input('Nobody', nameMax, ['A'..'Z','a'..'z','.',' ']);
      Textattr := attrsave;
    end;

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

    {uInput}
    {by Sean Palmer}
    {released to the public domain}
     {2237 Lincoln St.}
     {Longmont, CO 80501}
    {Alms gladly accepted! 8) }

    Unit uInput;
    {$B-,I-,N-,O-,R-,S-,V-,X-}

    Interface

    {tCharSet is used to specify Function keys to the input routine}
    Type
      tCharSet = set of Char;

    Function isKey : Boolean;
    Inline(
     $B4/$B/   {mov ah,$B}
     $CD/$21/  {int $21}
     $24/$FE); {and al,$FE}

    Function getKey : Char;
    Inline(
     $B4/7/    {mov ah,7}
     $CD/$21); {int $21}

    Function input(default : String; maxCh : Byte; cs : tCharSet) : String;

    Implementation

    Function input(default : String; maxCh : Byte; cs : tCharSet) : String;
    Var
      p : Byte;
      c : Char;
      s : String[255];
    begin
      s := default;
      Repeat
        c := getKey;
        if c = #0 then
          c := Char(Byte(getKey) or $80);
        Case c of
          ^H :
            if s[0] <> #0 then
            begin
              Write(^H, ' ', ^H);
              dec(s[0]);
            end;
          #127 :
            begin
              For p := length(s) downto 1 do
                Write(^H, ' ', ^H);
                s[0] := #0;
              end;
          ^M : ; {don't beep}
          ' '..'~' :
            if length(s) < maxCh then
            begin
              Write(c);
              inc(s[0]);
              s[Byte(s[0])] := c;
            end
            else
              Write(^G);

          else
            if c in cs then
            begin
              s[1] := c;
              s[0] := #1;
              c    := ^M;
            end
            else
              Write(^G);
        end;
      Until (c = ^M) or (c = ^[);

      if c = ^[ then
        input := default
      else
        input := s;

    end;

    end.

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