/* * Copyright (c) 2021-2025 Symas Corporation * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions are * met: * * * Redistributions of source code must retain the above copyright * notice, this list of conditions and the following disclaimer. * * Redistributions in binary form must reproduce the above * copyright notice, this list of conditions and the following disclaimer * in the documentation and/or other materials provided with the * distribution. * * Neither the name of the Symas Corporation nor the names of its * contributors may be used to endorse or promote products derived from * this software without specific prior written permission. * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ /* * File status key values and meanings * 0 Successful completion * 0 No further information * 2 Duplicate key READ * 4 Short/long READ * 5 OPEN optional file unavailable * 7 Not a tape * 1 At-end condition * 0 Sequential READ EOF * 4 Relative record too big * 2 Invalid key condition * 1 Sequence error * 2 Duplicate key WRITE * 3 Record not found * 4 Sequential WRITE EOF * 3 Permanent error * 0 No further information * 1 Filename inconsistent with operating system * 4 Boundary violation * 5 OPEN nonoptional file unavailable * 7 OPEN EACCES * 8 OPEN file previously closed with lock * 9 OPEN wrong file type * 4 Logic error condition * 1 OPEN file already open * 2 CLOSE file not open * 3 REWRITE without prior READ * 4 REWRITE/WRITE boundary violation * 6 READ after failed READ * 7 File not open for READ * 8 File not open for WRITE * 9 File not open for DELETE/REWRITE * 9 Implementor-defined * 0 VSAM/QSAM close on wrong thread * 1 VSAM password failure * 2 Logic error * 3 Resource unavailable * 5 Incomplete file information * 6 VSAM no DD statement * 7 VSAM File integrity verified * 8 OPEN invalid environment variable contents */ #ifndef IO_H_ #define IO_H_ enum file_high_t { FhSuccess = 0, FhAtEnd = 1, FhInvKey = 2, FhOsError = 3, FhLogicError = 4, FhImplementor = 9, }; enum file_status_t { FsSuccess = FhSuccess, FsDupRead = (FhSuccess * 10) + 2, // First digit is 0 FsRecordLength= (FhSuccess * 10) + 4, FsUnavail = (FhSuccess * 10) + 5, FsNotaTape = (FhSuccess * 10) + 7, FsEofSeq = (FhAtEnd * 10) + 0, // First digit is 1 FsEofRel = (FhAtEnd * 10) + 4, FsKeySeq = (FhInvKey * 10) + 1, // First digit is 2 FsDupWrite = (FhInvKey * 10) + 2, FsNotFound = (FhInvKey * 10) + 3, FsEofWrite = (FhInvKey * 10) + 4, FsOsError = (FhOsError * 10) + 0, // First digit is 3 FsNameError = (FhOsError * 10) + 1, FsBoundary = (FhOsError * 10) + 4, FsNoFile = (FhOsError * 10) + 5, FsNoAccess = (FhOsError * 10) + 7, FsCloseLock = (FhOsError * 10) + 8, FsWrongType = (FhOsError * 10) + 9, FsLogicErr = (FhLogicError * 10) + 0, // First digit is 4 FsIsOpen = (FhLogicError * 10) + 1, FsCloseNotOpen= (FhLogicError * 10) + 2, FsNoRead = (FhLogicError * 10) + 3, FsBoundWrite = (FhLogicError * 10) + 4, FsReadError = (FhLogicError * 10) + 6, FsReadNotOpen = (FhLogicError * 10) + 7, FsNoWrite = (FhLogicError * 10) + 8, FsNoDelete = (FhLogicError * 10) + 9, FsWrongThread = (FhImplementor * 10) + 0, // First digit is 9 FsPassword = (FhImplementor * 10) + 1, FsLogicOther = (FhImplementor * 10) + 2, FsNoResource = (FhImplementor * 10) + 3, FsIncomplete = (FhImplementor * 10) + 5, FsNoDD = (FhImplementor * 10) + 6, FsVsamOK = (FhImplementor * 10) + 7, FsBadEnvVar = (FhImplementor * 10) + 8, FsErrno = (1000000) // This means "map errno to one of the above errors" }; #define FhNotOkay FsEofSeq // Values less than 10 mean the data are valid extern "C" file_status_t __gg__file_status_word(enum file_status_t status, int error_number); #endif