aboutsummaryrefslogtreecommitdiff
path: root/vendor/x11iraf/ximtool/clients.old/lib/reopen.f
blob: f7a1c456af9bbfd2e840566e496b2b9e336a229a (plain) (blame)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
integer function reopen (fd, mode)
      integer fd
      integer mode
      logical Memb(1)
      integer*2 Memc(1)
      integer*2 Mems(1)
      integer Memi(1)
      integer*4 Meml(1)
      real Memr(1)
      double precision Memd(1)
      complex Memx(1)
      equivalence (Memb, Memc, Mems, Memi, Meml, Memr, Memd, Memx)
      common /Mem/ Memd
      integer newfp
      integer ffp
      integer newfd
      integer fgetfd
      integer*4 boffst(4096 )
      integer bufptr(4096 )
      integer buftop(4096 )
      integer iop(4096 )
      integer itop(4096 )
      integer otop(4096 )
      integer fiodes(4096 )
      integer fflags(4096 )
      integer redird(4096 )
      integer zdev(150 )
      integer nextdv
      integer fp
      integer*2 pathne(511 +1)
      logical xerflg
      common /xercom/ xerflg
      common /fiocom/ boffst, bufptr, buftop, iop, itop, otop, fiodes, 
     *fflags, redird, zdev, nextdv, fp, pathne
      save
         ffp = fiodes(fd)
         if (.not.(fd .le. 0 .or. ffp .eq. 0)) goto 110
            call syserr (733)
            if (xerflg) goto 100
110      continue
         if (.not.(memi(ffp+1) .eq. 1 .and. mode .ne. 1 )) goto 120
            call filerr (memc((((ffp+20+(10+256))-1)*2+1)) , 750)
120      continue
         if (.not.(memi(ffp+2) .ne. 12)) goto 130
            call filerr (memc((((ffp+20+(10+256))-1)*2+1)) , 751)
130      continue
         newfd = fgetfd (memc((((ffp+20+(10+256))-1)*2+1)) , mode, 12)
         newfp = fiodes(newfd)
         memi(newfp+3) = memi(ffp+3)
         memi(newfp+4) = memi(ffp+4)
         memi(newfp) = memi(ffp)
         if (.not.(memi(ffp+18) .eq. (ffp+20) )) goto 140
            call xmallc(memi(ffp+18) , (10+256), 10 )
            if (xerflg) goto 100
            call amovi (memi((ffp+20) ), memi(memi(ffp+18) ), (10+256))
140      continue
         memi(memi(ffp+18) ) = memi(memi(ffp+18) ) + 1
         memi(newfp+18) = memi(ffp+18)
         if (.not.(mode .eq. 4)) goto 150
            call xfseek(newfd, -2)
            if (xerflg) goto 100
150      continue
         reopen = (newfd)
         goto 100
100      return
      end
c     nextdv  next_dev
c     boffst  boffset
c     redird  redir_fd
c     pathne  pathname