FUNCTION COPY({ FROM } THIS : MSTRING ; {STARTING AT} POSN : INTEGER ; {# OF CHARS } LEN : INTEGER ): DSTRING; { EXAMPLE: NEW := COPY(NBUF, NAME_ADDR, NAME_LEN); NEW := COPY(NAME,5,12); NAME := COPY(NAME,2,3); REQUIRES THE FOLLOWING GLOBAL DEFINITIONS: CONST DEFAULT = 80; << DEFAULT line length >> SMAX = 255; << MAXIMUM LENGTH OF A STRING >> TYPE DSTRING = STRING DEFAULT; MSTRING = STRING SMAX; } VAR ix : 1..SMAX; dest : DSTRING; begin setlength(dest,0); If ( (len+posn) > DEFAULT ) then { return argument string unchanged since the argument string may be the destination string also. } dest := THIS else begin If ( (len+posn-1) <= length(this) ) and (len > 0) and ( posn > 0) then for ix:=1 to len do append( DEST, THIS[posn+ix-1]) end; COPY := dest end {of COPY}; en