{The two procedures which are included are intended to allow you to place the cursor on a field, specify the field's size, and obtain its input. This is written for MS-DOS and PC-DOS systems, but may also work in CP/M environments. Variables to be declared are: Field : String[n] Where n = maximum field size to be input; Place,FieldSize : Integer; (Place points to where you are in the field) Result : Integer; (Indicates error in numeric conversion) Ch : Char; Cursor : Char; (an underscore (_) for example) Note that you can include error conditions in I/O checking by passing the value of Result to your Error Trapping routines. You will need to set FieldSize prior to calling InputField, and you should reset Field to '' after assigning it to your input variable. StripBlanks is used if you are getting Numeric input. These procedures should be handy if you are using formatted screen input, such as invoice forms, time sheets, etc. written by Ken McClure 75156,2641 } Program Input; var Field : String[10]; FieldSize : Integer; Ch : Char; TestFieldOne : String[8]; TestFieldTwo : Integer; Result : Integer; Place : Integer; Cursor : Char; procedure InputField; label Bypass; begin Field := ''; Place := 0; Repeat Read(Kbd,Ch); If Length(Field)<=FieldSize then begin Case Ch of #8 : begin {BackSpace key} If Place=0 then begin {avoid backspacing beyond} Write(Trm,Chr(8)); {beginning of field } Write(' '); end else begin Delete(Field,Place,1); {destructive backspace} Place := Place-1; Write(Trm,Chr(8)); Write(Cursor); Write(Trm,Chr(8)); end; end; #127 : begin; {Delete Key} If Place=0 then begin {avoid backspacing beyond} Write(Trm,Chr(8)); {beginning of field again} Write(' '); end else begin Delete(Field,Place,1); {destructive backspace} Place := Place-1; Write(Trm,Chr(8)); Write(Cursor); Write(Trm,Chr(8)); end; end; #13 : begin {Carraige Return--End of input} GoTo Bypass; {for this field } end; else If Length(Field) Chr(13) then Write(Chr(7)); {Ring bell at terminal if at end of} end; {field and no RETURN key pressed } ByPass: end; end; Until Ch=Chr(13); end; procedure StripBlanks; {don't use on Alpha-numeric fields...} {blanks there may be valid } begin Repeat Place := Pos(' ',Field); Delete(Field,Place,1); Place := Pos(' ',Field); Until Place=0; end; begin {little sample program} ClrScr; Write('What do you use to delineate fields? (e.g., "_") :'); Read(Cursor); GoToXY(30,4); Write('Test Input'); GoToXY(10,6); Write('Alpha Data: '); GoToXY(30,6); FieldSize := 8; For Place := 1 to FieldSize do begin Write(Cursor); end; GoToXY(30,6); InputField; TestFieldOne := Field; Field := ''; GoToXY(10,8); Write('Numeric Data: '); GoToXY(30,8); FieldSize := 4; For Place := 1 to FieldSize do begin Write(Cursor); end; GoToXY(30,8); InputField; StripBlanks; Val(Field,TestFieldTwo,Result); Field := ''; end.