/***************************************************************************** * * NCSA DTM version 2.3 * May 1, 1992 * * NCSA DTM Version 2.3 source code and documentation are in the public * domain. Specifically, we give to the public domain all rights for future * licensing of the source code, all resale rights, and all publishing rights. * * We ask, but do not require, that the following message be included in all * derived works: * * Portions developed at the National Center for Supercomputing Applications at * the University of Illinois at Urbana-Champaign. * * THE UNIVERSITY OF ILLINOIS GIVES NO WARRANTY, EXPRESSED OR IMPLIED, FOR THE * SOFTWARE AND/OR DOCUMENTATION PROVIDED, INCLUDING, WITHOUT LIMITATION, * WARRANTY OF MERCHANTABILITY AND WARRANTY OF FITNESS FOR A PARTICULAR PURPOSE * *****************************************************************************/ /************************************************************************* ** ** dtm.h - ** *************************************************************************/ /********************************************************************* ** ** $Header: /X11/mosaic/cvsroot/xmosaic3/libdtm/dtm.h,v 1.4 1996/02/18 23:40:11 spowers Exp $ ** **********************************************************************/ /* * Revision 1.1.1.1 1993/07/04 00:03:11 marca * Mosaic for X version 2 distribution * * Revision 1.1 1993/01/18 21:50:15 marca * I think I got it now. * * Revision 1.32 92/05/06 16:40:17 jefft * Modified prototype on DTMaddInput * * Revision 1.31 1992/04/30 20:27:05 jplevyak * Changed Version to 2.3 * * Revision 1.30 1992/04/29 21:56:53 jplevyak * Add prototypes for DTMgetConnectionCount and DTMaddInput. Remove * Cray #define for VOIDPTR since they have fixed their compiler. * * Revision 1.29 92/03/20 21:14:40 jplevyak * Add DTMgetPortAddr and remove DTMgetPortName * * Revision 1.28 1992/03/13 18:20:31 jefft * dtm.h depended on TRUE being defined before it was included. This word * TRUE was changed to 1 and FALSE to 0 * * Revision 1.27 1992/02/27 23:43:34 jplevyak * New prototype DTMgetReturnPortName. * * Revision 1.26 1992/02/21 13:46:12 dweber * Fixed prototype problems in dtm_get_type. * * Revision 1.25 92/02/18 14:02:36 jplevyak * Added prototype for DTMaddInPortSocket. * * Revision 1.24 92/01/30 19:28:24 jplevyak * add prototypes * * Revision 1.23 1992/01/02 16:31:56 dweber * Reorganized the DTM class and MSG class * * Revision 1.22 91/12/13 22:34:48 jefft * Removed DTMtitle and DTMtype constants. Added dtm_(sg)et_address macros. * Added MSG(sg)etString macros. * * Revision 1.21 91/12/13 15:37:55 dweber * Fixed DTMHL bugs and re-ordered some macros for clarification * * Revision 1.20 91/12/12 22:55:27 jefft * Add numbers to the comments beside the DTM errors * * Revision 1.19 1991/12/10 22:15:56 jefft * fixed DTMgetAddress macro (it was calling dtm_set_char). * * Revision 1.18 1991/12/09 18:36:18 jplevyak * Added support for Callback ( DTMreadReady ). * Use arch.h as a general architecture definition header. * * Revision 1.17 1991/10/29 23:48:17 jefft * move environmental variables definition from dtmnserv.h to dtm.h * * Revision 1.16 1991/10/16 23:23:56 jplevyak * Added new error message and more parameters to DTMsendRoute * * Revision 1.15 91/10/11 20:23:31 jplevyak * Added prototype for DTMcheckRoute, * Changed DTMSYNC, DTMNOSYNC to DTM_SYNC, DTM_ASYNC. * * Revision 1.14 1991/10/10 14:23:43 jplevyak * All prototypes are now included and tested. * * Revision 1.13 1991/09/26 20:13:54 jplevyak * Added many prototypes. Moved some internal function out to dtmint.h * * Revision 1.12 91/09/18 15:27:54 jplevyak * Added extern definition for DTMinit() * * Revision 1.11 91/09/13 17:36:05 sreedhar * DTMSYNC, DTMNOSYNC added * * Revision 1.10 1991/09/13 15:31:45 jefft * fixed DTMHL macro, it should not have taken an arguement. * * Revision 1.9 1991/09/11 21:09:20 jplevyak * Fixed typeo dtm_set_type -> dtm_get_type. * * Revision 1.8 1991/09/10 15:06:08 jefft * cleaned-up message class macros and added standard macros for passing * port address (DTMsetAddress and DTMgetAddress). * * Revision 1.7 1991/08/15 19:10:39 sreedhar * Changes for logical portname version * * Revision 1.5 1991/06/11 15:22:39 sreedhar * disclaimer added * * Revision 1.4 1991/06/07 16:04:51 sreedhar * Changes for "Sequence start" message * * Revision 1.3 1991/05/30 15:43:27 sreedhar * recvDataset, sendDataset replaced by readDataset/writeDataset * * Revision 1.2 1990/11/16 16:04:32 jefft * fixed typecast problem with DTMgetType * * Revision 1.1 90/11/08 16:31:19 jefft * Initial revision * */ #ifndef DTM_INC #define DTM_INC #include #ifndef ARCH_INC #include "arch.h" #endif #if defined( _ARCH_PROTO ) #define DTM_PROTOTYPES #define DTM_PROTO(x) x #else #define DTM_PROTO(x) () #endif /* DTM constants */ #define DTM_WAIT_TIMEOUT 30 /* Seconds */ #define DTM_MAX_HEADER 1024 /* Max. header length */ /* general macros used by other message classes */ #define dtm_set_class(h, c) (strcpy((h), (c)), strcat((h), " ")) #define dtm_compare_class(h, c) !strncmp((h), (c), strlen(c)) #define dtm_header_length(h) (strlen(h)+1) #define dtm_set_type(h, t) dtm_set_int((h), "DT", (t)) #define dtm_get_type(h, t) ((*(t)=(int)DTM_FLOAT), \ (dtm_get_int((h), "DT",((int *)t)))) #define dtm_set_title(h, c) dtm_set_char((h), "TTL", (c)) #define dtm_get_title(h, c, l) dtm_get_char((h), "TTL", (c), (l)) #define dtm_set_address(h, c) dtm_set_char((h), "PORT", (c)) #define dtm_get_address(h, c, l) dtm_get_char((h), "PORT", (c), (l)) /* standard types supported by DTM */ typedef enum { DTM_CHAR = 0, DTM_SHORT, DTM_INT, DTM_FLOAT, DTM_DOUBLE, DTM_COMPLEX, DTM_TRIPLET } DTMTYPE; /* DTM triplet type */ struct DTM_TRIPLET { int tag; float x, y, z; }; #define DTM_DEFAULT DTM_SYNC typedef enum { DTM_SYNC=0, DTM_ASYNC } DTMqserv ; /* Environmental variables used by DTM name server */ #define DTM_NAMESERVER "_DTM_NAMESERVER" #define DTM_REFNAME "_DTM_REFNAME" /* commands supported for groups */ typedef enum { DTM_NEW = 1, DTM_APPEND, DTM_DELETE, DTM_DONE } DTMCMD; /* NOTE: the strings that describe the errors in DTMerr are located in fatal.c. Any changes to this list must be accompanied by a corresponding change there. */ #define DTMERROR -1 #define DTM_OK DTMNOERR typedef enum { DTMNOERR=0, /* no error */ DTMMEM, /* (1) Out of memory */ DTMHUH, /* (2) Unknown port definition */ DTMNOPORT, /* (3) No DTM ports available */ DTMPORTINIT, /* (4) DTM port not initialized */ DTMCALL, /* (5) calling routines in wrong order */ DTMEOF, /* (6) EOF error */ DTMSOCK, /* (7) Socket error */ DTMHOST, /* (8) That hostname is not found/bad */ DTMTIMEOUT, /* (9) Timeout waiting for connection */ DTMCCONN, /* (10) DTM cannot connect (network down?) */ DTMREAD, /* (11) error returned from system read */ DTMWRITE, /* (12) error returned from system write(v) */ DTMHEADER, /* (13) Header to long for buffer */ DTMSDS, /* (14) SDS error */ DTMSELECT, /* (15) Select call error */ DTMENV, /* (16) Environment not setup */ DTMBUFOVR, /* (17) User buffer overflow */ DTMCORPT, /* (18) Port table corrupted */ DTMBADPORT, /* (19) Port identifier is bad/corrupt/stale */ DTMBADACK, /* (20) Bad ack to internal flow control */ DTMADDR, /* (21) Bad address */ DTMSERVER /* (22) Problem communicating with the server */ } DTMerr; typedef struct Dtm_set { int port ; int status ; } Dtm_set ; typedef struct Sock_set { int sockfd ; int status ; } Sock_set ; typedef void * VOIDPTR; /* function definitions and extern references */ #ifdef __cplusplus extern "C" { #endif extern int DTMmakeInPort DTM_PROTO((char * portname, int qservice)); extern int DTMaddInPortSocket DTM_PROTO((int port, int socket )); extern int DTMmakeOutPort DTM_PROTO((char * portname, int qservice)); #define DTM_PORT_READY 1 #define DTM_PORT_NOT_READY 0 extern int DTMavailWrite DTM_PROTO(( int port )); extern int DTMavailRead DTM_PROTO(( int port )); extern int DTMbeginRead DTM_PROTO(( int port, VOIDPTR header, int size)); extern int DTMbeginWrite DTM_PROTO(( int port, VOIDPTR header, int size)); extern int DTMreadDataset DTM_PROTO(( int p, VOIDPTR ds, int size, DTMTYPE type)); extern int DTMwriteDataset DTM_PROTO(( int p, VOIDPTR ds, int size, DTMTYPE type)); extern int DTMendRead DTM_PROTO(( int port )); extern int DTMendWrite DTM_PROTO(( int port )); extern int DTMreadMsg DTM_PROTO(( int p, char *hdr, int hdrsize, VOIDPTR data, int datasize, int datatype )); extern int DTMdestroyPort DTM_PROTO(( int port)); extern char *DTMerrmsg(); extern int DTMgetPortAddr DTM_PROTO(( int port, char * addr, int length )); extern int DTMgetReturnPortName DTM_PROTO(( int port, char *** addrs, int * n_addrs)); extern int DTMselectRead DTM_PROTO(( Dtm_set *dtmset, int dtmnum, Sock_set *sockset, int socknum, int period )); extern void DTMsetGroup DTM_PROTO(( char * header, DTMCMD cmd, char * parent, char * self )); extern int DTMgetGroup DTM_PROTO(( char * header, DTMCMD cmd, char * parent, char * self )); extern int DTMsendRoute DTM_PROTO(( int fd, char * sendto_addr, int addcount, char **add_addresses, int delcount, char **del_addresses )); extern int DTMcheckRoute DTM_PROTO(( int port )); /* Not implemented Yet */ extern int DTMrecvServerMsg DTM_PROTO(( int fd, int len, void * buffer )); extern int DTMreadReady DTM_PROTO(( int port, void (*func)() )); extern int DTMgetConnectionCount DTM_PROTO(( int port, int * n_connects )); /* If you do not have X included you are not likely to use this function */ typedef (*DTMfuncPtr)(); #ifdef _XtIntrinsic_h extern int DTMaddInput DTM_PROTO(( int port, long condition, XtInputCallbackProc proc, caddr_t client_data)); #else extern int DTMaddInput DTM_PROTO(( int port, long condition, DTMfuncPtr proc, caddr_t client_data)); #endif extern DTMerr DTMerrno; extern char *dtm_find_tag DTM_PROTO(( char * h, char * tag )); extern void dtm_set_char DTM_PROTO(( char * h, char * tag, char * s)); extern int dtm_get_char DTM_PROTO(( char * h, char * tag, char * destination, int length )); extern void dtm_set_int DTM_PROTO(( char * h, char * tag, int i )); extern int dtm_get_int DTM_PROTO(( char * h, char * tag, int *x)); extern void dtm_set_float DTM_PROTO(( char * h, char * tag, float f)); extern int dtm_get_float DTM_PROTO(( char * h, char * tag, float *f)); #ifdef __cplusplus }; #endif /* * The following macros are defined for the specific DTM class. They are * included to provide a standard framework for other classes to emulate. */ /* * DTM class specific macros */ #define DTMclass "DTM" #define DTMsetClass(h) dtm_set_class((h), DTMclass) #define DTMcompareClass(h) dtm_compare_class((h), DTMclass) #define DTMheaderLength dtm_header_length #define DTMHL dtm_header_length #define DTMsetAddress dtm_set_address #define DTMgetAddress dtm_get_address /* * MSG class specific macros */ #define MSGclass "MSG" #define MSGsetClass(h) dtm_set_class((h), MSGclass) #define MSGcompareClass(h) dtm_compare_class((h), MSGclass) #define MSGsetString(h, s) dtm_set_char((h), "STR", (s)) #define MSGgetString(h, s, l) dtm_get_char((h), "STR", (s), (l)) #define MSGheaderLength dtm_header_length #define MSGHL dtm_header_length #endif /* DTM_INC */