LCOV - code coverage report
Current view: top level - atnf/rpfits - atio.f (source / functions) Hit Total Coverage
Test: ctest_coverage.info Lines: 40 99 40.4 %
Date: 2023-11-06 10:06:49 Functions: 5 10 50.0 %

          Line data    Source code
       1             : C-----------------------------------------------------------------------
       2             : C   atio.f: Input/output routines for RPFITS under linux.
       3             : C-----------------------------------------------------------------------
       4             : C
       5             : C   Notes:
       6             : C     1) Cloned from the sun4sol version with tape handling stripped
       7             : C        out.
       8             : C
       9             : C   $Id: atio.f,v 1.6 2007/07/16 01:11:50 cal103 Exp $
      10             : C-----------------------------------------------------------------------
      11             : 
      12             : 
      13             : 
      14           0 :       integer function AT_CREATE (fname, async, initsz, lun)
      15             : C-----------------------------------------------------------------------
      16             :       byte      bufsav(2560)
      17             :       logical   async, reread
      18             :       integer   initsz, irec(10:99), lenrec(10:99), lun, lunsav
      19             :       integer   istat, GETLUN
      20             :       character fname*(*)
      21             : 
      22             :       common /atio/ lenrec, irec, reread, lunsav, bufsav
      23             :       save /atio/
      24             : C-----------------------------------------------------------------------
      25           0 :       AT_CREATE = 0
      26           0 :       if (fname(1:5).eq.'/dev/') then
      27           0 :          AT_CREATE = 1
      28             : 
      29             :       else
      30           0 :          istat = GETLUN(lun)
      31           0 :          lenrec(lun) = 2560
      32             :          open (lun, file=fname, status='new', access='direct',
      33           0 :      +      form='unformatted', recl=lenrec(lun), iostat=AT_CREATE)
      34             : 
      35           0 :          irec(lun) = 1
      36             :       endif
      37           0 :       reread = .false.
      38             : 
      39           0 :       return
      40           0 :       end
      41             : 
      42             : 
      43             : 
      44           0 :       integer function AT_REOPEN_WRITE (fname, lun)
      45             : C-----------------------------------------------------------------------
      46             : C     REOPEN file - on disk only.
      47             : C-----------------------------------------------------------------------
      48             :       byte      bufsav(2560)
      49             :       logical   reread
      50             :       integer   irec(10:99), lenrec(10:99), lun, lunsav
      51             :       character fname*(*)
      52             : 
      53             :       common /atio/ lenrec, irec, reread, lunsav, bufsav
      54             :       save /atio/
      55             : C-----------------------------------------------------------------------
      56           0 :       AT_REOPEN_WRITE = 0
      57             : 
      58             :       open (lun, file=fname, status='old', access='direct',
      59             :      +      form='unformatted', recl=lenrec(lun),
      60           0 :      +      iostat=AT_REOPEN_WRITE)
      61             : 
      62           0 :       return
      63           0 :       end
      64             : 
      65             : 
      66             : 
      67           2 :       integer function AT_OPEN_READ (fname, async, lun)
      68             : C-----------------------------------------------------------------------
      69             : C     "READONLY" is non-standard. Had to remove it.
      70             : C-----------------------------------------------------------------------
      71             :       byte      bufsav(2560)
      72             :       logical   async, reread
      73             :       integer   irec(10:99), lenrec(10:99), lun, lunsav
      74             :       integer   istat, GETLUN
      75             :       character fname*(*)
      76             : 
      77             :       common /atio/ lenrec, irec, reread, lunsav, bufsav
      78             :       save /atio/
      79             : C-----------------------------------------------------------------------
      80           2 :       AT_OPEN_READ = 0
      81           2 :       if (fname(1:5).eq.'/dev/') then
      82           0 :          AT_OPEN_READ = 1
      83             :       else
      84           2 :          istat = GETLUN(lun)
      85           2 :          lenrec(lun) = 2560
      86             :          open (lun, file=fname, status='old', access='direct',
      87           2 :      +      form='unformatted', recl=lenrec(lun), iostat=AT_OPEN_READ)
      88           2 :          if (AT_OPEN_READ.ne.0) then
      89           0 :             lenrec(lun) = 512
      90             :             open (lun, file=fname, status='old', access='direct',
      91             :      +         form='unformatted', recl=lenrec(lun),
      92           0 :      +         iostat=AT_OPEN_READ)
      93             :          end if
      94             : 
      95           2 :          irec(lun) = 1
      96             :       end if
      97           2 :       reread = .false.
      98             : 
      99           2 :       return
     100           2 :       end
     101             : 
     102             : 
     103             : 
     104           0 :       integer function AT_WRITE (lun, buffer, nbytes)
     105             : C-----------------------------------------------------------------------
     106             :       byte      buffer(2560), bufsav(2560)
     107             :       logical   reread
     108             :       integer   irec(10:99), lenrec(10:99), lun, lunsav
     109             :       integer   nbytes
     110             : 
     111             :       common /atio/ lenrec, irec, reread, lunsav, bufsav
     112             :       save /atio/
     113             : C-----------------------------------------------------------------------
     114           0 :       AT_WRITE = 0
     115             : 
     116           0 :       write (lun, rec=irec(lun), iostat=AT_WRITE) buffer
     117           0 :       irec(lun) = irec(lun) + 1
     118             : 
     119           0 :       return
     120             :       end
     121             : 
     122             : 
     123             : 
     124       23626 :       integer function AT_READ (lun, buffer)
     125             : C-----------------------------------------------------------------------
     126             :       byte      buffer(2560), bufsav(2560)
     127             :       logical   reread
     128             :       integer   irec(10:99), j, lenrec(10:99), lun, lunsav
     129             : 
     130             :       common /atio/ lenrec, irec, reread, lunsav, bufsav
     131             :       save /atio/
     132             : C-----------------------------------------------------------------------
     133             : C     Read the next record or restore the last.
     134       23626 :       if (reread) then
     135             : C        Check consistency of the input files.
     136           0 :          if (lun.ne.lunsav) then
     137           0 :             AT_READ = 999
     138           0 :             go to 999
     139             :          end if
     140             : 
     141             : C        Copy the buffer saved by AT_UNREAD to the input buffer.
     142           0 :          do 10 j = 1, 2560
     143           0 :             buffer(j) = bufsav(j)
     144           0 :  10      continue
     145           0 :          reread = .false.
     146           0 :          AT_READ = 0
     147             : 
     148       23626 :       else if (lenrec(lun).eq.2560) then
     149             : C        Get the next 2560-byte record.
     150       23626 :          read (lun, rec=irec(lun), iostat=AT_READ) buffer
     151             : C        Increment record number only if read OK
     152       23626 :          if (AT_READ.eq.0) then
     153       23625 :             irec(lun) = irec(lun) + 1
     154             :          else
     155             : C           Not sure about this!
     156           1 :             AT_READ = -1
     157             :          end if
     158             : 
     159             :       else
     160             : C        Get the next five 512-byte records.
     161             :          read (lun, rec=irec(lun), iostat=AT_READ)
     162           0 :      +      (buffer(j), j=1,512)
     163           0 :          if (AT_READ.eq.0) read (lun, rec=irec(lun)+1,
     164           0 :      +      iostat=AT_READ) (buffer(j), j=513,1024)
     165           0 :          if (AT_READ.eq.0) read (lun, rec=irec(lun)+2,
     166           0 :      +      iostat=AT_READ) (buffer(j), j=1025,1536)
     167           0 :          if (AT_READ.eq.0) read (lun, rec=irec(lun)+3,
     168           0 :      +      iostat=AT_READ) (buffer(j), j=1537,2048)
     169           0 :          if (AT_READ.eq.0) read (lun, rec=irec(lun)+4,
     170           0 :      +      iostat=AT_READ) (buffer(j), j=2049,2560)
     171           0 :          irec(lun) = irec(lun) + 5
     172             :       end if
     173             : 
     174             :  999  continue
     175       23626 :       return
     176             :       end
     177             : 
     178             : 
     179             : 
     180           0 :       integer function AT_SKIP_EOF (lun)
     181             : C-----------------------------------------------------------------------
     182             : C     Returns -1 if successfully skipped to EOF, otherwise error.
     183             : C-----------------------------------------------------------------------
     184             :       byte      buffer(2560), bufsav(2560)
     185             :       logical   reread
     186             :       integer   irec(10:99), lenrec(10:99), lun, lunsav
     187             : 
     188             :       common /atio/ lenrec, irec, reread, lunsav, bufsav
     189             :       save /atio/
     190             : C-----------------------------------------------------------------------
     191           0 :       AT_SKIP_EOF = 0
     192           0 :       do while (AT_SKIP_EOF.ne.-1)
     193           0 :          read (lun, rec=irec(lun), iostat=AT_SKIP_EOF) buffer
     194           0 :          irec(lun) = irec(lun) + 1
     195             :       end do
     196           0 :       reread = .false.
     197             : 
     198             :       continue
     199           0 :       return
     200             :       end
     201             : 
     202             : 
     203             : 
     204           0 :       integer function AT_UNREAD (lun, buffer)
     205             : C-----------------------------------------------------------------------
     206             :       byte      buffer(2560), bufsav(2560)
     207             :       logical   reread
     208             :       integer   irec(10:99), j, lenrec(10:99), lun, lunsav
     209             : 
     210             :       common /atio/ lenrec, irec, reread, lunsav, bufsav
     211             :       save /atio/
     212             : C-----------------------------------------------------------------------
     213             : C     Save the buffer for "rereading".
     214           0 :       reread = .true.
     215           0 :       lunsav = lun
     216           0 :       do 10 j = 1, 2560
     217           0 :          bufsav(j) = buffer(j)
     218           0 :  10   continue
     219             : 
     220           0 :       AT_UNREAD = 0
     221             : 
     222           0 :       return
     223             :       end
     224             : 
     225             : 
     226             : 
     227           2 :       integer function AT_CLOSE (lun)
     228             : C-----------------------------------------------------------------------
     229             :       byte      bufsav(2560)
     230             :       logical   reread
     231             :       integer   FREELUN, irec(10:99), istat, lenrec(10:99), lun,
     232             :      +          lunsav
     233             : 
     234             :       common /atio/ lenrec, irec, reread, lunsav, bufsav
     235             :       save /atio/
     236             : C-----------------------------------------------------------------------
     237           2 :       close (lun, iostat=AT_CLOSE)
     238           2 :       istat = FREELUN(lun)
     239             : 
     240           2 :       return
     241             :       end
     242             : 
     243             : 
     244             : 
     245           2 :       integer function GETLUN (lun)
     246             : C-----------------------------------------------------------------------
     247             : C     Get a logical unit number.
     248             : C
     249             : C     FORTRAN logical unit numbers are returned in the range 10 to 99.
     250             : C-----------------------------------------------------------------------
     251             :       logical   isopen
     252             :       integer   j, fluns(10:99), lun
     253             : 
     254             :       common /lunlst/ fluns
     255             :       save /lunlst/
     256             : C-----------------------------------------------------------------------
     257           2 :       GETLUN = -1
     258           2 :       lun = -1
     259             : 
     260           2 :       do 10 j = 99, 10, -1
     261           2 :          if (fluns(j).eq.0) then
     262             : C           Has it already been opened outside RPFITS.
     263           2 :             inquire (unit=j, opened=isopen)
     264           2 :             if (isopen) go to 10
     265             : 
     266           2 :             lun = j
     267           2 :             fluns(j) = -1
     268           2 :             GETLUN = 0
     269           2 :             goto 999
     270             :          end if
     271           0 :  10   continue
     272             : 
     273           2 :  999  return
     274             :       end
     275             : 
     276             : 
     277             : 
     278           2 :       integer function FREELUN (lun)
     279             : C-----------------------------------------------------------------------
     280             : C     Free a logical unit number allocated by GETLUN.
     281             : C-----------------------------------------------------------------------
     282             :       integer   lun, fluns(10:99)
     283             : 
     284             :       common /lunlst/ fluns
     285             :       save /lunlst/
     286             : C-----------------------------------------------------------------------
     287           2 :       FREELUN = 0
     288             : 
     289           2 :       if (lun.ge.10 .and. lun.le.99) then
     290           2 :          fluns(lun) = 0
     291             :       else
     292           0 :          FREELUN = -1
     293             :       end if
     294             : 
     295           2 :       return
     296             :       end
     297             : 
     298             : 
     299             : 
     300             :       block data
     301             : C-----------------------------------------------------------------------
     302             : C     Initialise logical unit number lists.
     303             : C-----------------------------------------------------------------------
     304             :       integer   fluns(10:99)
     305             : 
     306             :       common /lunlst/ fluns
     307             :       data  fluns /90*0/
     308             :       save /lunlst/
     309             : C-----------------------------------------------------------------------
     310             :       end

Generated by: LCOV version 1.16