	subroutine delete(ibeg,iend)
	implicit integer (a-z)

	byte buffer(32768),edit_buffer(32768)
	common /buf/ buffer,edit_buffer,length_total

	logical quit,exit,confirm,edited

	common /eflags/ quit,exit,confirm,edited
!
! space for macro expansion 
!
	character*65535 string
	common /special/ string

	character*1 zero
	data zero /0/
	character*9 codes
	data codes /'XAOLWBFDH'/
	dimension isize(9)
	data isize /1,1,1,4,2,1,4,8,4/
!
! figure out byte numbers for starting deletion
!
	call startbyte(ibeg,istart_rep,max_end)

	if (istart_rep.le.0) return

	if (iend.gt.max_end) iend=max_end
!
! figure out length of deletion in bytes
!
	deletion_length=0
	length_string=index(string,zero)-1
	do i=ibeg,iend
		icode=index(codes,string(i:i))
		if (icode.le.0) goto 1000
		iadd=isize(icode)
		deletion_length=deletion_length+iadd
 1000		continue
	 enddo

	do i=istart_rep,length_total-deletion_length
		edit_buffer(i)=edit_buffer(i+deletion_length)
	 enddo

	length_total=length_total-deletion_length
	call special(edit_buffer,length_total,1,' ',1)

	return
	end
