function write_gcparm,gcparm,tls,msglun=msglun

   IF (NOT keyword_set(msglun)) THEN msglun = 0

   ; Strip out year and doy from yrday string, to use as arguments to
   ; CVDOY routine.  CVDOY returns a three element array with year, month,
   ; and day, all numeric.
   year = strmid(tls.yrday,0,4)
   doy = strmid(tls.yrday,5,3)
   out = cvdoy(year,doy)

   ; Read the time/label string time data into numerical variables
   reads,tls.yrday+tls.timstr,yr,day,hr,mn,format='(I4,1X,I3,1X,I2,1X,I2)'

   ; Convert to a double-precision number with the time encoded as
   ; decimal day, then divided by 1000 to add to year.day formatted
   ; number [e.g. 1998.023 + ((hr+mn/60)/24)/1000].  This will be
   ; compared to similar numbers in an existing .OFF file to find
   ; where the current entry should be inserted.
   yrday = double(yr)+double(day + (hr+mn/60.d0)/24.d0)/1.d3

   ; Create filename from elements
   filename = !defaults.dbdir + $
              string(out(0),out(1),format='(I4,I2.2)') + '.GNP'

   ; See if the filename already exists and act accordingly
   f = findfile(filename,count=n)
   if (n ne 0) then begin
      ; File exists.  Open it for reading.
      openr,lun,/get_lun,filename
      line = ' '
      ; Read and save header lines into OUT array
      hline1 = (hline2 = (hline3 = line))
      readf,lun,hline1
      readf,lun,hline2
      readf,lun,hline3
      out = [hline1,hline2,hline3]
      ans = 'No'

      ; Go through the entries in the file one at a time until EOF is
      ; reached.
      while (NOT eof(lun)) do begin

         ; Read a line and convert its time label to year.day as above
         readf,lun,line
         reads,line,lyr,lday,lhr,lmn,format='(I4,1X,I3,1X,I2,1X,I2)'
         lyrday = double(lyr)+double(lday + (lhr+lmn/60.d0)/24.d0)/1.d3

         ; Compare this entry with the new entry to be inserted
         if (lyrday lt yrday) then begin

            ; The new entry is after this one, so just save the line into
            ; the OUT array as is and continue.
            out = [out,line]

         endif else if (lyrday eq yrday) then begin

            ; Assume overwrite if routine was called from a command
            ; file (as indicated by msglun).
            if (msglun NE 0) then ans = 'Yes' else begin

               ; There is already an entry in the file for this
               ; date/time.  Ask the user whether to overwrite it.
               ; This should only happen when the entry is being
               ; redone off-line.
               ans = widget_message(['An entry already exists in '+$
                  filename,'Would you like to overwrite it?'],/QUESTION)

            endelse

            if (ans eq 'Yes') then begin

               ; The user wants to overwrite the line, so insert the
               ; current entry into the out array and continue.
               out = [out,string(tls.yrday,tls.timstr,gcparm,$
                                      format='(A8,A9,5(1X,6f6.3))')]
            endif else begin

               ; The user does not want to overwrite the line, so
               ; write nothing and bail out.
               free_lun,lun
               return,-1
            endelse
         endif else begin

            ; This entry is after the new entry.  If this is the first
            ; entry after the new entry then ans = 'No', so insert the
            ; new entry ahead of it, copy this entry to the OUT
            ; array, set ans = 'Yes', and continue.
            if (ans eq 'No') then begin
               out = [out,string(tls.yrday,tls.timstr,$
                      gcparm,format='(A8,A9,5(1X,6f6.3))'),line]
               ans = 'Yes'
            endif else begin
               out = [out,line]
            endelse
         endelse
      endwhile

      ; We have reached the end of the file.  Either the ans string
      ; is 'Yes' indicating that the line is already written, or it
      ; is 'No' indicating that the new entry is to be written at the
      ; end of the file.  In the latter case, write it to the OUT array.
      if (ans eq 'No') then out = [out,string(tls.yrday,tls.timstr,$
                                   gcparm,format='(A8,A9,5(1X,6f6.3))')]

      free_lun,lun

      ; Open a new file (this deletes the old one) and write the
      ; completed OUT array to it.
      openw,lun,/get_lun,filename
      printf,lun,out,format='(A)'
      free_lun,lun
   endif else begin

      ; File does not already exist, so just open a new file and write
      ; the entry to it.
      openw,lun,/get_lun,filename

      ; Write out the header lines
      hline1 = '--Date-- --Time--  -------------Antenna 1-------------'+$
                                '  -------------Antenna 2-------------'+$
                                '  -------------Antenna 4-------------'+$
                                '  -------------Antenna 5-------------'+$
                                '  -------------Antenna 6-------------'
      hline2 = 'YYYY.DOY HH:MM:SS  Nonln  5 DB 10 DB 20 DB 20*DB RESID'+$
                                '  Nonln  5 DB 10 DB 20 DB 20*DB RESID'+$
                                '  Nonln  5 DB 10 DB 20 DB 20*DB RESID'+$
                                '  Nonln  5 DB 10 DB 20 DB 20*DB RESID'+$
                                '  Nonln  5 DB 10 DB 20 DB 20*DB RESID'
      hline3 = '-------- --------  ----- ----- ----- ----- ----- -----'+$
                                '  ----- ----- ----- ----- ----- -----'+$
                                '  ----- ----- ----- ----- ----- -----'+$
                                '  ----- ----- ----- ----- ----- -----'+$
                                '  ----- ----- ----- ----- ----- -----'

      printf,lun,[hline1,hline2,hline3],format='(a)'
      printf,lun,string(tls.yrday,tls.timstr,$
              gcparm,format='(A8,A9,5(1X,6f6.3))')
      free_lun,lun
   endelse

return,0
en