home *** CD-ROM | disk | FTP | other *** search
- /*
- * This file is part of ixemul.library for the Amiga.
- * Copyright (C) 1991, 1992 Markus M. Wild
- *
- * This library is free software; you can redistribute it and/or
- * modify it under the terms of the GNU Library General Public
- * License as published by the Free Software Foundation; either
- * version 2 of the License, or (at your option) any later version.
- *
- * This library is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
- * Library General Public License for more details.
- *
- * You should have received a copy of the GNU Library General Public
- * License along with this library; if not, write to the Free
- * Software Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
- */
-
- #ifndef _SYS_FILE_H
- #define _SYS_FILE_H
-
- #include <sys/types.h>
- #include <sys/fcntl.h>
- #include <sys/unistd.h>
-
- #ifdef _INTERNAL_FILE
- #include <sys/stat.h>
- #include <libraries/dosextens.h>
-
- /* this is the incore representation of a DTYPE_MEM file */
- struct mem_file {
- int mf_offset;
- void *mf_buffer;
- };
-
- /* this `glue' makes a tty a subtype of a plain file. Ie f->f_fh will work
- for plain files as well as ttys. */
- struct tty_glue {
- struct FileHandle *fh;
- struct tty *tty; /* internal data of tty.c */
- };
-
- /* this will hold basic information about a file, but contrairy to
- * Unix, it will also hold its name */
-
- struct file {
- char *f_name; /* the name as used with open() */
- int f_stb_dirty, /* gets == 1, if changes have been made to 'stb' */
- f_type, /* can be a file or some amiga..devices */
- f_flags, /* see fcntl.h */
- f_count, /* open-count, normally 1, higher after dup() */
- (*f_write)(), /* functions to perform write,read,etc on this fd */
- (*f_read)(),
- (*f_ioctl)(),
- (*f_select)(),
- (*f_close)();
- union {
- struct FileHandle *fh; /* this is a CPTR to the allocated
- * FileHandle */
- struct mem_file mf; /* current data for incore files */
- struct socket *so; /* points to socket when DTYPE_SOCKET */
- struct tmp_pipe *tp; /* temporary until sockets are here ;-) */
- struct tty_glue tg;
- } f__fh;
- #define f_fh f__fh.fh
- #define f_mf f__fh.mf
- #define f_so f__fh.so
- #define f_tp f__fh.tp
- #define f_tty f__fh.tg.tty
- /* WARNING: if you change this struct, take care, that f_sp starts at
- * long (!) alignment in the struct. The file-table will be allocated
- * by AllocMem(), thus by itself it will have DOS-compatible alignment,
- * if you don't follow this, you'll get some nice gurus.. */
- struct StandardPacket f_sp; /* all IO is done thru the Packet-Interface,
- * not the higher-level DOS-functions */
- char *f_async_buf;
- int f_async_len;
- struct stat f_stb; /* file-params at open-time, or after changes to fd */
- int f_sync_flags; /* for process synchronization */
- };
-
-
- #define FSFB_LOCKED (0)
- #define FSFF_LOCKED (1<<0) /* means the fh is in use */
- #define FSFB_WANTLOCK (1)
- #define FSFF_WANTLOCK (1<<1) /* means a process is sleeping on fh to get free */
-
- #endif /* _INTERNAL_FILE_H */
-
-
- #if 0 /* now in <sys/fcntl.h> */
- #include <fcntl.h>
-
- /*
- * flags - see also fcntl.h
- */
- #define FOPEN (-1)
- #define FREAD 00001 /* descriptor read/receive'able */
- #define FWRITE 00002 /* descriptor write/send'able */
- #define FINDIR 00010 /* result of a dup() call */
- #define FEXTOPEN 00020 /* someone else opened this fd for
- * us, so we shouldn't close it */
- #define FTTYRAW 00040 /* did we send a RAW-packet ?? */
- #define FUNLINK 00200 /* unlink file after close */
-
- /* bits to save after open */
- #define FMASK (FREAD|FWRITE|FAPPEND|FSYNC|FASYNC|FNBIO|FINDIR)
- #define FCNTLCANT (FREAD|FWRITE|FINDIR|FEXTOPEN)
- #endif
-
- #if 0 /* now in sys/fcntl.h sys/unistd.h */
- /*
- * Access call.
- */
- #define F_OK 0 /* does file exist */
- #define X_OK 1 /* is it executable by caller */
- #define W_OK 2 /* writable by caller */
- #define R_OK 4 /* readable by caller */
-
- /*
- * Lseek call.
- */
- #define L_SET 0 /* absolute offset */
- #define L_INCR 1 /* relative to current offset */
- #define L_XTND 2 /* relative to end of file */
- #endif
-
- #define DTYPE_FILE 1 /* 'file' is really a file */
- #define DTYPE_PIPE 2 /* it's an incore pipe */
- #define DTYPE_MEM 3 /* a RDONLY file completely buffered in memory */
- #define DTYPE_TASK_FILE 4 /* is a 'file', but used by a task, not a process !*/
- #define DTYPE_SOCKET 5 /* socket (to be implemented real soon now ;-)) */
- #define DTYPE_TTY 6 /* amigados file, with special access functions */
- /* more to follow.. */
-
- #endif /* _SYS_FILE_H */
-