#ifndef _VDIF_H
#define _VDIF_H
#define VDIF_MONITOR_MONOCHROME 0
#define VDIF_MONITOR_COLOR 1
#define VDIF_VIDEO_TTL 0
#define VDIF_VIDEO_ANALOG 1
#define VDIF_VIDEO_ECL 2
#define VDIF_VIDEO_DECL 3
#define VDIF_VIDEO_OTHER 4
#define VDIF_SYNC_SEPARATE 0
#define VDIF_SYNC_C 1
#define VDIF_SYNC_CP 2
#define VDIF_SYNC_G 3
#define VDIF_SYNC_GP 4
#define VDIF_SYNC_OTHER 5
#define VDIF_SCAN_NONINTERLACED 0
#define VDIF_SCAN_INTERLACED 1
#define VDIF_SCAN_OTHER 2
#define VDIF_POLARITY_NEGATIVE 0
#define VDIF_POLARITY_POSITIVE 1
#include <X11/Xmd.h>
#undef CARD32
#define CARD32 unsigned int
typedef struct _VDIF {
CARD8 VDIFId[4];
CARD32 FileLength;
CARD32 Checksum;
CARD16 VDIFVersion;
CARD16 VDIFRevision;
CARD16 Date[3];
CARD16 DateManufactured[3];
CARD32 FileRevision;
CARD32 Manufacturer;
CARD32 ModelNumber;
CARD32 MinVDIFIndex;
CARD32 Version;
CARD32 SerialNumber;
CARD8 MonitorType;
CARD8 CRTSize;
CARD8 BorderRed;
CARD8 BorderGreen;
CARD8 BorderBlue;
CARD8 Reserved1;
CARD16 Reserved2;
CARD32 RedPhosphorDecay;
CARD32 GreenPhosphorDecay;
CARD32 BluePhosphorDecay;
CARD16 WhitePoint_x;
CARD16 WhitePoint_y;
CARD16 WhitePoint_Y;
CARD16 RedChromaticity_x;
CARD16 RedChromaticity_y;
CARD16 GreenChromaticity_x;
CARD16 GreenChromaticity_y;
CARD16 BlueChromaticity_x;
CARD16 BlueChromaticity_y;
CARD16 RedGamma;
CARD16 GreenGamma;
CARD16 BlueGamma;
CARD32 NumberOperationalLimits;
CARD32 OffsetOperationalLimits;
CARD32 NumberOptions;
CARD32 OffsetOptions;
CARD32 OffsetStringTable;
} xf86VdifRec, *xf86VdifPtr;
typedef enum {
VDIF_OPERATIONAL_LIMITS_TAG = 1,
VDIF_PREADJUSTED_TIMING_TAG,
VDIF_GAMMA_TABLE_TAG
} VDIFScnTag;
typedef struct _VDIFScnHdr {
CARD32 ScnLength;
CARD32 ScnTag;
} VDIFScnHdrRec, *VDIFScnHdrPtr;
typedef struct _VDIFLimits {
VDIFScnHdrRec Header;
CARD16 MaxHorPixel;
CARD16 MaxVerPixel;
CARD16 MaxHorActiveLength;
CARD16 MaxVerActiveHeight;
CARD8 VideoType;
CARD8 SyncType;
CARD8 SyncConfiguration;
CARD8 Reserved1;
CARD16 Reserved2;
CARD16 TerminationResistance;
CARD16 WhiteLevel;
CARD16 BlackLevel;
CARD16 BlankLevel;
CARD16 SyncLevel;
CARD32 MaxPixelClock;
CARD32 MinHorFrequency;
CARD32 MaxHorFrequency;
CARD32 MinVerFrequency;
CARD32 MaxVerFrequency;
CARD16 MinHorRetrace;
CARD16 MinVerRetrace;
CARD32 NumberPreadjustedTimings;
CARD32 OffsetNextLimits;
} xf86VdifLimitsRec, *xf86VdifLimitsPtr;
typedef struct _VDIFTiming {
VDIFScnHdrRec Header;
CARD32 PreadjustedTimingName;
CARD16 HorPixel;
CARD16 VerPixel;
CARD16 HorAddrLength;
CARD16 VerAddrHeight;
CARD8 PixelWidthRatio;
CARD8 PixelHeightRatio;
CARD8 Reserved1;
CARD8 ScanType;
CARD8 HorSyncPolarity;
CARD8 VerSyncPolarity;
CARD16 CharacterWidth;
CARD32 PixelClock;
CARD32 HorFrequency;
CARD32 VerFrequency;
CARD32 HorTotalTime;
CARD32 VerTotalTime;
CARD16 HorAddrTime;
CARD16 HorBlankStart;
CARD16 HorBlankTime;
CARD16 HorSyncStart;
CARD16 HorSyncTime;
CARD16 VerAddrTime;
CARD16 VerBlankStart;
CARD16 VerBlankTime;
CARD16 VerSyncStart;
CARD16 VerSyncTime;
} xf86VdifTimingRec, *xf86VdifTimingPtr;
typedef struct _VDIFGamma {
VDIFScnHdrRec Header;
CARD16 GammaTableEntries;
CARD16 Unused1;
} xf86VdifGammaRec, *xf86VdifGammaPtr;
#define VDIF_OPERATIONAL_LIMITS(vdif) \
((xf86VdifLimitsPtr)((char*)(vdif) + (vdif)->OffsetOperationalLimits))
#define VDIF_NEXT_OPERATIONAL_LIMITS(limits) limits = \
((xf86VdifLimitsPtr)((char*)(limits) + (limits)->OffsetNextLimits))
#define VDIF_PREADJUSTED_TIMING(limits) \
((xf86VdifTimingPtr)((char*)(limits) + (limits)->Header.ScnLength))
#define VDIF_NEXT_PREADJUSTED_TIMING(timing) timing = \
((xf86VdifTimingPtr)((char*)(timing) + (timing)->Header.ScnLength))
#define VDIF_OPTIONS(vdif) \
((VDIFScnHdrPtr)((char*)(vdif) + (vdif)->OffsetOptions))
#define VDIF_NEXT_OPTIONS(options) options = \
((xf86VdifGammaPtr)((char*)(options) + (options)->Header.ScnLength))
#define VDIF_STRING(vdif, string) \
((char*)((char*)vdif + vdif->OffsetStringTable + (string)))
typedef struct _vdif {
xf86VdifPtr vdif;
xf86VdifLimitsPtr *limits;
xf86VdifTimingPtr *timings;
xf86VdifGammaPtr *gamma;
char * strings;
} xf86vdif, *xf86vdifPtr;
#undef CARD32
#endif