1 /* Copyright (C) 1995, 1997, 1998 Aladdin Enterprises. All rights reserved. 2 3 This software is provided AS-IS with no warranty, either express or 4 implied. 5 6 This software is distributed under license and may not be copied, 7 modified or distributed except as expressly authorized under the terms 8 of the license contained in the file LICENSE in this distribution. 9 10 For more information about licensing, please refer to 11 http://www.ghostscript.com/licensing/. For information on 12 commercial licensing, go to http://www.artifex.com/licensing/ or 13 contact Artifex Software, Inc., 101 Lucas Valley Road #110, 14 San Rafael, CA 94903, U.S.A., +1(415)492-9861. 15 */ 16 17 /* $Id: gxclio.h,v 1.5 2002/06/16 08:45:43 lpd Exp $ */ 18 /* I/O interface for command lists */ 19 20 #ifndef gxclio_INCLUDED 21 # define gxclio_INCLUDED 22 23 #include "gp.h" /* for gp_file_name_sizeof */ 24 25 /* 26 * There are two implementations of the I/O interface for command lists -- 27 * one suitable for embedded systems, which stores the "files" in RAM, and 28 * one suitable for other systems, which uses an external file system -- 29 * with the choice made at compile/link time. This header file defines the 30 * API between the command list code proper and its I/O interface. 31 */ 32 33 typedef void *clist_file_ptr; /* We can't do any better than this. */ 34 35 /* ---------------- Open/close/unlink ---------------- */ 36 37 /* 38 * If *fname = 0, generate and store a new scratch file name; otherwise, 39 * open an existing file. Only modes "r" and "w+" are supported, 40 * and only binary data (but the caller must append the "b" if needed). 41 * Mode "r" with *fname = 0 is an error. 42 */ 43 int clist_fopen(char fname[gp_file_name_sizeof], const char *fmode, 44 clist_file_ptr * pcf, 45 gs_memory_t * mem, gs_memory_t *data_mem, 46 bool ok_to_compress); 47 48 /* 49 * Close a file, optionally deleting it. 50 */ 51 int clist_fclose(clist_file_ptr cf, const char *fname, bool delete); 52 53 /* 54 * Delete a file. 55 */ 56 int clist_unlink(const char *fname); 57 58 /* ---------------- Writing ---------------- */ 59 60 /* clist_space_available returns min(requested, available). */ 61 long clist_space_available(long requested); 62 63 int clist_fwrite_chars(const void *data, uint len, clist_file_ptr cf); 64 65 /* ---------------- Reading ---------------- */ 66 67 int clist_fread_chars(void *data, uint len, clist_file_ptr cf); 68 69 /* ---------------- Position/status ---------------- */ 70 71 /* 72 * Set the low-memory warning threshold. clist_ferror_code will return 1 73 * if fewer than this many bytes of memory are left for storing band data. 74 */ 75 int clist_set_memory_warning(clist_file_ptr cf, int bytes_left); 76 77 /* 78 * clist_ferror_code returns a negative error code per gserrors.h, not a 79 * Boolean; 0 means no error, 1 means low-memory warning. 80 */ 81 int clist_ferror_code(clist_file_ptr cf); 82 83 long clist_ftell(clist_file_ptr cf); 84 85 /* 86 * We pass the file name to clist_rewind and clist_fseek in case the 87 * implementation has to close and reopen the file. (clist_fseek with 88 * offset = 0 and mode = SEEK_END indicates we are about to append.) 89 */ 90 void clist_rewind(clist_file_ptr cf, bool discard_data, const char *fname); 91 92 int clist_fseek(clist_file_ptr cf, long offset, int mode, const char *fname); 93 94 #endif /* gxclio_INCLUDED */ 95