;;; Flags for open(2) and fcntl(2).
;;; Copyright (c) 1993 by Olin Shivers.
;;; Modified for Solaris by tvb@math.ufl.edu
(define-syntax define-open-flags
  (syntax-rules ()
    ((define-errnos form ...)
     (begin (define-enum-constant "open" . form) ...))))

(define-open-flags
  (read			0)
  (write		1)
  (read+write		2)
  (append		8)
  (create		#x0100)
  (exclusive		#x0400)
  (no-control-tty	#x800)     ;claims to be POSIX
  (nonblocking		#x80)      ;claims to be POSIX
  (truncate		#x0200)

;;; Not POSIX.
  (no-delay	4)
  (sync		#x10))

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

;;;; fcntl
;;;; Rough sketch only. Will define a separate proc for each fcntl command.
;
;;;; fcntl commands
;dup
;
;get-flags	; Only gives close-on-exec bit.
;set-flags
;
;get-status	; Returns open flags + get-status flags (below)
;set-status	; Can set: append, sync, async, nbio, nonblocking, no-delay
;
;get-lock
;set-lock
;nonblocking-set-lock
;
;get-record-lock
;set-record-lock
;
;get-owner			; Not POSIX
;set-owner			; Not POSIX
;remote-set-lock		; Not POSIX
;nonblocking-remote-set-lock	; Not POSIX
;remote-get-lock		; Not POSIX
;
;;;; Flags
;
;close-on-exec	; get-flags
;
;async		; get-status
;no-delay	; get-status
;nbio		; get-status
;
;lock/read	; set-lock
;lock/write	; set-lock
;lock/release	; set-lock

;;; These are internal; they are not part of the supported scsh interface.

(define fcntl/close-on-exec 		1)

(define fcntl/dupfd			0)
(define fcntl/get-fd-flags		1)
(define fcntl/set-fd-flags		2)
(define fcntl/get-file-flags		3)
(define fcntl/set-file-flags		4)
(define fcntl/get-owner	        	23)	; F_GETOWN
(define fcntl/set-owner	        	24)	; F_SETOWN
(define fcntl/get-record-lock		5)	; F_GETLK
(define fcntl/set-record-lock-noblock	6)	; F_SETLK
(define fcntl/set-record-lock		7)	; F_SETLKW

(define lock/read	1)	; F_RDLCK
(define lock/write	2)	; F_WRLCK
(define lock/release	3)	; F_UNLCK