fis-gtm/sr_unix/iomtdef.h

138 lines
4.3 KiB
C

/****************************************************************
* *
* Copyright 2001, 2007 Fidelity Information Services, Inc *
* *
* This source code contains the intellectual property *
* of its copyright holder(s), and is made available *
* under a license. If you do not know the terms of *
* the license, please stop and do not read further. *
* *
****************************************************************/
#ifndef __IOMTDEF_H__
#define __IOMTDEF_H__
/* iomtdef.h UNIX - mag tape header file */
#define MAX_VARREC_SZ 9995
#define MAX_FIXREC_SZ 65535
#define MAX_REC_SZ 65535 /* maximum value that can be specified for the RECORDSIZE device parameter */
#define MAX_BLK_SZ 65535
/* 512 is Motorola restriction */
#define MIN_BLK_SZ 512
#define MIN_VARREC_SZ 5
#define MIN_FIXREC_SZ 1
enum mt_op
{
mt_null, mt_write, mt_read, mt_eof, mt_eof2, mt_rewind, mt_tm, mt_tm2
};
#define MTDEF_BUF_SZ 1024
#define MTDEF_REC_SZ 1020
#define MTDEF_PG_WIDTH 255
#define DEF_MT_LENGTH 66
#define MT_RECHDRSIZ 4
#define MTLAB_DOS11 (1 << 0)
#define MTLAB_ANSI (1 << 1)
#define MTL_VOL1 (1 << 0)
#define MTL_HDR1 (1 << 1)
#define MTL_HDR2 (1 << 2)
#define MTL_EOF1 (1 << 3)
#define MTL_EOF2 (1 << 4)
#define ANSI_LAB_LENGTH 80
/* THESE DEFINITIONS ARE TAKEN FROM VMS SYS$LIBRARY IODEF.H */
/* */
/* *** START LOGICAL I/O FUNCTION CODES *** */
/* */
#define IO_WRITEMARK 28 /*WRITE TAPE MARK */
#define IO_WRITELBLK 32 /*WRITE LOGICAL BLOCK */
#define IO_READLBLK 33 /*READ LOGICAL BLOCK */
#define IO_WRITEOF 40 /*WRITE END OF FILE */
#define IO_REWIND 36 /*REWIND TAPE */
#define IO_SKIPFILE 37 /*SKIP FILES */
#define IO_SKIPRECORD 38 /*SKIP RECORDS */
/* */
/* FUNCTION MODIFIER BIT DEFINITIONS */
/* */
#define IO_M_DATACHECK 16384
#define IO_M_INHRETRY 32768
#define IO_M_INHEXTGAP 4096
#define IO_M_ERASE 1024
/* THESE DEFINITIONS ARE TAKEN FROM VMS SYS$LIBRARY MTDEF.H */
#define MT_M_BOT 65536
/* Used to support Unix drives */
#define MT_M_READ 0
#define MT_M_WRITE 1
#define MT_BUSY 333
#define MT_TAPERROR 666
/* *************************************************************** */
/* ************* structure for the magtape ********************** */
/* *************************************************************** */
enum mt_type_info { mt_disk, mt_tape, mt_file };
typedef struct
{ enum mt_type_info mt_type;
bool is_seekable; /* Use lseek for all repositioning.
*/
bool filemarks_supported; /* Filemarks are supported.
*/
bool req_extra_filemark; /* Requires extra filemark for EOM.
*/
bool can_bksp_by_filemark; /* Is capable of backspacing by
* filemarks. A backspace leaves
* you at the end of the previous
* file. FALSE implies that a
* backspace command leaves you at
* the BEGINNING of the previous file.
*/
int4 block_size; /* minimum block size */
}m_cap; /* magtape characteristics */
typedef struct
{
int4 access_id; /* channel to access magtape */
uint4 read_mask;
uint4 write_mask;
uint4 record_sz;
uint4 block_sz;
unsigned short filepos;
unsigned short recpos;
unsigned short mode;
char filename[64];
unsigned char *buffer;
unsigned char *bufftop;
unsigned char *buffptr;
m_cap cap;
int bufftoggle;
bool ebcdic;
unsigned char labeled;
mstr rec;
enum mt_op last_op;
bool newversion;
bool read_only;
bool wrap;
bool fixed;
bool stream;
} d_mt_struct;
int iomt_info(d_mt_struct *mt);
uint4 iomt_rdlblk(d_mt_struct *mt_ptr, uint4 mask, iosb *stat_blk, void *buff, int size);
uint4 iomt_wtlblk(uint4 channel, uint4 mask, iosb *stat_blk, void *buff, int size);
uint4 iomt_sense(d_mt_struct *mt, iosb *io_status_blk);
uint4 iomt_opensp(io_log_name *dev_name, d_mt_struct *mtdef);
#endif