mirror of
https://github.com/open-simh/simtools.git
synced 2026-02-12 19:08:49 +00:00
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.
308 lines
8.6 KiB
C
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
|