home *** CD-ROM | disk | FTP | other *** search
- {
- 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.
-