#ifdef __cplusplus extern "C" {#endif#include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include "EXTERN.h"#include "perl.h"#include "XSUB.h"#define NEED_newRV_noinc#include "ppport.h"#ifdef __cplusplus}#endifGtypedef struct {short buflen, /* Length of output buffer */9 itmcode; /* Item code */> void *buffer; /* Buffer address */E void *retlen; /* Return length address */ } ITMLST;Mtypedef struct {char *ItemName; /* Name of the item we're getting */I unsigned short *ReturnLength; /* Pointer to the return */A /* buffer length */N void *ReturnBuffer; /* generic pointer to the returned */3 /* data */M int ReturnType; /* The type of data in the return */5 /* buffer */M int ItemListEntry; /* Index of the entry in the item */G /* list we passed to GETDVI */J } FetchedItem; /* Use this keep track of the items in the */@ /* 'grab everything' GETDVI call */#define IS_INPUT (1<<0)#define IS_OUTPUT (1<<1)#define dev_bit_test(a, b, c) \{ \ if (c & DEV$M_##b) \1 hv_store(a, #b, strlen(#b), &PL_sv_yes, 0); \ else \/ hv_store(a, #b, strlen(#b), &PL_sv_no, 0);}#define ucb_bit_test(a, b, c) \{ \ if (c & UCB$M_##b) \1 hv_store(a, #b, strlen(#b), &PL_sv_yes, 0); \ else \/ hv_store(a, #b, strlen(#b), &PL_sv_no, 0);}#define ttc_bit_test(a, b, c) \{ \ if (c & TTC$M_##b) \1 hv_store(a, #b, strlen(#b), &PL_sv_yes, 0); \ else \/ hv_store(a, #b, strlen(#b), &PL_sv_no, 0);}#define dvi_bit_test(a, b, c) \{ \ if (c & DVI$M_##b) \1 hv_store(a, #b, strlen(#b), &PL_sv_yes, 0); \ else \/ hv_store(a, #b, strlen(#b), &PL_sv_no, 0);}8#define DVI_ENT(a, b, c) {#a, DVI$_##a, b, c, IS_OUTPUT}7#define MNT_ENT(a, b, c) {#a, MNT$_##a, b, c, IS_INPUT}8#define INI_ENT(a, b, c) {#a, INIT$_##a, b, c, IS_INPUT}#define DC_ENT(a) {#a, DC$_##a}#define DT_ENT(a) {#a, DT$_##a}2/* The fake item code for generic_bitmap_decode */#define SYSCALL_DISMOU 42424242;/* Macro to expand out entries for generic_bitmap_encode */;#define DMT_D(a) { if (!strncmp(FlagName, #a, FlagLen)) { \G EncodedValue[0] = EncodedValue[0] | DMT$M_##a; \ break; \ } \ };#define BME_D(a) { if (!strncmp(FlagName, #a, FlagLen)) { \G EncodedValue[0] = EncodedValue[0] | MNT$M_##a; \ break; \ } \ }<#define BME2_D(a) { if (!strncmp(FlagName, #a, FlagLen)) { \H EncodedValue[1] = EncodedValue[1] | MNT2$M_##a; \ break; \ } \ }#define IS_STRING 1#define IS_LONGWORD 2#define IS_QUADWORD 3#define IS_WORD 4#define IS_BYTE 5#define IS_VMSDATE 6L#define IS_BITMAP 7 /* Each bit in the return value indicates something */K#define IS_ENUM 8 /* Each returned value has a name, and we ought to */@ /* return the name instead of the value */&#define IS_ODD 9 /* A catchall */`#define IS_BITMAP_VALUE 10 /* The offset of the first bit that is set is the value we want. */#define FOR_DISK (1<<0)#define FOR_TAPE (1<<1)#define FOR_SCOM (1<<2)#define FOR_CARD (1<<3)#define FOR_TERM (1<<4)#define FOR_LP (1<<5)#define FOR_REALTIME (1<<6)#define FOR_MAILBOX (1<<7)#define FOR_MISC (1<<8)*#define FOR_STORAGE (FOR_DISK | FOR_TAPE)L#define FOR_ALL (FOR_DISK | FOR_TAPE | FOR_SCOM | FOR_CARD | FOR_TERM \G | FOR_LP | FOR_REALTIME | FOR_MAILBOX | FOR_MISC)struct DevClassID { char *DevClassName; int DevClassValue;};I/* These were all hand-generated (with help from emacs' replace-regex) */"struct DevClassID DevClassList[] ={#ifdef DC$_DISK DC_ENT(DISK),#endif#ifdef DC$_TAPE DC_ENT(TAPE),#endif#ifdef DC$_SCOM DC_ENT(SCOM),#endif#ifdef DC$_CARD DC_ENT(CARD),#endif#ifdef DC$_TERM DC_ENT(TERM),#endif #ifdef DC$_LP DC_ENT(LP),#endif#ifdef DC$_WORKSTATION DC_ENT(WORKSTATION),#endif#ifdef DC$_REALTIME DC_ENT(REALTIME),#endif#ifdef DC$_DECVOICE DC_ENT(DECVOICE),#endif#ifdef DC$_AUDIO DC_ENT(AUDIO),#endif#ifdef DC$_VIDEO DC_ENT(VIDEO),#endif#ifdef DC$_BUS DC_ENT(BUS),#endif#ifdef DC$_MAILBOX DC_ENT(MAILBOX),#endif#ifdef DC$_REMCSL_STORAGE DC_ENT(REMCSL_STORAGE),#endif#ifdef DC$_MISC DC_ENT(MISC),#endif {NULL, 0}};struct DevTypeID { char *DevTypeName; int DevTypeValue;};/* Generate these with: *U * $ perl -ne "print qq/#ifdef DT\$_$1\n DT_ENT($1),\n#endif\n/ if m/DT\$_(\w+)/;" -: * _$ SYS$COMMON:[DECC$LIB.REFERENCE.SYS$STARLET_C]DCDEF.H **/ struct DevTypeID DevTypeList[] ={#ifdef DT$_RK06 DT_ENT(RK06),#endif#ifdef DT$_RK07 DT_ENT(RK07),#endif#ifdef DT$_RP04 DT_ENT(RP04),#endif#ifdef DT$_RP05 DT_ENT(RP05),#endif#ifdef DT$_RP06 DT_ENT(RP06),#endif#ifdef DT$_RM03 DT_ENT(RM03),#endif#ifdef DT$_RP07 DT_ENT(RP07),#endif#ifdef DT$_RP07HT DT_ENT(RP07HT),#endif#ifdef DT$_RL01 DT_ENT(RL01),#endif#ifdef DT$_RL02 DT_ENT(RL02),#endif#ifdef DT$_RX02 DT_ENT(RX02),#endif#ifdef DT$_RX04 DT_ENT(RX04),#endif#ifdef DT$_RM80 DT_ENT(RM80),#endif#ifdef DT$_TU58 DT_ENT(TU58),#endif#ifdef DT$_RM05 DT_ENT(RM05),#endif#ifdef DT$_RX01 DT_ENT(RX01),#endif#ifdef DT$_ML11 DT_ENT(ML11),#endif#ifdef DT$_RB02 DT_ENT(RB02),#endif#ifdef DT$_RB80 DT_ENT(RB80),#endif#ifdef DT$_RA80 DT_ENT(RA80),#endif#ifdef DT$_RA81 DT_ENT(RA81),#endif#ifdef DT$_RA60 DT_ENT(RA60),#endif#ifdef DT$_RZ01 DT_ENT(RZ01),#endif#ifdef DT$_RC25 DT_ENT(RC25),#endif#ifdef DT$_RZF01 DT_ENT(RZF01),#endif#ifdef DT$_RCF25 DT_ENT(RCF25),#endif#ifdef DT$_RD51 DT_ENT(RD51),#endif#ifdef DT$_RX50 DT_ENT(RX50),#endif#ifdef DT$_RD52 DT_ENT(RD52),#endif#ifdef DT$_RD53 DT_ENT(RD53),#endif#ifdef DT$_RD26 DT_ENT(RD26),#endif#ifdef DT$_RA82 DT_ENT(RA82),#endif#ifdef DT$_RD31 DT_ENT(RD31),#endif#ifdef DT$_RD54 DT_ENT(RD54),#endif#ifdef DT$_CRX50 DT_ENT(CRX50),#endif#ifdef DT$_RRD50 DT_ENT(RRD50),#endif#ifdef DT$_GENERIC_DU DT_ENT(GENERIC_DU),#endif#ifdef DT$_RX33 DT_ENT(RX33),#endif#ifdef DT$_RX18 DT_ENT(RX18),#endif#ifdef DT$_RA70 DT_ENT(RA70),#endif#ifdef DT$_RA90 DT_ENT(RA90),#endif#ifdef DT$_RD32 DT_ENT(RD32),#endif#ifdef DT$_DISK9 DT_ENT(DISK9),#endif#ifdef DT$_RX35 DT_ENT(RX35),#endif#ifdef DT$_RF30 DT_ENT(RF30),#endif#ifdef DT$_RF70 DT_ENT(RF70),#endif#ifdef DT$_RF71 DT_ENT(RF71),#endif#ifdef DT$_RD33 DT_ENT(RD33),#endif#ifdef DT$_ESE20 DT_ENT(ESE20),#endif#ifdef DT$_TU56 DT_ENT(TU56),#endif#ifdef DT$_RZ22 DT_ENT(RZ22),#endif#ifdef DT$_RZ23 DT_ENT(RZ23),#endif#ifdef DT$_RZ24 DT_ENT(RZ24),#endif#ifdef DT$_RZ55 DT_ENT(RZ55),#endif#ifdef DT$_RRD40S DT_ENT(RRD40S),#endif#ifdef DT$_RRD40 DT_ENT(RRD40),#endif#ifdef DT$_GENERIC_DK DT_ENT(GENERIC_DK),#endif#ifdef DT$_RX23 DT_ENT(RX23),#endif#ifdef DT$_RF31 DT_ENT(RF31),#endif#ifdef DT$_RF72 DT_ENT(RF72),#endif#ifdef DT$_RAM_DISK DT_ENT(RAM_DISK),#endif#ifdef DT$_RZ25 DT_ENT(RZ25),#endif#ifdef DT$_RZ56 DT_ENT(RZ56),#endif#ifdef DT$_RZ57 DT_ENT(RZ57),#endif#ifdef DT$_RX23S DT_ENT(RX23S),#endif#ifdef DT$_RX33S DT_ENT(RX33S),#endif#ifdef DT$_RA92 DT_ENT(RA92),#endif#ifdef DT$_SSTRIPE DT_ENT(SSTRIPE),#endif#ifdef DT$_RZ23L DT_ENT(RZ23L),#endif#ifdef DT$_RX26 DT_ENT(RX26),#endif#ifdef DT$_RZ57I DT_ENT(RZ57I),#endif#ifdef DT$_RZ31 DT_ENT(RZ31),#endif#ifdef DT$_RZ58 DT_ENT(RZ58),#endif#ifdef DT$_SCSI_MO DT_ENT(SCSI_MO),#endif#ifdef DT$_RWZ01 DT_ENT(RWZ01),#endif#ifdef DT$_RRD42 DT_ENT(RRD42),#endif#ifdef DT$_CD_LOADER_1 DT_ENT(CD_LOADER_1),#endif#ifdef DT$_ESE25 DT_ENT(ESE25),#endif#ifdef DT$_RFH31 DT_ENT(RFH31),#endif#ifdef DT$_RFH72 DT_ENT(RFH72),#endif#ifdef DT$_RF73 DT_ENT(RF73),#endif#ifdef DT$_RFH73 DT_ENT(RFH73),#endif#ifdef DT$_RA72 DT_ENT(RA72),#endif#ifdef DT$_RA71 DT_ENT(RA71),#endif#ifdef DT$_RAH72 DT_ENT(RAH72),#endif#ifdef DT$_RF32 DT_ENT(RF32),#endif#ifdef DT$_RF35 DT_ENT(RF35),#endif#ifdef DT$_RFH32 DT_ENT(RFH32),#endif#ifdef DT$_RFH35 DT_ENT(RFH35),#endif#ifdef DT$_RFF31 DT_ENT(RFF31),#endif#ifdef DT$_RF31F DT_ENT(RF31F),#endif#ifdef DT$_RZ72 DT_ENT(RZ72),#endif#ifdef DT$_RZ73 DT_ENT(RZ73),#endif#ifdef DT$_RZ35 DT_ENT(RZ35),#endif#ifdef DT$_RZ24L DT_ENT(RZ24L),#endif#ifdef DT$_RZ25L DT_ENT(RZ25L),#endif#ifdef DT$_RZ55L DT_ENT(RZ55L),#endif#ifdef DT$_RZ56L DT_ENT(RZ56L),#endif#ifdef DT$_RZ57L DT_ENT(RZ57L),#endif#ifdef DT$_RA73 DT_ENT(RA73),#endif#ifdef DT$_RZ26 DT_ENT(RZ26),#endif#ifdef DT$_RZ36 DT_ENT(RZ36),#endif#ifdef DT$_RZ74 DT_ENT(RZ74),#endif#ifdef DT$_ESE52 DT_ENT(ESE52),#endif#ifdef DT$_ESE56 DT_ENT(ESE56),#endif#ifdef DT$_ESE58 DT_ENT(ESE58),#endif#ifdef DT$_RZ27 DT_ENT(RZ27),#endif#ifdef DT$_RZ37 DT_ENT(RZ37),#endif#ifdef DT$_RZ34L DT_ENT(RZ34L),#endif#ifdef DT$_RZ35L DT_ENT(RZ35L),#endif#ifdef DT$_RZ36L DT_ENT(RZ36L),#endif#ifdef DT$_RZ38 DT_ENT(RZ38),#endif#ifdef DT$_RZ75 DT_ENT(RZ75),#endif#ifdef DT$_RZ59 DT_ENT(RZ59),#endif#ifdef DT$_RZ13 DT_ENT(RZ13),#endif#ifdef DT$_RZ14 DT_ENT(RZ14),#endif#ifdef DT$_RZ15 DT_ENT(RZ15),#endif#ifdef DT$_RZ16 DT_ENT(RZ16),#endif#ifdef DT$_RZ17 DT_ENT(RZ17),#endif#ifdef DT$_RZ18 DT_ENT(RZ18),#endif#ifdef DT$_EZ51 DT_ENT(EZ51),#endif#ifdef DT$_EZ52 DT_ENT(EZ52),#endif#ifdef DT$_EZ53 DT_ENT(EZ53),#endif#ifdef DT$_EZ54 DT_ENT(EZ54),#endif#ifdef DT$_EZ58 DT_ENT(EZ58),#endif#ifdef DT$_EF51 DT_ENT(EF51),#endif#ifdef DT$_EF52 DT_ENT(EF52),#endif#ifdef DT$_EF53 DT_ENT(EF53),#endif#ifdef DT$_EF54 DT_ENT(EF54),#endif#ifdef DT$_EF58 DT_ENT(EF58),#endif#ifdef DT$_RF36 DT_ENT(RF36),#endif#ifdef DT$_RF37 DT_ENT(RF37),#endif#ifdef DT$_RF74 DT_ENT(RF74),#endif#ifdef DT$_RF75 DT_ENT(RF75),#endif#ifdef DT$_HSZ10 DT_ENT(HSZ10),#endif#ifdef DT$_RZ28 DT_ENT(RZ28),#endif#ifdef DT$_GENERIC_RX DT_ENT(GENERIC_RX),#endif#ifdef DT$_FD1 DT_ENT(FD1),#endif#ifdef DT$_FD2 DT_ENT(FD2),#endif#ifdef DT$_FD3 DT_ENT(FD3),#endif#ifdef DT$_FD4 DT_ENT(FD4),#endif#ifdef DT$_FD5 DT_ENT(FD5),#endif#ifdef DT$_FD6 DT_ENT(FD6),#endif#ifdef DT$_FD7 DT_ENT(FD7),#endif#ifdef DT$_FD8 DT_ENT(FD8),#endif#ifdef DT$_RZ29 DT_ENT(RZ29),#endif#ifdef DT$_RZ26L DT_ENT(RZ26L),#endif#ifdef DT$_RRD43 DT_ENT(RRD43),#endif#ifdef DT$_RRD44 DT_ENT(RRD44),#endif#ifdef DT$_HSX00 DT_ENT(HSX00),#endif#ifdef DT$_HSX01 DT_ENT(HSX01),#endif#ifdef DT$_RZ26B DT_ENT(RZ26B),#endif#ifdef DT$_RZ27B DT_ENT(RZ27B),#endif#ifdef DT$_RZ28B DT_ENT(RZ28B),#endif#ifdef DT$_RZ29B DT_ENT(RZ29B),#endif#ifdef DT$_RZ73B DT_ENT(RZ73B),#endif#ifdef DT$_RZ74B DT_ENT(RZ74B),#endif#ifdef DT$_RZ75B DT_ENT(RZ75B),#endif#ifdef DT$_RWZ21 DT_ENT(RWZ21),#endif#ifdef DT$_RZ27L DT_ENT(RZ27L),#endif#ifdef DT$_HSZ20 DT_ENT(HSZ20),#endif#ifdef DT$_HSZ40 DT_ENT(HSZ40),#endif#ifdef DT$_HSZ15 DT_ENT(HSZ15),#endif#ifdef DT$_RZ26M DT_ENT(RZ26M),#endif#ifdef DT$_RW504 DT_ENT(RW504),#endif#ifdef DT$_RW510 DT_ENT(RW510),#endif#ifdef DT$_RW514 DT_ENT(RW514),#endif#ifdef DT$_RW516 DT_ENT(RW516),#endif#ifdef DT$_RWZ52 DT_ENT(RWZ52),#endif#ifdef DT$_RWZ53 DT_ENT(RWZ53),#endif#ifdef DT$_RWZ54 DT_ENT(RWZ54),#endif#ifdef DT$_RWZ31 DT_ENT(RWZ31),#endif#ifdef DT$_EZ31 DT_ENT(EZ31),#endif#ifdef DT$_EZ32 DT_ENT(EZ32),#endif#ifdef DT$_EZ33 DT_ENT(EZ33),#endif#ifdef DT$_EZ34 DT_ENT(EZ34),#endif#ifdef DT$_EZ35 DT_ENT(EZ35),#endif#ifdef DT$_EZ31L DT_ENT(EZ31L),#endif#ifdef DT$_EZ32L DT_ENT(EZ32L),#endif#ifdef DT$_EZ33L DT_ENT(EZ33L),#endif#ifdef DT$_RZ28L DT_ENT(RZ28L),#endif#ifdef DT$_RWZ51 DT_ENT(RWZ51),#endif#ifdef DT$_EZ56R DT_ENT(EZ56R),#endif#ifdef DT$_RAID0 DT_ENT(RAID0),#endif#ifdef DT$_RAID5 DT_ENT(RAID5),#endif#ifdef DT$_CONSOLE_CALLBACK DT_ENT(CONSOLE_CALLBACK),#endif#ifdef DT$_FILES_64 DT_ENT(FILES_64),#endif#ifdef DT$_SWXCR DT_ENT(SWXCR),#endif#ifdef DT$_SNAPPY_DISK DT_ENT(SNAPPY_DISK),#endif#ifdef DT$_SNAPPY_POOL DT_ENT(SNAPPY_POOL),#endif#ifdef DT$_USB_CB_DISK DT_ENT(USB_CB_DISK),#endif#ifdef DT$_TE16 DT_ENT(TE16),#endif#ifdef DT$_TU45 DT_ENT(TU45),#endif#ifdef DT$_TU77 DT_ENT(TU77),#endif#ifdef DT$_TS11 DT_ENT(TS11),#endif#ifdef DT$_TU78 DT_ENT(TU78),#endif#ifdef DT$_TA78 DT_ENT(TA78),#endif#ifdef DT$_TU80 DT_ENT(TU80),#endif#ifdef DT$_TU81 DT_ENT(TU81),#endif#ifdef DT$_TA81 DT_ENT(TA81),#endif#ifdef DT$_TK50 DT_ENT(TK50),#endif#ifdef DT$_MR_TU70 DT_ENT(MR_TU70),#endif#ifdef DT$_MR_TU72 DT_ENT(MR_TU72),#endif#ifdef DT$_MW_TSU05 DT_ENT(MW_TSU05),#endif#ifdef DT$_MW_TSV05 DT_ENT(MW_TSV05),#endif#ifdef DT$_TK70 DT_ENT(TK70),#endif#ifdef DT$_RV20 DT_ENT(RV20),#endif#ifdef DT$_RV80 DT_ENT(RV80),#endif#ifdef DT$_TK60 DT_ENT(TK60),#endif#ifdef DT$_GENERIC_TU DT_ENT(GENERIC_TU),#endif#ifdef DT$_TA79 DT_ENT(TA79),#endif#ifdef DT$_TAPE9 DT_ENT(TAPE9),#endif#ifdef DT$_TA90 DT_ENT(TA90),#endif#ifdef DT$_TF30 DT_ENT(TF30),#endif#ifdef DT$_TF85 DT_ENT(TF85),#endif#ifdef DT$_TF70 DT_ENT(TF70),#endif#ifdef DT$_RV60 DT_ENT(RV60),#endif#ifdef DT$_TZ30 DT_ENT(TZ30),#endif#ifdef DT$_TM32 DT_ENT(TM32),#endif#ifdef DT$_TZX0 DT_ENT(TZX0),#endif#ifdef DT$_TSZ05 DT_ENT(TSZ05),#endif#ifdef DT$_GENERIC_MK DT_ENT(GENERIC_MK),#endif#ifdef DT$_TK50S DT_ENT(TK50S),#endif#ifdef DT$_TZ30S DT_ENT(TZ30S),#endif#ifdef DT$_TK70L DT_ENT(TK70L),#endif#ifdef DT$_TLZ04 DT_ENT(TLZ04),#endif#ifdef DT$_TZK10 DT_ENT(TZK10),#endif#ifdef DT$_TSZ07 DT_ENT(TSZ07),#endif#ifdef DT$_TSZ08 DT_ENT(TSZ08),#endif#ifdef DT$_TA90E DT_ENT(TA90E),#endif#ifdef DT$_TZK11 DT_ENT(TZK11),#endif#ifdef DT$_TZ85 DT_ENT(TZ85),#endif#ifdef DT$_TZ86 DT_ENT(TZ86),#endif#ifdef DT$_TZ87 DT_ENT(TZ87),#endif#ifdef DT$_TZ857 DT_ENT(TZ857),#endif#ifdef DT$_EXABYTE DT_ENT(EXABYTE),#endif#ifdef DT$_TAPE_LOADER_1 DT_ENT(TAPE_LOADER_1),#endif#ifdef DT$_TA91 DT_ENT(TA91),#endif#ifdef DT$_TLZ06 DT_ENT(TLZ06),#endif#ifdef DT$_TA85 DT_ENT(TA85),#endif#ifdef DT$_TKZ60 DT_ENT(TKZ60),#endif#ifdef DT$_TLZ6 DT_ENT(TLZ6),#endif#ifdef DT$_TZ867 DT_ENT(TZ867),#endif#ifdef DT$_TZ877 DT_ENT(TZ877),#endif#ifdef DT$_TAD85 DT_ENT(TAD85),#endif#ifdef DT$_TF86 DT_ENT(TF86),#endif#ifdef DT$_TKZ09 DT_ENT(TKZ09),#endif#ifdef DT$_TA86 DT_ENT(TA86),#endif#ifdef DT$_TA87 DT_ENT(TA87),#endif#ifdef DT$_TD34 DT_ENT(TD34),#endif#ifdef DT$_TD44 DT_ENT(TD44),#endif#ifdef DT$_HST00 DT_ENT(HST00),#endif#ifdef DT$_HST01 DT_ENT(HST01),#endif#ifdef DT$_TLZ07 DT_ENT(TLZ07),#endif#ifdef DT$_TLZ7 DT_ENT(TLZ7),#endif#ifdef DT$_TZ88 DT_ENT(TZ88),#endif#ifdef DT$_TZ885 DT_ENT(TZ885),#endif#ifdef DT$_TZ887 DT_ENT(TZ887),#endif#ifdef DT$_TZ89 DT_ENT(TZ89),#endif#ifdef DT$_TZ895 DT_ENT(TZ895),#endif#ifdef DT$_TZ897 DT_ENT(TZ897),#endif#ifdef DT$_TZ875 DT_ENT(TZ875),#endif#ifdef DT$_TL810 DT_ENT(TL810),#endif#ifdef DT$_TL820 DT_ENT(TL820),#endif#ifdef DT$_TZ865 DT_ENT(TZ865),#endif#ifdef DT$_TTYUNKN DT_ENT(TTYUNKN),#endif#ifdef DT$_VT05 DT_ENT(VT05),#endif#ifdef DT$_FT1 DT_ENT(FT1),#endif#ifdef DT$_FT2 DT_ENT(FT2),#endif#ifdef DT$_FT3 DT_ENT(FT3),#endif#ifdef DT$_FT4 DT_ENT(FT4),#endif#ifdef DT$_FT5 DT_ENT(FT5),#endif#ifdef DT$_FT6 DT_ENT(FT6),#endif#ifdef DT$_FT7 DT_ENT(FT7),#endif#ifdef DT$_FT8 DT_ENT(FT8),#endif#ifdef DT$_LAX DT_ENT(LAX),#endif#ifdef DT$_LA36 DT_ENT(LA36),#endif#ifdef DT$_LA120 DT_ENT(LA120),#endif#ifdef DT$_VT5X DT_ENT(VT5X),#endif#ifdef DT$_VT52 DT_ENT(VT52),#endif#ifdef DT$_VT55 DT_ENT(VT55),#endif#ifdef DT$_TQ_BTS DT_ENT(TQ_BTS),#endif#ifdef DT$_TEK401X DT_ENT(TEK401X),#endif#ifdef DT$_VT100 DT_ENT(VT100),#endif#ifdef DT$_VK100 DT_ENT(VK100),#endif#ifdef DT$_VT173 DT_ENT(VT173),#endif#ifdef DT$_LA34 DT_ENT(LA34),#endif#ifdef DT$_LA38 DT_ENT(LA38),#endif#ifdef DT$_LA12 DT_ENT(LA12),#endif#ifdef DT$_LA24 DT_ENT(LA24),#endif#ifdef DT$_LA100 DT_ENT(LA100),#endif#ifdef DT$_LQP02 DT_ENT(LQP02),#endif#ifdef DT$_VT101 DT_ENT(VT101),#endif#ifdef DT$_VT102 DT_ENT(VT102),#endif#ifdef DT$_VT105 DT_ENT(VT105),#endif#ifdef DT$_VT125 DT_ENT(VT125),#endif#ifdef DT$_VT131 DT_ENT(VT131),#endif#ifdef DT$_VT132 DT_ENT(VT132),#endif#ifdef DT$_DZ11 DT_ENT(DZ11),#endif#ifdef DT$_DZ32 DT_ENT(DZ32),#endif#ifdef DT$_DZ730 DT_ENT(DZ730),#endif#ifdef DT$_DMZ32 DT_ENT(DMZ32),#endif#ifdef DT$_DHV DT_ENT(DHV),#endif#ifdef DT$_DHU DT_ENT(DHU),#endif#ifdef DT$_SLU DT_ENT(SLU),#endif#ifdef DT$_TERM9 DT_ENT(TERM9),#endif#ifdef DT$_LAT DT_ENT(LAT),#endif#ifdef DT$_VS100 DT_ENT(VS100),#endif#ifdef DT$_VS125 DT_ENT(VS125),#endif#ifdef DT$_VL_VS8200 DT_ENT(VL_VS8200),#endif #ifdef DT$_VD DT_ENT(VD),#endif#ifdef DT$_DECW_OUTPUT DT_ENT(DECW_OUTPUT),#endif#ifdef DT$_DECW_INPUT DT_ENT(DECW_INPUT),#endif#ifdef DT$_DECW_PSEUDO DT_ENT(DECW_PSEUDO),#endif#ifdef DT$_DMC11 DT_ENT(DMC11),#endif#ifdef DT$_DMR11 DT_ENT(DMR11),#endif#ifdef DT$_XK_3271 DT_ENT(XK_3271),#endif#ifdef DT$_XJ_2780 DT_ENT(XJ_2780),#endif#ifdef DT$_NW_X25 DT_ENT(NW_X25),#endif#ifdef DT$_NV_X29 DT_ENT(NV_X29),#endif#ifdef DT$_SB_ISB11 DT_ENT(SB_ISB11),#endif#ifdef DT$_MX_MUX200 DT_ENT(MX_MUX200),#endif#ifdef DT$_DMP11 DT_ENT(DMP11),#endif#ifdef DT$_DMF32 DT_ENT(DMF32),#endif#ifdef DT$_XV_3271 DT_ENT(XV_3271),#endif #ifdef DT$_CI DT_ENT(CI),#endif #ifdef DT$_NI DT_ENT(NI),#endif#ifdef DT$_UNA11 DT_ENT(UNA11),#endif#ifdef DT$_DEUNA DT_ENT(DEUNA),#endif#ifdef DT$_YN_X25 DT_ENT(YN_X25),#endif#ifdef DT$_YO_X25 DT_ENT(YO_X25),#endif#ifdef DT$_YP_ADCCP DT_ENT(YP_ADCCP),#endif#ifdef DT$_YQ_3271 DT_ENT(YQ_3271),#endif#ifdef DT$_YR_DDCMP DT_ENT(YR_DDCMP),#endif#ifdef DT$_YS_SDLC DT_ENT(YS_SDLC),#endif#ifdef DT$_UK_KTC32 DT_ENT(UK_KTC32),#endif#ifdef DT$_DEQNA DT_ENT(DEQNA),#endif#ifdef DT$_DMV11 DT_ENT(DMV11),#endif#ifdef DT$_ES_LANCE DT_ENT(ES_LANCE),#endif#ifdef DT$_DELUA DT_ENT(DELUA),#endif#ifdef DT$_NQ_3271 DT_ENT(NQ_3271),#endif#ifdef DT$_DMB32 DT_ENT(DMB32),#endif#ifdef DT$_YI_KMS11K DT_ENT(YI_KMS11K),#endif#ifdef DT$_ET_DEBNT DT_ENT(ET_DEBNT),#endif#ifdef DT$_ET_DEBNA DT_ENT(ET_DEBNA),#endif#ifdef DT$_SJ_DSV11 DT_ENT(SJ_DSV11),#endif#ifdef DT$_SL_DSB32 DT_ENT(SL_DSB32),#endif#ifdef DT$_ZS_DST32 DT_ENT(ZS_DST32),#endif#ifdef DT$_XQ_DELQA DT_ENT(XQ_DELQA),#endif#ifdef DT$_ET_DEBNI DT_ENT(ET_DEBNI),#endif#ifdef DT$_EZ_SGEC DT_ENT(EZ_SGEC),#endif#ifdef DT$_EX_DEMNA DT_ENT(EX_DEMNA),#endif#ifdef DT$_DIV32 DT_ENT(DIV32),#endif#ifdef DT$_XQ_DEQTA DT_ENT(XQ_DEQTA),#endif#ifdef DT$_FT_NI DT_ENT(FT_NI),#endif#ifdef DT$_EP_LANCE DT_ENT(EP_LANCE),#endif#ifdef DT$_KWV32 DT_ENT(KWV32),#endif#ifdef DT$_SM_DSF32 DT_ENT(SM_DSF32),#endif#ifdef DT$_FX_DEMFA DT_ENT(FX_DEMFA),#endif#ifdef DT$_SF_DSF32 DT_ENT(SF_DSF32),#endif#ifdef DT$_SE_DUP11 DT_ENT(SE_DUP11),#endif#ifdef DT$_SE_DPV11 DT_ENT(SE_DPV11),#endif#ifdef DT$_ZT_DSW DT_ENT(ZT_DSW),#endif#ifdef DT$_FC_DEFZA DT_ENT(FC_DEFZA),#endif#ifdef DT$_EC_PMAD DT_ENT(EC_PMAD),#endif#ifdef DT$_EZ_TGEC DT_ENT(EZ_TGEC),#endif#ifdef DT$_EA_DEANA DT_ENT(EA_DEANA),#endif#ifdef DT$_EY_NITC2 DT_ENT(EY_NITC2),#endif#ifdef DT$_ER_DE422 DT_ENT(ER_DE422),#endif#ifdef DT$_ER_DE200 DT_ENT(ER_DE200),#endif#ifdef DT$_EW_TULIP DT_ENT(EW_TULIP),#endif#ifdef DT$_FA_DEFAA DT_ENT(FA_DEFAA),#endif#ifdef DT$_FC_DEFTA DT_ENT(FC_DEFTA),#endif#ifdef DT$_FQ_DEFQA DT_ENT(FQ_DEFQA),#endif#ifdef DT$_FR_DEFEA DT_ENT(FR_DEFEA),#endif#ifdef DT$_FW_DEFPA DT_ENT(FW_DEFPA),#endif#ifdef DT$_IC_DETRA DT_ENT(IC_DETRA),#endif#ifdef DT$_IQ_DEQRA DT_ENT(IQ_DEQRA),#endif#ifdef DT$_IR_DW300 DT_ENT(IR_DW300),#endif#ifdef DT$_ZR_SCC DT_ENT(ZR_SCC),#endif#ifdef DT$_ZY_DSYT1 DT_ENT(ZY_DSYT1),#endif#ifdef DT$_ZE_DNSES DT_ENT(ZE_DNSES),#endif#ifdef DT$_ER_DE425 DT_ENT(ER_DE425),#endif#ifdef DT$_EW_DE435 DT_ENT(EW_DE435),#endif#ifdef DT$_ER_DE205 DT_ENT(ER_DE205),#endif#ifdef DT$_HC_OTTO DT_ENT(HC_OTTO),#endif#ifdef DT$_ZS_PBXDI DT_ENT(ZS_PBXDI),#endif#ifdef DT$_EL_ELAN DT_ENT(EL_ELAN),#endif#ifdef DT$_HW_OTTO DT_ENT(HW_OTTO),#endif#ifdef DT$_EO_3C598 DT_ENT(EO_3C598),#endif#ifdef DT$_IW_TC4048 DT_ENT(IW_TC4048),#endif#ifdef DT$_EW_DE450 DT_ENT(EW_DE450),#endif#ifdef DT$_EW_DE500 DT_ENT(EW_DE500),#endif#ifdef DT$_CL_CLIP DT_ENT(CL_CLIP),#endif#ifdef DT$_ZW_PBXDP DT_ENT(ZW_PBXDP),#endif#ifdef DT$_HW_METEOR DT_ENT(HW_METEOR),#endif#ifdef DT$_ER_DE305 DT_ENT(ER_DE305),#endif#ifdef DT$_EW_DEGPA DT_ENT(EW_DEGPA),#endif#ifdef DT$_IW_RACORE DT_ENT(IW_RACORE),#endif#ifdef DT$_EB_SMLAN DT_ENT(EB_SMLAN),#endif#ifdef DT$_EI_82558 DT_ENT(EI_82558),#endif#ifdef DT$_EI_82559 DT_ENT(EI_82559),#endif#ifdef DT$_HW_HE622 DT_ENT(HW_HE622),#endif#ifdef DT$_HW_HE155 DT_ENT(HW_HE155),#endif#ifdef DT$_EW_BCM5703 DT_ENT(EW_BCM5703),#endif#ifdef DT$_EW_BCM5704 DT_ENT(EW_BCM5704),#endif#ifdef DT$_EW_XFRAME DT_ENT(EW_XFRAME),#endif#ifdef DT$_EW_BCM5701 DT_ENT(EW_BCM5701),#endif#ifdef DT$_LL_LLAN DT_ENT(LL_LLAN),#endif#ifdef DT$_EG_ELP_FC DT_ENT(EG_ELP_FC),#endif#ifdef DT$_EG_Q_FC DT_ENT(EG_Q_FC),#endif#ifdef DT$_EI_82540 DT_ENT(EI_82540),#endif#ifdef DT$_VL_VLAN DT_ENT(VL_VLAN),#endif#ifdef DT$_EW_BCM5715 DT_ENT(EW_BCM5715),#endif#ifdef DT$_LP11 DT_ENT(LP11),#endif#ifdef DT$_LA11 DT_ENT(LA11),#endif#ifdef DT$_LA180 DT_ENT(LA180),#endif#ifdef DT$_LC_DMF32 DT_ENT(LC_DMF32),#endif#ifdef DT$_LI_DMB32 DT_ENT(LI_DMB32),#endif#ifdef DT$_PRTR9 DT_ENT(PRTR9),#endif#ifdef DT$_SCSI_SCANNER_1 DT_ENT(SCSI_SCANNER_1),#endif#ifdef DT$_PC_PRINTER DT_ENT(PC_PRINTER),#endif#ifdef DT$_CR11 DT_ENT(CR11),#endif#ifdef DT$_MBX DT_ENT(MBX),#endif#ifdef DT$_SHRMBX DT_ENT(SHRMBX),#endif#ifdef DT$_NULL DT_ENT(NULL),#endif#ifdef DT$_PIPE DT_ENT(PIPE),#endif#ifdef DT$_DAP_DEVICE DT_ENT(DAP_DEVICE),#endif#ifdef DT$_LPA11 DT_ENT(LPA11),#endif#ifdef DT$_DR780 DT_ENT(DR780),#endif#ifdef DT$_DR750 DT_ENT(DR750),#endif#ifdef DT$_DR11W DT_ENT(DR11W),#endif#ifdef DT$_PCL11R DT_ENT(PCL11R),#endif#ifdef DT$_PCL11T DT_ENT(PCL11T),#endif#ifdef DT$_DR11C DT_ENT(DR11C),#endif#ifdef DT$_BS_DT07 DT_ENT(BS_DT07),#endif#ifdef DT$_XP_PCL11B DT_ENT(XP_PCL11B),#endif#ifdef DT$_IX_IEX11 DT_ENT(IX_IEX11),#endif#ifdef DT$_FP_FEPCM DT_ENT(FP_FEPCM),#endif#ifdef DT$_TK_FCM DT_ENT(TK_FCM),#endif#ifdef DT$_XI_DR11C DT_ENT(XI_DR11C),#endif#ifdef DT$_XA_DRV11WA DT_ENT(XA_DRV11WA),#endif#ifdef DT$_DRB32 DT_ENT(DRB32),#endif#ifdef DT$_HX_DRQ3B DT_ENT(HX_DRQ3B),#endif#ifdef DT$_DECVOICE DT_ENT(DECVOICE),#endif#ifdef DT$_DTC04 DT_ENT(DTC04),#endif#ifdef DT$_DTC05 DT_ENT(DTC05),#endif#ifdef DT$_DTCN5 DT_ENT(DTCN5),#endif#ifdef DT$_AMD79C30A DT_ENT(AMD79C30A),#endif#ifdef DT$_CI780 DT_ENT(CI780),#endif#ifdef DT$_CI750 DT_ENT(CI750),#endif#ifdef DT$_UQPORT DT_ENT(UQPORT),#endif#ifdef DT$_UDA50 DT_ENT(UDA50),#endif#ifdef DT$_UDA50A DT_ENT(UDA50A),#endif#ifdef DT$_LESI DT_ENT(LESI),#endif#ifdef DT$_TU81P DT_ENT(TU81P),#endif#ifdef DT$_RDRX DT_ENT(RDRX),#endif#ifdef DT$_TK50P DT_ENT(TK50P),#endif#ifdef DT$_RUX50P DT_ENT(RUX50P),#endif#ifdef DT$_RC26P DT_ENT(RC26P),#endif#ifdef DT$_QDA50 DT_ENT(QDA50),#endif#ifdef DT$_KDA50 DT_ENT(KDA50),#endif#ifdef DT$_BDA50 DT_ENT(BDA50),#endif#ifdef DT$_KDB50 DT_ENT(KDB50),#endif#ifdef DT$_RRD50P DT_ENT(RRD50P),#endif#ifdef DT$_QDA25 DT_ENT(QDA25),#endif#ifdef DT$_KDA25 DT_ENT(KDA25),#endif#ifdef DT$_BCI750 DT_ENT(BCI750),#endif#ifdef DT$_BCA DT_ENT(BCA),#endif#ifdef DT$_RQDX3 DT_ENT(RQDX3),#endif#ifdef DT$_NISCA DT_ENT(NISCA),#endif#ifdef DT$_AIO DT_ENT(AIO),#endif#ifdef DT$_KFBTA DT_ENT(KFBTA),#endif#ifdef DT$_AIE DT_ENT(AIE),#endif#ifdef DT$_DEBNT DT_ENT(DEBNT),#endif#ifdef DT$_BSA DT_ENT(BSA),#endif#ifdef DT$_KSB50 DT_ENT(KSB50),#endif#ifdef DT$_TK70P DT_ENT(TK70P),#endif#ifdef DT$_RV20P DT_ENT(RV20P),#endif#ifdef DT$_RV80P DT_ENT(RV80P),#endif#ifdef DT$_TK60P DT_ENT(TK60P),#endif#ifdef DT$_SII DT_ENT(SII),#endif#ifdef DT$_KFSQSA DT_ENT(KFSQSA),#endif#ifdef DT$_KFQSA DT_ENT(KFQSA),#endif#ifdef DT$_SHAC DT_ENT(SHAC),#endif#ifdef DT$_CIXCD DT_ENT(CIXCD),#endif#ifdef DT$_N5380 DT_ENT(N5380),#endif#ifdef DT$_SCSII DT_ENT(SCSII),#endif#ifdef DT$_HSX50 DT_ENT(HSX50),#endif#ifdef DT$_KDM70 DT_ENT(KDM70),#endif#ifdef DT$_TM32P DT_ENT(TM32P),#endif#ifdef DT$_TK7LP DT_ENT(TK7LP),#endif#ifdef DT$_SWIFT DT_ENT(SWIFT),#endif#ifdef DT$_N53C94 DT_ENT(N53C94),#endif#ifdef DT$_KFMSA DT_ENT(KFMSA),#endif#ifdef DT$_SCSI_XTENDR DT_ENT(SCSI_XTENDR),#endif#ifdef DT$_FT_TRACE_RAM DT_ENT(FT_TRACE_RAM),#endif#ifdef DT$_XVIB DT_ENT(XVIB),#endif#ifdef DT$_XZA_SCSI DT_ENT(XZA_SCSI),#endif#ifdef DT$_XZA_DSSI DT_ENT(XZA_DSSI),#endif#ifdef DT$_N710_SCSI DT_ENT(N710_SCSI),#endif#ifdef DT$_N710_DSSI DT_ENT(N710_DSSI),#endif#ifdef DT$_AHA1742A DT_ENT(AHA1742A),#endif#ifdef DT$_TZA_SCSI DT_ENT(TZA_SCSI),#endif#ifdef DT$_N810_SCSI DT_ENT(N810_SCSI),#endif#ifdef DT$_CIPCA DT_ENT(CIPCA),#endif#ifdef DT$_ISP1020 DT_ENT(ISP1020),#endif#ifdef DT$_MC_SPUR DT_ENT(MC_SPUR),#endif#ifdef DT$_PZA_SCSI DT_ENT(PZA_SCSI),#endif#ifdef DT$_MCSCA DT_ENT(MCSCA),#endif#ifdef DT$_SMCI DT_ENT(SMCI),#endif#ifdef DT$_KZPCM_SCSI DT_ENT(KZPCM_SCSI),#endif#ifdef DT$_SYM896_SCSI DT_ENT(SYM896_SCSI),#endif#ifdef DT$_FCP_SCSI DT_ENT(FCP_SCSI),#endif#ifdef DT$_LP7000_FC DT_ENT(LP7000_FC),#endif#ifdef DT$_SYM895_SCSI DT_ENT(SYM895_SCSI),#endif#ifdef DT$_KZPCA_SCSI DT_ENT(KZPCA_SCSI),#endif#ifdef DT$_ADAPTEC7892_SCSI DT_ENT(ADAPTEC7892_SCSI),#endif#ifdef DT$_ADAPTEC7895_SCSI DT_ENT(ADAPTEC7895_SCSI),#endif#ifdef DT$_ADAPTEC7897_SCSI DT_ENT(ADAPTEC7897_SCSI),#endif#ifdef DT$_ADAPTEC7899_SCSI DT_ENT(ADAPTEC7899_SCSI),#endif#ifdef DT$_CISS DT_ENT(CISS),#endif#ifdef DT$_ISP23XX_FC DT_ENT(ISP23XX_FC),#endif#ifdef DT$_LSI1010_SCSI DT_ENT(LSI1010_SCSI),#endif#ifdef DT$_LSI1030_SCSI DT_ENT(LSI1030_SCSI),#endif#ifdef DT$_ISP24XX_FC DT_ENT(ISP24XX_FC),#endif#ifdef DT$_LSI106X_SAS DT_ENT(LSI106X_SAS),#endif#ifdef DT$_SW_ISCSI DT_ENT(SW_ISCSI),#endif#ifdef DT$_LP8000_FC DT_ENT(LP8000_FC),#endif#ifdef DT$_LP9000_FC DT_ENT(LP9000_FC),#endif#ifdef DT$_LP9802_FC DT_ENT(LP9802_FC),#endif#ifdef DT$_LP10000_FC DT_ENT(LP10000_FC),#endif#ifdef DT$_LP11002_FC DT_ENT(LP11002_FC),#endif#ifdef DT$_ISP243X_FC DT_ENT(ISP243X_FC),#endif#ifdef DT$_EP2422_FC DT_ENT(EP2422_FC),#endif#ifdef DT$_DN11 DT_ENT(DN11),#endif #ifdef DT$_PV DT_ENT(PV),#endif#ifdef DT$_SFUN9 DT_ENT(SFUN9),#endif#ifdef DT$_USER9 DT_ENT(USER9),#endif#ifdef DT$_GENERIC_SCSI DT_ENT(GENERIC_SCSI),#endif#ifdef DT$_DMA_520 DT_ENT(DMA_520),#endif#ifdef DT$_T3270 DT_ENT(T3270),#endif#ifdef DT$_IPMI DT_ENT(IPMI),#endif#ifdef DT$_ACPI_SE DT_ENT(ACPI_SE),#endif {NULL, 0}};struct GenericID {3 char *GenericName; /* Pointer to the item name */D int SyscallValue; /* Value to use in the getDVI item list */I int BufferLen; /* Length the return va buf needs to be. (no nul */K /* terminators, so must be careful with the return */# /* values. */9 int ReturnType; /* Type of data the item returns */? int InOrOut; /* Is this an input or an output item? */}; struct GenericID DevInfoList[] ={#ifdef DVI$_ACPPID" DVI_ENT(ACPPID, 4, IS_LONGWORD),#endif#ifdef DVI$_ACPTYPE DVI_ENT(ACPTYPE, 4, IS_ENUM),#endif#ifdef DVI$_ALLDEVNAM$ DVI_ENT(ALLDEVNAM, 64, IS_STRING),#endif#ifdef DVI$_ALLOCLASS% DVI_ENT(ALLOCLASS, 4, IS_LONGWORD),#endif#ifdef DVI$_ALT_HOST_AVAIL* DVI_ENT(ALT_HOST_AVAIL, 4, IS_LONGWORD),#endif#ifdef DVI$_ALT_HOST_NAME( DVI_ENT(ALT_HOST_NAME, 64, IS_STRING),#endif#ifdef DVI$_ALT_HOST_TYPE( DVI_ENT(ALT_HOST_TYPE, 64, IS_STRING),#endif#ifdef DVI$_CLUSTER# DVI_ENT(CLUSTER, 4, IS_LONGWORD),#endif#ifdef DVI$_CYLINDERS% DVI_ENT(CYLINDERS, 4, IS_LONGWORD),#endif#ifdef DVI$_DEVBUFSIZ% DVI_ENT(DEVBUFSIZ, 4, IS_LONGWORD),#endif#ifdef DVI$_DEVCHAR! DVI_ENT(DEVCHAR, 4, IS_BITMAP),#endif#ifdef DVI$_DEVCLASS DVI_ENT(DEVCLASS, 4, IS_ENUM),#endif#ifdef DVI$_DEVDEPEND# DVI_ENT(DEVDEPEND, 4, IS_BITMAP),#endif#ifdef DVI$_DEVDEPEND2$ DVI_ENT(DEVDEPEND2, 4, IS_BITMAP),#endif#ifdef DVI$_DEVICE_TYPE_NAME+ DVI_ENT(DEVICE_TYPE_NAME, 64, IS_STRING),#endif#ifdef DVI$_DEVLOCKNAM% DVI_ENT(DEVLOCKNAM, 64, IS_STRING),#endif#ifdef DVI$_DEVNAM! DVI_ENT(DEVNAM, 64, IS_STRING),#endif#ifdef DVI$_DEVSTS DVI_ENT(DEVSTS, 4, IS_BITMAP),#endif#ifdef DVI$_DEVTYPE# DVI_ENT(DEVTYPE, 4, IS_LONGWORD),#endif#ifdef DVI$_DFS_ACCESS& DVI_ENT(DFS_ACCESS, 4, IS_LONGWORD),#endif#ifdef DVI$_DISPLAY_DEVNAM* DVI_ENT(DISPLAY_DEVNAM, 256, IS_STRING),#endif#ifdef DVI$_ERRCNT" DVI_ENT(ERRCNT, 4, IS_LONGWORD),#endif#ifdef DVI$_FREEBLOCKS& DVI_ENT(FREEBLOCKS, 4, IS_LONGWORD),#endif#ifdef DVI$_FULLDEVNAM% DVI_ENT(FULLDEVNAM, 64, IS_STRING),d#endif#ifdef DVI$_HOST_AVAIL& DVI_ENT(HOST_AVAIL, 4, IS_LONGWORD),#endif#ifdef DVI$_HOST_COUNT& DVI_ENT(HOST_COUNT, 4, IS_LONGWORD),#endif#ifdef DVI$_HOST_NAME$ DVI_ENT(HOST_NAME, 64, IS_STRING),#endif#ifdef DVI$_HOST_TYPE*$ DVI_ENT(HOST_TYPE, 64, IS_STRING),#endif#ifdef DVI$_LOCKID" DVI_ENT(LOCKID, 4, IS_LONGWORD),#endif#ifdef DVI$_LOGVOLNAM $ DVI_ENT(LOGVOLNAM, 64, IS_STRING),#endif#ifdef DVI$_MAXBLOCK$ DVI_ENT(MAXBLOCK, 4, IS_LONGWORD),#endif#ifdef DVI$_MAXFILES$ DVI_ENT(MAXFILES, 4, IS_LONGWORD),#endif#ifdef DVI$_MEDIA_ID$ DVI_ENT(MEDIA_ID, 4, IS_LONGWORD),#endif#ifdef DVI$_MEDIA_NAME% DVI_ENT(MEDIA_NAME, 64, IS_STRING),*#endif#ifdef DVI$_MEDIA_TYPE% DVI_ENT(MEDIA_TYPE, 64, IS_STRING),r#endif#ifdef DVI$_MOUNTCNT$ DVI_ENT(MOUNTCNT, 4, IS_LONGWORD),#endif#ifdef DVI$_MSCP_UNIT_NUMBER, DVI_ENT(MSCP_UNIT_NUMBER, 4, IS_LONGWORD),#endif#ifdef DVI$_NEXTDEVNAM% DVI_ENT(NEXTDEVNAM, 64, IS_STRING), #endif#ifdef DVI$_OPCNT ! DVI_ENT(OPCNT, 4, IS_LONGWORD), #endif#ifdef DVI$_OWNUIC" DVI_ENT(OWNUIC, 4, IS_LONGWORD),#endif#ifdef DVI$_PIDe DVI_ENT(PID, 4, IS_LONGWORD),t#endif#ifdef DVI$_RECSIZ" DVI_ENT(RECSIZ, 4, IS_LONGWORD),#endif#ifdef DVI$_REFCNT" DVI_ENT(REFCNT, 4, IS_LONGWORD),#endif#ifdef DVI$_REMOTE_DEVICEa) DVI_ENT(REMOTE_DEVICE, 4, IS_LONGWORD),#endif#ifdef DVI$_ROOTDEVNAM% DVI_ENT(ROOTDEVNAM, 64, IS_STRING),s#endif#ifdef DVI$_SECTORSv# DVI_ENT(SECTORS, 4, IS_LONGWORD), #endif#ifdef DVI$_SERIALNUM$% DVI_ENT(SERIALNUM, 4, IS_LONGWORD),)#endif#ifdef DVI$_SERVED_DEVICE ) DVI_ENT(SERVED_DEVICE, 4, IS_LONGWORD),;#endif #ifdef DVI$_SHDW_CATCHUP_COPYING0 DVI_ENT(SHDW_CATCHUP_COPYING, 4, IS_LONGWORD),#endif#ifdef DVI$_SHDW_FAILED_MEMBER. DVI_ENT(SHDW_FAILED_MEMBER, 4, IS_LONGWORD),#endif#ifdef DVI$_SHDW_MASTER,' DVI_ENT(SHDW_MASTER, 4, IS_LONGWORD), #endif#ifdef DVI$_SHDW_MASTER_NAME+ DVI_ENT(SHDW_MASTER_NAME, 64, IS_STRING),t#endif#ifdef DVI$_SHDW_MEMBERf' DVI_ENT(SHDW_MEMBER, 4, IS_LONGWORD), #endif#ifdef DVI$_SHDW_MERGE_COPYING. DVI_ENT(SHDW_MERGE_COPYING, 4, IS_LONGWORD),#endif#ifdef DVI$_SHDW_NEXT_MBR_NAME- DVI_ENT(SHDW_NEXT_MBR_NAME, 64, IS_STRING),T#endif#ifdef DVI$_STST DVI_ENT(STS, 4, IS_BITMAP),i#endif#ifdef DVI$_TRACKS" DVI_ENT(TRACKS, 4, IS_LONGWORD),#endif#ifdef DVI$_TRANSCNT$ DVI_ENT(TRANSCNT, 4, IS_LONGWORD),#endif#ifdef DVI$_TT_ACCPORNAM' DVI_ENT(TT_ACCPORNAM, 64, IS_STRING),a#endif#ifdef DVI$_TT_CHARSET$ DVI_ENT(TT_CHARSET, 4, IS_BITMAP),#endif#ifdef DVI$_TT_CS_HANGUL( DVI_ENT(TT_CS_HANGUL, 4, IS_LONGWORD),#endif#ifdef DVI$_TT_CS_HANYU ' DVI_ENT(TT_CS_HANYU, 4, IS_LONGWORD),]#endif#ifdef DVI$_TT_CS_HANZI' DVI_ENT(TT_CS_HANZI, 4, IS_LONGWORD), #endif#ifdef DVI$_TT_CS_KANA& DVI_ENT(TT_CS_KANA, 4, IS_LONGWORD),#endif#ifdef DVI$_TT_CS_KANJI ' DVI_ENT(TT_CS_KANJI, 4, IS_LONGWORD),d#endif#ifdef DVI$_TT_CS_THAI& DVI_ENT(TT_CS_THAI, 4, IS_LONGWORD),#endif#ifdef DVI$_TT_PHYDEVNAM' DVI_ENT(TT_PHYDEVNAM, 64, IS_STRING),W#endif#ifdef DVI$_UNIT DVI_ENT(UNIT, 4, IS_LONGWORD),#endif#ifdef DVI$_VOLCOUNT$ DVI_ENT(VOLCOUNT, 4, IS_LONGWORD),#endif#ifdef DVI$_VOLNAM! DVI_ENT(VOLNAM, 12, IS_STRING), #endif#ifdef DVI$_VOLNUMBERn% DVI_ENT(VOLNUMBER, 4, IS_LONGWORD), #endif#ifdef DVI$_VOLSETMEMe% DVI_ENT(VOLSETMEM, 4, IS_LONGWORD), #endif#ifdef DVI$_VPROT ! DVI_ENT(VPROT, 4, IS_LONGWORD),o#endif#ifdef DVI$_TT_NOECHOt% DVI_ENT(TT_NOECHO, 4, IS_LONGWORD),K#endif#ifdef DVI$_TT_NOTYPEAHD( DVI_ENT(TT_NOTYPEAHD, 4, IS_LONGWORD),#endif#ifdef DVI$_TT_HOSTSYNCn' DVI_ENT(TT_HOSTSYNC, 4, IS_LONGWORD), #endif#ifdef DVI$_TT_TTSYNCE% DVI_ENT(TT_TTSYNC, 4, IS_LONGWORD),#endif#ifdef DVI$_TT_ESCAPEd% DVI_ENT(TT_ESCAPE, 4, IS_LONGWORD),)#endif#ifdef DVI$_TT_LOWER$ DVI_ENT(TT_LOWER, 4, IS_LONGWORD),#endif#ifdef DVI$_TT_MECHTAB& DVI_ENT(TT_MECHTAB, 4, IS_LONGWORD),#endif#ifdef DVI$_TT_WRAPs# DVI_ENT(TT_WRAP, 4, IS_LONGWORD), #endif#ifdef DVI$_TT_LFFILLe% DVI_ENT(TT_LFFILL, 4, IS_LONGWORD),m#endif#ifdef DVI$_TT_SCOPE$ DVI_ENT(TT_SCOPE, 4, IS_LONGWORD),#endif#ifdef DVI$_TT_CRFILL)% DVI_ENT(TT_CRFILL, 4, IS_LONGWORD),T#endif#ifdef DVI$_TT_SETSPEED' DVI_ENT(TT_SETSPEED, 4, IS_LONGWORD),#endif#ifdef DVI$_TT_EIGHTBITf' DVI_ENT(TT_EIGHTBIT, 4, IS_LONGWORD),d#endif#ifdef DVI$_TT_MBXDSABLf' DVI_ENT(TT_MBXDSABL, 4, IS_LONGWORD),A#endif#ifdef DVI$_TT_READSYNCM' DVI_ENT(TT_READSYNC, 4, IS_LONGWORD),D#endif#ifdef DVI$_TT_MECHFORM' DVI_ENT(TT_MECHFORM, 4, IS_LONGWORD),O#endif#ifdef DVI$_TT_NOBRDCSTC' DVI_ENT(TT_NOBRDCST, 4, IS_LONGWORD),C#endif#ifdef DVI$_TT_HALFDUP& DVI_ENT(TT_HALFDUP, 4, IS_LONGWORD),#endif#ifdef DVI$_TT_MODEM$ DVI_ENT(TT_MODEM, 4, IS_LONGWORD),#endif#ifdef DVI$_TT_OPERe# DVI_ENT(TT_OPER, 4, IS_LONGWORD),y#endif#ifdef DVI$_TT_LOCALECHO( DVI_ENT(TT_LOCALECHO, 4, IS_LONGWORD),#endif#ifdef DVI$_TT_AUTOBAUDq' DVI_ENT(TT_AUTOBAUD, 4, IS_LONGWORD),/#endif#ifdef DVI$_TT_PAGE # DVI_ENT(TT_PAGE, 4, IS_LONGWORD),A#endif#ifdef DVI$_TT_HANGUPt% DVI_ENT(TT_HANGUP, 4, IS_LONGWORD),D#endif#ifdef DVI$_TT_MODHANGUP( DVI_ENT(TT_MODHANGUP, 4, IS_LONGWORD),#endif#ifdef DVI$_TT_BRDCSTMBX( DVI_ENT(TT_BRDCSTMBX, 4, IS_LONGWORD),#endif#ifdef DVI$_TT_DMA" DVI_ENT(TT_DMA, 4, IS_LONGWORD),#endif#ifdef DVI$_TT_ALTYPEAHD( DVI_ENT(TT_ALTYPEAHD, 4, IS_LONGWORD),#endif#ifdef DVI$_TT_ANSICRT& DVI_ENT(TT_ANSICRT, 4, IS_LONGWORD),#endif#ifdef DVI$_TT_REGIS$ DVI_ENT(TT_REGIS, 4, IS_LONGWORD),#endif#ifdef DVI$_TT_AVO" DVI_ENT(TT_AVO, 4, IS_LONGWORD),#endif#ifdef DVI$_TT_EDITi# DVI_ENT(TT_EDIT, 4, IS_LONGWORD),d#endif#ifdef DVI$_TT_BLOCK$ DVI_ENT(TT_BLOCK, 4, IS_LONGWORD),#endif#ifdef DVI$_TT_DECCRTD% DVI_ENT(TT_DECCRT, 4, IS_LONGWORD),d#endif#ifdef DVI$_TT_EDITING& DVI_ENT(TT_EDITING, 4, IS_LONGWORD),#endif#ifdef DVI$_TT_INSERT % DVI_ENT(TT_INSERT, 4, IS_LONGWORD),#endif#ifdef DVI$_TT_DIALUPd% DVI_ENT(TT_DIALUP, 4, IS_LONGWORD),#endif#ifdef DVI$_TT_SECURE)% DVI_ENT(TT_SECURE, 4, IS_LONGWORD),R#endif#ifdef DVI$_TT_FALLBACK' DVI_ENT(TT_FALLBACK, 4, IS_LONGWORD),1#endif#ifdef DVI$_TT_DISCONNECTD) DVI_ENT(TT_DISCONNECT, 4, IS_LONGWORD),D#endif#ifdef DVI$_TT_PASTHRU& DVI_ENT(TT_PASTHRU, 4, IS_LONGWORD),#endif#ifdef DVI$_TT_SIXEL$ DVI_ENT(TT_SIXEL, 4, IS_LONGWORD),#endif#ifdef DVI$_TT_PRINTER& DVI_ENT(TT_PRINTER, 4, IS_LONGWORD),#endif#ifdef DVI$_TT_APP_KEYPAD) DVI_ENT(TT_APP_KEYPAD, 4, IS_LONGWORD),#endif#ifdef DVI$_TT_DRCST# DVI_ENT(TT_DRCS, 4, IS_LONGWORD),0#endif#ifdef DVI$_TT_SYSPWDd% DVI_ENT(TT_SYSPWD, 4, IS_LONGWORD),#endif#ifdef DVI$_TT_DECCRT2& DVI_ENT(TT_DECCRT2, 4, IS_LONGWORD),#endif#ifdef DVI$_TT_DECCRT3& DVI_ENT(TT_DECCRT3, 4, IS_LONGWORD),#endif#ifdef DVI$_TT_DECCRT4& DVI_ENT(TT_DECCRT4, 4, IS_LONGWORD),#endif #ifdef DVI$_ACCESSTIMES_RECORDED0 DVI_ENT(ACCESSTIMES_RECORDED, 4, IS_LONGWORD),#endif#ifdef DVI$_ADAPTER_IDENTE) DVI_ENT(ADAPTER_IDENT, 255, IS_STRING),E#endif #ifdef DVI$_AVAILABLE_PATH_COUNT0 DVI_ENT(AVAILABLE_PATH_COUNT, 4, IS_LONGWORD),#endif#ifdef DVI$_CLIENT_DEVICE ) DVI_ENT(CLIENT_DEVICE, 4, IS_LONGWORD), #endif/* What is this?#ifdef DVI$_CLUSLOCK! DVI_ENT(CLUSLOCK, nnn, IS_xxx),#endif*/#ifdef DVI$_CONCEALEDD% DVI_ENT(CONCEALED, 4, IS_LONGWORD),d#endif/* What is this?#ifdef DVI$_DAPDEVNAM$" DVI_ENT(DAPDEVNAM, nnn, IS_xxx),#endif*/#ifdef DVI$_DEVDEPEND3& DVI_ENT(DEVDEPEND3, 4, IS_LONGWORD),#endif#ifdef DVI$_DEVDEPEND4& DVI_ENT(DEVDEPEND4, 4, IS_LONGWORD),#endif#ifdef DVI$_DEVICE_MAX_IO_SIZE. DVI_ENT(DEVICE_MAX_IO_SIZE, 4, IS_LONGWORD),#endif#ifdef DVI$_DRIVER_IMAGE_NAMEf- DVI_ENT(DRIVER_IMAGE_NAME, 255, IS_STRING),e#endif#ifdef DVI$_ERASE_ON_DELETE)+ DVI_ENT(ERASE_ON_DELETE, 4, IS_LONGWORD),#endif#ifdef DVI$_ERROR_RESET_TIME+ DVI_ENT(ERROR_RESET_TIME, 8, IS_VMSDATE),2#endif#ifdef DVI$_EXPSIZES# DVI_ENT(EXPSIZE, 4, IS_LONGWORD),$#endif#ifdef DVI$_FC_HBA_FIRMWARE_REVD. DVI_ENT(FC_HBA_FIRMWARE_REV, 64, IS_STRING),#endif#ifdef DVI$_FC_NODE_NAME' DVI_ENT(FC_NODE_NAME, 64, IS_STRING),d#endif#ifdef DVI$_FC_PORT_NAME' DVI_ENT(FC_PORT_NAME, 64, IS_STRING),R#endif#ifdef DVI$_HARDLINKS_SUPPORTEDT/ DVI_ENT(HARDLINKS_SUPPORTED, 4, IS_LONGWORD),S#endif#ifdef DVI$_HBVS_MASTER_MEMBER. DVI_ENT(HBVS_MASTER_MEMBER, 4, IS_LONGWORD),#endif"#ifdef DVI$_LAN_ALL_MULTICAST_MODE2 DVI_ENT(LAN_ALL_MULTICAST_MODE, 4, IS_LONGWORD),#endif#ifdef DVI$_LAN_AUTONEG_ENABLEDT/ DVI_ENT(LAN_AUTONEG_ENABLED, 4, IS_LONGWORD),R#endif##ifdef DVI$_LAN_DEFAULT_MAC_ADDRESS72 DVI_ENT(LAN_DEFAULT_MAC_ADDRESS, 20, IS_STRING),#endif#ifdef DVI$_LAN_FULL_DUPLEX)+ DVI_ENT(LAN_FULL_DUPLEX, 4, IS_LONGWORD),#endif$#ifdef DVI$_LAN_JUMBO_FRAMES_ENABLED4 DVI_ENT(LAN_JUMBO_FRAMES_ENABLED, 4, IS_LONGWORD),#endif #ifdef DVI$_LAN_LINK_STATE_VALID0 DVI_ENT(LAN_LINK_STATE_VALID, 4, IS_LONGWORD),#endif#ifdef DVI$_LAN_LINK_UPd' DVI_ENT(LAN_LINK_UP, 4, IS_LONGWORD),e#endif#ifdef DVI$_LAN_MAC_ADDRESSF* DVI_ENT(LAN_MAC_ADDRESS, 20, IS_STRING),#endif #ifdef DVI$_LAN_PROMISCUOUS_MODE0 DVI_ENT(LAN_PROMISCUOUS_MODE, 4, IS_LONGWORD),#endif#ifdef DVI$_LAN_PROTOCOL_NAMEL, DVI_ENT(LAN_PROTOCOL_NAME, 64, IS_STRING),#endif#ifdef DVI$_LAN_PROTOCOL_TYPE5, DVI_ENT(LAN_PROTOCOL_TYPE, 64, IS_STRING),#endif#ifdef DVI$_LAN_SPEED % DVI_ENT(LAN_SPEED, 4, IS_LONGWORD),#endif #ifdef DVI$_MAILBOX_BUFFER_QUOTA0 DVI_ENT(MAILBOX_BUFFER_QUOTA, 4, IS_LONGWORD),#endif!#ifdef DVI$_MAILBOX_INITIAL_QUOTA 1 DVI_ENT(MAILBOX_INITIAL_QUOTA, 4, IS_LONGWORD),E#endif#ifdef DVI$_MOUNTCNT_CLUSTER, DVI_ENT(MOUNTCNT_CLUSTER, 4, IS_LONGWORD),#endif#ifdef DVI$_MOUNTVER_ELIGIBLE - DVI_ENT(MOUNTVER_ELIGIBLE, 4, IS_LONGWORD),E#endif#ifdef DVI$_MOUNT_TIME% DVI_ENT(MOUNT_TIME, 8, IS_VMSDATE),D#endif"#ifdef DVI$_MPDEV_AUTO_PATH_SW_CNT2 DVI_ENT(MPDEV_AUTO_PATH_SW_CNT, 4, IS_LONGWORD),#endif#ifdef DVI$_MPDEV_CURRENT_PATH. DVI_ENT(MPDEV_CURRENT_PATH, 255, IS_STRING),#endif!#ifdef DVI$_MPDEV_MAN_PATH_SW_CNT1 DVI_ENT(MPDEV_MAN_PATH_SW_CNT, 4, IS_LONGWORD),E#endif#ifdef DVI$_MT3_DENSITY1' DVI_ENT(MT3_DENSITY, 4, IS_LONGWORD),R#endif#ifdef DVI$_MT3_SUPPORTEDd) DVI_ENT(MT3_SUPPORTED, 4, IS_LONGWORD),d#endif#ifdef DVI$_MULTIPATH% DVI_ENT(MULTIPATH, 4, IS_LONGWORD),)#endif#ifdef DVI$_MVSUPMSG$ DVI_ENT(MVSUPMSG, 4, IS_LONGWORD),#endif#ifdef DVI$_NOCACHE_ON_VOLUMED- DVI_ENT(NOCACHE_ON_VOLUME, 4, IS_LONGWORD),E#endif#ifdef DVI$_NOHIGHWATERi' DVI_ENT(NOHIGHWATER, 4, IS_LONGWORD),#endif#ifdef DVI$_NOSHARE_MOUNTEDe+ DVI_ENT(NOSHARE_MOUNTED, 4, IS_LONGWORD),d#endif#ifdef DVI$_ODS2_SUBSET0( DVI_ENT(ODS2_SUBSET0, 4, IS_LONGWORD),#endif#ifdef DVI$_ODS5 DVI_ENT(ODS5, 4, IS_LONGWORD),#endif#ifdef DVI$_PATH_AVAILABLE* DVI_ENT(PATH_AVAILABLE, 4, IS_LONGWORD),#endif#ifdef DVI$_PATH_NOT_RESPONDING/ DVI_ENT(PATH_NOT_RESPONDING, 4, IS_LONGWORD),d#endif#ifdef DVI$_PATH_POLL_ENABLED- DVI_ENT(PATH_POLL_ENABLED, 4, IS_LONGWORD),C#endif!#ifdef DVI$_PATH_SWITCH_FROM_TIME10 DVI_ENT(PATH_SWITCH_FROM_TIME, 8, IS_VMSDATE),#endif#ifdef DVI$_PATH_SWITCH_TO_TIME. DVI_ENT(PATH_SWITCH_TO_TIME, 8, IS_VMSDATE),#endif#ifdef DVI$_PATH_USER_DISABLED. DVI_ENT(PATH_USER_DISABLED, 4, IS_LONGWORD),#endif#ifdef DVI$_PREFERRED_CPUF) DVI_ENT(PREFERRED_CPU, 8, IS_QUADWORD),#endif #ifdef DVI$_PREFERRED_CPU_BITMAP5 DVI_ENT(PREFERRED_CPU_BITMAP, 64, IS_BITMAP_VALUE),T#endif"#ifdef DVI$_PROT_SUBSYSTEM_ENABLED2 DVI_ENT(PROT_SUBSYSTEM_ENABLED, 4, IS_LONGWORD),#endif#ifdef DVI$_QLEN DVI_ENT(QLEN, 4, IS_LONGWORD),#endif$#ifdef DVI$_SCSI_DEVICE_FIRMWARE_REV2 DVI_ENT(SCSI_DEVICE_FIRMWARE_REV, 4, IS_STRING),#endif#ifdef DVI$_SET_HOST_TERMINALR, DVI_ENT(SET_HOST_TERMINAL, 64, IS_STRING),#endif#ifdef DVI$_SHDW_COPIER_NODE+ DVI_ENT(SHDW_COPIER_NODE, 12, IS_STRING),$#endif#ifdef DVI$_SHDW_DEVICE_COUNTf- DVI_ENT(SHDW_DEVICE_COUNT, 4, IS_LONGWORD),$#endif#ifdef DVI$_SHDW_GENERATIONd+ DVI_ENT(SHDW_GENERATION, 8, IS_QUADWORD),f#endif!#ifdef DVI$_SHDW_HBMM_RESET_COUNTf1 DVI_ENT(SHDW_HBMM_RESET_COUNT, 4, IS_LONGWORD),2#endif #ifdef DVI$_SHDW_HBMM_RESET_TIME/ DVI_ENT(SHDW_HBMM_RESET_TIME, 8, IS_VMSDATE),#endif#ifdef DVI$_SHDW_MASTER_MBRR* DVI_ENT(SHDW_MASTER_MBR, 64, IS_STRING),#endif#ifdef DVI$_SHDW_MBR_COPY_DONE. DVI_ENT(SHDW_MBR_COPY_DONE, 4, IS_LONGWORD),#endif#ifdef DVI$_SHDW_MBR_COUNT* DVI_ENT(SHDW_MBR_COUNT, 4, IS_LONGWORD),#endif#ifdef DVI$_SHDW_MBR_MERGE_DONEi/ DVI_ENT(SHDW_MBR_MERGE_DONE, 4, IS_LONGWORD),D#endif#ifdef DVI$_SHDW_MBR_READ_COST. DVI_ENT(SHDW_MBR_READ_COST, 4, IS_LONGWORD),#endif!#ifdef DVI$_SHDW_MINIMERGE_ENABLED1 DVI_ENT(SHDW_MINIMERGE_ENABLE, 4, IS_LONGWORD),L#endif#ifdef DVI$_SHDW_READ_SOURCE+ DVI_ENT(SHDW_READ_SOURCE, 64, IS_STRING),E#endif#ifdef DVI$_SHDW_SITE% DVI_ENT(SHDW_SITE, 4, IS_LONGWORD),d#endif#ifdef DVI$_SHDW_STATUSZ' DVI_ENT(SHDW_STATUS, 4, IS_LONGWORD),E#endif#ifdef DVI$_SHDW_TIMEOUT( DVI_ENT(SHDW_TIMEOUT, 4, IS_LONGWORD),#endif#ifdef DVI$_SPECIAL_FILESD) DVI_ENT(SPECIAL_FILES, 4, IS_LONGWORD),B#endif#ifdef DVI$_TOTAL_PATH_COUNT, DVI_ENT(TOTAL_PATH_COUNT, 4, IS_LONGWORD),#endif#ifdef DVI$_TT_ANSI_COLORD) DVI_ENT(TT_ANSI_COLOR, 4, IS_LONGWORD),d#endif#ifdef DVI$_TT_ASIAN_MODET) DVI_ENT(TT_ASIAN_MODE, 4, IS_LONGWORD),I#endif#ifdef DVI$_TT_DCL_MAILBX) DVI_ENT(TT_DCL_MAILBX, 4, IS_LONGWORD),#endif#ifdef DVI$_TT_DECCRT5& DVI_ENT(TT_DECCRT5, 4, IS_LONGWORD),#endif#ifdef DVI$_TT_MULTISESSIONT+ DVI_ENT(TT_MULTISESSION, 4, IS_LONGWORD),E#endif#ifdef DVI$_TT_PASSALL& DVI_ENT(TT_PASSALL, 4, IS_LONGWORD),#endif#ifdef DVI$_TT_REMOTEd% DVI_ENT(TT_REMOTE, 4, IS_LONGWORD),#endif#ifdef DVI$_TT_SCRIPTE% DVI_ENT(TT_SCRIPT, 4, IS_LONGWORD), #endif#ifdef DVI$_VOLCHARf" DVI_ENT(VOLCHAR, 16, IS_BITMAP),#endif#ifdef DVI$_VOLSIZET# DVI_ENT(VOLSIZE, 4, IS_LONGWORD),_#endif"#ifdef DVI$_VOLUME_EXTEND_QUANTITY2 DVI_ENT(VOLUME_EXTEND_QUANTITY, 4, IS_LONGWORD),#endif#ifdef DVI$_VOLUME_MOUNT_GROUP. DVI_ENT(VOLUME_MOUNT_GROUP, 4, IS_LONGWORD),#endif#ifdef DVI$_VOLUME_MOUNT_SYS, DVI_ENT(VOLUME_MOUNT_SYS, 4, IS_LONGWORD),#endif$#ifdef DVI$_VOLUME_PENDING_WRITE_ERR4 DVI_ENT(VOLUME_PENDING_WRITE_ERR, 4, IS_LONGWORD),#endif#ifdef DVI$_VOLUME_RETAIN_MAXf, DVI_ENT(VOLUME_RETAIN_MAX, 8, IS_VMSDATE),#endif#ifdef DVI$_VOLUME_RETAIN_MINd, DVI_ENT(VOLUME_RETAIN_MIN, 8, IS_VMSDATE),#endif"#ifdef DVI$_VOLUME_SPOOLED_DEV_CNT2 DVI_ENT(VOLUME_SPOOLED_DEV_CNT, 4, IS_LONGWORD),#endif#ifdef DVI$_VOLUME_WINDOWf) DVI_ENT(VOLUME_WINDOW, 4, IS_LONGWORD),f#endif##ifdef DVI$_WRITETHRU_CACHE_ENABLED3 DVI_ENT(WRITETHRU_CACHE_ENABLED, 4, IS_LONGWORD),$#endif#ifdef DVI$_WWID DVI_ENT(WWID, 380, IS_STRING),#endif#if 0,#endif {NULL, 0, 0, 0}T};struct GenericID MountList[] ={T$ MNT_ENT(ACCESSED, 4, IS_LONGWORD),% MNT_ENT(BLOCKSIZE, 4, IS_LONGWORD),T" MNT_ENT(COMMENT, 78, IS_STRING),# MNT_ENT(DENSITY, 4, IS_LONGWORD),f! MNT_ENT(DEVNAM, 64, IS_STRING),,% MNT_ENT(EXTENSION, 4, IS_LONGWORD),9" MNT_ENT(EXTENT, 4, IS_LONGWORD)," MNT_ENT(FILEID, 4, IS_LONGWORD), MNT_ENT(FLAGS, 8, IS_BITMAP),d! MNT_ENT(LIMIT, 4, IS_LONGWORD),d! MNT_ENT(LOGNAM, 64, IS_STRING),)! MNT_ENT(OWNER, 4, IS_LONGWORD),E% MNT_ENT(PROCESSOR, 255, IS_STRING),! MNT_ENT(QUOTA, 4, IS_LONGWORD),D% MNT_ENT(RECORDSIZ, 4, IS_LONGWORD),1! MNT_ENT(SHAMEM, 64, IS_STRING),E! MNT_ENT(SHANAM, 64, IS_STRING),6) MNT_ENT(UNDEFINED_FAT, 4, IS_LONGWORD),! MNT_ENT(VOLNAM, 64, IS_STRING),D" MNT_ENT(VOLSET, 128, IS_STRING),! MNT_ENT(VPROT, 4, IS_LONGWORD)," MNT_ENT(WINDOW, 4, IS_LONGWORD), {NULL, 0, 0, 0}d};struct GenericID InitList[] =f{i$ INI_ENT(ACCESSED, 4, IS_LONGWORD),) INI_ENT(BADBLOCKS_LBN, 512, IS_STRING),d) INI_ENT(BADBLOCKS_SEC, 512, IS_STRING),d' INI_ENT(CLUSTERSIZE, 4, IS_LONGWORD),e& INI_ENT(COMPACTION, 4, IS_LONGWORD),) INI_ENT(NO_COMPACTION, 4, IS_LONGWORD), INI_ENT(DENSITY, 4, IS_ENUM),E' INI_ENT(DIRECTORIES, 4, IS_LONGWORD),T! INI_ENT(ERASE, 4, IS_LONGWORD),T$ INI_ENT(NO_ERASE, 4, IS_LONGWORD),% INI_ENT(EXTENSION, 4, IS_LONGWORD),d! INI_ENT(FPROT, 4, IS_LONGWORD),d# INI_ENT(HEADERS, 4, IS_LONGWORD),% INI_ENT(HIGHWATER, 4, IS_LONGWORD),8( INI_ENT(NO_HIGHWATER, 4, IS_LONGWORD)," INI_ENT(HOMEBLOCKS, 4, IS_ENUM),+ INI_ENT(INDEX_BEGINNING, 4, IS_LONGWORD),T' INI_ENT(INDEX_BLOCK, 4, IS_LONGWORD), % INI_ENT(INDEX_END, 4, IS_LONGWORD),5( INI_ENT(INDEX_MIDDLE, 4, IS_LONGWORD),' INI_ENT(INTERCHANGE, 4, IS_LONGWORD),T& INI_ENT(LABEL_ACCESS, 1, IS_STRING),% INI_ENT(LABEL_VOLO, 14, IS_STRING),d$ INI_ENT(MAXFILES, 4, IS_LONGWORD),& INI_ENT(OVR_ACCESS, 4, IS_LONGWORD),) INI_ENT(NO_OVR_ACCESS, 4, IS_LONGWORD),e# INI_ENT(OVR_EXP, 4, IS_LONGWORD),& INI_ENT(NO_OVR_EXP, 4, IS_LONGWORD),$ INI_ENT(OVR_VOLO, 4, IS_LONGWORD),' INI_ENT(NO_OVR_VOLO, 4, IS_LONGWORD),! INI_ENT(OWNER, 4, IS_LONGWORD),6% INI_ENT(READCHECK, 4, IS_LONGWORD),7( INI_ENT(NO_READCHECK, 4, IS_LONGWORD), INI_ENT(SIZE, 4, IS_LONGWORD),- INI_ENT(STRUCTURE_LEVEL_1, 4, IS_LONGWORD),)- INI_ENT(STRUCTURE_LEVEL_2, 4, IS_LONGWORD),$ INI_ENT(USER_NAME, 12, IS_STRING),$ INI_ENT(VERIFIED, 4, IS_LONGWORD),' INI_ENT(NO_VERIFIED, 4, IS_LONGWORD),T! INI_ENT(VPROT, 4, IS_LONGWORD),_" INI_ENT(WINDOW, 4, IS_LONGWORD),& INI_ENT(WRITECHECK, 4, IS_LONGWORD),) INI_ENT(NO_WRITECHECK, 4, IS_LONGWORD),e {NULL, 0, 0, 0, 0}};char *MonthNames[12] = {@ "Jan", "Feb", "Mar", "Apr", "May", "Jun", "Jul", "Aug", "Sep", "Oct", "Nov", "Dec"} ;J/* Globals to track how many different pieces of info we can return, as */;/* well as how much space we'd need to grab to store it. */0static int DevInfoCount = 0;!static int DevInfoMallocSize = 0;e6/* Macro to fill in a 'traditional' item-list entry */@#define init_itemlist(ile, length, code, bufaddr, retlen_addr) \{ \ (ile)->buflen = (length); \T (ile)->itmcode = (code); \ (ile)->buffer = (bufaddr); \$ (ile)->retlen = (retlen_addr) ;}5/* Take an access mode SV and return the real mode */Dintdecode_accmode(SV *AccMode)d{D char *AccessString;0 if (AccMode == &PL_sv_undef) { return 0;d } else {( AccessString = SvPV(AccMode, PL_na);* if (!strcmp(AccessString, "KERNEL")) { return(PSL$C_KERNEL);d }T( if (!strcmp(AccessString, "EXEC")) { return(PSL$C_EXEC);f }f) if (!strcmp(AccessString, "SUPER")) {f return(PSL$C_SUPER); }f( if (!strcmp(AccessString, "USER")) { return(PSL$C_USER); }T } return 0;f}$9/* take a class name and return the corresponding code */_int!dev_class_decode(SV *ClassNameSV)i{f int ClassCode = -1;E char *ClassName = NULL;i int i;$ /* Is it undef? If so, return 0 */$ if (ClassNameSV == &PL_sv_undef) { ClassCode = 0; } else {) ClassName = SvPV(ClassNameSV, PL_na);X2 for (i=0; DevClassList[i].DevClassName; i++) {= if (!strcmp(ClassName, DevClassList[i].DevClassName)) {i2 ClassCode = DevClassList[i].DevClassValue; break; }E }U }, return ClassCode;P}8/* take a type name and return the corresponding code */intddev_type_decode(SV *TypeNameSV)X{2 int TypeCode = -1; char *TypeName;) int i;$ /* Is it undef? If so, return 0 */# if (TypeNameSV == &PL_sv_undef) { TypeCode = 0;D } else {' TypeName = SvPV(TypeNameSV, PL_na); 0 for (i=0; DevTypeList[i].DevTypeName; i++) {: if (!strcmp(TypeName, DevTypeList[i].DevTypeName)) {/ TypeCode = DevTypeList[i].DevTypeValue;2 break; }Y } }T return TypeCode;}I/* Take a pointer to a bitmap hash (like decode_bitmap gives), an item */TD/* code, and a pointer to the output buffer and encode the bitmap */void>generic_bitmap_encode(HV * FlagHV, int ItemCode, void *Buffer){_ char *FlagName;i I32 FlagLen;- int *EncodedValue; /* Pointer to an integer  /* Shut Dec C up */ FlagName = NULL;< /* Buffer's a pointer to an integer array, really it is */ EncodedValue = Buffer;$ /* Initialize our hash iterator */ hv_iterinit(FlagHV); /* Rip through the hash */6 while (hv_iternextsv(FlagHV, &FlagName, &FlagLen)) { switch (ItemCode) {3 case MNT$_FLAGS: BME_D(CLUSTER);Z BME_D(FOREIGN);d BME_D(GROUP);T BME_D(INIT_CONT); BME_D(MESSAGE);  BME_D(MULTI_VOL);f BME_D(NOASSIST); BME_D(NOAUTO); BME_D(NOCACHE); BME_D(NOCOPY); BME_D(NODISKQ);V BME_D(NOHDR3); BME_D(NOLABEL);E BME_D(NOMNTVER); BME_D(NOREBUILD);_ BME_D(NOUNLOAD); BME_D(NOWRITE);C BME_D(OVR_ACCESS); BME_D(OVR_EXP);2 BME_D(OVR_IDENT);f BME_D(OVR_LOCK); BME_D(OVR_SETID);d BME_D(OVR_SHAMEM); BME_D(OVR_VOLO); BME_D(READCHECK); BME_D(SHARE); BME_D(SYSTEM); BME_D(TAPE_DATA_WRITE); BME_D(WRITECHECK); BME_D(WRITETHRU); BME2_D(CDROM); BME2_D(COMPACTION);e BME2_D(DISKQ); BME2_D(DSI); BME2_D(INCLUDE); BME2_D(NOCOMPACTION);,! BME2_D(OVR_LIMITED_SEARCH);E BME2_D(OVR_NOFE);d BME2_D(OVR_SECURITY);_ BME2_D(SUBSYSTEM); BME2_D(XAR); break; case SYSCALL_DISMOU: DMT_D(ABORT);2 DMT_D(CLUSTER);$ DMT_D(NOUNLOAD); DMT_D(OVR_CHECKS); DMT_D(UNIT); DMT_D(UNLOAD); break; default:& croak("Invalid item specified"); } }E}FL/* Take a pointer to an itemlist, a hashref, and some flags, and build up */K/* an itemlist from what's in the hashref. Buffer space for the items is */_M/* allocated, as are the length shorts and stuff. If the hash entries have */$H/* values, those values are copied into the buffers, too. Returns the */+/* number of items stuck in the itemlist */ENint build_itemlist(struct GenericID InfoList[], ITMLST *ItemList, HV *HashRef){$& /* standard, dopey index variable */ int i = 0, ItemListIndex = 0;E char *TempCharPointer; unsigned int TempStrLen; int TempNameLen; SV *TempSV; unsigned short *TempLen; int ItemCode;_ char *TempBuffer;O int BufferLength;$ long TempLong;) struct dsc$descriptor_s TimeStringDesc; int Status;N int CopyData;f, for(i = 0; InfoList[i].GenericName; i++) {2 TempNameLen = strlen(InfoList[i].GenericName);I /* If they've provided the info, or we're going to get it back, we */T /* allocate some space */$E if ((hv_exists(HashRef, InfoList[i].GenericName, TempNameLen)) ||C, (InfoList[i].InOrOut & IS_OUTPUT)) {J /* Figure out some stuff. Avoids duplication, and makes the macro */6 /* expansion of init_itemlist a little easier */* ItemCode = InfoList[i].SyscallValue;0 CopyData = InfoList[i].InOrOut & IS_INPUT;& switch(InfoList[i].ReturnType) {O /* Quadwords and bit map values are treated as strings for right now */E case IS_QUADWORD:5 case IS_STRING:$ case IS_BITMAP_VALUE:)+ /* Allocate us some buffer space */_< Newz(NULL, TempBuffer, InfoList[i].BufferLen, char);/ Newz(NULL, TempLen, 1, unsigned short);C- BufferLength = InfoList[i].BufferLen;E- /* Set the string buffer to spaces */E7 memset(TempBuffer, ' ', InfoList[i].BufferLen);_M /* If we're copying data, then fetch it and stick it in the buffer */_ if (CopyData) {% TempSV = *hv_fetch(HashRef,E5 InfoList[i].GenericName,N1 TempNameLen, FALSE);55 TempCharPointer = SvPV(TempSV, TempStrLen);dC /* If there was something in the SV, then copy it over */E if (TempStrLen) {$= BufferLength = TempStrLen < InfoList[i].BufferLen> ? TempStrLen : InfoList[i].BufferLen;B Copy(TempCharPointer, TempBuffer, BufferLength, char); }D }E/ init_itemlist(&ItemList[ItemListIndex],# BufferLength,$ ItemCode,d! TempBuffer, TempLen);T break; case IS_VMSDATE:+ /* Allocate us some buffer space */< Newz(NULL, TempBuffer, InfoList[i].BufferLen, char);/ Newz(NULL, TempLen, 1, unsigned short); if (CopyData) { % TempSV = *hv_fetch(HashRef,W5 InfoList[i].GenericName,T1 TempNameLen, FALSE);L5 TempCharPointer = SvPV(TempSV, TempStrLen);d2 /* Fill in the time string descriptor */9 TimeStringDesc.dsc$a_pointer = TempCharPointer;$3 TimeStringDesc.dsc$w_length = TempStrLen;F5 TimeStringDesc.dsc$b_dtype = DSC$K_DTYPE_T;C5 TimeStringDesc.dsc$b_class = DSC$K_CLASS_S; J /* Convert from an ascii rep to a VMS quadword date structure */; Status = sys$bintim(&TimeStringDesc, TempBuffer);H% if (Status != SS$_NORMAL) {, croak("Error converting time!"); }D } / init_itemlist(&ItemList[ItemListIndex],D, InfoList[i].BufferLen, ItemCode,A! TempBuffer,d TempLen);e break; case IS_LONGWORD:e+ /* Allocate us some buffer space */< Newz(NULL, TempBuffer, InfoList[i].BufferLen, char);/ Newz(NULL, TempLen, 1, unsigned short);L if (CopyData) {d% TempSV = *hv_fetch(HashRef,5 InfoList[i].GenericName,d1 TempNameLen, FALSE);R# TempLong = SvIVX(TempSV);i /* Set the value */! *TempBuffer = TempLong;Q }d/ init_itemlist(&ItemList[ItemListIndex],d, InfoList[i].BufferLen, ItemCode,d! TempBuffer,D TempLen); break; case IS_BITMAP:5+ /* Allocate us some buffer space */< Newz(NULL, TempBuffer, InfoList[i].BufferLen, char);/ Newz(NULL, TempLen, 1, unsigned short);f7 memset(TempBuffer, ' ', InfoList[i].BufferLen);O if (CopyData) {i% TempSV = *hv_fetch(HashRef,f5 InfoList[i].GenericName,B1 TempNameLen, FALSE);EG /* Is the SV an integer? If so, then we'll use that value. */7K /* Otherwise we'll assume that it's a hashref of the sort that */d+ /* generic_bitmap_decode gives */f if (SvIOK(TempSV)) {% TempLong = SvIVX(TempSV);e /* Set the value */T# *TempBuffer = TempLong; } else {L generic_bitmap_encode((HV *)SvRV(TempSV), ItemCode, TempBuffer); }f }$/ init_itemlist(&ItemList[ItemListIndex],, InfoList[i].BufferLen, ItemCode,$! TempBuffer,i TempLen); break; default:* croak("Unknown item type found!"); break; }D ItemListIndex++; } }f return(ItemListIndex);}MK/* Takes an item list pointer and a count of items, and frees the buffer */$%/* memory and length buffer memory */void2tear_down_itemlist(ITMLST *ItemList, int NumItems){D int i; for(i=0; i < NumItems; i++) {i" if(ItemList[i].buffer != NULL)# Safefree(ItemList[i].buffer); " if(ItemList[i].retlen != NULL)# Safefree(ItemList[i].retlen);e }}dintA%de_enum(int PSCANVal, char *EnumName){d int ReturnVal = 0; switch(PSCANVal) {/* case PSCAN$_JOBTYPE:# if (!strcmp(EnumName, "LOCAL"))D ReturnVal = DVI$K_LOCAL;) else if (!strcmp(EnumName, "DIALUP")) ReturnVal = DVI$K_DIALUP;E) else if (!strcmp(EnumName, "REMOTE")) ReturnVal = DVI$K_REMOTE;d( else if (!strcmp(EnumName, "BATCH")) ReturnVal = DVI$K_BATCH;* else if (!strcmp(EnumName, "NETWORK")) ReturnVal = DVI$K_NETWORK;+ else if (!strcmp(EnumName, "DETACHED"))i! ReturnVal = DVI$K_DETACHED;S break; case PSCAN$_MODE:C) if (!strcmp(EnumName, "INTERACTIVE"))S$ ReturnVal = DVI$K_INTERACTIVE;( else if (!strcmp(EnumName, "BATCH")) ReturnVal = DVI$K_BATCH;* else if (!strcmp(EnumName, "NETWORK")) ReturnVal = DVI$K_NETWORK;( else if (!strcmp(EnumName, "OTHER")) ReturnVal = DVI$K_OTHER; break; case PSCAN$_STATE:! if (!strcmp(EnumName, "CEF")) ReturnVal = SCH$C_CEF;& else if (!strcmp(EnumName, "COM")) ReturnVal = SCH$C_COM;' else if (!strcmp(EnumName, "COMO"))d ReturnVal = SCH$C_COMO;L& else if (!strcmp(EnumName, "CUR")) ReturnVal = SCH$C_CUR;( else if (!strcmp(EnumName, "COLPG")) ReturnVal = SCH$C_COLPG;& else if (!strcmp(EnumName, "FPG")) ReturnVal = SCH$C_FPG;& else if (!strcmp(EnumName, "HIB")) ReturnVal = SCH$C_HIB;' else if (!strcmp(EnumName, "HIBO"))T ReturnVal = SCH$C_HIBO;f& else if (!strcmp(EnumName, "LEF")) ReturnVal = SCH$C_LEF;' else if (!strcmp(EnumName, "LEFO"))$ ReturnVal = SCH$C_LEFO;F( else if (!strcmp(EnumName, "MWAIT")) ReturnVal = SCH$C_MWAIT;& else if (!strcmp(EnumName, "PFW")) ReturnVal = SCH$C_PFW;' else if (!strcmp(EnumName, "SUSP"))T ReturnVal = SCH$C_SUSP;S( else if (!strcmp(EnumName, "SUSPO")) ReturnVal = SCH$C_SUSPO; break; */ default: ReturnVal = 0; }d return ReturnVal;}Tvoidtote_up_info_count(){$> for(DevInfoCount = 0; DevInfoList[DevInfoCount].GenericName; DevInfoCount++) {AK /* While we're here, we might as well get a generous estimate of how */ 3 /* much space we'll need for all the buffers */ = DevInfoMallocSize += DevInfoList[DevInfoCount].BufferLen; 0 /* Add in a couple extra, just to be safe */ DevInfoMallocSize += 8; } } J/* This routine takes a DVI item list ID and the value that wants to be */N/* de-enumerated and returns a pointer to an SV with the de-enumerated name */ /* in it */ SV *-enum_name(long DVI_entry, long val_to_deenum)?{ SV *WorkingSV = newSV(10); switch (DVI_entry) { case DVI$_ACPTYPE: switch (val_to_deenum) { case DVI$C_ACP_F11V1: . sv_setpv(WorkingSV, "Files-11 Level 1"); break; case DVI$C_ACP_F11V2:I. sv_setpv(WorkingSV, "Files-11 Level 2"); break;#ifdef DVI$C_ACP_F11V3 case DVI$C_ACP_F11V3:A? sv_setpv(WorkingSV, "Files-11 presentation of ISO 9660");D break;#endif#ifdef DVI$C_ACP_F11V4 case DVI$C_ACP_F11V4:dB sv_setpv(WorkingSV, "Files-11 presentation of High Sierra"); break;#endif#ifdef DVI$C_ACP_F11V5 case DVI$C_ACP_F11V5:. sv_setpv(WorkingSV, "Files-11 Level 5"); break;#endif#ifdef DVI$C_ACP_F11V6 case DVI$C_ACP_F11V6:S. sv_setpv(WorkingSV, "Files-11 Level 7"); break;#endif#ifdef DVI$C_ACP_F64 case DVI$C_ACP_F64:N; sv_setpv(WorkingSV, "Files 64 support for Spiralog");V break;#endif#ifdef DVI$C_ACP_HBVSd case DVI$C_ACP_HBVS:9 sv_setpv(WorkingSV, "Host Based Volume Shadowing");T break;#endif case DVI$C_ACP_MTA:R+ sv_setpv(WorkingSV, "Magnetic Tape");_ break; case DVI$C_ACP_NET:f& sv_setpv(WorkingSV, "Networks"); break; case DVI$C_ACP_REM:E( sv_setpv(WorkingSV, "Remote I/O"); break;#ifdef DVI$_C_ACP_UCX( case DVI$C_ACP_UCX:A sv_setpv(WorkingSV, "ACP for TCP/IP Services for OpenVMS");O break;#endif default:% sv_setpv(WorkingSV, "Unknown");_ break; }d break; case DVI$_DEVCLASS:, switch (val_to_deenum) { case DC$_DISK:" sv_setpv(WorkingSV, "DISK"); break; case DC$_TAPE:" sv_setpv(WorkingSV, "TAPE"); break; case DC$_SCOM:" sv_setpv(WorkingSV, "SCOM"); break; case DC$_CARD:" sv_setpv(WorkingSV, "CARD"); break; case DC$_TERM:" sv_setpv(WorkingSV, "TERM"); break; case DC$_LP: sv_setpv(WorkingSV, "LP"); break; case DC$_WORKSTATION: ) sv_setpv(WorkingSV, "WORKSTATION");i break; case DC$_REALTIME:& sv_setpv(WorkingSV, "REALTIME"); break; case DC$_DECVOICE:& sv_setpv(WorkingSV, "DECVOICE"); break; case DC$_AUDIO:D# sv_setpv(WorkingSV, "AUDIO");V break; case DC$_VIDEO:e# sv_setpv(WorkingSV, "VIDEO");N break; case DC$_BUS:e! sv_setpv(WorkingSV, "BUS");_ break; case DC$_MAILBOX:d% sv_setpv(WorkingSV, "MAILBOX");N break; case DC$_REMCSL_STORAGE:, sv_setpv(WorkingSV, "REMCSL_STORAGE"); break; case DC$_MISC:" sv_setpv(WorkingSV, "MISC"); break; default:% sv_setpv(WorkingSV, "Unknown"); break; }f break; default:# sv_setpv(WorkingSV, "Unknown");d break; }I return WorkingSV;S}N+MODULE = VMS::Device PACKAGE = VMS::DeviceESV *device_info(device_name) SV *device_name CODE:{  ITMLST *ListOItems;f unsigned short *ReturnLengths; long *TempLongPointer; #ifndef __VAXe __int64 *TempQuadPointer;#endif FetchedItem *OurDataList;s int i, j, k, status; HV *AllPurposeHV;T! unsigned short ReturnedTime[7];d char AsciiTime[100]; char *DeviceName;S unsigned int DeviceNameLen;I& struct dsc$descriptor_s DevNameDesc; char QuadWordString[65]; unsigned char *c, set;= /* If we've not gotten the count of items, go get it now */f if (DevInfoCount == 0) { tote_up_info_count();_ }R0 DeviceName = SvPV(device_name, DeviceNameLen);) DevNameDesc.dsc$a_pointer = DeviceName;+ DevNameDesc.dsc$w_length = DeviceNameLen;N* DevNameDesc.dsc$b_dtype = DSC$K_DTYPE_T;* DevNameDesc.dsc$b_class = DSC$K_CLASS_S;& /* We need room for our item list */; ListOItems = malloc(sizeof(ITMLST) * (DevInfoCount + 1));O= memset(ListOItems, 0, sizeof(ITMLST) * (DevInfoCount + 1));W; OurDataList = malloc(sizeof(FetchedItem) * DevInfoCount); 0 /* We also need room for the buffer lengths */7 ReturnLengths = malloc(sizeof(short) * DevInfoCount);D3 /* Fill in the item list and the tracking list */d& for (i = 0; i < DevInfoCount; i++) {@ /* Allocate the return data buffer and zero it. Can be oddly; sized, so we use the system malloc instead of New */_C OurDataList[i].ReturnBuffer = malloc(DevInfoList[i].BufferLen);_E memset(OurDataList[i].ReturnBuffer, 0, DevInfoList[i].BufferLen);DH /* Note some important stuff (like what we're doing) in our local */ /* tracking array */9 OurDataList[i].ItemName = DevInfoList[i].GenericName;J4 OurDataList[i].ReturnLength = &ReturnLengths[i];: OurDataList[i].ReturnType = DevInfoList[i].ReturnType;% OurDataList[i].ItemListEntry = i;  /* Fill in the item list */); init_itemlist(&ListOItems[i], DevInfoList[i].BufferLen,,K DevInfoList[i].SyscallValue, OurDataList[i].ReturnBuffer,% &ReturnLengths[i]);2 }R /* Make the GETDVIW call */MO status = sys$getdviw(0, 0, &DevNameDesc, ListOItems, NULL, NULL, NULL, NULL);V /* Did it go OK? */L if (status == SS$_NORMAL) {_ /* Looks like it */41 AllPurposeHV = (HV*)sv_2mortal((SV*)newHV()); ( for (i = 0; i < DevInfoCount; i++) {) switch(OurDataList[i].ReturnType) {N case IS_STRING:D7 hv_store(AllPurposeHV, OurDataList[i].ItemName,N1 strlen(OurDataList[i].ItemName),E5 newSVpv(OurDataList[i].ReturnBuffer,f; *OurDataList[i].ReturnLength), 0);d break; case IS_VMSDATE:> sys$numtim(ReturnedTime, OurDataList[i].ReturnBuffer);B sprintf(AsciiTime, "%02hi-%s-%hi %02hi:%02hi:%02hi.%02hi",A ReturnedTime[2], MonthNames[ReturnedTime[1] - 1],VB ReturnedTime[0], ReturnedTime[3], ReturnedTime[4],2 ReturnedTime[5], ReturnedTime[6]);7 hv_store(AllPurposeHV, OurDataList[i].ItemName,e1 strlen(OurDataList[i].ItemName),E+ newSVpv(AsciiTime, 0), 0);E break; case IS_ENUM:S6 TempLongPointer = OurDataList[i].ReturnBuffer;7 hv_store(AllPurposeHV, OurDataList[i].ItemName,R1 strlen(OurDataList[i].ItemName),7 enum_name(DevInfoList[i].SyscallValue,41 *TempLongPointer), 0); break; case IS_BITMAP:C case IS_LONGWORD:H6 TempLongPointer = OurDataList[i].ReturnBuffer;7 hv_store(AllPurposeHV, OurDataList[i].ItemName,,1 strlen(OurDataList[i].ItemName),4+ newSViv(*TempLongPointer),L 0); break; #ifndef __VAXf case IS_QUADWORD:q6 TempQuadPointer = OurDataList[i].ReturnBuffer;: sprintf(QuadWordString, "%llu", *TempQuadPointer);7 hv_store(AllPurposeHV, OurDataList[i].ItemName,N1 strlen(OurDataList[i].ItemName),N0 newSVpv(QuadWordString, 0), 0); break;#endif case IS_BITMAP_VALUE:OK /* Find the first bit set in an arbitrarily-long array of bytes and# * return which bit it was.T */, *TempLongPointer = 0;D= for (j = 0, set = 0, c = OurDataList[i].ReturnBuffer;7 !set && j < *OurDataList[i].ReturnLength; , j++) {_# for (k = 0; k < 8; k++) {O if (*c & (1 << k)) {+ *TempLongPointer = j * 8 + k;f set = 1; break; } }  c++; }R7 hv_store(AllPurposeHV, OurDataList[i].ItemName,V1 strlen(OurDataList[i].ItemName),D@ set ? newSViv(*TempLongPointer) : &PL_sv_undef, 0); break; }L })- ST(0) = newRV_noinc((SV *) AllPurposeHV);T } else { /* I think we failed */f SETERRNO(EVMSERR, status); ST(0) = &PL_sv_undef;1 }d$ /* Free up our allocated memory */% for(i = 0; i < DevInfoCount; i++) {d& free(OurDataList[i].ReturnBuffer); }H free(OurDataList); free(ReturnLengths); free(ListOItems);X} voiddevice_types() PPCODE:{T int i;. for (i=0; DevTypeList[i].DevTypeName; i++) {? XPUSHs(sv_2mortal(newSVpv(DevTypeList[i].DevTypeName, 0)));R }}dvoiddevice_classes() PPCODE:{C int i;0 for (i=0; DevClassList[i].DevClassName; i++) {A XPUSHs(sv_2mortal(newSVpv(DevClassList[i].DevClassName, 0)));  }N}TvoidBdevice_list(DeviceName,DevClass=&PL_sv_undef,DevType=&PL_sv_undef) SV *DeviceName, SV *DevClassI SV *DevType PPCODE:{4 ITMLST *ListList;e int ItmlistIndex;E* unsigned short DevNameLen, DevReturnLen; unsigned int DevSearchNameLen;' unsigned int DeviceClass, DeviceType;E9 struct dsc$descriptor_s DevNameDesc, DevSearchNameDesc;A& char Context[8] = {0,0,0,0,0,0,0,0}; char ReturnedDevName[64];i char *SearchName;C! /* Decode the class and type */N+ DeviceClass = dev_class_decode(DevClass);I( DeviceType = dev_type_decode(DevType);, /* Do we need to allocate an item list? */" if (DeviceClass || DeviceType) {* ListList = malloc(sizeof(ITMLST) * 3);, memset(ListList, 0, sizeof(ITMLST) * 3); ItmlistIndex = 0;P if (DeviceClass) {A init_itemlist(&ListList[ItmlistIndex], sizeof(DeviceClass),D7 DVS$_DEVCLASS, &DeviceClass, NULL);I ItmlistIndex++;E }_ if (DeviceType) {@ init_itemlist(&ListList[ItmlistIndex], sizeof(DeviceType),5 DVS$_DEVTYPE, &DeviceType, NULL);T ItmlistIndex++;D }4 } else { ListList = NULL; }R$ /* The returned name descriptor */. DevNameDesc.dsc$a_pointer = ReturnedDevName; DevNameDesc.dsc$w_length = 64;* DevNameDesc.dsc$b_dtype = DSC$K_DTYPE_T;* DevNameDesc.dsc$b_class = DSC$K_CLASS_S;" /* The search name descriptor */G DevSearchNameDesc.dsc$a_pointer = SvPV(DeviceName, DevSearchNameLen);R4 DevSearchNameDesc.dsc$w_length = DevSearchNameLen;0 DevSearchNameDesc.dsc$b_dtype = DSC$K_DTYPE_T;0 DevSearchNameDesc.dsc$b_class = DSC$K_CLASS_S;C while( SS$_NORMAL == sys$device_scan(&DevNameDesc, &DevReturnLen,DD &DevSearchNameDesc, ListList,2 Context)) {? XPUSHs(sv_2mortal(newSVpv(ReturnedDevName, DevReturnLen)));) }e if (NULL != ListList) {_ free(ListList);N }_}ASV *+decode_device_bitmap(InfoName, BitmapValue)A char *InfoName_ int BitmapValue PPCODE:{ HV *AllPurposeHV;_% if (!strcmp(InfoName, "DEVCHAR")) {_1 AllPurposeHV = (HV*)sv_2mortal((SV*)newHV());d1 dev_bit_test(AllPurposeHV, REC, BitmapValue);A1 dev_bit_test(AllPurposeHV, CCL, BitmapValue);_1 dev_bit_test(AllPurposeHV, TRM, BitmapValue);1 dev_bit_test(AllPurposeHV, DIR, BitmapValue);_1 dev_bit_test(AllPurposeHV, SDI, BitmapValue);A1 dev_bit_test(AllPurposeHV, SQD, BitmapValue); 1 dev_bit_test(AllPurposeHV, SPL, BitmapValue);N1 dev_bit_test(AllPurposeHV, OPR, BitmapValue);1 dev_bit_test(AllPurposeHV, RCT, BitmapValue);A1 dev_bit_test(AllPurposeHV, NET, BitmapValue);I1 dev_bit_test(AllPurposeHV, FOD, BitmapValue);1 dev_bit_test(AllPurposeHV, DUA, BitmapValue);N1 dev_bit_test(AllPurposeHV, SHR, BitmapValue);i1 dev_bit_test(AllPurposeHV, GEN, BitmapValue);_1 dev_bit_test(AllPurposeHV, AVL, BitmapValue);I1 dev_bit_test(AllPurposeHV, MNT, BitmapValue);I1 dev_bit_test(AllPurposeHV, MBX, BitmapValue); 1 dev_bit_test(AllPurposeHV, DMT, BitmapValue);e1 dev_bit_test(AllPurposeHV, ELG, BitmapValue); 1 dev_bit_test(AllPurposeHV, ALL, BitmapValue);T1 dev_bit_test(AllPurposeHV, FOR, BitmapValue);O1 dev_bit_test(AllPurposeHV, SWL, BitmapValue); 1 dev_bit_test(AllPurposeHV, IDV, BitmapValue);f1 dev_bit_test(AllPurposeHV, ODV, BitmapValue);E1 dev_bit_test(AllPurposeHV, RND, BitmapValue);f1 dev_bit_test(AllPurposeHV, RTM, BitmapValue);N1 dev_bit_test(AllPurposeHV, RCK, BitmapValue);_1 dev_bit_test(AllPurposeHV, WCK, BitmapValue);f } else {& if (!strcmp(InfoName, "DEVCHAR2")) {1 AllPurposeHV = (HV*)sv_2mortal((SV*)newHV());M1 dev_bit_test(AllPurposeHV, CLU, BitmapValue);N1 dev_bit_test(AllPurposeHV, DET, BitmapValue);R1 dev_bit_test(AllPurposeHV, RTT, BitmapValue);O1 dev_bit_test(AllPurposeHV, CDP, BitmapValue);O0 dev_bit_test(AllPurposeHV, 2P, BitmapValue);2 dev_bit_test(AllPurposeHV, MSCP, BitmapValue);1 dev_bit_test(AllPurposeHV, SSM, BitmapValue);D1 dev_bit_test(AllPurposeHV, SRV, BitmapValue);1 dev_bit_test(AllPurposeHV, RED, BitmapValue);E1 dev_bit_test(AllPurposeHV, NNM, BitmapValue);S1 dev_bit_test(AllPurposeHV, WBC, BitmapValue);W1 dev_bit_test(AllPurposeHV, WTC, BitmapValue);V1 dev_bit_test(AllPurposeHV, HOC, BitmapValue);1 dev_bit_test(AllPurposeHV, LOC, BitmapValue);S1 dev_bit_test(AllPurposeHV, DFS, BitmapValue);I1 dev_bit_test(AllPurposeHV, DAP, BitmapValue);M1 dev_bit_test(AllPurposeHV, NLT, BitmapValue);I1 dev_bit_test(AllPurposeHV, SEX, BitmapValue);D1 dev_bit_test(AllPurposeHV, SHD, BitmapValue);R1 dev_bit_test(AllPurposeHV, VRT, BitmapValue);_1 dev_bit_test(AllPurposeHV, LDR, BitmapValue);P2 dev_bit_test(AllPurposeHV, NOLB, BitmapValue);3 dev_bit_test(AllPurposeHV, NOCLU, BitmapValue);,2 dev_bit_test(AllPurposeHV, VMEM, BitmapValue);2 dev_bit_test(AllPurposeHV, SCSI, BitmapValue);1 dev_bit_test(AllPurposeHV, WLG, BitmapValue);V2 dev_bit_test(AllPurposeHV, NOFE, BitmapValue); } else {! if (!strcmp(InfoName, "STS")) {G1 AllPurposeHV = (HV*)sv_2mortal((SV*)newHV());(#ifdef UCB$M_ALTBSY 3 ucb_bit_test(AllPurposeHV, ALTBSY, BitmapValue)#endif#ifdef UCB$M_BSY0 ucb_bit_test(AllPurposeHV, BSY, BitmapValue)#endif#ifdef UCB$M_CANCELR3 ucb_bit_test(AllPurposeHV, CANCEL, BitmapValue)M#endif#ifdef UCB$M_CLUTRAN4 ucb_bit_test(AllPurposeHV, CLUTRAN, BitmapValue)#endif#ifdef UCB$M_DEADMOV3 ucb_bit_test(AllPurposeHV, DEADMO, BitmapValue)#endif#ifdef UCB$M_DELETEUCB6 ucb_bit_test(AllPurposeHV, DELETEUCB, BitmapValue)#endif#ifdef UCB$M_DISMOUNT_5 ucb_bit_test(AllPurposeHV, DISMOUNT, BitmapValue)f#endif#ifdef UCB$M_ERLOGIP4 ucb_bit_test(AllPurposeHV, ERLOGIP, BitmapValue)#endif#ifdef UCB$M_EXFUNC_SUPP8 ucb_bit_test(AllPurposeHV, EXFUNC_SUPP, BitmapValue)#endif#ifdef UCB$M_FAST_PATH6 ucb_bit_test(AllPurposeHV, FAST_PATH, BitmapValue)#endif#ifdef UCB$M_FP_HWINT_5 ucb_bit_test(AllPurposeHV, FP_HWINT, BitmapValue)i#endif#ifdef UCB$M_INT0 ucb_bit_test(AllPurposeHV, INT, BitmapValue)#endif#ifdef UCB$M_INTTYPE4 ucb_bit_test(AllPurposeHV, INTTYPE, BitmapValue)#endif#ifdef UCB$M_IOPOST_LOCALS9 ucb_bit_test(AllPurposeHV, IOPOST_LOCAL, BitmapValue)#endif#ifdef UCB$M_LCL_VALID6 ucb_bit_test(AllPurposeHV, LCL_VALID, BitmapValue)#endif#ifdef UCB$M_MNTVERIPB5 ucb_bit_test(AllPurposeHV, MNTVERIP, BitmapValue)_#endif#ifdef UCB$M_MOUNTINGe5 ucb_bit_test(AllPurposeHV, MOUNTING, BitmapValue)O#endif#ifdef UCB$M_MNTVERPND6 ucb_bit_test(AllPurposeHV, MNTVERPND, BitmapValue)#endif#ifdef UCB$M_NO_ASSIGN6 ucb_bit_test(AllPurposeHV, NO_ASSIGN, BitmapValue)#endif#ifdef UCB$M_ONLINED3 ucb_bit_test(AllPurposeHV, ONLINE, BitmapValue)f#endif#ifdef UCB$M_PATHVERIP6 ucb_bit_test(AllPurposeHV, PATHVERIP, BitmapValue)#endif#ifdef UCB$M_POWER2 ucb_bit_test(AllPurposeHV, POWER, BitmapValue)#endif#ifdef UCB$M_SNAPSHOTT5 ucb_bit_test(AllPurposeHV, SNAPSHOT, BitmapValue) #endif#ifdef UCB$M_SUPMVMSGR5 ucb_bit_test(AllPurposeHV, SUPMVMSG, BitmapValue)1#endif#ifdef UCB$M_SVPN_ENDD5 ucb_bit_test(AllPurposeHV, SVPN_END, BitmapValue)d#endif#ifdef UCB$M_TEMPLATEU5 ucb_bit_test(AllPurposeHV, TEMPLATE, BitmapValue)D#endif#ifdef UCB$M_TIM0 ucb_bit_test(AllPurposeHV, TIM, BitmapValue)#endif#ifdef UCB$M_TIMOUTf3 ucb_bit_test(AllPurposeHV, TIMOUT, BitmapValue),#endif#ifdef UCB$M_UNLOADf3 ucb_bit_test(AllPurposeHV, UNLOAD, BitmapValue)I#endif#ifdef UCB$M_VALID2 ucb_bit_test(AllPurposeHV, VALID, BitmapValue)#endif#ifdef UCB$M_WRONGVOLA5 ucb_bit_test(AllPurposeHV, WRONGVOL, BitmapValue)(#endif#ifdef UCB$M_WRTLOCKMV6 ucb_bit_test(AllPurposeHV, WRTLOCKMV, BitmapValue)#endif#ifdef DVI$_VOLCHARI } else {% if (!strcmp(InfoName, "VOLCHAR")) { 1 AllPurposeHV = (HV*)sv_2mortal((SV*)newHV());i+ /* 4 bits -- so get the actual value */R( if (BitmapValue & DVI$M_VOL_READDIR)E hv_store(AllPurposeHV, "VOL_READDIR", strlen("VOL_READDIR"), > newSViv(BitmapValue & DVI$M_VOL_READDIR), 0); elseS hv_store(AllPurposeHV, "VOL_READDIR", strlen("VOL_READDIR"), &PL_sv_no, 0);T< dvi_bit_test(AllPurposeHV, VOL_LENGTH_HINT, BitmapValue)= dvi_bit_test(AllPurposeHV, VOL_CACHING_ATTR, BitmapValue)S< dvi_bit_test(AllPurposeHV, VOL_ACCESS_DATE, BitmapValue)9 dvi_bit_test(AllPurposeHV, VOL_HARDLINK, BitmapValue)T= dvi_bit_test(AllPurposeHV, VOL_SET_SECURITY, BitmapValue)4< dvi_bit_test(AllPurposeHV, VOL_FID_TO_NAME, BitmapValue)A dvi_bit_test(AllPurposeHV, VOL_ODS1_STYLE_PURGE, BitmapValue) @ dvi_bit_test(AllPurposeHV, VOL_SHARED_TRUNCATE, BitmapValue)> dvi_bit_test(AllPurposeHV, VOL_WRITE_BARRIER, BitmapValue); dvi_bit_test(AllPurposeHV, VOL_DIRSEQ_QIO, BitmapValue) 4 dvi_bit_test(AllPurposeHV, VOL_EFS, BitmapValue)5 dvi_bit_test(AllPurposeHV, VOL_UCS2, BitmapValue)N= dvi_bit_test(AllPurposeHV, VOL_CASE_VARIANT, BitmapValue)_8 dvi_bit_test(AllPurposeHV, VOL_MODDATE, BitmapValue)= dvi_bit_test(AllPurposeHV, VOL_SPECIAL_FILE, BitmapValue) 5 dvi_bit_test(AllPurposeHV, VOL_SSIO, BitmapValue)C#endif } else {( if (!strcmp(InfoName, "TT_CHARSET")) {1 AllPurposeHV = (HV*)sv_2mortal((SV*)newHV());I4 ttc_bit_test(AllPurposeHV, HANGUL, BitmapValue);3 ttc_bit_test(AllPurposeHV, HANYU, BitmapValue);N3 ttc_bit_test(AllPurposeHV, HANZI, BitmapValue);42 ttc_bit_test(AllPurposeHV, KANA, BitmapValue);3 ttc_bit_test(AllPurposeHV, KANJI, BitmapValue);(2 ttc_bit_test(AllPurposeHV, THAI, BitmapValue); }}}}#ifdef DVI$_VOLCHARE }N#endif if (AllPurposeHV) {(, XPUSHs(newRV_noinc((SV *)AllPurposeHV)); } else { XPUSHs(&PL_sv_undef);E }D} SV *3initialize(DevName, VolName, ItemHash=&PL_sv_undef)  SV *DevName SV *VolName SV *ItemHashO CODE:{R ITMLST InitItemList[99]; int Status, NumItems = 0;V& unsigned int DevNameLen, VolNameLen;& struct dsc$descriptor_s DevNameDesc;& struct dsc$descriptor_s VolNameDesc;8 DevNameDesc.dsc$a_pointer = SvPV(DevName, DevNameLen);( DevNameDesc.dsc$w_length = DevNameLen;* DevNameDesc.dsc$b_dtype = DSC$K_DTYPE_T;* DevNameDesc.dsc$b_class = DSC$K_CLASS_S;8 VolNameDesc.dsc$a_pointer = SvPV(VolName, VolNameLen);( VolNameDesc.dsc$w_length = VolNameLen;* VolNameDesc.dsc$b_dtype = DSC$K_DTYPE_T;* VolNameDesc.dsc$b_class = DSC$K_CLASS_S;% /* Did we get an item list hash? */_! if (ItemHash != &PL_sv_undef) {4& /* Okay, then is it a hash ref? */ if (SvROK(ItemHash)) {/ if (SvTYPE(SvRV(ItemHash)) == SVt_PVHV) {_8 /* Hey, it's a hashref. Go hit build_itemlist */! /* Clear the item list */t5 memset(InitItemList, 0, sizeof(ITMLST) * 99);u9 NumItems = build_itemlist(InitList, InitItemList,o8 (HV *)SvRV(ItemHash)); } else {2 croak("Arg 3 should be a hash reference"); }t } else {0 croak("Arg 3 should be a hash reference"); }o }i if (NumItems) { D Status = sys$init_vol(&DevNameDesc, &VolNameDesc, InitItemList);/ tear_down_itemlist(InitItemList, NumItems);) } else {< Status = sys$init_vol(&DevNameDesc, &VolNameDesc, NULL); }e if (SS$_NORMAL == Status) { XSRETURN_YES;o } else { SETERRNO(EVMSERR, Status); XSRETURN_UNDEF;o }}SV *(dismount(DevName, ItemHash=&PL_sv_undef) SV *DevName SV *ItemHash CODE:{i ITMLST InitItemList[99]; int Status, NumItems = 0;  int Flags = 0;& unsigned int DevNameLen, VolNameLen;& struct dsc$descriptor_s DevNameDesc;& struct dsc$descriptor_s VolNameDesc;8 DevNameDesc.dsc$a_pointer = SvPV(DevName, DevNameLen);( DevNameDesc.dsc$w_length = DevNameLen;* DevNameDesc.dsc$b_dtype = DSC$K_DTYPE_T;* DevNameDesc.dsc$b_class = DSC$K_CLASS_S;% /* Did we get an item list hash? */e! if (ItemHash != &PL_sv_undef) {a& /* Okay, then is it a hash ref? */ if (SvROK(ItemHash)) {/ if (SvTYPE(SvRV(ItemHash)) == SVt_PVHV) {= /* Hey, it's a hashref. Go turn it into an integer */lL generic_bitmap_encode((HV *)SvRV(ItemHash), SYSCALL_DISMOU, &Flags); } else {2 croak("Arg 2 should be a hash reference"); }N } else {0 croak("Arg 2 should be a hash reference"); }r }+ Status = sys$dismou(&DevNameDesc, Flags); if (SS$_NORMAL == Status) {e XSRETURN_YES;i } else { SETERRNO(EVMSERR, Status); XSRETURN_UNDEF;e }=};SV *mount(ItemHash=&PL_sv_undef) SV *ItemHash, CODE:{ ITMLST MountItemList[99];d int Status, NumItems = 0; % /* Did we get an item list hash? */V! if (ItemHash != &PL_sv_undef) {s& /* Okay, then is it a hash ref? */ if (SvROK(ItemHash)) {/ if (SvTYPE(SvRV(ItemHash)) == SVt_PVHV) {i8 /* Hey, it's a hashref. Go hit build_itemlist */! /* Clear the item list */ ( Zero(MountItemList, 99, ITMLST);; NumItems = build_itemlist(MountList, MountItemList,t8 (HV *)SvRV(ItemHash)); } else {1 croak("mount requires a hash reference");i }l } else {/ croak("mount requires a hash reference");S }  }* if (NumItems) {;& Status = sys$mount(MountItemList);0 tear_down_itemlist(MountItemList, NumItems); } else {$ SETERRNO(EVMSERR, SS$_BADPARAM); XSRETURN_UNDEF;* }t if (SS$_NORMAL == Status) {t XSRETURN_YES;l } else { SETERRNO(EVMSERR, Status); XSRETURN_UNDEF;L }} SV *@allocate(DevName, FirstAvail=&PL_sv_undef, AccMode=&PL_sv_undef) SV *DevName SV *FirstAvail  SV *AccMode CODE:{  char ReturnName[65]; char *AccessString;  unsigned short ReturnNameLen;O int AccessMode, Flags, Status; unsigned int DevNameLen;& struct dsc$descriptor_s DevNameDesc;" struct dsc$descriptor_s RetName;% RetName.dsc$a_pointer = ReturnName;  RetName.dsc$w_length = 64;& RetName.dsc$b_dtype = DSC$K_DTYPE_T;& RetName.dsc$b_class = DSC$K_CLASS_S;8 DevNameDesc.dsc$a_pointer = SvPV(DevName, DevNameLen);( DevNameDesc.dsc$w_length = DevNameLen;* DevNameDesc.dsc$b_dtype = DSC$K_DTYPE_T;* DevNameDesc.dsc$b_class = DSC$K_CLASS_S; Flags = SvTRUE(FirstAvail);2' AccessMode = decode_accmode(AccMode); H Status = sys$alloc(&DevNameDesc, &ReturnNameLen, &RetName, AccessMode, Flags); if (SS$_NORMAL == Status) {M; ST(0) = sv_2mortal(newSVpv(ReturnName, ReturnNameLen));S } else { SETERRNO(EVMSERR, Status); ST(0) = &PL_sv_undef; } }_SV *)deallocate(DevName, AccMode=&PL_sv_undef)N SV *DevName SV *AccMode CODE:{T& struct dsc$descriptor_s DevNameDesc; int AccessMode, Status;I unsigned int DevNameLen;8 DevNameDesc.dsc$a_pointer = SvPV(DevName, DevNameLen);( DevNameDesc.dsc$w_length = DevNameLen;* DevNameDesc.dsc$b_dtype = DSC$K_DTYPE_T;* DevNameDesc.dsc$b_class = DSC$K_CLASS_S;' AccessMode = decode_accmode(AccMode);s0 Status = sys$dalloc(&DevNameDesc, AccessMode); if (SS$_NORMAL == Status) {n ST(0) = &PL_sv_yes;e } else { SETERRNO(EVMSERR, Status); ST(0) = &PL_sv_undef;i } }L