1 /* 2 * sim_fio.h: simulator file I/O library headers 3 * 4 * vim: filetype=c:tabstop=4:ai:expandtab 5 * SPDX-License-Identifier: MIT 6 * scspell-id: c2fd7c81-f62a-11ec-b01e-80ee73e9b8e7 7 * 8 * --------------------------------------------------------------------------- 9 * 10 * Copyright (c) 1993-2008 Robert M. Supnik 11 * Copyright (c) 2021-2024 The DPS8M Development Team 12 * 13 * Permission is hereby granted, free of charge, to any person obtaining a 14 * copy of this software and associated documentation files (the "Software"), 15 * to deal in the Software without restriction, including without limitation 16 * the rights to use, copy, modify, merge, publish, distribute, sublicense, 17 * and/or sell copies of the Software, and to permit persons to whom the 18 * Software is furnished to do so, subject to the following conditions: 19 * 20 * The above copyright notice and this permission notice shall be included 21 * in all copies or substantial portions of the Software. 22 * 23 * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 24 * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 25 * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL 26 * ROBERT M SUPNIK BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, 27 * WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF 28 * OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE 29 * SOFTWARE. 30 * 31 * Except as contained in this notice, the name of Robert M. Supnik shall not 32 * be used in advertising or otherwise to promote the sale, use or other 33 * dealings in this Software without prior written authorization from 34 * Robert M. Supnik. 35 * 36 * --------------------------------------------------------------------------- 37 */ 38 39 #if !defined(SIM_FIO_H_) 40 # define SIM_FIO_H_ 0 41 42 # define FLIP_SIZE (1 << 16) /* flip buf size */ 43 # define fxread(a,b,c,d) sim_fread (a, b, c, d) 44 # define fxwrite(a,b,c,d) sim_fwrite (a, b, c, d) 45 46 int32 sim_finit (void); 47 # if ( defined (__linux) || \ 48 defined (__linux__) || \ 49 defined (_AIX) || \ 50 ( ( defined (__sun) || \ 51 defined (__sun__) ) && \ 52 defined (_LARGEFILE_SOURCE) ) || \ 53 defined (_WIN32) || \ 54 defined (__APPLE__) || \ 55 defined (__CYGWIN__) || \ 56 defined (__FreeBSD__) || \ 57 defined (__NetBSD__) || \ 58 defined (__OpenBSD__) ) && \ 59 !defined (DONT_DO_LARGEFILE) 60 typedef t_int64 t_offset; 61 # else 62 typedef int32 t_offset; 63 # if !defined (DONT_DO_LARGEFILE) 64 # define DONT_DO_LARGEFILE 1 65 # endif 66 # endif 67 FILE *sim_fopen (const char *file, const char *mode); 68 int sim_fseek (FILE *st, t_addr offset, int whence); 69 int sim_fseeko (FILE *st, t_offset offset, int whence); 70 int sim_set_fsize (FILE *fptr, t_addr size); 71 int sim_set_fifo_nonblock (FILE *fptr); 72 size_t sim_fread (void *bptr, size_t size, size_t count, FILE *fptr); 73 size_t sim_fwrite (const void *bptr, size_t size, size_t count, FILE *fptr); 74 uint32 sim_fsize (FILE *fptr); 75 uint32 sim_fsize_name (const char *fname); 76 t_offset sim_ftell (FILE *st); 77 t_offset sim_fsize_ex (FILE *fptr); 78 t_offset sim_fsize_name_ex (const char *fname); 79 void sim_buf_swap_data (void *bptr, size_t size, size_t count); 80 void sim_buf_copy_swapped (void *dptr, const void *bptr, size_t size, size_t count); 81 82 extern t_bool sim_taddr_64; /* t_addr is > 32b and Large File Support available */ 83 extern t_bool sim_toffset_64; /* Large File (>2GB) file I/O support */ 84 extern t_bool sim_end; /* TRUE = little endian, FALSE = big endian */ 85 86 #endif