301 lines
9.8 KiB
C
301 lines
9.8 KiB
C
#ifndef lint
|
|
static char sccsid[] = "@(#)input77.c 1.1 94/10/31 Copyr 1985-9 Sun Micro";
|
|
#endif
|
|
|
|
/*
|
|
* Copyright (c) 1985, 1986, 1987, 1988, 1989 by Sun Microsystems, Inc.
|
|
* Permission to use, copy, modify, and distribute this software for any
|
|
* purpose and without fee is hereby granted, provided that the above
|
|
* copyright notice appear in all copies and that both that copyright
|
|
* notice and this permission notice are retained, and that the name
|
|
* of Sun Microsystems, Inc., not be used in advertising or publicity
|
|
* pertaining to this software without specific, written prior permission.
|
|
* Sun Microsystems, Inc., makes no representations about the suitability
|
|
* of this software or the interface defined in this software for any
|
|
* purpose. It is provided "as is" without express or implied warranty.
|
|
*/
|
|
/*
|
|
* CGI Input functions
|
|
*/
|
|
|
|
/*
|
|
initialize_lid
|
|
release_input_device
|
|
enable_events
|
|
disable_events
|
|
associate
|
|
dissociate
|
|
track_on
|
|
track_off
|
|
echo_on
|
|
echo_update
|
|
echo_off
|
|
request_input
|
|
*/
|
|
|
|
#include "cgidefs.h"
|
|
#include "cf77.h"
|
|
/****************************************************************************/
|
|
/* */
|
|
/* FUNCTION: cfinitlid */
|
|
/* */
|
|
/* */
|
|
/****************************************************************************/
|
|
|
|
|
|
int cfinitlid_ (devclass, devnum, x,y,xlist,ylist,n,val,choice,string,segid,pickid,f77strlen)
|
|
int *devclass;
|
|
int *devnum; /* device type, device number */
|
|
int *x,*y;
|
|
int *xlist;
|
|
int *ylist;
|
|
int *n;
|
|
float *val;
|
|
int *choice;
|
|
char *string;
|
|
int *segid;
|
|
int *pickid;
|
|
int f77strlen;
|
|
{
|
|
Cinrep ival; /* initial value of device measure */
|
|
Cpick ipick;
|
|
Ccoor pt;
|
|
Ccoorlist coorlist;
|
|
Cchar tst[MAXCHAR+1]; /* text */
|
|
Cerror err;
|
|
|
|
if ((err = ASSIGN_INREP(&ival, *x, *y, xlist, ylist, *n, *val, *choice,
|
|
string, f77strlen, *segid, *pickid,
|
|
&pt, &coorlist, tst, sizeof(tst), &ipick)) == NO_ERROR)
|
|
{
|
|
err = initialize_lid ((Cdevoff) *devclass, (Cint) *devnum, &ival);
|
|
}
|
|
FREE_INREP(&ival);
|
|
return(err);
|
|
}
|
|
|
|
/****************************************************************************/
|
|
/* */
|
|
/* FUNCTION: cfrelidev */
|
|
/* */
|
|
/* */
|
|
/* is reinitialized. */
|
|
/****************************************************************************/
|
|
|
|
int cfrelidev_ (devclass, devnum)
|
|
int *devclass;
|
|
int *devnum; /* device type, device number */
|
|
{
|
|
return (release_input_device ((Cdevoff) *devclass, (Cint) *devnum));
|
|
}
|
|
|
|
/****************************************************************************/
|
|
/* */
|
|
/* FUNCTION: cfenevents */
|
|
/* */
|
|
/* */
|
|
/****************************************************************************/
|
|
|
|
int cfenevents_ (devclass, devnum)
|
|
int *devclass;
|
|
int *devnum; /* device type, device number */
|
|
|
|
{
|
|
return (enable_events ((Cdevoff) *devclass, (Cint) *devnum));
|
|
}
|
|
|
|
/****************************************************************************/
|
|
/* */
|
|
/* FUNCTION: cfdaevents */
|
|
/* */
|
|
/* */
|
|
/****************************************************************************/
|
|
|
|
int cfdaevents_ (devclass, devnum)
|
|
int *devclass;
|
|
int *devnum; /* device type, device number */
|
|
|
|
{
|
|
return (disable_events ((Cdevoff) *devclass, (Cint) *devnum));
|
|
}
|
|
|
|
/****************************************************************************/
|
|
/* */
|
|
/* FUNCTION: cftrackon */
|
|
/* */
|
|
/* */
|
|
/* the screen for an entire class of devices. */
|
|
/****************************************************************************/
|
|
|
|
int cftrackon_ (devclass,devnum,echotype,exlow,eylow,exup,eyup,
|
|
x,y,xlist,ylist,n,val,choice,string,segid,pickid,f77strlen)
|
|
int *devclass;
|
|
int *devnum;
|
|
int *echotype; /* type of echo */
|
|
int *exlow;
|
|
int *eylow;
|
|
int *exup;
|
|
int *eyup;
|
|
int *x,*y;
|
|
int *xlist;
|
|
int *ylist;
|
|
int *n;
|
|
float *val;
|
|
int *choice;
|
|
char *string;
|
|
int *segid;
|
|
int *pickid;
|
|
int f77strlen;
|
|
{
|
|
Ccoorpair echoregion; /* window where echo is enabled */
|
|
Ccoorlist coorlist;
|
|
Cinrep value; /* device value */
|
|
Ccoor pt;
|
|
Ccoor bot,top;
|
|
Cchar tst[MAXCHAR+1]; /* text */
|
|
Cpick ipick;
|
|
Cerror err;
|
|
|
|
ASSIGN_COOR(&bot, *exlow, *eylow);
|
|
ASSIGN_COOR(&top, *exup, *eyup);
|
|
echoregion.upper = ⊤
|
|
echoregion.lower = ⊥
|
|
if ((err = ASSIGN_INREP(&value, *x, *y, xlist, ylist, *n, *val,
|
|
*choice, string, f77strlen, *segid, *pickid,
|
|
&pt, &coorlist, tst, sizeof(tst), &ipick)) == NO_ERROR)
|
|
{
|
|
err = track_on ((Cdevoff) *devclass, (Cint) *devnum, (Cint) *echotype,
|
|
&echoregion, &value);
|
|
}
|
|
FREE_INREP(&value);
|
|
return(err);
|
|
}
|
|
|
|
/****************************************************************************/
|
|
/* */
|
|
/* FUNCTION: cftrackoff */
|
|
/* */
|
|
/* */
|
|
/****************************************************************************/
|
|
|
|
int cftrackoff_ (devclass, devnum, echo, action)
|
|
int *devclass;
|
|
int *devnum; /* device type, device number */
|
|
int *echo; /* echo number */
|
|
int *action;
|
|
{
|
|
return (track_off ((Cdevoff) *devclass, (Cint) *devnum,
|
|
(Cint) *echo, (Cfreeze) *action));
|
|
}
|
|
|
|
/****************************************************************************/
|
|
/* */
|
|
/* FUNCTION: cfsinitval */
|
|
/* */
|
|
/* */
|
|
/****************************************************************************/
|
|
|
|
int cfsinitval_(devclass,devnum,x,y,xlist,ylist,n,val,choice,string,segid,pickid,f77strlen)
|
|
int *devclass; /* device type */
|
|
int *devnum; /* device number */
|
|
int *x,*y;
|
|
int *xlist;
|
|
int *ylist;
|
|
int *n;
|
|
float *val;
|
|
int *choice;
|
|
char *string;
|
|
int *segid;
|
|
int *pickid;
|
|
int f77strlen;
|
|
{
|
|
Cinrep value; /* device value */
|
|
Ccoor pt;
|
|
Ccoorlist coorlist;
|
|
Cchar tst[MAXCHAR+1]; /* text */
|
|
Cpick ipick;
|
|
Cerror err;
|
|
|
|
if ((err = ASSIGN_INREP(&value, *x, *y, xlist, ylist, *n, *val,
|
|
*choice, string, f77strlen, *segid, *pickid,
|
|
&pt, &coorlist, tst, sizeof(tst), &ipick)) == NO_ERROR)
|
|
{
|
|
err = set_initial_value((Cdevoff) *devclass, (Cint) *devnum, &value);
|
|
}
|
|
FREE_INREP(&value);
|
|
return(err);
|
|
}
|
|
/****************************************************************************/
|
|
/* */
|
|
/* FUNCTION: cfsvalrange */
|
|
/* */
|
|
/* */
|
|
/****************************************************************************/
|
|
|
|
int cfsvalrange_ (devnum,mn,mx)
|
|
int *devnum; /* device number */
|
|
float *mn,*mx; /* limits of valuator */
|
|
{
|
|
return (set_valuator_range((Cint) *devnum, (Cfloat) *mn, (Cfloat) *mx));
|
|
}
|
|
/****************************************************************************/
|
|
/* */
|
|
/* FUNCTION: cfreqinp */
|
|
/* */
|
|
/* */
|
|
/****************************************************************************/
|
|
|
|
int cfreqinp_ (devclass, devnum, timeout, valid, trigger,
|
|
x,y,xlist,ylist,n,val,choice,string,segid,pickid,f77strlen)
|
|
int *devclass;
|
|
int *devnum; /* device type, device number */
|
|
int *timeout; /* amount of time to wait for input */
|
|
int * valid; /* device status */
|
|
int *trigger; /* trigger number */
|
|
int *x,*y;
|
|
int *xlist;
|
|
int *ylist;
|
|
int *n;
|
|
float *val;
|
|
int *choice;
|
|
char *string;
|
|
int *segid;
|
|
int *pickid;
|
|
int f77strlen;
|
|
{
|
|
int err;
|
|
Cinrep value; /* device value */
|
|
Ccoor pt;
|
|
Ccoorlist pcoorlist;
|
|
Cchar strng[MAXCHAR];
|
|
Cpick pck;
|
|
|
|
switch (*devclass)
|
|
{
|
|
case IC_LOCATOR:
|
|
value.xypt = &pt;
|
|
break;
|
|
case IC_STROKE:
|
|
if ((err = _cgi_f77_alloc_coorlist (&pcoorlist, xlist, ylist, *n)
|
|
!= NO_ERROR))
|
|
return(err);
|
|
value.points = &pcoorlist;
|
|
break;
|
|
case IC_VALUATOR:
|
|
case IC_CHOICE:
|
|
break;
|
|
case IC_STRING:
|
|
value.string = strng;
|
|
break;
|
|
case IC_PICK:
|
|
value.pick = &pck;
|
|
break;
|
|
}
|
|
if ((err = request_input ((Cdevoff) *devclass, *devnum,
|
|
*timeout, (Cawresult*)valid, &value, trigger)) != NO_ERROR)
|
|
return(err);
|
|
|
|
return( RETURN_INREP(*devclass, x, y, xlist, ylist, n, val, choice,
|
|
string, f77strlen, segid, pickid, &value) );
|
|
}
|