blob: 0c89ad6d0c927cc3a4ad4b16af08673f8ce391c6 [file] [log] [blame]
/*
* 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