home *** CD-ROM | disk | FTP | other *** search
/ IRIS Development Option 6.2 / IRIS_Development_Option_6.2_814-0478-001.iso / dist / dmedia_dev.idb / usr / include / dmedia / vl.h.z / vl.h
C/C++ Source or Header  |  1996-03-14  |  35KB  |  1,232 lines

  1. #ifndef _VL_H_
  2. #define _VL_H_
  3.  
  4. /*
  5.  *  vl.h -- Main header file for the IRIS Video Library.
  6.  *
  7.  * Copyright 1993,1994 Silicon Graphics, Inc.
  8.  * All Rights Reserved.
  9.  *
  10.  * This is UNPUBLISHED PROPRIETARY SOURCE CODE of Silicon Graphics, Inc.;
  11.  * the contents of this file may not be disclosed to third parties, copied or
  12.  * duplicated in any form, in whole or in part, without the prior written
  13.  * permission of Silicon Graphics, Inc.
  14.  *
  15.  * RESTRICTED RIGHTS LEGEND:
  16.  * Use, duplication or disclosure by the Government is subject to restrictions
  17.  * as set forth in subdivision (c)(1)(ii) of the Rights in Technical Data
  18.  * and Computer Software clause at DFARS 252.227-7013, and/or in similar or
  19.  * successor clauses in the FAR, DOD or NASA FAR Supplement. Unpublished -
  20.  * rights reserved under the Copyright Laws of the United States.
  21.  */
  22.  
  23. #define VLSpecificationRelease 1
  24.  
  25. #ifdef __cplusplus
  26. extern "C" {
  27. #endif
  28.  
  29. #include <stddef.h>
  30. #include <ulocks.h>
  31. #include <sys/types.h>
  32. #include <sys/dmcommon.h>
  33.  
  34. #define VL_PROTOCOL     1               /* current protocol version */
  35. #define VL_PROTOCOL_REVISION 0          /* current minor version */
  36.  
  37.  
  38. /* Basic VL data types for controls, etc. */
  39.  
  40. typedef int VLBoolean;
  41.  
  42. typedef struct {
  43.     int x, y;
  44. } VLXY;
  45.  
  46. typedef struct {
  47.     int base;
  48.     int increment;
  49.     int limit;
  50.     int type;        /* one of the following values: */
  51. #define VL_LINEAR    1
  52. #define VL_GEOMETRIC    2
  53. } VLRange;
  54.  
  55. typedef struct {
  56.     VLRange numerator;
  57.     VLRange denominator;
  58. } VLFractionRange;
  59.  
  60. typedef struct {
  61.     int numerator;
  62.     int denominator;
  63. } VLFraction;
  64.  
  65.  
  66. /*
  67.  * Definitions for VL nodes:
  68.  */
  69.  
  70. /*
  71.  * Definitions of node types and kinds. Used as arguments for vlGetNode(),
  72.  * returned in VLNodeInfo.
  73.  */
  74.  
  75. /* Node type */
  76. #define VL_SRC        1        /* Sources of data */
  77. #define VL_DRN        2        /* Drains for data */
  78. #define VL_DEVICE    3        /* The device node */
  79. #define VL_INTERNAL    4        /* Filters & such */
  80.  
  81. /* Node kind */
  82. #define VL_VIDEO        1
  83. #define VL_GFX          2        /* Sirius only */
  84. #define VL_MEM          3
  85. #define VL_SCREEN       4
  86. #define VL_TEXTURE      5        /* Sirius and Impact only */
  87. #define VL_NETWORK      6
  88. #define VL_BLENDER    7
  89. #define VL_KEYGEN       8               /* Key Generator */
  90. /* RESERVED NODE KIND   9 */
  91. #define VL_CSC        10        /* Color space converter node */
  92. #define VL_FB        11        /* Frame buffer node */
  93. #define VL_CODEC    12        /* Compression/Decompression node*/
  94. /* also VL_ANY */
  95.  
  96.  
  97. /*
  98.  * The following may be returned by vlGetConnection to indicate that the
  99.  * node/port are not representd on the client's path.
  100.  */
  101. #define VLUnknownNode -1
  102. #define VLUnknownPort -1
  103.  
  104. typedef int VLNode;
  105. typedef int VLPort;
  106.  
  107. typedef struct __vlNodePortPair {
  108.     VLNode node;
  109.     VLPort port;
  110. } VLNodePortPair;
  111.  
  112. #define VL_NAME_SIZE 32
  113.  
  114. typedef struct __vlNodeInfo {
  115.     int id;
  116.     char name[VL_NAME_SIZE];    /* name of node */
  117.     int type;            /* see list above */
  118.     int number;            /* number of this node */
  119.     int kind;            /* see list above */
  120. } VLNodeInfo;
  121.  
  122. typedef int VLPath;        /* handle for a path  */
  123.  
  124. typedef int VLDev;        /* handle for a device  */
  125.  
  126. typedef struct __vlDevice {
  127.     VLDev dev;
  128.     char name[VL_NAME_SIZE];    /* name of device */
  129.     int numNodes;        /* number of nodes on this device */
  130.     VLNodeInfo *nodes;        /* list of nodes */
  131.     void *priv;
  132. } VLDevice;
  133.  
  134. typedef struct __vlDevList {
  135.     int numDevices;        /* number of devices */
  136.     VLDevice *devices;        /* list of devices */
  137. } VLDevList;
  138.  
  139.  
  140.  
  141. /*
  142.  * VL server access routines:
  143.  */
  144.  
  145. typedef struct _VLServer *VLServer;
  146.  
  147. extern VLServer vlOpenVideo(
  148.     const char *    /* Server Name */
  149. );
  150.  
  151. extern int vlCloseVideo(
  152.     VLServer        /* Server Handle */
  153. );
  154.  
  155. extern int vlGetDeviceList(
  156.     VLServer,        /* Server Handle */
  157.     VLDevList *        /* Device List   */
  158. );
  159.  
  160. /* Define vlGetFD as an alias for vlConnectionNumber */ 
  161. #define vlGetFD vlConnectionNumber
  162.  
  163. extern int vlConnectionNumber(VLServer svr);
  164. extern int vlServerProtocolVersion(VLServer svr);
  165. extern int vlServerProtocolRevision(VLServer svr);
  166. extern int vlServerVendorRelease(VLServer svr);
  167. extern char * vlServerString(VLServer svr);
  168.  
  169.  
  170.  
  171. /*
  172.  * Routines to manipulate paths and nodes:
  173.  */
  174.  
  175. extern VLDev vlGetDevice(
  176.     VLServer,           /* Server Handle */
  177.     VLPath        /* Path Handle */
  178. );
  179.  
  180. extern VLPath vlCreatePath(
  181.     VLServer,        /* Server Handle */
  182.     VLDev,        /* Device Handle */
  183.     VLNode,        /* Source */
  184.     VLNode        /* Drain */
  185. );
  186.  
  187. extern VLNode vlGetNode(
  188.     VLServer,        /* Server Handle */
  189.     int,        /* node type */
  190.     int,        /* node kind */
  191.     int            /* node number */
  192. );
  193.  
  194. extern int vlDestroyPath(
  195.     VLServer,        /* Server Handle */
  196.     VLPath        /* Path Handle */
  197. );
  198.  
  199. extern int vlAddNode(
  200.     VLServer,        /* Server Handle */
  201.     VLPath,        /* Path Handle */
  202.     VLNode        /* Node */
  203. );
  204.  
  205. extern int vlRemoveNode(
  206.     VLServer,        /* Server Handle */
  207.     VLPath,        /* Path Handle */
  208.     VLNode        /* Node */
  209. );
  210.  
  211. /*
  212.  *----------------------------------------------------------------------
  213.  *
  214.  * Controls
  215.  */
  216.  
  217. typedef int VLControlType;    /* see the following #defines */
  218.  
  219. /*
  220.  * Configuration controls:
  221.  *
  222.  * VL_DEFAULT_SOURCE(int)    the default input video source for a path
  223.  * VL_TIMING(int)        the timing for video (on video node or device)
  224.  */
  225. #define VL_DEFAULT_SOURCE    0
  226. #define VL_TIMING        1 /* one of the following values */
  227.     /*
  228.      * 525 lines total -> active plus blanking;
  229.      * 625 lines total -> active plus blanking;
  230.      *
  231.      * Betacam/MII/composite tape formats use square pixel analog timings;
  232.      * D1 tape formats use CCIR601 timings;
  233.      * D2 tape formats use the 4 times subcarrier timings.
  234.      */
  235. #define  VL_TIMING_525_SQ_PIX    0 /*analog (525 lines) 12.27 MHz; 646x486 */
  236. #define  VL_TIMING_625_SQ_PIX    1 /*analog (625 lines) 14.75 MHz; 768x576 */
  237. #define  VL_TIMING_525_CCIR601    2 /*digital component  13.50 MHz; 720x486 */
  238. #define  VL_TIMING_625_CCIR601    3 /*digital component  13.50 MHz; 720x576 */
  239. #define  VL_TIMING_525_4FSC    4 /*4x ntsc subcarrier 14.32 MHz; 768x486 */
  240. #define  VL_TIMING_625_4FSC    5 /*4x pal subcarrier  17.72 MHz; 948x576 */
  241.  
  242. /*
  243.  * Size/Position Controls:
  244.  *
  245.  * These controls are used to set up the size and position of the video
  246.  * stream. The API specification is as follows:
  247.  *
  248.  * On VL_VIDEO nodes:
  249.  *    VL_SIZE(xy)        size of video
  250.  *    VL_OFFSET(xy)        offset to active region of video
  251.  *
  252.  * On all other nodes:
  253.  *    VL_ZOOM(fract)        the zoom factor for the video stream
  254.  *    VL_OFFSET(xy)        the offset within the video (after zoom)
  255.  *    VL_SIZE(xy)        the clipped size of the video
  256.  *    VL_ORIGIN(xy)        the offset within the node
  257.  *    VL_RATE(fract)        frame rate
  258.  *
  259.  * VL_OFFSET, VL_SIZE are measured in pixels against the
  260.  *      extents of the base unit of VL_CAP_TYPE, ie. frames or fields.
  261.  * 
  262.  * VL_RATE is measured in either frames/second or fields/second depending
  263.  *      on the  unit of VL_CAP_TYPE.
  264.  */
  265. #define VL_ORIGIN        2 
  266. #define VL_OFFSET        3        /* pixels per frames or field */
  267. #define VL_SIZE            4        /* pixels per frames or field */
  268. #define VL_RATE            5        /* frames or fields per second */
  269. #define VL_ZOOM            44        /* nominal, 1.0 is passthough */
  270.  
  271. /*
  272.  * Data type controls:
  273.  *
  274.  * On any node other than video:
  275.  *    VL_CAP_TYPE(int)    what fields/interleaving for the transfer
  276.  *    VL_PACKING(int)        what pixel packing to use
  277.  */
  278. #define VL_CAP_TYPE        6
  279. #define     VL_CAPTURE_NONINTERLEAVED    0    /* fields */
  280. #define     VL_CAPTURE_INTERLEAVED    1    /* frames */
  281. #define     VL_CAPTURE_EVEN_FIELDS    2    /* fields */
  282. #define     VL_CAPTURE_ODD_FIELDS    3    /* fields */
  283. #define     VL_CAPTURE_FIELDS        4    /* fields */
  284. #define VL_PACKING        7
  285. #define     VL_PACKING_RGB_332_P    0
  286. #define     VL_PACKING_RGBA_8        1    /* really ABGR_8 */
  287. #define     VL_PACKING_RGB_8        2    /* really BGR_8 */
  288. #define     VL_PACKING_RBG_323        3
  289. #define     VL_PACKING_VUY_411_SV    4
  290. #define     VL_PACKING_YVYU_422_8    5
  291. #define     VL_PACKING_Y_8_P        6
  292. #define     VL_PACKING_RGB_332        7
  293. #define     VL_PACKING_BGR_332        8
  294. #define     VL_PACKING_RGB_332_IP    9
  295. #define     VL_PACKING_BGR_332_P    10
  296. #define     VL_PACKING_BGR_332_IP    11
  297. #define     VL_PACKING_RGB_565        12
  298. #define     VL_PACKING_RGB_565_P    13
  299. #define     VL_PACKING_RGB_565_IP    14
  300. #define     VL_PACKING_RGB_8_P        15
  301. #define     VL_PACKING_RGB_10        16
  302. #define     VL_PACKING_Y_8_IP        17
  303. #define     VL_PACKING_YUV_444_8    18
  304. #define     VL_PACKING_YUVA_4444_8    19
  305. #define     VL_PACKING_YUV_444_10    20
  306. #define     VL_PACKING_YUVA_4444_10    21    
  307. #define     VL_PACKING_ABGR_8        22    /* really RGBA_8 (OpenGL) */
  308. #define     VL_PACKING_AUYV_4444_8    23
  309. #define     VL_PACKING_A_2_BGR_10    24
  310. #define     VL_PACKING_A_2_UYV_10    25
  311. #define     VL_PACKING_AYU_AYV_10    26    /* two transfers */ 
  312. #define     VL_PACKING_YVYU_422_10    27
  313. #define     VL_PACKING_AUYV_4444_10    28
  314. #define     VL_PACKING_RGBA_10        29    /* really ABGR_10 */
  315. #define     VL_PACKING_ABGR_10        30    /* really RBGA_10 */
  316. #define     VL_PACKING_MAX        31
  317.  
  318. #define     VL_PACKING_AUYV_8        VL_PACKING_AUYV_4444_8
  319.  
  320. /*
  321.  * Screen-specific controls:
  322.  *    VL_WINDOW(int)        what window the video should appear in
  323.  */
  324. #define VL_WINDOW        8
  325.  
  326. /*
  327.  * Video attribute controls:
  328.  */
  329. #define VL_BRIGHTNESS        9
  330. #define VL_CONTRAST        10
  331. #define VL_H_PHASE        11
  332. #define VL_HUE            12
  333. #define VL_SATURATION        56
  334. #define VL_RED_SETUP        13        /* boolean */
  335. #define VL_GREEN_SETUP        14        /* boolean */
  336. #define VL_GRN_SETUP        14
  337. #define VL_BLUE_SETUP        15        /* boolean */
  338. #define VL_BLU_SETUP        15
  339. #define VL_ALPHA_SETUP        57        /* boolean */
  340. #define VL_V_PHASE        16        /* in lines, nominal 0 */
  341. #define VL_SIGNAL        17
  342. #define     VL_SIGNAL_NOTHING        0
  343. #define     VL_SIGNAL_BLACK        1
  344. #define     VL_SIGNAL_REAL_IMAGE    2
  345. #define VL_FREEZE        18
  346. #define VL_DEFAULT_DRAIN    19
  347. #define VL_MUXSWITCH        20
  348. #define VL_FORMAT        21
  349. #define     VL_FORMAT_COMPOSITE                0
  350. #define     VL_FORMAT_SVIDEO                 1
  351. #define     VL_FORMAT_RGB                 2 /* full range */
  352. #define     VL_FORMAT_BETACAM                 3
  353. #define     VL_FORMAT_MII                 4
  354. #define     VL_FORMAT_SMPTE_YUV                 5
  355. #define     VL_FORMAT_DIGITAL_COMPOSITE             6
  356. #define     VL_FORMAT_DIGITAL_COMPONENT             7 /* parallel */
  357. #define     VL_FORMAT_DIGITAL_COMPONENT_SERIAL         8
  358. #define     VL_FORMAT_DIGITAL_COMPONENT_DUAL         9 /* 4:4:4:4  */
  359. #define     VL_FORMAT_DIGITAL_COMPONENT_DUAL_SERIAL    10 /* 4:4:4:4 serial */
  360. #define     VL_FORMAT_DIGITAL_INDYCAM            11
  361. #define     VL_FORMAT_DIGITAL_COMPONENT_RGB        12 /* 4:4:4:4 rgb */
  362. #define     VL_FORMAT_DIGITAL_COMPONENT_RGB_SERIAL    13 /* 4:4:4:4 rgb */
  363. #define     VL_FORMAT_RAW_DATA                14 /* Arbitrary data */
  364. #define VL_SYNC            22
  365. #define     VL_SYNC_INTERNAL        0
  366. #define     VL_SYNC_GENLOCK        2
  367. #define VL_SYNC_SOURCE        58        /* input for VL_SYNC_GENLOCK */
  368.  
  369. /* Blend functions: not all products support all fcns */
  370. #define VL_BLEND_A_FCN        34
  371. #define VL_BLEND_B_FCN        59
  372. #define     VL_BLDFCN_ZERO              0  /*  0 */
  373. #define     VL_BLDFCN_ONE               1  /*  1 */
  374. #define     VL_BLDFCN_A_ALPHA        2  /*  (A alpha)*/
  375. #define     VL_BLDFCN_B_ALPHA        3  /*  (B alpha)  */
  376. #define     VL_BLDFCN_MINUS_A_ALPHA    4  /*  1 - (A alpha) */
  377. #define     VL_BLDFCN_MINUS_B_ALPHA    5  /*  1 - (B alpha) */
  378. #define VL_BLEND_A        35 /* A source node */
  379. #define VL_BLEND_B        36 /* B source node */
  380. #define VL_BLEND_A_ALPHA    37 /* A alpha node */
  381. #define VL_BLEND_B_ALPHA    38 /* B alpha node */
  382. #define VL_BLEND_A_NORMALIZE    39 /* A follows porter-duff model, boolean */
  383. #define VL_BLEND_B_NORMALIZE    60 /* B follows porter-duff model, boolean */
  384. #define VL_BLEND_OUT_NORMALIZE    61 /* OUT follows porter-duff model, boolean */
  385.  
  386. /* Advisory controls */
  387. #define VL_SUPERVISORY_PATH    62 /* Is this path supervisory? */
  388.  
  389. /* Additional private controls are in vlpriv.h */
  390.  
  391.  
  392. /*
  393.  * Control classes:
  394.  */
  395.  
  396. typedef unsigned int VLControlClass; /* one of the following values: */
  397.  
  398. #define VL_CLASS_NO_UI        0
  399. #define VL_CLASS_SLIDER         1
  400. #define VL_CLASS_KNOB           2
  401. #define VL_CLASS_BUTTON         3
  402. #define VL_CLASS_TOGGLE         4
  403. #define VL_CLASS_DETENT_KNOB    5
  404. #define VL_CLASS_LIST        6
  405.  
  406. #define VL_CLASS_RDONLY        0x8000    /* control is read-only */
  407. #define VL_CLASS_WRONLY        0x4000    /* control is write-only */
  408. #define VL_CLASS_NO_DEFAULT     0x2000  /* don't save in default files */
  409.  
  410. #define VL_IS_CTL_RDONLY(x)    ((x)->ctlClass & VL_CLASS_RDONLY)
  411. #define VL_IS_CTL_WRONLY(x)    ((x)->ctlClass & VL_CLASS_WRONLY)
  412. #define VL_IS_CTL_RW(x)        (!(VL_IS_CTL_RDONLY(x) || VL_IS_CTL_WRONLY(x)))
  413.  
  414. #define VL_CLASS_MASK        0xfff
  415.  
  416.  
  417. typedef unsigned int VLControlGroup;  /* one of the following values: */
  418.  
  419. #define VL_CTL_GROUP_BLENDING            0
  420. #define VL_CTL_GROUP_VISUALQUALITY        1
  421. #define VL_CTL_GROUP_SIGNAL            2
  422. #define VL_CTL_GROUP_CODING            3
  423. #define VL_CTL_GROUP_SYNC            4
  424. #define VL_CTL_GROUP_ORIENTATION        5
  425. #define VL_CTL_GROUP_SIZING            6
  426. #define VL_CTL_GROUP_RATES            7
  427. #define VL_CTL_GROUP_WS                 8    /* Window System */
  428. #define VL_CTL_GROUP_PATH             9    /* Path Controls */
  429. #define VL_CTL_GROUP_SIGNAL_ALL            10    /* comp & component */
  430. #define VL_CTL_GROUP_SIGNAL_COMPOSITE        11    /* Controls composite */
  431. #define VL_CTL_GROUP_SIGNAL_COMPONENT        12    /* Controls component */
  432. #define VL_CTL_GROUP_SIGNAL_CLUT_COMPOSITE    13    /* CLUT composite */
  433. #define VL_CTL_GROUP_SIGNAL_CLUT_COMPONENT    14    /* CLUT component */
  434. #define VL_CTL_GROUP_KEYING            15
  435.  
  436. #define VL_CTL_GROUP_PRO        0x8000    /* control is a Pro Control */
  437.  
  438. #define VL_IS_CTL_PRO(x)    ((x)->group & VL_CTL_GROUP_PRO)
  439. #define VL_IS_CTL_COMMON(x)    (!((x)->group & VL_CTL_GROUP_PRO))
  440.  
  441. #define VL_CTL_GROUP_MASK        0xfff
  442.  
  443.  
  444. typedef int VLControlValueType;    /* one of the following values: */
  445.  
  446. #define VL_CT_FRACT    1
  447. #define VL_CT_BOOL    2
  448. #define VL_CT_INT    3
  449. #define VL_CT_UINT    4
  450. #define VL_CT_XY    5
  451. #define VL_CT_EXT    6
  452.  
  453.  
  454. typedef struct {
  455.     char name[VL_NAME_SIZE];
  456.     int value;
  457. } VLControlItem;
  458.  
  459. typedef struct __vlControlInfo {
  460.     char name[VL_NAME_SIZE]; /* name of control */
  461.     VLControlType type;      /* e.g. WINDOW, HUE, BRIGHTNESS */
  462.     VLControlClass ctlClass; /* SLIDER, DETENT, KNOB, BUTTON */
  463.     VLControlGroup group;    /* BLEND, VISUAL QUALITY, SIGNAL, SYNC */
  464.     VLNode node;             /* associated node */
  465.     VLControlValueType valueType;    /* what kind of data do we have */
  466.     int valueCount;        /* how many data items do we have */
  467.     int numFractRanges;     /* number of ranges to describe control */
  468.     VLFractionRange *ranges; /* range of values of control */
  469.  
  470.     int numItems;        /* number of enumerated items */
  471.     VLControlItem *itemList;    /* the actual enumerations */
  472. } VLControlInfo;
  473.  
  474. /* These are the associated types for VLExtendedValues */
  475. enum VLDataType {VL_LUT_BYPASS = 1, VL_LUT_GAMMA, VL_LUT_DIRECT, VL_LUT_LINEAR};
  476.  
  477. typedef struct {
  478.     int  dataType;    /* one of the above enums... must be set */
  479.     int  dataSize;    /* size in bytes */
  480.     void *dataPointer;    
  481. } VLExtendedValue;
  482.  
  483. /* Structure used by the VL to store the size of the different controls: */
  484. typedef union {
  485.     VLFraction    fractVal;
  486.     VLBoolean    boolVal;
  487.     int        intVal;
  488.     VLXY    xyVal;
  489.     char    stringVal[96];  /* beware of trailing NULLs! */
  490.     float    matrixVal[3][3];    
  491.     uint    pad[24];    /* reserved */
  492.     VLExtendedValue extVal;/* for large data values */
  493. } VLControlValue;
  494.  
  495. typedef struct {
  496.     int numControls;
  497.     VLControlInfo *controls;
  498. } VLControlList;
  499.  
  500. extern int           vlGetControl(
  501.     VLServer,        /* Server Handle */
  502.     VLPath,        /* Path Handle */
  503.     VLNode,        /* node */
  504.     VLControlType,    /* Type, from list above */
  505.     VLControlValue *    /* the value to be returned */
  506. );
  507.  
  508. extern VLControlInfo *vlGetControlInfo(
  509.     VLServer,        /* Server Handle */
  510.     VLPath,        /* Path Handle */
  511.     VLNode,        /* Source/Drain */
  512.     VLControlType    /* Type, from list above */
  513. );
  514.  
  515. extern int vlFreeControlInfo(
  516.     VLServer,        /* Server Handle */
  517.     VLControlInfo *    /* Pointer from vlGetControlInfo */
  518. );
  519.  
  520. extern VLControlList *vlGetControlList(
  521.     VLServer,        /* Server Handle */
  522.     VLPath        /* Path Handle */
  523. );
  524.  
  525. extern int vlFreeControlList(
  526.     VLServer,        /* Server Handle */
  527.     VLControlList *    /* Pointer from vlGetControlList */
  528. );
  529.  
  530. extern int vlSetControl(
  531.     VLServer,        /* Server Handle */
  532.     VLPath,        /* Path Handle */
  533.     VLNode,        /* node */
  534.     VLControlType,    /* Type, from list above */
  535.     VLControlValue *    /* the value to be set */
  536. );
  537.  
  538. /*----------------------------------------------------------------------*/
  539.  
  540. /*
  541.  * Path usage:
  542.  */
  543.  
  544. typedef VLPath *VLPathList;
  545.  
  546. typedef short VLUsageType;
  547.  
  548. #define VL_DONE_USING    0x0000
  549. #define VL_READ_ONLY    0x0001
  550. #define VL_SHARE    0x0002
  551. #define VL_LOCK    0x0003
  552. #define VL_MAX_USAGE    0x0004
  553.  
  554. extern int vlSetupPaths(
  555.     VLServer,        /* Server Handle */
  556.     VLPathList,         /* list of Path Handles */
  557.     int,                /* Number of PathHandles */
  558.     VLUsageType,        /* CtrlUsage */
  559.     VLUsageType         /* StreamUsage */
  560. );
  561.  
  562. extern int vlSetConnection(
  563.     VLServer,        /* Server Handle */
  564.     VLPath,        /* Path Handle */
  565.     VLNode,        /* Source node */
  566.     VLPort,        /* Source port */
  567.     VLNode,         /* Target node */
  568.     VLPort,        /* Target port */
  569.     VLBoolean        /* Pre-emp */
  570. );
  571.  
  572. extern int vlGetConnection(
  573.     VLServer,        /* Server Handle */
  574.     VLPath,        /* Path Handle */
  575.     VLNode,        /* Source node */
  576.     VLPort,        /* Source port */
  577.     VLNode *,        /* Array of connected node(s) */
  578.     VLPort *,        /* Array of connected port(s) */
  579.     int *n        /* nodes allocated/nodes returned */
  580. );
  581.  
  582. typedef uint VLEventMask;
  583.  
  584. /*
  585.  * Transfer modes:
  586.  */
  587.  
  588. #define VL_TRANSFER_MODE_CONTINUOUS    101
  589. #define VL_TRANSFER_MODE_DISCRETE    102
  590. #define VL_TRANSFER_MODE_AUTOTRIGGER    103
  591.  
  592. #define VLTriggerImmediate    VLNoEventsMask
  593.  
  594. typedef struct VLTransferDescriptor {
  595.     int mode;
  596.     VLEventMask trigger;
  597.     short delay;
  598.     short count;
  599.     int sequence;
  600.     unsigned long long ustime;
  601. } VLTransferDescriptor;
  602.  
  603. extern int vlBeginTransfer(
  604.     VLServer,        /* Server Handle */
  605.     VLPath,        /* Path Handle */
  606.     int,        /* Count of descriptors */
  607.     VLTransferDescriptor *    /* array of transfer descriptors */
  608. );
  609.  
  610. extern int vlEndTransfer(
  611.     VLServer,        /* Server Handle */
  612.     VLPath        /* Path Handle */
  613. );
  614.  
  615. /*
  616.  * Events
  617.  */
  618.  
  619. typedef void (*VLEventHandler)(uint, void *);
  620. typedef int  (*VLPendingFunc)(void *);
  621.  
  622. #define VLStreamBusyMask       (1<< 0)    /* Stream is locked */
  623. #define VLStreamPreemptedMask       (1<< 1)    /* Stream was grabbed */
  624. #define VLAdvanceMissedMask       (1<< 2)    /* Already reached time */
  625. #define VLStreamAvailableMask       (1<< 3)    /* Stream has been released */
  626. #define VLSyncLostMask           (1<< 4)    /* Sync isn't being detected */
  627. #define VLStreamStartedMask       (1<< 5)    /* Stream started delivery */
  628. #define VLStreamStoppedMask       (1<< 6)    /* Stream stopped delivery */
  629. #define VLSequenceLostMask       (1<< 7)    /* A Field/Frame dropped */
  630. #define VLControlChangedMask       (1<< 8)    /* A Control has changed */
  631. #define VLTransferCompleteMask       (1<< 9)    /* A Transfer has completed */
  632. #define VLTransferFailedMask       (1<<10)    /* A Transfer has failed */
  633. #define VLEvenVerticalRetraceMask  (1<<11)    /* A Vertical Retrace event */
  634. #define VLOddVerticalRetraceMask   (1<<12)    /* A Vertical Retrace event */
  635. #define VLFrameVerticalRetraceMask (1<<13)    /* A Vertical Retrace event */
  636. #define VLDeviceEventMask          (1<<14)    /* A Vertical Retrace event */
  637. #define VLDefaultSourceMask        (1<<15)    /* Default Source Changed */
  638. #define VLControlRangeChangedMask  (1<<16)
  639. #define VLControlPreemptedMask     (1<<17)
  640. #define VLControlAvailableMask     (1<<18)
  641. #define VLDefaultDrainMask         (1<<19)    /* Default Drain Changed */
  642. #define VLStreamChangedMask       (1<<20)    /* Path connectivity changed */
  643.  
  644. #define VLStreamBusy        2        /* Start with 2 since 0 and 1 */
  645. #define VLStreamPreempted    3        /* are reserved for daemon */
  646. #define VLAdvanceMissed        4
  647. #define VLStreamAvailable    5
  648. #define VLSyncLost        6
  649. #define VLStreamStarted        7
  650. #define VLStreamStopped        8
  651. #define VLSequenceLost        9
  652. #define VLControlChanged    10
  653. #define VLTransferComplete    11
  654. #define VLTransferFailed    12
  655. #define VLEvenVerticalRetrace    13
  656. #define VLOddVerticalRetrace    14
  657. #define VLFrameVerticalRetrace    15
  658. #define VLDeviceEvent        16
  659. #define VLDefaultSource        17
  660. #define VLControlRangeChanged    18
  661. #define VLControlPreempted    19
  662. #define VLControlAvailable    20
  663. #define VLDefaultDrain        21
  664. #define VLStreamChanged            22
  665.  
  666. #define VLLASTEvent        (128) /* must be bigger than any event # */
  667.  
  668. #define VLAllEventsMask        (~0)
  669. #define VLNoEventsMask        0
  670.  
  671. typedef struct __vlAnyEvent {
  672.     int reason;
  673.     VLServer server;
  674.     VLDev device;
  675.     VLPath path;
  676.     uint time;
  677.     uint serial;
  678. } VLAnyEvent;
  679.  
  680. typedef VLAnyEvent VLStreamBusyEvent;
  681. typedef VLAnyEvent VLStreamPreemptedEvent;
  682. typedef VLAnyEvent VLAdvanceMissedEvent;
  683. typedef VLAnyEvent VLStreamAvailableEvent;
  684. typedef VLAnyEvent VLSyncLostEvent;
  685. typedef VLAnyEvent VLStreamStartedEvent;
  686. typedef VLAnyEvent VLStreamStoppedEvent;
  687. typedef VLAnyEvent VLOddVerticalRetraceEvent;
  688. typedef VLAnyEvent VLEvenVerticalRetraceEvent;
  689. typedef VLAnyEvent VLFrameVerticalRetraceEvent;
  690. typedef VLAnyEvent VLTransferCompleteEvent;
  691. typedef VLAnyEvent VLTransferFailedEvent;
  692.  
  693. typedef struct __vlSequenceLostEvent {
  694.     int reason;
  695.     VLServer server;
  696.     VLDev device;
  697.     VLPath path;
  698.     uint time;
  699.     int serial;
  700.     VLBoolean field;    /* TRUE == field, FALSE == frame */
  701.     int number;        /* sequence number of dropped field or frame */
  702.     int count;        /* number of dropped fields or frames */
  703. } VLSequenceLostEvent;
  704.  
  705. typedef struct __vlControlChangedEvent {
  706.     int reason;
  707.     VLServer server;
  708.     VLDev device;
  709.     VLPath path;
  710.     uint time;
  711.     int serial;
  712.     VLNode node;
  713.     VLControlType type;
  714.     VLControlValue value;
  715. } VLControlChangedEvent;
  716.  
  717. typedef struct __vlControlRangeChangedEvent {
  718.     int reason;
  719.     VLServer server;
  720.     VLDev device;
  721.     VLPath path;
  722.     uint time;
  723.     int serial;
  724.     VLNode node;
  725.     VLControlType type;
  726. } VLControlRangeChangedEvent;
  727.  
  728. typedef VLControlRangeChangedEvent VLControlPreemptedEvent;
  729. typedef VLControlRangeChangedEvent VLControlAvailableEvent;
  730.  
  731. typedef struct __vlDeviceEventEvent {
  732.     int reason;
  733.     VLServer server;
  734.     VLDev device;
  735.     VLPath path;
  736.     uint time;
  737.     int serial;
  738.     int value;        /* device-specific info */
  739. } VLDeviceEventEvent;
  740.  
  741. typedef struct __vlDefaultNodeEvent {
  742.     int reason;
  743.     VLServer server;
  744.     VLDev device;
  745.     VLPath path;
  746.     uint time;
  747.     int serial;
  748.     VLNode node;
  749. } VLDefaultNodeEvent;
  750.  
  751. typedef VLDefaultNodeEvent VLDefaultSourceEvent;
  752. typedef VLDefaultNodeEvent VLDefaultDrainEvent;
  753.  
  754. typedef struct __vlErrorEvent {
  755.     int reason;
  756.     VLServer server;
  757.     VLDev device;
  758.     VLPath path;
  759.     uint time;
  760.     int serial;
  761.  
  762.     int errorCode;
  763.     int resourceId;
  764.     int majorCode;
  765.     int minorCode;
  766. } VLErrorEvent;
  767.  
  768. typedef struct __vlStreamChangedEvent {
  769.     int reason;
  770.     VLServer server;
  771.     VLDev device;
  772.     VLPath path;
  773.     uint time;
  774.     int serial;
  775.     VLNode srcnode;
  776.     VLPort srcport;
  777.     VLNode drnnode;
  778.     VLPort drnport;
  779. } VLStreamChangedEvent;
  780.  
  781. typedef union __vlEvent {
  782.     int reason;
  783.     VLAnyEvent vlany;
  784.     VLStreamBusyEvent vlstreambusy;
  785.     VLStreamPreemptedEvent vlstreampreempted;
  786.     VLAdvanceMissedEvent vladvancemissed;
  787.     VLStreamAvailableEvent vlstreamavailable;
  788.     VLSyncLostEvent vlsynclost;
  789.     VLStreamStartedEvent vlstreamstarted;
  790.     VLStreamStoppedEvent vlstreamstopped;
  791.     VLSequenceLostEvent vlsequencelost;
  792.     VLControlChangedEvent vlcontrolchanged;
  793.     VLControlRangeChangedEvent vlcontrolrangechanged;
  794.     VLControlPreemptedEvent vlcontrolpreempted;
  795.     VLControlAvailableEvent vlcontrolavailable;
  796.     VLTransferCompleteEvent vltransfercomplete;
  797.     VLTransferFailedEvent vltransferfailed;
  798.     VLEvenVerticalRetraceEvent vlevenverticalretrace;
  799.     VLOddVerticalRetraceEvent vloddverticalretrace;
  800.     VLFrameVerticalRetraceEvent vlframeverticalretrace;
  801.     VLDeviceEventEvent vldeviceevent;
  802.     VLDefaultSourceEvent vldefaultsource;
  803.     VLDefaultDrainEvent vldefaultdrain;
  804.     VLErrorEvent vlerror;
  805.     VLStreamChangedEvent vlstreamchanged;
  806. } VLEvent;
  807.  
  808. extern int vlPending(
  809.     VLServer        /* Server */
  810. );
  811.  
  812. extern int vlSelectEvents(
  813.     VLServer,        /* Server Handle */
  814.     VLPath,        /* Path Handle */
  815.     VLEventMask        /* Events of Interest */
  816. );
  817.  
  818. extern int vlRegisterHandler(
  819.     VLServer,        /* Server */
  820.     int,        /* fd */
  821.     VLEventHandler,    /* Event Handler */
  822.     VLPendingFunc,    /* pending check if there is one */
  823.     void *        /* user data */
  824. );
  825.  
  826. extern int vlRemoveHandler(
  827.     VLServer,        /* Server */
  828.     int            /* fd */
  829. );
  830.  
  831. extern void vlMainLoop(
  832.     void
  833. );
  834.  
  835. extern char *vlEventToName(
  836.     int        /* Event Type */
  837. );
  838.  
  839. extern int vlNextEvent(
  840.     VLServer,        /* Server */
  841.     VLEvent *        /* Event Return Value */
  842. );
  843.  
  844. extern int vlPeekEvent(
  845.     VLServer,        /* Server */
  846.     VLEvent *        /* Event Return Value */
  847. );
  848.  
  849. extern int vlCheckEvent(
  850.     VLServer,        /* Server */
  851.     VLEventMask,    /* mask */
  852.     VLEvent *        /* Event Return Value */
  853. );
  854.  
  855. typedef void (*VLCallbackProc)(
  856.     VLServer,        /* Server Handle */
  857.     VLEvent *,        /* Event Structure Pointer */
  858.     void *        /* Client Data */
  859. );
  860.  
  861. extern int vlAddCallback(
  862.     VLServer,        /* Server Handle */
  863.     VLPath,        /* Path Handle */
  864.     VLEventMask,    /* Events on which to invoke callbacks */
  865.     VLCallbackProc,    /* Callback Procedure */
  866.     void *        /* Client Data */
  867. );
  868.  
  869. extern int vlRemoveCallback(
  870.     VLServer,        /* Server Handle */
  871.     VLPath,        /* Path Handle */
  872.     VLEventMask,    /* Events from which to remove callbacks */
  873.     VLCallbackProc,    /* Callback Procedure */
  874.     void *        /* Client Data */
  875. );
  876.  
  877. extern int vlRemoveAllCallbacks(
  878.     VLServer,        /* Server Handle */
  879.     VLPath,        /* Path Handle */
  880.     VLEventMask        /* Events on which to invoke callbacks */
  881. );
  882.  
  883. extern int vlCallCallbacks(
  884.     VLServer,        /* Server Handle */
  885.     VLEvent *        /* event for call backs */
  886. );
  887.  
  888. /*
  889.  * Convenience routines
  890.  */
  891.  
  892. typedef struct _DMRingBuffer *VLBuffer;
  893. typedef char * VLInfoPtr;
  894.  
  895. extern int vlGetTransferSize(
  896.     VLServer,        /* Server Handle */
  897.     VLPath        /* Path Handle */
  898. );
  899.  
  900. int vlRegisterBuffer(
  901.     VLServer,        /* Server Handle */
  902.     VLPath,        /* Path Handle */
  903.     VLNode,        /* Memory node id */
  904.     VLBuffer        /* ring buffer handle from dmRBCreate */
  905. );
  906.  
  907. int vlDeregisterBuffer(
  908.     VLServer,        /* Server Handle */
  909.     VLPath,        /* Path Handle */
  910.     VLNode,        /* Memory node id */
  911.     VLBuffer        /* the ring buffer handle */
  912. );
  913.  
  914. VLBuffer vlCreateBuffer(
  915.     VLServer,        /* The Server Handle */
  916.     VLPath,        /* The Path Handle */
  917.     VLNode,        /* the Node Handle */
  918.     int            /* number of frames in the buffer */
  919. );
  920.  
  921. int vlBufferAdvise(
  922.     VLBuffer,        /* the ring buffer handle */
  923.     int            /* Advisory type */
  924. );
  925.  
  926. #define VL_CA_TAG_GAMMA  1    /* parm is a double * */
  927. #define VL_CA_TAG_MATRIX 2      /* parm is a 3x4 matrix of coefficients */
  928. #define VL_CA_TAG_FLAG     3    /* parm is a random flag */
  929.  
  930. int vlConversionAdviseGamma(
  931.     VLServer svr,
  932.     VLPath   path,           
  933.     int      sourcePacking,
  934.     int      destPacking,
  935.     double   gamma
  936. );               
  937.  
  938. int vlConversionAdviseMatrix(
  939.     VLServer svr,
  940.     VLPath   path,           
  941.     int      sourcePacking,
  942.     int      destPacking,
  943.     double   *matrix
  944. );               
  945.  
  946. int vlConversionAdviseFlag(
  947.     VLServer svr,
  948.     VLPath   path,           
  949.     int      sourcePacking,
  950.     int      destPacking,
  951.     int      flag
  952. );               
  953.  
  954. #define VL_BUFFER_ADVISE_NOACCESS 1 /* Contents of buffer are not accessed */
  955. #define VL_BUFFER_ADVISE_ACCESS   2 /* Contents of buffer will be accessed */
  956.  
  957. int vlBufferGetFd(
  958.     VLBuffer        /* Buffer handle */
  959. );
  960.  
  961. int vlGetFilled(
  962.     VLServer,           /* Server Handle */
  963.     VLPath,             /* Path Handle   */
  964.     VLBuffer            /* Buffer Handle */
  965. );
  966.  
  967. VLInfoPtr vlGetNextValid(
  968.     VLServer,        /* Server Handle */
  969.     VLBuffer        /* Buffer Handle */
  970. );
  971.  
  972. VLInfoPtr vlGetLatestValid(
  973.     VLServer,        /* Server Handle */
  974.     VLBuffer        /* Buffer Handle */
  975. );
  976.  
  977. VLInfoPtr vlGetNextFree(
  978.     VLServer,        /* Server Handle */
  979.     VLBuffer,        /* Buffer Handle */
  980.     int            /* size of the buffer */
  981. );
  982.  
  983. void * vlGetActiveRegion(
  984.     VLServer,        /* Server Handle */
  985.     VLBuffer,        /* Buffer Handle */
  986.     VLInfoPtr info    /* info handle */
  987. );
  988.  
  989. DMediaInfo * vlGetDMediaInfo(
  990.     VLServer,        /* Server Handle */
  991.     VLBuffer,        /* Buffer Handle */
  992.     VLInfoPtr        /* Info Handle */
  993. );
  994.  
  995. DMImageInfo * vlGetImageInfo(
  996.     VLServer,        /* Server Handle */
  997.     VLBuffer,        /* Buffer Handle */
  998.     VLInfoPtr        /* Info Handle */
  999. );
  1000.  
  1001. int vlPutFree(
  1002.     VLServer,        /* Server Handle */
  1003.     VLBuffer        /* Buffer handle */
  1004. );
  1005.  
  1006. int vlPutValid(
  1007.     VLServer,        /* Server Handle */
  1008.     VLBuffer        /* Buffer handle */
  1009. );
  1010.  
  1011. int vlBufferDone(
  1012.     VLBuffer        /* Buffer Handle */
  1013. );
  1014.  
  1015. int vlBufferReset(
  1016.     VLServer,        /* Server Handle */
  1017.     VLBuffer        /* Buffer Handle */
  1018. );
  1019.  
  1020. int vlDestroyBuffer(
  1021.     VLServer,        /* Server Handle */
  1022.     VLBuffer        /* Buffer Handle */
  1023. );
  1024.  
  1025. extern uint vlInitDevice(
  1026.     VLServer,        /* Server Handle */
  1027.     VLDev,        /* Device Handle */
  1028.     const char *    /* path name to defaults file, or NULL */
  1029. );
  1030.  
  1031. /*
  1032.  * UST/MSC support;
  1033.  */
  1034.  
  1035. extern stamp_t vlGetFrontierMSC(
  1036.     VLServer,           /* Server Handle */
  1037.     VLPath,             /* Path Handle   */
  1038.     VLNode              /* Mem Node Handle */
  1039. );
  1040.  
  1041. extern int vlGetUSTMSCPair(
  1042.     VLServer,           /* Server Handle */
  1043.     VLPath,             /* Path Handle   */
  1044.     VLNode,             /* VL_VIDEO or VL_SCREEN Node (the jack) */           
  1045.     VLPort,             /* Port on that Node (picks out a jack) */
  1046.     VLNode,             /* Memory Node */
  1047.     USTMSCpair *        /* returned ust/msc pair */
  1048. );
  1049.  
  1050. extern double vlGetUSTPerMSC(
  1051.     VLServer,        /* Server Handle   */ 
  1052.     VLPath,        /* Path Handle     */
  1053.     VLNode        /* Mem Node Handle */             
  1054. );
  1055.  
  1056.  
  1057. extern stamp_t vlGetPathDelay(
  1058.     VLServer,           /* Server Handle */
  1059.     VLPath,             /* Path Handle   */
  1060.     VLNode,             /* jack1 node */
  1061.     VLPort,             /* VL_ANY for default jack */
  1062.     VLNode,             /* jack2 node */
  1063.     VLPort              /* VL_ANY for default jack */
  1064. );              
  1065.  
  1066. /*
  1067.  * Default management routines
  1068.  */
  1069.  
  1070. extern int vlSaveSystemDefaults(
  1071.     VLServer        /* Server */
  1072. );
  1073.  
  1074. extern int vlRestoreSystemDefaults(
  1075.     VLServer        /* Server */
  1076. );
  1077.  
  1078. extern int vlRestoreFactoryDefaults(
  1079.     VLServer        /* Server */
  1080. );
  1081.  
  1082.  
  1083. /*
  1084.  * Fraction Utility Routines
  1085.  */
  1086.  
  1087. VLBoolean vlMatchFloat (
  1088.     double given,             /* in: the floating point value to compare */
  1089.     VLFractionRange *ranges,  /* in: the range list to compare with */
  1090.     int nranges,              /* in: the number of ranges in the list */
  1091.     VLFraction *lower,        /* out: the closest lower fraction */
  1092.     VLFraction *higher        /* out: the closest higher fraction */
  1093. );
  1094.  
  1095. VLBoolean vlMatchFraction (
  1096.     VLFraction *given,        /* in: the fraction to compare */
  1097.     VLFractionRange *ranges,  /* in: the range list to compare with */
  1098.     int nranges,              /* in: the number of ranges in the list */
  1099.     VLFraction *lower,        /* out: the closest lower fraction */
  1100.     VLFraction *higher        /* out: the closest higher fraction */
  1101. );
  1102.  
  1103. int vlFractionCount (
  1104.     VLFractionRange *ranges,
  1105.     int nranges
  1106. );
  1107.  
  1108. VLBoolean vlMatchFractionInList (
  1109.     VLFraction *fraction,     /* in: the fraction to find */
  1110.     VLFraction *list,         /* in: the list to search */
  1111.     int count,                /* in: length of list */
  1112.     VLFraction *lower,        /* out: nearest lower fraction */
  1113.     VLFraction *higher,       /* out: nearest higher fraction */
  1114.     int *index_return         /* out: index of lower */
  1115. );
  1116.  
  1117. VLFraction * vlFractionList(
  1118.     VLFractionRange *range,
  1119.     int nranges,
  1120.     int *length_return
  1121. );
  1122.  
  1123. void vlChooseClosestFraction(
  1124.     VLFraction *lower,
  1125.     VLFraction *higher,
  1126.     VLFraction *user
  1127. );
  1128.  
  1129.  
  1130.  
  1131. /*
  1132.  * The following are the error code definitions for the VL.
  1133.  * The error code will be stored in vlErrno on an error return.
  1134.  */
  1135.  
  1136. /*
  1137.  * Do not use vlErrno, as it is here only for backwards compatibility.
  1138.  * instead use the call vlGetErrno
  1139.  */
  1140. extern int vlErrno;
  1141.  
  1142. #define VLSuccess            0    /* everything's okay */
  1143. #define VLBadRequest         1    /* bad request code */
  1144. #define VLBadValue           2    /* int parameter out of range */
  1145. #define VLBadPath            3    /* parameter not a path */
  1146. #define VLBadNode            4    /* parameter not a node */
  1147. #define VLBadAtom            5    /* parameter not an atom */
  1148. #define VLBadDevice          6    /* parameter not a device */
  1149. #define VLBadControl         7    /* parameter not a control */
  1150. #define VLBadMatch           8    /* parameter mismatch */
  1151. #define VLBadAccess         10    /* depending on context */
  1152. #define VLBadAlloc          11    /* insufficient resources */
  1153. #define VLBadIDChoice       14    /* choice not in range or already used */
  1154. #define VLBadName           15    /* font or color name doesn't exist */
  1155. #define VLBadLength         16    /* Request length incorrect */
  1156. #define VLBadIoctl          17      /* ioctl failed in the server */
  1157. #define VLBadImplementation 18    /* server is broken */
  1158. #define VLPathInUse        19      /* Path is in exclusive use */
  1159. #define VLBadServer        20      /* Server parameter is invalid */
  1160. #define VLBadBuffer        21    /* Buffer invalid */
  1161. #define VLBadSize        22      /* Buffer size invalid */
  1162. #define VLNotEnoughResident 23      /* we don't have enough resident memory */
  1163. #define VLBufferTooSmall    24      /* the buffer allocated is too small */
  1164. #define VLValueOutOfRange   25      /* the value is out of range (for controls)*/
  1165. #define VLSetupFailed       26    /* SetupPath of failed  */
  1166. #define VLBadWinAlloc       27    /* Insufficient hardware screen space */
  1167. #define VLInputsNotLocked   28    /* Video input sources cannot be locked */
  1168. #define VLNoRoute        29      /* No route could be found */
  1169. #define VLNotSupported        30      /* VlSetConnection/GetConnection */
  1170. #define VLBadPort        31      /* parameter not a valid port */
  1171. #define VLNotEnoughSpace    32      /* need more space in GetConnection */
  1172.  
  1173. #define VLMaxError        33      /* Must be larger than the largest error */
  1174.                   /* Subject to change in future releases */
  1175.  
  1176. extern int vlGetErrno(
  1177.     void
  1178. );
  1179.  
  1180. extern const char *vlStrError(
  1181.     int         /* error value */
  1182. );
  1183.  
  1184. extern void vlPerror(
  1185.     const char *    /* string prefixed before error message */
  1186. );
  1187.  
  1188. typedef int (*VLErrorHandler) (
  1189.     VLServer,        /* Server Handle */
  1190.     VLEvent*        /* Error event */
  1191. );
  1192.  
  1193. extern VLErrorHandler vlSetErrorHandler (
  1194.     VLErrorHandler    /* Handler */
  1195. );
  1196.  
  1197. typedef int (*VLIOErrorHandler) (
  1198.     VLServer             /* Server Handle */
  1199. );
  1200.  
  1201. extern VLIOErrorHandler vlSetIOErrorHandler (
  1202.     VLIOErrorHandler    /* handler */
  1203. );
  1204.  
  1205.  
  1206. /*
  1207.  * Reserved resource and constant definitions:
  1208.  */
  1209.  
  1210. #define VL_ANY        0x10000000    /* also used by other VL routines
  1211.                      * to represent an unknown value. */
  1212. #define VL_IRISGLWINDOW    0x10000010
  1213.  
  1214. #define VLNone               0L /* universal null resource or null atom */
  1215.  
  1216. #define VLAllTemporary       0L /* special Resource ID passed to KillClient */
  1217.  
  1218. #define VLCurrentTime        0L /* special Time */
  1219.  
  1220. #ifndef TRUE
  1221. #define TRUE    (1)
  1222. #endif
  1223.  
  1224. #ifndef FALSE
  1225. #define FALSE    (0)
  1226. #endif
  1227.  
  1228. #ifdef __cplusplus
  1229. }
  1230. #endif
  1231. #endif /* _VL_H_ */
  1232.