[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]