{$IFDEF VER70} {$A+,B-,D-,E-,F-,G-,I-,L-,N-,O-,P-,Q-,R-,S+,T-,V-,X-} {$ELSE} {$A+,B-,D-,E-,F-,G-,I-,L-,N-,O-,R-,S+,V-,X-} {$ENDIF} {$M 8192,0,0} Unit Edit; INTERFACE Uses Crt; Const BS = #8; CR = #13; SP = #32; Esc = #27; LeftKey = #75; HomeKey = #71; RightKey = #77; EndKey = #79; InsKey = #82; DelKey = #83; Procedure GetString(Size : Byte ; Var Str : String;Fill : Char); IMPLEMENTATION {----------------------------------------------------------------------------} Procedure GetString(Size : Byte ; Var Str: String;Fill : Char); Var CurrLen : Byte absolute Str; X, Y, CurrPos : Byte; Insert : Boolean; I : Integer; T : Char; Begin {GetString} Insert := True; X := WhereX; {X-pos of first char} Y := WhereY; CurrLen := 0; CurrPos := 0; {position of current char} Repeat GotoXY(X,Y); Write(Str); For I := CurrLen+1 To Size Do Write(Fill); {filler on screen} GotoXY(X+CurrPos,Y); T := ReadKey; If T = #0 Then {special keys <-, ->, Ins, Home, End, Del} Begin {If} T := ReadKey; Case T Of LeftKey : If CurrPos > 0 Then Dec(CurrPos); RightKey : If (CurrPos < CurrLen) And (CurrPos < Size) Then Inc(CurrPos); InsKey : Insert := Not Insert; HomeKey : CurrPos := 0; EndKey : CurrPos := CurrLen; DelKey : If CurrLen > CurrPos Then Begin {If} For I := CurrPos+1 To CurrLen-1 Do Str[I] := Str[I+1]; Dec(CurrLen) End {If} End {Case T Of} End {If} Else Begin {Else} Case T Of BS : If CurrPos > 0 Then {delete currpos} Begin {If} For I := CurrPos To CurrLen-1 Do Str[i] := Str[i+1]; Dec(CurrPos); Dec(CurrLen) End; {If} SP..'~' : If CurrLen < Size Then {add new character} Begin {If} Inc(CurrPos); If insert Then Begin {If} For I := CurrLen DownTo CurrPos Do Str[i+1] := Str[i]; Inc(CurrLen) End; Str[CurrPos] := T End; {If} End; {Case T Of} End; {Else} Until (T = CR) or (T = Esc); If T = Esc Then Halt; WriteLn; End {GetString}; {----------------------------------------------------------------------------} End. {Edit Unit} Program TestEdit; Uses Crt, Edit; Type TRec = Record First, Mid, Last, Add, City, State, Zip : String; End; {TRec} Var T : TRec; Ch, Fill : Char; {----------------------------------------------------------------------------} Procedure Init(Var T : TRec); Begin {Init} T.Last := ''; T.Mid := ''; T.First := ''; T.Add := ''; T.City := ''; T.State := ''; T.Zip := ''; End; {Init} {----------------------------------------------------------------------------} Begin {Main} Fill := '±'; Init(T); TextBackGround(Blue); TextColor(15); ClrScr; GotoXY(1,5); Write('FIRST NAME : '); TextColor(7); GetString(20, T.First, Fill); TextColor(15); Write('MIDDLE NAME : '); TextColor(7); GetString(20, T.Mid, Fill); TextColor(15); Write('LAST NAME : '); TextColor(7); GetString(20, T.Last, Fill); TextColor(15); Write('ADDRESS : '); TextColor(7); GetString(40, T.Add, Fill); TextColor(15); Write('CITY : '); TextColor(7); GetString(30, T.City, Fill); TextColor(15); Write('STATE : '); TextColor(7); GetString(5, T.State, Fill); TextColor(15); Write('ZIP-CODE : '); TextColor(7); GetString(10, T.Zip, Fill); TextBackGround(Black); TextColor(LightGray); ClrScr; GotoXY(1,5); WriteLn(T.First,' ',T.Mid,' ',T.Last); WriteLn(T.Add); WriteLn(T.City,', ',T.State,' ',T.Zip); WriteLn; WriteLn('Good-Bye'); WriteLn; WriteLn('Press any key...'); Ch := ReadKey; End. {Main}