This repository has been archived on 2024-01-04. You can view files and clone it, but cannot push or open issues or pull requests.
ncsa-mosaic/libdtm/x.c

163 lines
4.2 KiB
C

/*****************************************************************************
*
* 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
*
*****************************************************************************/
/***************************************************************************
**
** x.c Contains the DTM interface to X.
**
***************************************************************************/
/*
* $Log: x.c,v $
* Revision 1.1.1.1 1995/01/11 00:03:04 alanb
* New CVS source tree, Mosaic 2.5 beta 4
*
* Revision 2.5 1994/12/29 23:40:42 alanb
* I'm committing with a new symbolic revision number.
*
* Revision 1.1.1.1 1994/12/28 21:37:32 alanb
*
* Revision 1.1.1.1 1993/07/04 00:03:16 marca
* Mosaic for X version 2 distribution
*
* Revision 1.1 1993/01/18 21:50:54 marca
* I think I got it now.
*
* Revision 1.4 92/05/05 22:27:50 jplevyak
* Corrected X interface code.
*
* Revision 1.3 1992/05/04 22:05:55 jplevyak
* Declare DTMaddInput external
*
* Revision 1.2 1992/04/30 20:25:27 jplevyak
* Changed Version to 2.3.
*
* Revision 1.1 1992/04/29 22:20:16 jplevyak
* Initial revision
*
*/
#include <X11/Intrinsic.h>
#include "arch.h"
#include "dtmint.h"
#include "debug.h"
#if XtInputReadMask != (1L<<0)
Balk - you must change the definition in dtm.c near
the function dtm_set_Xcallback
#endif
#ifdef DTM_PROTOTYPES
void dtm_handle_new_in( void * client_data, int * fd, XtInputId * id)
#else
void dtm_handle_new_in( client_data, fd, id )
void * client_data;
int * fd;
XtInputId * id;
#endif
{
int p = (int) client_data;
DTMPORT * pp = DTMpt[p];
dtm_accept_read_connections( pp, FALSE );
}
#ifdef DTM_PROTOTYPES
void dtm_handle_new_out( void * client_data, int * fd, XtInputId * id)
#else
void dtm_handle_new_out( client_data, fd, id )
void * client_data;
int * fd;
XtInputId * id;
#endif
{
int p = (int) client_data;
DTMPORT * pp = DTMpt[p];
int p_ext = p;
dtm_map_port_external( &p_ext );
pp->Xcallback( pp->Xcallback_data, &p_ext, id );
}
#ifdef DTM_PROTOTYPES
/*
STATIC FUNCTION PROTOTYPES
*/
#endif
/*
DTMaddInput()
Add X style input handlers for DTM ports. Currently only
read ports are handled.
condition
The read/write portions of the condition value are ignored
in favor of the Read/Write quality of the port. Any operating-
system-dependant options should be included here.
proc
The user must provide an X style callback which will be called
when data has arrived at an input port. New connections are
automatically handled.
*/
#ifdef DTM_PROTOTYPES
int DTMaddInput( int p_ext, void * condition,
XtInputCallbackProc proc, void * client_data )
#else
int DTMaddInput( p_ext, condition, proc, client_data )
int p_ext;
void * condition;
XtInputCallbackProc proc;
void * client_data;
#endif
{
reg DTMPORT *pp;
reg Inport *inp;
reg int p;
DTMerrno = DTMNOERR;
CHECK_ERR( p = dtm_map_port_internal( p_ext ));
pp = DTMpt[p];
pp->Xcallback_data = client_data;
pp->Xcallback = proc;
pp->XaddInput = (XtInputCallbackProc) XtAddInput;
pp->XremoveInput = (XtInputCallbackProc) XtRemoveInput;
if ( pp->porttype == INPORTTYPE ) {
/*
Set up callback for new connections
*/
XtAddInput( pp->sockfd, XtInputReadMask, dtm_handle_new_in,
(void *) p );
FOR_EACH_IN_PORT( inp, pp ) {
inp->XinputId = XtAddInput( inp->fd, XtInputReadMask,
dtm_handle_in, (void *) p );
}
} else {
XtAddInput( pp->sockfd, XtInputReadMask, dtm_handle_new_out,
(void *) p );
}
return DTM_OK;
}