[Back to ENTRY SWAG index] [Back to Main SWAG index] [Original]
uses
crt;
type
input_data = record
st : string; { The string to be input }
col,row, { position of input }
attr, { color of input }
flen : byte; { maximum length of input }
prompt : string[40];
end;
const
NumberOfFields = 3;
BackSpace = $08;
Enter = $0d;
Escape = $1b;
space = $20;
var
InputField : array[1..NumberOfFields] of input_data;
x : byte;
Done : boolean;
field : byte;
Procedure SetInputField(VAR inpRec : Input_data;
S : STRING;
C,R : Byte;
A,L : Byte;
P : String);
BEGIN
With inpRec DO
BEGIN
St := S;
Col := C;
Row := R;
Attr := A;
fLen := L;
Prompt := P;
END;
END;
procedure GetStr(var inprec: input_data; var f: byte; var finished: boolean);
var
spstr : string; { just a string of spaces }
x,y,
oldattr: byte;
ch : char;
chval : byte absolute ch;
len : byte absolute inprec;
begin
with inprec do begin
FillChar(spstr,sizeof(spstr),32); spstr[0] := chr(flen);
y := row; x := col + length(prompt);
oldattr := TextAttr; finished := false;
gotoXY(col,row); write(prompt);
TextAttr := attr;
repeat
gotoXY(x,y); write(st,copy(spstr,1,flen-len)); gotoXY(x+len,y);
ch := ReadKey;
case chval of
0 : ch := ReadKey;
Enter : begin
inc(f);
if f > NumberOfFields then f := 1;
TextAttr := oldattr;
exit;
end;
BackSpace : if len > 0 then
dec(len);
Escape : begin { the escape key is the only way to halt }
finished := true;
TextAttr := oldattr;
exit;
end;
32..255 : if len <> flen then begin
inc(len);
st[len] := ch;
end;
end; { case }
until false; { procedure only exits via exit statements }
end; { with }
end; { GetStr }
begin
Clrscr;
SetInputField(InputField[1],'',12,10,31,20,'Your Name : ');
SetInputField(InputField[2],'',12,11,31,20,'Your Address : ');
SetInputField(InputField[3],'',12,12,31,20,'City,State : ');
field := 1;
repeat
GetStr(InputField[field],field,Done);
until Done;
end.
[Back to ENTRY SWAG index] [Back to Main SWAG index] [Original]