Files
open-simh.simtools/extracters/ods2/f11def.h
Timothe Litt 66e00b9900 Backlog of work since 2016
Too much to list all, but includes (in no particular order):
 - Cleanup for 64-bit builds, MSVC warnings.
 - Structured help
 - Help file compiler.
 - Supports volsets, writes/create work.
 - Support for I18n in messages, help.
 - Makefiles.
 - Initialize volume/volset
 - Command line editing/history

Builds and works on Linux and Windows (VS).
Not recently built or tested on other platforms, but
not intentinonally broken.
2022-10-10 11:00:20 -04:00

308 lines
8.6 KiB
C

/* Access.h Definitions for file access routines */
/*
* This is part of ODS2 written by Paul Nankervis,
* email address: Paulnank@au1.ibm.com
* ODS2 is distributed freely for all members of the
* VMS community to use. However all derived works
* must maintain comments in their source to acknowledge
* the contributions of the original author and
* subsequent contributors. This is free software; no
* warranty is offered, and while we believe it to be useful,
* you use it at your own risk.
*/
#ifndef _F11DEF_H
#define _F11DEF_H
#include <stdint.h>
#include "vmstime.h"
#ifndef ODS2_BIG_ENDIAN
#if defined(__BYTE_ORDER__) && defined(__ORDER_BIG_ENDIAN__)
#if __BYTE_ORDER__ == __ORDER_BIG_ENDIAN__
#define ODS2_BIG_ENDIAN 1
#else
#define ODS2_BIG_ENDIAN 0
#endif
#elif !defined(__GNUC__) /* GLIB can define some of these with older GCC */
#if defined(__BIG_ENDIAN__) || defined(__BIG_ENDIAN) || defined(_BIG_ENDIAN)
#define ODS2_BIG_ENDIAN 1
#else
#define ODS2_BIG_ENDIAN 0
#endif
#else
#define ODS2_BIG_ENDIAN 0
#endif
#endif
#if ODS2_BIG_ENDIAN
#define F11LONG( l ) ((f11long)( ( (l) & 0x000000ff ) << 24 | \
( (l) & 0x0000ff00 ) << 8 | \
( (l) & 0x00ff0000 ) >> 8 | \
(l) >> 24 ))
#define F11WORD( w ) ((f11word)( ( (w) & 0x00ff ) << 8 | \
(w) >> 8 ))
#define F11SWAP( l ) ((f11long)( ( (l) & 0x00ff0000 ) << 8 | \
( (l) & 0xff000000 ) >> 8 | \
( (l) & 0x000000ff ) << 8 | \
( (l) & 0x0000ff00 ) >> 8 ))
#else
#define F11LONG( l ) ((f11long)(l))
#define F11WORD( w ) ((f11word)(w))
#define F11SWAP( l ) ((f11long)( ( (l) & 0x0000ffff ) << 16 | \
(l) >> 16 ))
#endif
typedef uint8_t f11byte;
typedef uint16_t f11word;
typedef uint32_t f11swap;
typedef uint32_t f11long;
#define FH2$M_WASCONTIG 0x00001
#define FH2$M_NOBACKUP 0x00002
#define FH2$M_WRITEBACK 0x00004
#define FH2$M_READCHECK 0x00008
#define FH2$M_WRITECHECK 0x00010
#define FH2$M_CONTIGB 0x00020
#define FH2$M_LOCKED 0x00040
#define FH2$M_CONTIG 0x00080
#define FH2$M_BADACL 0x000800
#define FH2$M_SPOOL 0x001000
#define FH2$M_DIRECTORY 0x002000
#define FH2$M_BADBLOCK 0x004000
#define FH2$M_MARKDEL 0x008000
#define FH2$M_NOCHARGE 0x010000
#define FH2$M_ERASE 0x020000
#define FH2$M_NOMOVE 0x200000
#ifdef __ALPHA
#pragma member_alignment save
#pragma nomember_alignment
#endif
#ifdef __GNUC__
#pragma pack(push,1)
#endif
struct UIC {
f11word uic$w_mem;
f11word uic$w_grp;
};
struct fiddef {
f11word fid$w_num;
f11word fid$w_seq;
f11byte fid$b_rvn;
f11byte fid$b_nmx;
};
#define NULL_FID(fidadr) ((fidadr)->fid$w_num == 0 && \
(fidadr)->fid$w_seq == 0 && \
(fidadr)->fid$b_rvn ==0 && \
(fidadr)->fid$b_nmx == 0 )
#define FID_MATCH(fid1,fid2,rvn) ((fid1)->fid$w_num == (fid2)->fid$w_num && \
(fid1)->fid$w_seq == (fid2)->fid$w_seq && \
((fid1)->fid$b_rvn? (fid1)->fid$b_rvn: rvn) == \
((fid2)->fid$b_rvn? (fid2)->fid$b_rvn: rvn) && \
(fid1)->fid$b_nmx == (fid1)->fid$b_nmx )
#define FID$C_INDEXF 1
#define FID$C_BITMAP 2
#define FID$C_BADBLK 3
#define FID$C_MFD 4
#define FID$C_CORIMG 5
#define FID$C_VOLSET 6
#define FID$C_CONTIN 7
#define FID$C_BACKUP 8
#define FID$C_BADLOG 9
#define FID$C_FREFIL 10
#define FID$C_MAXRES 10
#define prot$m_system 0x000F
#define prot$v_system 0
#define prot$m_owner 0x00F0
#define prot$v_owner 4
#define prot$m_group 0x0F00
#define prot$v_group 8
#define prot$m_world 0xF000
#define prot$v_world 12
#define prot$m_noread 0x1
#define prot$m_nowrite 0x2
#define prot$m_noexe 0x4
#define prot$m_nodel 0x8
#define prot$m_none (prot$m_noread|prot$m_nowrite|prot$m_noexe|prot$m_nodel)
#define prot$m_norestrict 0x0
#define SETPROT( sys, own, grp, wld ) \
( ((sys) << prot$v_system) | ((own) << prot$v_owner) | \
((grp) << prot$v_group) | ((wld) << prot$v_world) )
struct RECATTR {
f11byte fat$b_rtype;
f11byte fat$b_rattrib;
f11word fat$w_rsize;
f11swap fat$l_hiblk;
f11swap fat$l_efblk;
f11word fat$w_ffbyte;
f11byte fat$b_bktsize;
f11byte fat$b_vfcsize;
f11word fat$w_maxrec;
f11word fat$w_defext;
f11word fat$w_gbc;
f11byte fat$_UU0[8];
f11word fat$w_versions;
};
struct HOME {
f11long hm2$l_homelbn;
f11long hm2$l_alhomelbn;
f11long hm2$l_altidxlbn;
f11word hm2$w_struclev;
f11word hm2$w_cluster;
f11word hm2$w_homevbn;
f11word hm2$w_alhomevbn;
f11word hm2$w_altidxvbn;
f11word hm2$w_ibmapvbn;
f11long hm2$l_ibmaplbn;
f11long hm2$l_maxfiles;
f11word hm2$w_ibmapsize;
f11word hm2$w_resfiles;
f11word hm2$w_devtype;
f11word hm2$w_rvn;
f11word hm2$w_setcount;
f11word hm2$w_volchar;
struct UIC hm2$w_volowner;
f11long hm2$l_reserved1;
f11word hm2$w_protect;
f11word hm2$w_fileprot;
f11word hm2$w_reserved2;
f11word hm2$w_checksum1;
VMSTIME hm2$q_credate;
f11byte hm2$b_window;
f11byte hm2$b_lru_lim;
f11word hm2$w_extend;
VMSTIME hm2$q_retainmin;
VMSTIME hm2$q_retainmax;
VMSTIME hm2$q_revdate;
f11byte hm2$r_min_class[20];
f11byte hm2$r_max_class[20];
f11byte hm2$t_reserved3[320];
f11long hm2$l_serialnum;
char hm2$t_strucname[12];
char hm2$t_volname[12];
char hm2$t_ownername[12];
char hm2$t_format[12];
f11word hm2$w_reserved4;
f11word hm2$w_checksum2;
};
struct IDENT {
char fi2$t_filename[20];
f11word fi2$w_revision;
VMSTIME fi2$q_credate;
VMSTIME fi2$q_revdate;
VMSTIME fi2$q_expdate;
VMSTIME fi2$q_bakdate;
char fi2$t_filenamext[66];
};
struct HEAD {
f11byte fh2$b_idoffset;
f11byte fh2$b_mpoffset;
f11byte fh2$b_acoffset;
f11byte fh2$b_rsoffset;
f11word fh2$w_seg_num;
f11word fh2$w_struclev;
struct fiddef fh2$w_fid;
struct fiddef fh2$w_ext_fid;
struct RECATTR fh2$w_recattr;
f11long fh2$l_filechar;
f11word fh2$w_reserved1;
f11byte fh2$b_map_inuse;
f11byte fh2$b_acc_mode;
struct UIC fh2$l_fileowner;
f11word fh2$w_fileprot;
struct fiddef fh2$w_backlink;
f11byte fh2$b_journal;
f11byte fh2$b_ru_active;
f11word fh2$w_reserved2;
f11long fh2$l_highwater;
#define FH2$C_LENGTH 80 /* (offsetof( struct HEAD, fh2$l_highwater) +
sizeof( f11long ))
*/
f11byte fh2$b_reserved3[8];
struct fh2$r_class_prot {
f11byte cls$b_secur_lev;
f11byte cls$b_integ_lev;
f11word reserved4;
f11byte cls$q_secur_cat[8];
f11byte cls$q_integ_cat[8];
} fh2$r_class_prot;
f11byte fh2$r_vardata[402];
f11word fh2$w_checksum;
};
#define STRUCLEV (0x0201)
#define FM2$M_FORMAT1 (1 << 14)
#define FM2$M_FORMAT2 (2 << 14)
#define FM2$M_FORMAT3 (3 << 14)
#define FM2$C_FMT1_MAXLBN ((1 << 22) - 1)
#define FM2$C_FMT1_MAXCNT (256)
#define FM2$C_FMT2_MAXLBN (0xFFFFFFFF)
#define FM2$C_FMT2_MAXCNT (1 << 14)
#define FM2$C_FMT3_MAXLBN (0xFFFFFFFF)
#define FM2$C_FMT3_MAXCNT (1 << 30)
struct SCB {
f11word scb$w_struclev;
f11word scb$w_cluster;
f11long scb$l_volsize;
f11long scb$l_blksize;
f11long scb$l_sectors;
f11long scb$l_tracks;
f11long scb$l_cylinders;
f11long scb$l_status;
f11long scb$l_status2;
f11word scb$w_writecnt;
char scb$t_volockname[12];
VMSTIME scb$q_mounttime;
f11word scb$w_backrev;
f11long scb$q_genernum[2];
char scb$b_reserved[446];
f11word scb$w_checksum;
};
struct VOLSETREC {
char vsr$t_label[12];
char vsr$b_reserved[52];
};
struct dir$r_rec {
f11word dir$w_size;
f11word dir$w_verlimit;
f11byte dir$b_flags;
f11byte dir$b_namecount;
char dir$t_name[1];
};
struct dir$r_ent {
f11word dir$w_version;
struct fiddef dir$w_fid;
};
#ifdef __GNUC__
#pragma pack(pop)
#endif
#ifdef __ALPHA
#pragma member_alignment restore
#endif
#endif