;;; Flags for open(2) and fcntl(2).
;;; Copyright (c) 1993 by Olin Shivers. See file COPYING.

(define-enum-constants open
  ;; POSIX
  (read			#x0001)		; Open for reading
  (write		#x0002)		; Open for writing
  (read+write		#x0003)		; Open for reading and writing
  (non-blocking		#x0008)		; Non-blocking open or non-blocking I/O
  (append		#x0100)		; Writes always append to the file
  (no-control-tty	0)		; Don't assign a controlling terminal
  (create               #x0010)		; Create file if it doesn't exist
  (truncate             #x00010000)	; Truncate file to zero length
  (exclusive            #x0020)		; Fail if file already exists

  ;; BSD
  (shared-lock		#x00020000)	; Open with shared file lock
  (exclusive-lock	#x00040000)	; Open with exclusive file lock
  (async		#x0200)		; Send SIGIO to owner when data is ready
  (fsync 	        #x0400)		; Synchronous writes

  ;; GNU
  (execute		#x0004)		; Open for execution
  (no-link		#x0040)		; No name mappings on final component
  (no-translator	#x0080)		; No translator on final component
  (no-access-time	#x0800)		; Don't set access time on read
  (ignore-control-tty	#x00080000))	; Don't do any ctty magic at all

(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

;;; 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
  (write	2)	; F_WRLCK
  (release	3))	; F_UNLCK