File: flush.x

package info (click to toggle)
iraf 2.18.1-2
  • links: PTS, VCS
  • area: main
  • in suites: forky, sid, trixie
  • size: 86,000 kB
  • sloc: ansic: 115,890; fortran: 74,576; lisp: 18,888; yacc: 5,642; sh: 961; lex: 596; makefile: 509; asm: 159; csh: 54; xml: 33; sed: 4
file content (59 lines) | stat: -rw-r--r-- 1,334 bytes parent folder | download | duplicates (7)
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
# Copyright(c) 1986 Association of Universities for Research in Astronomy Inc.

include	<config.h>
include	<syserr.h>
include	<fio.h>

# FLUSH -- Flush any buffered output to the file.

procedure flush (fd)

int	fd
pointer	bp
int	status, and()
errchk	filerr, fflsbf, fwatio
include	<fio.com>

begin
	fp = fiodes[fd]
	if (fp == NULL)
	    return
	else if (FTYPE(fp) == STRING_FILE || FTYPE(fp) == SPOOL_FILE)
	    return
	bp = bufptr[fd]

	call fcanpb (fd)	# cancel any pushback
	UPDATE_IOP(fd)		# update the i/o pointers

	if (BUF_MODIFIED(fd)) {
	    # Buffer has been written into and must be flushed to disk.
	    if (and (FF_WRITE, fflags[fd]) == 0)
		call filerr (FNAME(fp), SYS_FNOWRITEPERM)

	    if (FTYPE(fp) == TEXT_FILE) {
		call fputtx (fd, Memc[bp], otop[fd] - bp, status)
		iop[fd] = bp
		itop[fd] = bp
	    } else {
		call fflsbf (fd, bp, otop[fd]-bp, boffset[fd])
		call fwatio (fd)
		if (FBLKSIZE(fp) == 0) {	# streaming device?
		    boffset[fd] = LNOTE(fd)
		    iop[fd] = bp
		    otop[fd] = bp
		    itop[fd] = bp
		}
		status = FILSTAT(fp)
	    }

	    if (status == ERR)
		call filerr (FNAME(fp), SYS_FWRITE)
	    otop[fd] = bp
	}

	if (FTYPE(fp) == TEXT_FILE && and (FF_WRITE, fflags[fd]) != 0)
	    call zcall2 (ZFLSTX(fp), FCHAN(fp), status)

	if (status == ERR)
	    call filerr (FNAME(fp), SYS_FWRITE)
end