;;; Flags for open(2) and fcntl(2).
;;; Copyright (c) 1993 by Olin Shivers.
;;; Copyright (c) 1999 by Brian D. Carlstrom

(define-enum-constants open
  ;; POSIX
  (read			#x0000)
  (write		#x0001)
  (read+write		#x0002)

  ;; Cygwin32
  (ndelay		#x0004)         ; non blocking I/O (4.2 style)

  ;; POSIX
  (append		#x0008)		; set append mode
  
  ;; Cygwin32
  (mark                 #x0010)         ; internal; mark during gc()
  (defer		#x0020)         ; internal; defer for next gc pass
  (async		#x0040)		; signal pgrep when data ready
  (shared-lock		#x0080)		; open with shared file lock
  (exclusive-lock	#x0100)		; open with exclusive file lock

  ;; POSIX
  (create               #x0200)		; create if nonexistant
  (truncate             #x0400)		; truncate to zero length
  (exclusive            #x0800)		; error if already exists

  ;; Cygwin32
  (non-blocking		#x1000)		; non blocking I/O (sys5 style)
  (fsync 	        #x2000)		; synchronus writes

  ;; POSIX
  (non-blocking		#x4000)		; non blocking I/O (POSIX style)
  (no-control-tty	#x8000)         ; don't assign controlling terminal

  ;; Cygwin32
  (binary              #x10000)
  (text                #x20000)
  (noinherit           #x40000))

(define open/access-mask
  (bitwise-ior open/read
	       (bitwise-ior open/write open/read+write)))

;;; fcntl() commands
(define-enum-constants fcntl
  (dup-fdes			0)      ; F_DUPFD
  (get-fdes-flags		1)      ; F_GETFD
  (set-fdes-flags		2)      ; F_SETFD
  (get-status-flags		3)      ; F_GETFL
  (set-status-flags		4)      ; F_SETFL
  (get-owner			5)	; F_GETOWN  (Not POSIX)
  (set-owner			6)	; F_SETOWN  (Not POSIX)
  (get-record-lock		7)	; F_GETLK
  (set-record-lock-no-block	8)	; F_SETLK
  (set-record-lock		9)	; F_SETLKW
  (remote-get-lock             10)      ; F_RGETLK  (Not POSIX)
  (remote-set-lock-no-block    11)      ; F_RSETLK  (Not POSIX)
  (convert                     12)      ; F_CNVT    (Not POSIX)
  (remote-get-lock             13))     ; F_RSETLKW (Not POSIX)

;;; fcntl fdes-flags (F_GETFD)

(define fdflags/close-on-exec 		1)

;;; fcntl status-flags (F_GETFL)
;;; Mostly, these are OPEN/... flags, like OPEN/APPEND.
;;; (define fdstatus/... ...)

;;; fcntl lock values.

(define-enum-constants lock
  (read		  1)	; F_RDLCK
  (release	  2)	; F_UNLCK
  (write	  3)	; F_WRLCK
  (release-remote 4))   ; F_UNLKSYS (Not POSIX)