      PROGRAM u2dumpz
C
C  pgf77 -o u2dumpz u2dumpz.f u2sub.f
C
C  read entire zone file (direct access, unformatted)
C  write out stars to ASCII file (all items, limiting magnitude option)
C
C  030429 NZ create
C  030601 NZ use limiting magnitude

      IMPLICIT NONE
      INTEGER  idat(25)
      CHARACTER*40 pathz, fnbase, fnout, answer
      CHARACTER  a1*1
      INTEGER  zn, jb, i,nt,ns, un, j, limm
      LOGICAL  only_rd, bf, errflg
      REAL*8   ra, dc

* defaults
      pathz = '/mnt/cdrom/u2/'    ! path name for input zone files
      fnbase= 'u2z'               ! base file name for output

      un = 11               ! unit number for read zone files
      only_rd = .TRUE.      ! read original zone files here, no creation
      limm = 1800           ! 1/100 mag for output limiting magnitude

* interactive
      WRITE (*,'(/a,a,$)') 'pathz  = ',pathz
      READ (*,'(a)') answer
      IF (answer.NE.' ') pathz = answer

      WRITE (*,'(a,$)') 'byte flip (y/n) ? '
      READ (*,'(a)') a1
      IF (a1.EQ.'y'.OR.a1.EQ.'Y') THEN 
        bf = .TRUE.
      ELSE
        bf = .FALSE.
      ENDIF

      WRITE (*,'(a,a,$)') 'fnbase = ',fnbase
      READ (*,'(a)') answer
      IF (answer.NE.' ') fnbase= answer

      WRITE (*,'(a,i5,a,$)') 'lim.mag=',limm,' (1/100 mag) '
      READ (*,'(a)') answer
      IF (answer.NE.' ') READ(answer,*) limm

      jb = INDEX (fnbase,' ') - 1

       WRITE (*,'(/a)') 'exit with zn less equal 0'
* loop zones

 101  WRITE (*,'(a,$)') 'zn = '
      READ*, zn
      IF (zn.LE.0) GOTO 99

      WRITE (fnout,'(a,i3.3)') fnbase(1:jb),zn
      WRITE (*,'(a,a)') 'ASCII output to ',fnout
      OPEN (20,FILE=fnout)

      CALL open_zfile (pathz,un,zn, only_rd)
      ns = 0
      nt = 0

      DO i=1,999000
        CALL read_u2line (un,i,bf,idat,errflg)
        IF (errflg) GOTO 91

        nt = nt + 1

        IF (idat(3).LE.limm) THEN          ! limmiting magnitude
          ns = ns + 1

CC        ra = DFLOAT (idat(1)) / 5.4d7      ! mas -> hour
CC        dc = DFLOAT (idat(2)) / 3.6d6      ! mas -> degree

CC        WRITE (20,'(2i11,i5,f10.6,f10.5)') 
CC   .     idat(1), idat(2), idat(3), ra,dc

          WRITE (20,'(i10,i11,i5,2i4,4i3,2i6,i8,i6
     .               ,2i4,2i4,i11,3i6,2i4.3)')
     .      (idat(j),j=1,23)
        ENDIF
      ENDDO

  91  CLOSE (20)
      WRITE (*,'(a,i6)') 'numb.stars input = ',nt
      WRITE (*,'(a,i6)') 'numb.stars output= ',ns
      GOTO 101

  99  WRITE (*,'(a)') 'end of <u2dumpz>'
      END

