summaryrefslogtreecommitdiff
path: root/vms/vms.h
diff options
context:
space:
mode:
Diffstat (limited to 'vms/vms.h')
-rw-r--r--vms/vms.h354
1 files changed, 354 insertions, 0 deletions
diff --git a/vms/vms.h b/vms/vms.h
new file mode 100644
index 0000000..8685fdd
--- /dev/null
+++ b/vms/vms.h
@@ -0,0 +1,354 @@
+/*
+ Copyright (c) 1990-2007 Info-ZIP. All rights reserved.
+
+ See the accompanying file LICENSE, version 2007-Mar-4 or later
+ (the contents of which are also included in zip.h) for terms of use.
+ If, for some reason, all these files are missing, the Info-ZIP license
+ also may be found at: ftp://ftp.info-zip.org/pub/infozip/license.html
+*/
+/*---------------------------------------------------------------------------
+
+ vms.h
+
+ Generic VMS header file for Info-ZIP's Zip and UnZip.
+
+ ---------------------------------------------------------------------------*/
+
+#ifndef __vms_h
+#define __vms_h 1
+
+#ifndef __DESCRIP_LOADED
+#include <descrip.h>
+#endif
+#ifndef __STARLET_LOADED
+#include <starlet.h>
+#endif
+#ifndef __SYIDEF_LOADED
+#include <syidef.h>
+#endif
+#ifndef __ATRDEF_LOADED
+#include <atrdef.h>
+#endif
+#ifndef __FIBDEF_LOADED
+#include <fibdef.h>
+#endif
+#ifndef __IODEF_LOADED
+#include <iodef.h>
+#endif
+#if !defined(_RMS_H) && !defined(__RMS_LOADED)
+#include <rms.h>
+#endif
+
+#define ERR(s) !((s) & 1) /* VMS system error */
+
+#ifndef SYI$_VERSION
+#define SYI$_VERSION 4096 /* VMS 5.4 definition */
+#endif
+
+/*
+ * Under Alpha (DEC C in VAXC mode) and under `good old' VAXC, the FIB unions
+ * are declared as variant_unions. DEC C (Alpha) in ANSI modes and third
+ * party compilers which do not support `variant_union' define preprocessor
+ * symbols to `hide' the "intermediate union/struct" names from the
+ * programmer's API.
+ * We check the presence of these defines and for DEC's FIBDEF.H defining
+ * __union as variant_union to make sure we access the structure correctly.
+ */
+#define variant_union 1
+#if defined(fib$w_did) || (defined(__union) && (__union == variant_union))
+# define FIB$W_DID fib$w_did
+# define FIB$W_FID fib$w_fid
+# define FIB$L_ACCTL fib$l_acctl
+# define FIB$W_EXCTL fib$w_exctl
+#else
+# define FIB$W_DID fib$r_did_overlay.fib$w_did
+# define FIB$W_FID fib$r_fid_overlay.fib$w_fid
+# define FIB$L_ACCTL fib$r_acctl_overlay.fib$l_acctl
+# define FIB$W_EXCTL fib$r_exctl_overlay.fib$w_exctl
+#endif
+#undef variant_union
+
+
+/* 2005-02-08 SMS. Moved NAM[L] macros here from VMS.C. */
+
+/* Define macros for use with either NAM or NAML. */
+
+#ifdef NAML$C_MAXRSS /* NAML is available. Use it. */
+
+# define NAM_STRUCT NAML
+
+# define FAB_OR_NAML( fab, nam) nam
+# define FAB_OR_NAML_DNA naml$l_long_defname
+# define FAB_OR_NAML_DNS naml$l_long_defname_size
+# define FAB_OR_NAML_FNA naml$l_long_filename
+# define FAB_OR_NAML_FNS naml$l_long_filename_size
+
+# define CC_RMS_NAM cc$rms_naml
+# define FAB_NAM fab$l_naml
+# define NAM_DID naml$w_did
+# define NAM_DVI naml$t_dvi
+# define NAM_ESA naml$l_long_expand
+# define NAM_ESL naml$l_long_expand_size
+# define NAM_ESS naml$l_long_expand_alloc
+# define NAM_FID naml$w_fid
+# define NAM_FNB naml$l_fnb
+# define NAM_RSA naml$l_long_result
+# define NAM_RSL naml$l_long_result_size
+# define NAM_RSS naml$l_long_result_alloc
+# define NAM_MAXRSS NAML$C_MAXRSS
+# define NAM_NOP naml$b_nop
+# define NAM_M_EXP_DEV NAML$M_EXP_DEV
+# define NAM_M_SYNCHK NAML$M_SYNCHK
+# define NAM_B_DEV naml$l_long_dev_size
+# define NAM_L_DEV naml$l_long_dev
+# define NAM_B_DIR naml$l_long_dir_size
+# define NAM_L_DIR naml$l_long_dir
+# define NAM_B_NAME naml$l_long_name_size
+# define NAM_L_NAME naml$l_long_name
+# define NAM_B_TYPE naml$l_long_type_size
+# define NAM_L_TYPE naml$l_long_type
+# define NAM_B_VER naml$l_long_ver_size
+# define NAM_L_VER naml$l_long_ver
+
+#else /* def NAML$C_MAXRSS */ /* NAML is not available. Use NAM. */
+
+# define NAM_STRUCT NAM
+
+# define FAB_OR_NAML( fab, nam) fab
+# define FAB_OR_NAML_DNA fab$l_dna
+# define FAB_OR_NAML_DNS fab$b_dns
+# define FAB_OR_NAML_FNA fab$l_fna
+# define FAB_OR_NAML_FNS fab$b_fns
+
+# define CC_RMS_NAM cc$rms_nam
+# define FAB_NAM fab$l_nam
+# define NAM_DID nam$w_did
+# define NAM_DVI nam$t_dvi
+# define NAM_ESA nam$l_esa
+# define NAM_ESL nam$b_esl
+# define NAM_ESS nam$b_ess
+# define NAM_FID nam$w_fid
+# define NAM_FNB nam$l_fnb
+# define NAM_RSA nam$l_rsa
+# define NAM_RSL nam$b_rsl
+# define NAM_RSS nam$b_rss
+# define NAM_MAXRSS NAM$C_MAXRSS
+# define NAM_NOP nam$b_nop
+# define NAM_M_EXP_DEV NAM$M_EXP_DEV
+# define NAM_M_SYNCHK NAM$M_SYNCHK
+# define NAM_B_DEV nam$b_dev
+# define NAM_L_DEV nam$l_dev
+# define NAM_B_DIR nam$b_dir
+# define NAM_L_DIR nam$l_dir
+# define NAM_B_NAME nam$b_name
+# define NAM_L_NAME nam$l_name
+# define NAM_B_TYPE nam$b_type
+# define NAM_L_TYPE nam$l_type
+# define NAM_B_VER nam$b_ver
+# define NAM_L_VER nam$l_ver
+
+#endif /* def NAML$C_MAXRSS */
+
+
+struct EB_header /* Common header of extra block */
+{ ush tag;
+ ush size;
+ uch data[1];
+};
+
+#ifndef EB_HEADSIZE
+# define EB_HEADSIZE 4
+#endif
+
+/*------ Old style Info-ZIP extra field definitions -----*/
+
+#if (!defined(VAXC) && !defined(_RMS_H) && !defined(__RMS_LOADED))
+
+struct XAB { /* This definition may be skipped */
+ unsigned char xab$b_cod;
+ unsigned char xab$b_bln;
+ short int xabdef$$_fill_1;
+ char *xab$l_nxt;
+};
+
+#endif /* !VAXC && !_RMS_H && !__RMS_LOADED */
+
+#ifndef EB_IZVMS_BCMASK
+# define EB_IZVMS_BCMASK 07 /* 3 bits for compression type */
+#endif
+#ifndef EB_IZVMS_BCSTOR
+# define EB_IZVMS_BCSTOR 0 /* Stored */
+#endif
+#ifndef EB_IZVMS_BC00
+# define EB_IZVMS_BC00 1 /* 0byte -> 0bit compression */
+#endif
+#ifndef EB_IZVMS_BCDEFL
+# define EB_IZVMS_BCDEFL 2 /* Deflated */
+#endif
+
+/*
+ * Extra record format
+ * ===================
+ * signature (2 bytes) = 'I','M'
+ * size (2 bytes)
+ * block signature (4 bytes)
+ * flags (2 bytes)
+ * uncomprssed size(2 bytes)
+ * reserved (4 bytes)
+ * data ((size-12) bytes)
+ * ....
+ */
+
+struct IZ_block /* Extra field block header structure */
+{
+ ush sig;
+ ush size;
+ ulg bid;
+ ush flags;
+ ush length;
+ ulg reserved;
+ uch body[1]; /* The actual size is unknown */
+};
+
+/*
+ * Extra field signature and block signatures
+ */
+
+#define IZ_SIGNATURE "IM"
+#define FABSIG "VFAB"
+#define XALLSIG "VALL"
+#define XFHCSIG "VFHC"
+#define XDATSIG "VDAT"
+#define XRDTSIG "VRDT"
+#define XPROSIG "VPRO"
+#define XKEYSIG "VKEY"
+#define XNAMSIG "VNAM"
+#define VERSIG "VMSV"
+
+/*
+ * Block sizes
+ */
+
+#define FABL (cc$rms_fab.fab$b_bln)
+#define RABL (cc$rms_rab.rab$b_bln)
+#define XALLL (cc$rms_xaball.xab$b_bln)
+#define XDATL (cc$rms_xabdat.xab$b_bln)
+#define XFHCL (cc$rms_xabfhc.xab$b_bln)
+#define XKEYL (cc$rms_xabkey.xab$b_bln)
+#define XPROL (cc$rms_xabpro.xab$b_bln)
+#define XRDTL (cc$rms_xabrdt.xab$b_bln)
+#define XSUML (cc$rms_xabsum.xab$b_bln)
+#define EXTBSL 4 /* Block signature length */
+#define RESL 8 /* Reserved 8 bytes */
+#define EXTHL (EB_HEADSIZE+EXTBSL+RESL)
+
+typedef unsigned char byte;
+
+struct iosb
+{
+ ush status;
+ ush count;
+ ulg spec;
+};
+
+/*------------ PKWARE extra block definitions ----------*/
+
+/* Structure of PKWARE extra header */
+
+#ifdef VMS_ZIP
+
+#if defined(__DECC) || defined(__DECCXX)
+#pragma __nostandard
+#endif /* __DECC || __DECCXX */
+
+#if defined(__DECC) || defined(__DECCXX)
+#pragma __member_alignment __save
+#pragma __nomember_alignment
+#endif /* __DECC || __DECCXX */
+
+#ifdef VMS_ORIGINAL_PK_LAYOUT
+/* The original order of ATR fields in the PKZIP VMS-extra field leads
+ * to unaligned fields in the PK_info structure representing the
+ * extra field layout. When compiled for Alpha AXP, this results in
+ * some performance (and code size) penalty. It is not allowed to
+ * apply structure padding, since this is explicitely forbidden in
+ * the specification (APPNOTE.TXT) for the PK VMS extra field.
+ */
+typedef struct
+{
+ ush tag_ra; ush len_ra; byte ra[ATR$S_RECATTR];
+ ush tag_uc; ush len_uc; byte uc[ATR$S_UCHAR];
+ ush tag_jr; ush len_jr; byte jr[ATR$S_JOURNAL];
+ ush tag_cd; ush len_cd; byte cd[ATR$S_CREDATE];
+ ush tag_rd; ush len_rd; byte rd[ATR$S_REVDATE];
+ ush tag_ed; ush len_ed; byte ed[ATR$S_EXPDATE];
+ ush tag_bd; ush len_bd; byte bd[ATR$S_BAKDATE];
+ ush tag_rn; ush len_rn; ush rn;
+ ush tag_ui; ush len_ui; byte ui[ATR$S_UIC];
+ ush tag_fp; ush len_fp; byte fp[ATR$S_FPRO];
+ ush tag_rp; ush len_rp; byte rp[ATR$S_RPRO];
+} PK_info_t;
+#else /* !VMS_ORIGINAL_PK_LAYOUT */
+/* The Info-ZIP support for the PK VMS extra field uses a reordered
+ * field layout to achieve ``natural alignment'' of the PK_info structure
+ * members whenever possible. This rearrangement does not violate the
+ * PK's VMS extra field specification and should not break any ``well
+ * behaving'' (PK)Unzip utility. (`Well behaving' means that (PK)Unzip
+ * should use the field tag to identify the ATR$ field rather than
+ * assuming a fixed order of ATR$ fields in the PK VMS extra field.)
+ */
+typedef struct
+{
+ ush tag_ra; ush len_ra; byte ra[ATR$S_RECATTR];
+ ush tag_uc; ush len_uc; byte uc[ATR$S_UCHAR];
+ ush tag_cd; ush len_cd; byte cd[ATR$S_CREDATE];
+ ush tag_rd; ush len_rd; byte rd[ATR$S_REVDATE];
+ ush tag_ed; ush len_ed; byte ed[ATR$S_EXPDATE];
+ ush tag_bd; ush len_bd; byte bd[ATR$S_BAKDATE];
+ ush tag_rn; ush len_rn; ush rn;
+ ush tag_ui; ush len_ui; byte ui[ATR$S_UIC];
+ ush tag_fp; ush len_fp; byte fp[ATR$S_FPRO];
+ ush tag_rp; ush len_rp; byte rp[ATR$S_RPRO];
+ ush tag_jr; ush len_jr; byte jr[ATR$S_JOURNAL];
+} PK_info_t;
+#endif /* ?VMS_ORIGINAL_PK_LAYOUT */
+
+#if defined(__DECC) || defined(__DECCXX)
+#pragma __member_alignment __restore
+#endif /* __DECC || __DECCXX */
+
+#if defined(__DECC) || defined(__DECCXX)
+#pragma __standard
+#endif /* __DECC || __DECCXX */
+
+#endif /* VMS_ZIP */
+
+/* PKWARE "VMS" tag */
+#define PK_SIGNATURE 0x000C
+
+/* Total number of attributes to be saved */
+#define VMS_ATTR_COUNT 11
+#define VMS_MAX_ATRCNT 20
+
+struct PK_field
+{
+ ush tag;
+ ush size;
+ byte value[1];
+};
+
+#define PK_FLDHDR_SIZE 4
+
+struct PK_header
+{
+ ush tag;
+ ush size;
+ ulg crc32;
+ byte data[1];
+};
+
+#define PK_HEADER_SIZE 8
+
+char *vms_file_version( char *s);
+
+#endif /* !__vms_h */