	subroutine update(fixed_length,irecords)
	implicit integer (a-z)
	integer*2 length,size
	data size /32768/
	logical old,new,reverse_on
	common /rflag/ reverse_on

	byte new_buffer(32776),buffer(32768),old_buffer(32768)

	equivalence (irec,new_buffer(3))
	equivalence (new_buffer(9),buffer)
	common /buf/ new_buffer

	external std_seq_put,std_seq_get,std_seq_useropen,rms$_eof

	logical fixed_length

	irecords=1

	open(unit=11,name='fdmpwork3',type='old',form='unformatted',
     1		useropen=std_seq_useropen)

 10	irec=0
	new=.false.
	old=.false.
	istat=std_seq_get(11,size,new_buffer,length)
	if (istat.eq.%loc(rms$_eof)) goto 20
	if (.not. istat) call lib$stop(%val(istat))
 20	if (irec.eq.irecords) new=.true.
	if (.not. new) then
		call get_record(3,old_buffer,size,length_total,
     1					istatus,fixed_length)
		if (istatus.eq.%loc(rms$_eof)) goto 9000
!
! if reversing must reverse old file's input, since we never did
!
		if (reverse_on) then
			len1=length_total/2
			call std_swap_bytes(len1,old_buffer)
		 endif
		call put_record(4,old_buffer,size,length_total,
     1				fixed_length)
		irecords=irecords+1
		goto 20
	 else
		ilength=length-8
		call put_record(4,buffer,size,ilength,fixed_length)
!
! skip old files input
!
		call get_record(3,buffer,size,length_total,
     1					kstatus,fixed_length)
		irecords=irecords+1
		goto 10
	 endif
 9000	continue
	close(unit=11,dispose='delete')
	irecords=irecords-1
	return
	end
