Unit StringShift; {written by Russ Whitaker, } interface { s is source string; start is start of hole; siz is width of hole} procedure StringShiftRight( var s: string; start, siz: integer ); {open hole} procedure StringShiftLeft( var s: string; start, siz: integer ); {close hole} implementation procedure StringShiftRight( var s: string; start, siz: integer ); var i : integer; begin if ( length( s ) + siz ) < s.CAPACITY then i := length( s ) + siz else i := s.CAPACITY; {$X+} SetLength( s, i ); {$X-} MoveRight( s[ start ], s[ start + siz ], i - start - siz + 1 ); end; procedure StringShiftLeft( var s: string; start, siz: integer ); var i,j: integer; begin i := start + siz; if ( length( s ) > i ) then begin MoveLeft( s[ i ], s[ start ], length( s) - i + 1 ); {$X+} SetLength( s, length( s ) - siz ); {$X-} end else {$X+} SetLength( s, start - 1 ); {$X-} end; end.