PROCEDURE DELETE((* source *) VAR argument : DSTRING; (* starting *) posn, (* # chars *) span : integer ); { last modified: 7/11/81 } {++++++++++++++++++++++++++++++++++++++++++++++++} {+ Returns: +} {+ argument with span characters deleted +} {+ Errors: +} {+ returns argument string intact +} {++++++++++++++++++++++++++++++++++++++++++++++++} label 1;{ error exit } var len: integer; overage: integer; begin len := length(argument); { check for valid parameters first } if ( posn<1 ) or ( posn>len ) or ( span<1 ) then {QUIT} goto 1; { is the entire string being deleted? } if ( posn=1 ) and ( span>=len ) then begin setlength(argument,0); { argument := ''; } {terminate} goto 1 end; { check for excess span } if (posn+span-1)>len then begin { overage } overage := (posn+span-1) - len; span := span - overage end; { Move chars as long as Movefrom <= len } { Movefrom := (posn + span); } Repeat argument[posn] := argument[posn+span]; posn := posn + 1; Until ( (posn+span)>len ); posn := posn - 1;{ qualify posn } setlength( argument, posn ); 1:{terminate}; end{ of DELETE };  ( (posn+span)>len ); posn := posn - 1;{ qualify posn } setlength( ar