PROCEDURE INSERT((* pattern *) SSTRN: MSTRING; (* dest *) VAR DESSTRN: DSTRING; (* position*) POSN : integer); {++++++++++++++++++++++++++++++++++++++++++++++} {+ inserts the string SSTRN into the string +} {+ DESSTRN at position POSN. +} {++++++++++++++++++++++++++++++++++++++++++++++} VAR rpart: MSTRING; BEGIN If ( length(DESSTRN)+length(SSTRN) <= DEFAULT ) then begin { seperate destination string into left and right parts. } { first extract the right part. } rpart := COPY(DESSTRN,POSN,(length(DESSTRN)-POSN+1)); { next take left part of DESSTRN. } setlength(DESSTRN,(POSN-1)); { new := left + substring + right } append(DESSTRN,SSTRN); append(DESSTRN, rpart); end; { else do nothing. leave DESSTRN as it was. } END; { of INSERT } d(DESSTRN,SSTRN); append(DESSTRN, rpart); e