home *** CD-ROM | disk | FTP | other *** search
- /*************************************************************/
- /* */
- /* uio_reqs.c - User IO requests to NeuralWorks */
- /* Author: John C. Fairman August 31, 1990 */
- /* Copyright 1990 by NeuralWare Inc. */
- /* */
- /* $Author : $ */
- /* $Date : $ */
- /* $Source : $ */
- /* $Revision : $ */
- /* $Log : $ */
- /* */
- /*************************************************************/
-
- #include "host.h"
-
- #if defined(SUN)
- #include <sys/types.h>
- #endif
-
- #ifdef MPW3
- #include <StdDef.h>
- #endif
-
- #define UIO_SERVER 1
- #define HOME_FOR_UIO_DATA 1
- #define SKIP_COMPAT_DATA 1
- #include "userutl.h"
- #include "uio_strc.h"
- #include "uio_tran.h"
- #include "uio_reqs.pro"
-
- #ifdef THINK_C
- #include "macuio.redef"
- #endif
-
- #ifdef DLC
- /* --- prototypes --- */
-
- InitGMenu( GMENU *, int, int ); /* Initialize a menu */
- DispGMenu( GMENU * ); /* Display graphics menu */
- DispGItem( GMENU *, GMENU_ITEM *, int, int ); /* Display menu item */
- GMENU_ITEM *LookGMenu( GMENU *, int * ); /* Look at graphics menu */
- #else
- GMENU_ITEM *LookGMenu();
- #endif
-
- #if defined(MSDOS)
- #include <string.h>
- #endif
-
- #define INALC 20
-
- /* FUNCTION */
- LOCAL VOID send_request_with_id()
- {
- Data_transfer_ptr->RPC_area.process_from_id = (BUFFER_INT)Process_id;
- Data_transfer_ptr->RPC_area.process_to_id = (BUFFER_INT)HOST_PROCESS_ID;
- Send_request();
- if ((Data_transfer_ptr->RPC_area.request >= 0x80) && /* ERROR */
- (Data_transfer_ptr->RPC_area.request < 0xC0))
- {
- UIO_error_value = Data_transfer_ptr->RPC_area.request;
- }
- }
-
- /* FUNCTION */
- EXPORT TEXT *GetStr()
- {
- RPC_AREA_T *rpc;
- static TEXT ag_msg[MAX_UIO_STRING];
-
- rpc = &Data_transfer_ptr->RPC_area;
- rpc->request = REQ_GETSTR;
-
- send_request_with_id();
-
- strcpy(ag_msg, rpc->all_arg_lists.argmsg.ag_msg);
-
- return(ag_msg);
- }
-
- /* FUNCTION */
- EXPORT VOID PutStr( sp )
- TEXT *sp;
- {
- RPC_AREA_T *rpc;
-
- rpc = &Data_transfer_ptr->RPC_area;
- rpc->request = REQ_PUTSTR;
- strcpy(rpc->all_arg_lists.argmsg.ag_msg, sp);
-
- send_request_with_id();
- }
-
- /**/
- /* FUNCTION */
- EXPORT VOID PutFmt(fmt, a0, a1, a2, a3, a4, a5, a6, a7, a8, a9,
- b0, b1, b2, b3, b4, b5, b6, b7, b8, b9)
- TEXT *fmt;
- UL a0, a1, a2, a3, a4, a5, a6, a7, a8, a9,
- b0, b1, b2, b3, b4, b5, b6, b7, b8, b9;
- {
- RPC_AREA_T *rpc;
- ARGFMT *argfmt;
-
- rpc = &Data_transfer_ptr->RPC_area;
- rpc->request = REQ_PUTFMT;
- argfmt = &rpc->all_arg_lists.argfmt;
-
- #if (PIGS_EVER_FLY)
- strcpy(argfmt->format, fmt);
- argfmt->format_args[ 0] = a0;
- argfmt->format_args[ 1] = a1;
- argfmt->format_args[ 2] = a2;
- argfmt->format_args[ 3] = a3;
- argfmt->format_args[ 4] = a4;
- argfmt->format_args[ 5] = a5;
- argfmt->format_args[ 6] = a6;
- argfmt->format_args[ 7] = a7;
- argfmt->format_args[ 8] = a8;
- argfmt->format_args[ 9] = a9;
- argfmt->format_args[10] = b0;
- argfmt->format_args[11] = b1;
- argfmt->format_args[12] = b2;
- argfmt->format_args[13] = b3;
- argfmt->format_args[14] = b4;
- argfmt->format_args[15] = b5;
- argfmt->format_args[16] = b6;
- argfmt->format_args[17] = b7;
- argfmt->format_args[18] = b8;
- argfmt->format_args[19] = b9;
- #else
- /* CCK: 12-Apr-91 This is the one that works!! */
- sprintf(argfmt->format, fmt,
- a0, a1, a2, a3, a4, a5, a6, a7, a8, a9,
- b0, b1, b2, b3, b4, b5, b6, b7, b8, b9);
- #endif
-
- send_request_with_id();
- }
-
- /* FUNCTION */
- EXPORT VOID SaveNet( NetName, Mode )
- TEXT *NetName;
- NINT Mode; /* 0=binary, 1=ascii, 2=annotated, 3=screen dump */
- {
- RPC_AREA_T *rpc;
-
- rpc = &Data_transfer_ptr->RPC_area;
- rpc->request = REQ_SAVENET;
- strcpy(rpc->all_arg_lists.argn.ag_NetN, NetName);
- rpc->all_arg_lists.argn.ag_mode = (BUFFER_UINT)Mode;
-
- send_request_with_id();
- }
-
-
- /**/
- /*****************************************************************************/
- /* */
- /* Graphic Routine interfaces for NWORKS */
- /* */
- /*****************************************************************************/
-
- /* FUNCTION */
- EXPORT VOID ug_window( key, bkcolor, x0, y0, x1, y1 )
- NINT key; /* window number for a handle (1..8) */
- NINT bkcolor; /* background color */
- NINT x0, y0; /* screen coordinates of origin (bottom left corner) */
- NINT x1, y1; /* screen coordinates of top right corner */
- {
- RPC_AREA_T *rpc;
- ARG1 *arg1;
-
- rpc = &Data_transfer_ptr->RPC_area;
- rpc->request = REQ_UG_WINDOW;
- arg1 = &rpc->all_arg_lists.arg1;
- arg1->ag_winn = (BUFFER_UINT)key;
- arg1->ag_color = (BUFFER_UINT)bkcolor;
- arg1->ag_x0 = (BUFFER_UINT)x0;
- arg1->ag_y0 = (BUFFER_UINT)y0;
- arg1->ag_x1 = (BUFFER_UINT)x1;
- arg1->ag_y1 = (BUFFER_UINT)y1;
-
- send_request_with_id();
- }
-
- /* FUNCTION */
- EXPORT VOID ug_line( key, color, mode, x0, y0, x1, y1, style )
- NINT key; /* window number for a handle (1..8) */
- NINT color; /* color index */
- NINT mode; /* 0=set, 1=xor */
- NINT x0, y0; /* window relative coordinates for origin */
- NINT x1, y1; /* window relative coordinates for end */
- NINT style; /* line style */
- {
- RPC_AREA_T *rpc;
- ARG2 *arg2;
-
- rpc = &Data_transfer_ptr->RPC_area;
- rpc->request = REQ_UG_LINE;
- arg2 = &rpc->all_arg_lists.arg2;
- arg2->ag_winn = (BUFFER_UINT)key;
- arg2->ag_color = (BUFFER_UINT)color;
- arg2->ag_mode = (BUFFER_UINT)mode;
- arg2->ag_x0 = (BUFFER_UINT)x0;
- arg2->ag_y0 = (BUFFER_UINT)y0;
- arg2->ag_x1 = (BUFFER_UINT)x1;
- arg2->ag_y1 = (BUFFER_UINT)y1;
- arg2->ag_style = (BUFFER_UINT)style;
-
- send_request_with_id();
- }
-
- /**/
- /* FUNCTION */
- EXPORT VOID ug_point( key, color, mode, x0, y0 )
- NINT key; /* window number for a handle (1..8) */
- NINT color; /* color index */
- NINT mode; /* 0=set, 1=xor */
- NINT x0, y0; /* window relative coordinates for point */
- {
- RPC_AREA_T *rpc;
- ARG2 *arg2;
-
- rpc = &Data_transfer_ptr->RPC_area;
- rpc->request = REQ_UG_POINT;
- arg2 = &rpc->all_arg_lists.arg2;
- arg2->ag_winn = (BUFFER_UINT)key;
- arg2->ag_color = (BUFFER_UINT)color;
- arg2->ag_mode = (BUFFER_UINT)mode;
- arg2->ag_x0 = (BUFFER_UINT)x0;
- arg2->ag_y0 = (BUFFER_UINT)y0;
-
- send_request_with_id();
- }
-
- /* FUNCTION */
- EXPORT VOID ug_box( key, color, mode, x0, y0, x1, y1, style )
- NINT key; /* window number for a handle (1..8) */
- NINT color; /* color index */
- NINT mode; /* 0=set, 1=xor */
- NINT x0, y0; /* window relative coordinates for lower left corner */
- NINT x1, y1; /* window relative coordinates for upper right corner */
- NINT style; /* line style */
- {
- RPC_AREA_T *rpc;
- ARG2 *arg2;
-
- rpc = &Data_transfer_ptr->RPC_area;
- rpc->request = REQ_UG_BOX;
- arg2 = &rpc->all_arg_lists.arg2;
- arg2->ag_winn = (BUFFER_UINT)key;
- arg2->ag_color = (BUFFER_UINT)color;
- arg2->ag_mode = (BUFFER_UINT)mode;
- arg2->ag_x0 = (BUFFER_UINT)x0;
- arg2->ag_y0 = (BUFFER_UINT)y0;
- arg2->ag_x1 = (BUFFER_UINT)x1;
- arg2->ag_y1 = (BUFFER_UINT)y1;
- arg2->ag_style = (BUFFER_UINT)style;
-
- send_request_with_id();
- }
-
- /**/
- /* FUNCTION */
- EXPORT VOID ug_boxf( key, color, mode, x0, y0, x1, y1 )
- NINT key; /* window number for a handle (1..8) */
- NINT color; /* color index */
- NINT mode; /* 0=set, 1=xor */
- NINT x0, y0; /* window relative coordinates for lower left corner */
- NINT x1, y1; /* window relative coordinates for upper right corner */
- {
- RPC_AREA_T *rpc;
- ARG2 *arg2;
-
- rpc = &Data_transfer_ptr->RPC_area;
- rpc->request = REQ_UG_BOXF;
- arg2 = &rpc->all_arg_lists.arg2;
- arg2->ag_winn = (BUFFER_UINT)key;
- arg2->ag_color = (BUFFER_UINT)color;
- arg2->ag_mode = (BUFFER_UINT)mode;
- arg2->ag_x0 = (BUFFER_UINT)x0;
- arg2->ag_y0 = (BUFFER_UINT)y0;
- arg2->ag_x1 = (BUFFER_UINT)x1;
- arg2->ag_y1 = (BUFFER_UINT)y1;
-
- send_request_with_id();
- }
-
- /* FUNCTION */
- EXPORT VOID ug_puts( key, color, mode, x0, y0, sp, rot )
- NINT key; /* window number for a handle (1..8) */
- NINT color; /* color index */
- NINT mode; /* 0=set, 1=xor */
- NINT x0, y0; /* window relative coordinates for lower left corner */
- TEXT *sp; /* string to draw */
- NINT rot; /* rotation angle */
- {
- RPC_AREA_T *rpc;
- ARGS *args;
-
- rpc = &Data_transfer_ptr->RPC_area;
- rpc->request = REQ_UG_PUTS;
- args = &rpc->all_arg_lists.args;
- args->ag_winn = (BUFFER_UINT)key;
- args->ag_color = (BUFFER_UINT)color;
- args->ag_mode = (BUFFER_UINT)mode;
- args->ag_x0 = (BUFFER_UINT)x0;
- args->ag_y0 =(BUFFER_UINT) y0;
- strcpy((TEXT *)args->ag_sp, sp);
- args->ag_rot = (BUFFER_UINT)rot;
-
- send_request_with_id();
- }
-
- /**/
- /* FUNCTION */
- EXPORT VOID ug_windel( key )
- NINT key; /* window number to delete; 0=delete all windows */
- {
- RPC_AREA_T *rpc;
- ARG3 *arg3;
-
- rpc = &Data_transfer_ptr->RPC_area;
- rpc->request = REQ_UG_WINDEL;
- arg3 = &rpc->all_arg_lists.arg3;
- arg3->ag_winn = (BUFFER_UINT)key;
-
- send_request_with_id();
- }
-
- /* FUNCTION */
- EXPORT VOID ug_winclr( key )
- NINT key; /* clear the contents of this window */
- {
- RPC_AREA_T *rpc;
- ARG3 *arg3;
-
- rpc = &Data_transfer_ptr->RPC_area;
- rpc->request = REQ_UG_WINCLR;
- arg3 = &rpc->all_arg_lists.arg3;
- arg3->ag_winn = (BUFFER_UINT)key;
-
- send_request_with_id();
- }
-
- /* FUNCTION */
- EXPORT VOID ug_gparms( xsizep, ysizep, ncolorp, chrxp, chryp )
- NINT *xsizep; /* width of user area in x-pixels */
- NINT *ysizep; /* height of user area in y-pixels */
- NINT *ncolorp; /* # of colors (including background) */
- NINT *chrxp; /* # of x-pixels in a Character */
- NINT *chryp; /* # of y-pixels in a Character */
- {
- RPC_AREA_T *rpc;
- AGPARMS *agparms;
-
- rpc = &Data_transfer_ptr->RPC_area;
- rpc->request = REQ_UG_GPARMS;
- agparms = &rpc->all_arg_lists.agparms;
-
- send_request_with_id();
-
- if (UIO_error_value == 0)
- {
- *xsizep = (NINT)agparms->xsize;
- *ysizep = (NINT)agparms->ysize;
- *ncolorp = (NINT)agparms->ncolor;
- *chrxp = (NINT)agparms->chrx;
- *chryp = (NINT)agparms->chry;
- }
- }
-
- /**/
- /* FUNCTION */
- EXPORT VOID ug_mouse( keyp, xp, yp, mp )
- NINT *keyp; /* poNINTer to window number mouse is in */
- NINT *xp; /* pointer to relative x-coordinate */
- NINT *yp; /* pointer to relative y-coordinate */
- NINT *mp; /* button press codes */
- {
- RPC_AREA_T *rpc;
- AMOUSE *amouse;
-
- rpc = &Data_transfer_ptr->RPC_area;
- rpc->request = REQ_UG_MOUSE;
- amouse = &rpc->all_arg_lists.amouse;
-
- send_request_with_id();
-
- if (UIO_error_value == 0)
- {
- *keyp = (NINT)amouse->key;
- *xp = (NINT)amouse->xloc;
- *yp = (NINT)amouse->yloc;
- *mp = (NINT)amouse->buttonstates;
- }
- }
-
- /* FUNCTION */
- EXPORT NINT ug_rdpoint( key, x0, y0 )
- NINT key; /* window number for a handle (1..8) */
- NINT x0, y0; /* window relative coordinates for lower left corner */
- {
- RPC_AREA_T *rpc;
- ARG3 *arg3;
-
- rpc = &Data_transfer_ptr->RPC_area;
- rpc->request = REQ_UG_RDPOINT;
- arg3 = &rpc->all_arg_lists.arg3;
- arg3->ag_winn = (BUFFER_UINT)key;
- arg3->ag_x0 = (BUFFER_UINT)x0;
- arg3->ag_y0 = (BUFFER_UINT)y0;
-
- send_request_with_id();
-
- return((NINT)rpc->return_value.buffer_int);
- }
-
- /**/
- /* FUNCTION */
- EXPORT VOID ug_rdnetinf( nlayp, ninp, noutp, ltypep, cspp, netnpp )
- NINT *nlayp; /* return pointer to number of layers will be */
- NINT *ninp; /* return pointer to number of inputs */
- NINT *noutp; /* return pointer to number of outputs */
- NINT *ltypep; /* return pointer to layer type (0=hetero; 1=auto) */
- TEXT **cspp; /* return pointer to control strategy name */
- TEXT **netnpp; /* return pointer to network file name */
- {
- RPC_AREA_T *rpc;
- ARDNETINF *ardnetinf;
- static TEXT cs[FNALC] = {0};
- static TEXT netn[FNALC]= {0};
-
- rpc = &Data_transfer_ptr->RPC_area;
- rpc->request = REQ_UG_RDNETINF;
- ardnetinf = &rpc->all_arg_lists.ardnetinf;
-
- send_request_with_id();
-
- if (UIO_error_value == 0)
- {
- *nlayp = (NINT)ardnetinf->nlay;
- *ninp = (NINT)ardnetinf->nin;
- *noutp = (NINT)ardnetinf->nout;
- *ltypep = (NINT)ardnetinf->ltype;
- if (ardnetinf->cs[0] == '\0')
- {
- *cspp = *netnpp = NULL;
- }
- else
- {
- strcpy(cs, (TEXT *)ardnetinf->cs);
- strcpy(netn, (TEXT *)ardnetinf->netn);
- *cspp = cs;
- *netnpp = netn;
- }
- }
- }
-
- /* FUNCTION */
- EXPORT TEXT *ug_getinstrt()
- {
- RPC_AREA_T *rpc;
- static TEXT ag_msg[INALC];
-
- rpc = &Data_transfer_ptr->RPC_area;
- rpc->request = REQ_UG_GETINSTRT;
-
- send_request_with_id();
-
- strcpy(ag_msg, (TEXT *)rpc->all_arg_lists.argmsg.ag_msg);
-
- return(ag_msg);
- }
-
- /* FUNCTION */
- EXPORT NINT ug_loadnet( NetName )
- TEXT *NetName; /* root name of network to load */
- {
- RPC_AREA_T *rpc;
-
- rpc = &Data_transfer_ptr->RPC_area;
- rpc->request = REQ_UG_LOADNET;
- strcpy(rpc->all_arg_lists.argn.ag_NetN, NetName);
-
- send_request_with_id();
-
- return((NINT)rpc->return_value.buffer_int);
- }
-
- /**/
- /* FUNCTION */
- EXPORT NINT ug_learn( trials )
- TRIAL_NUM_T trials;
- {
- RPC_AREA_T *rpc;
- ARGLR *arglr;
-
- rpc = &Data_transfer_ptr->RPC_area;
- rpc->request = REQ_UG_LEARN;
- arglr = &rpc->all_arg_lists.arglr;
- arglr->ag_count = (BUFFER_LONG)trials;
-
- send_request_with_id();
-
- return((NINT)rpc->return_value.buffer_int);
- }
-
- /* FUNCTION */
- EXPORT NINT ug_recall( trials )
- TRIAL_NUM_T trials;
- {
- RPC_AREA_T *rpc;
- ARGLR *arglr;
-
- rpc = &Data_transfer_ptr->RPC_area;
- rpc->request = REQ_UG_RECALL;
- arglr = &rpc->all_arg_lists.arglr;
- arglr->ag_count = (BUFFER_LONG)trials;
-
- send_request_with_id();
-
- return((NINT)rpc->return_value.buffer_int);
- }
-
- /* FUNCTION */
- EXPORT NINT ug_test( trials )
- TRIAL_NUM_T trials;
- {
- RPC_AREA_T *rpc;
- ARGLR *arglr;
-
- rpc = &Data_transfer_ptr->RPC_area;
- rpc->request = REQ_UG_TEST;
- arglr = &rpc->all_arg_lists.arglr;
- arglr->ag_count = (BUFFER_LONG)trials;
-
- send_request_with_id();
-
- return((NINT)rpc->return_value.buffer_int);
- }
-
- /* FUNCTION */
- EXPORT NINT ug_msgio( msg, msgl, rwf )
- TEXT *msg; /* message to send / read */
- NINT msgl; /* message length */
- NINT rwf; /* 0=read; 1=write */
- {
- RPC_AREA_T *rpc;
- ARGMSG *argmsg;
-
- rpc = &Data_transfer_ptr->RPC_area;
- rpc->request = REQ_UG_MSGIO;
- argmsg = &rpc->all_arg_lists.argmsg;
- argmsg->ag_msgl = msgl;
- argmsg->ag_msgdir = (BUFFER_UINT)rwf;
- if (rwf)
- strcpy(argmsg->ag_msg, msg);
-
- send_request_with_id();
-
- if (UIO_error_value == 0)
- {
- if (!rwf)
- strcpy(msg, argmsg->ag_msg);
- }
- return((NINT)rpc->return_value.buffer_int);
- }
-
- /**/
- /* FUNCTION */
- EXPORT VOID ug_wtstats( PStat )
- PRSTATS *PStat; /* statistics */
- {
- RPC_AREA_T *rpc;
- PRSTATS_BUF *prstats_buf;
- NINT lcv;
-
- rpc = &Data_transfer_ptr->RPC_area;
- rpc->request = REQ_UG_WTSTATS;
- prstats_buf = &rpc->all_arg_lists.prstats_buf;
-
- #if (SERVPRIMS_EQ_BUFFERPRIMS)
- MOVEMEM(prstats_buf, PStat, sizeof(PRSTATS_BUF));
- #else
- prstats_buf->PRNwts = PStat->PRNwts;
- prstats_buf->PRMin = PStat->PRMin;
- prstats_buf->PRMax = PStat->PRMax;
- prstats_buf->PRSum = PStat->PRSum;
- prstats_buf->PRAverage = PStat->PRAverage;
- prstats_buf->PRMedian = PStat->PRMedian;
- for (lcv=0; lcv<NPHIST; lcv++)
- prstats_buf->PRHist[lcv] = PStat->PRHist[lcv];;
- prstats_buf->PRMinA = PStat->PRMinA;
- prstats_buf->PRMaxA = PStat->PRMaxA;
- prstats_buf->PRSumA = PStat->PRSumA;
- prstats_buf->PRAverageA = PStat->PRAverageA;
- prstats_buf->PRMedianA = PStat->PRMedianA;
- for (lcv=0; lcv<NPHIST; lcv++)
- prstats_buf->PRHistA[lcv] = PStat->PRHistA[lcv];;
- #endif
-
- send_request_with_id();
- }
-
- /* FUNCTION */
- EXPORT VOID ug_prune( mode, PrThresh, Prob, WtMax )
- NINT mode; /* prune mode */
- REAL PrThresh; /* pruning threshold */
- REAL Prob; /* stochastic probability */
- REAL WtMax; /* maximum magnitude to limit wts to */
- {
- RPC_AREA_T *rpc;
- ARGPRUNE *argprune;
-
- rpc = &Data_transfer_ptr->RPC_area;
- rpc->request = REQ_UG_PRUNE;
- argprune = &rpc->all_arg_lists.argprune;
- argprune->pr_mode = (BUFFER_UINT)mode;
- argprune->pr_thresh = (BUFFER_REAL)PrThresh;
- argprune->pr_prob = (BUFFER_REAL)Prob;
- argprune->pr_wtmax = (BUFFER_REAL)WtMax;
-
- send_request_with_id();
- }
-
- /**/
- /* FUNCTION */
- EXPORT VOID ug_blit(key, mode, x0, y0, x_exp, y_exp, x_size, y_size, data)
- NINT key; /* window number for a handle (1..8) */
- NINT mode; /* 0=set, 1=xor */
- NINT x0, y0; /* window relative coordinates for lower left corner */
- NINT x_exp, y_exp; /* How many pixels to expand each bit in the x and */
- /* y direction */
- NINT x_size,y_size; /* the size of the mask in the x and y direction */
- TEXT *data; /* the data to be blitted. one byte per char and */
- /* the value of that byte determines the color put */
- /* on the screen. The bytes start at bottom right */
- /* and then fill the first row, then next row up */
- /* to top. */
- {
- RPC_AREA_T *rpc;
- ARGBLIT *argblit;
-
- rpc = &Data_transfer_ptr->RPC_area;
- rpc->request = REQ_UG_BLIT;
- argblit = &rpc->all_arg_lists.argblit;
- argblit->ag_winn = (BUFFER_UINT)key;
- argblit->ag_mode = (BUFFER_UINT)mode;
- argblit->ag_x0 = (BUFFER_UINT)x0;
- argblit->ag_y0 = (BUFFER_UINT)y0;
- argblit->ag_x_exp = (BUFFER_UINT)x_exp;
- argblit->ag_y_exp = (BUFFER_UINT)y_exp;
- argblit->ag_x_size = (BUFFER_UINT)x_size;
- argblit->ag_y_size = (BUFFER_UINT)y_size;
- MOVEMEM(argblit->ag_blit_bytes, data, x_size*y_size);
-
- send_request_with_id();
- }
-
- /* FUNCTION */
- EXPORT VOID ug_pblit( key, color, mode, x0, y0, wid, ht, rot, ptr )
- NINT key; /* window handle */
- NINT color; /* color of pattern */
- NINT mode; /* 0=set, 1=xor */
- NINT x0, y0; /* window relative coordinates for lower left corner */
- NINT wid, ht; /* width & height of blit area in pixels */
- NINT rot; /* rotation angle */
- TEXT *ptr; /* pointer to the blit data */
- {
- RPC_AREA_T *rpc;
- ARGPBLIT *argpblit;
-
- rpc = &Data_transfer_ptr->RPC_area;
- rpc->request = REQ_UG_PBLIT;
- argpblit = &rpc->all_arg_lists.argpblit;
- argpblit->ag_winn = (BUFFER_UINT)key;
- argpblit->ag_color = (BUFFER_UINT)color;
- argpblit->ag_mode = (BUFFER_UINT)mode;
- argpblit->ag_x0 = (BUFFER_UINT)x0;
- argpblit->ag_y0 = (BUFFER_UINT)y0;
- argpblit->ag_x_size = (BUFFER_UINT)wid;
- argpblit->ag_y_size = (BUFFER_UINT)ht;
- argpblit->ag_rot = rot;
- MOVEMEM(argpblit->ag_blit_bytes, ptr, wid*ht);
-
- send_request_with_id();
- }
-
- /**/
- /* FUNCTION */
- EXPORT NINT ug_peio( apep, rwf, LayN, PEN )
- APE *apep; /* poiner to PE data */
- NINT rwf; /* 0=read; 1=write */
- NINT LayN; /* layer number 0=input,... */
- NINT PEN; /* PE within layer 0=first, ... */
- {
- RPC_AREA_T *rpc;
- ARGPSCIO *argpscio;
-
- rpc = &Data_transfer_ptr->RPC_area;
- rpc->request = REQ_UG_PEIO;
- argpscio = &rpc->all_arg_lists.argpscio;
- argpscio->ag_rwf = (BUFFER_UINT)rwf;
- argpscio->ag_layern = LayN;
- argpscio->ag_pen = PEN;
- if (rwf)
- {
- #if (SERVPRIMS_EQ_BUFFERPRIMS)
- MOVEMEM(&argpscio->ag_rdata.ag_pe, apep, sizeof(APE));
- #else
- argpscio->ag_rdata.ag_pe.ape_I = apep->ape_I;
- argpscio->ag_rdata.ag_pe.ape_Tran = apep->ape_Tran;
- argpscio->ag_rdata.ag_pe.ape_Output = apep->ape_Output;
- argpscio->ag_rdata.ag_pe.ape_Err = apep->ape_Err;
- argpscio->ag_rdata.ag_pe.ape_CumErr = apep->ape_CumErr;
- argpscio->ag_rdata.ag_pe.ape_Flags = apep->ape_Flags;
- #endif
- }
-
- send_request_with_id();
-
- if (!rwf)
- {
- #if (SERVPRIMS_EQ_BUFFERPRIMS)
- MOVEMEM(apep, &argpscio->ag_rdata.ag_pe, sizeof(APE));
- #else
- apep->ape_I = argpscio->ag_rdata.ag_pe.ape_I;
- apep->ape_Tran = argpscio->ag_rdata.ag_pe.ape_Tran;
- apep->ape_Output = argpscio->ag_rdata.ag_pe.ape_Output;
- apep->ape_Err = argpscio->ag_rdata.ag_pe.ape_Err;
- apep->ape_CumErr = argpscio->ag_rdata.ag_pe.ape_CumErr;
- apep->ape_Flags = argpscio->ag_rdata.ag_pe.ape_Flags;
- #endif
- }
-
- return((NINT)rpc->return_value.buffer_int);
- }
-
- /**/
- /* FUNCTION */
- EXPORT NINT ug_schdio( schp, rwf, LayN )
- ASCHED *schp; /* pointer to schedule date */
- NINT rwf; /* 0=read; 1=write */
- NINT LayN; /* layer number 0=input, ... */
- {
- RPC_AREA_T *rpc;
- ARGPSCIO *argpscio;
-
- rpc = &Data_transfer_ptr->RPC_area;
- rpc->request = REQ_UG_SCHDIO;
- argpscio = &rpc->all_arg_lists.argpscio;
- argpscio->ag_rwf = (BUFFER_UINT)rwf;
- argpscio->ag_layern = LayN;
- if (rwf)
- {
- #if (SERVPRIMS_EQ_BUFFERPRIMS)
- MOVEMEM(&argpscio->ag_rdata.ag_sched, schp, sizeof(ASCHED));
- #else
- int lcv1, lcv2;
-
- strcpy(argpscio->ag_rdata.ag_sched.asc_nam, schp->asc_nam);
- for (lcv1=0; lcv1<5; lcv1++)
- {
- argpscio->ag_rdata.ag_sched.asc_col[lcv1].asc_recall =
- schp->asc_col[lcv1].asc_recall;
- for (lcv2=0; lcv2<5; lcv2++)
- {
- argpscio->ag_rdata.ag_sched.asc_col[lcv1].asc_rcl[lcv2] =
- schp->asc_col[lcv1].asc_rcl[lcv2];
- }
- argpscio->ag_rdata.ag_sched.asc_col[lcv1].asc_learn =
- schp->asc_col[lcv1].asc_learn;
- for (lcv2=0; lcv2<5; lcv2++)
- {
- argpscio->ag_rdata.ag_sched.asc_col[lcv1].asc_lrn[lcv2] =
- schp->asc_col[lcv1].asc_lrn[lcv2];
- }
- }
- #endif
- }
-
- send_request_with_id();
-
- /**/
- if (UIO_error_value == 0)
- {
- if (!rwf)
- {
- #if (SERVPRIMS_EQ_BUFFERPRIMS)
- MOVEMEM(schp, &argpscio->ag_rdata.ag_sched, sizeof(ASCHED));
- #else
- int lcv1, lcv2;
-
- strcpy(schp->asc_nam, argpscio->ag_rdata.ag_sched.asc_nam);
- for (lcv1=0; lcv1<5; lcv1++)
- {
- schp->asc_col[lcv1].asc_recall =
- argpscio->ag_rdata.ag_sched.asc_col[lcv1].asc_recall;
- for (lcv2=0; lcv2<5; lcv2++)
- {
- schp->asc_col[lcv1].asc_rcl[lcv2] =
- argpscio->ag_rdata.ag_sched.asc_col[lcv1].asc_rcl[lcv2];
- }
- schp->asc_col[lcv1].asc_learn =
- argpscio->ag_rdata.ag_sched.asc_col[lcv1].asc_learn;
- for (lcv2=0; lcv2<5; lcv2++)
- {
- schp->asc_col[lcv1].asc_lrn[lcv2] =
- argpscio->ag_rdata.ag_sched.asc_col[lcv1].asc_lrn[lcv2];
- }
- }
- #endif
- }
- }
-
- return((NINT)rpc->return_value.buffer_int);
- }
-
- /**/
- /* FUNCTION */
- EXPORT NINT ug_ctrio( ctrp, rwf)
- CTRIO_T *ctrp; /* pointer to array of 8-LONGs */
- NINT rwf; /* 0=read; 1=write */
- {
- RPC_AREA_T *rpc;
- ARGPSCIO *argpscio;
- NINT lcv;
-
- rpc = &Data_transfer_ptr->RPC_area;
- rpc->request = REQ_UG_CTRIO;
- argpscio = &rpc->all_arg_lists.argpscio;
- argpscio->ag_rwf = (BUFFER_UINT)rwf;
- if (rwf)
- #if (SERVPRIMS_EQ_BUFFERPRIMS)
- MOVEMEM(argpscio->ag_rdata.ag_ctr, ctrp, sizeof(CTRIO_T) * 8);
- #else
- for (lcv=0; lcv<8; lcv++)
- argpscio->ag_rdata.ag_ctr[lcv] = (BUFFER_LONG)ctrp[lcv];
- #endif
-
- send_request_with_id();
-
- if (UIO_error_value == 0)
- {
- if (!rwf)
- #if (SERVPRIMS_EQ_BUFFERPRIMS)
- MOVEMEM(ctrp, argpscio->ag_rdata.ag_ctr, sizeof(CTRIO_T) * 8);
- #else
- for (lcv=0; lcv<8; lcv++)
- ctrp[lcv] = (SL)argpscio->ag_rdata.ag_ctr[lcv];
- #endif
- }
- return((NINT)rpc->return_value.buffer_int);
- }
-
- /**/
- /* FUNCTION */
- EXPORT NINT ug_ioparms(ioparms, rwf)
- IOPARMS *ioparms;
- NINT rwf; /* 0=read; 1=write */
- {
- RPC_AREA_T *rpc;
- IOPARMS_BUF *ioparms_buf;
-
- rpc = &Data_transfer_ptr->RPC_area;
- rpc->request = REQ_UG_IOPARMS;
- rpc->all_arg_lists.argpscio.ag_rwf = (BUFFER_UINT)rwf;
- ioparms_buf = &rpc->all_arg_lists.argpscio.ag_rdata.ioparms_buf;
- if (rwf)
- {
- #if (SERVPRIMS_EQ_BUFFERPRIMS)
- MOVEMEM(ioparms_buf, ioparms, sizeof(IOPARMS));
- #else
- ioparms_buf->start_in = ioparms->start_in;
- ioparms_buf->min_in = ioparms->min_in;
- ioparms_buf->max_in = ioparms->max_in;
- ioparms_buf->start_out = ioparms->start_out;
- ioparms_buf->min_out = ioparms->min_out;
- ioparms_buf->max_out = ioparms->max_out;
- #endif
- }
-
- send_request_with_id();
-
- if (UIO_error_value == 0)
- {
- if (!rwf)
- {
- #if (SERVPRIMS_EQ_BUFFERPRIMS)
- MOVEMEM(ioparms, ioparms_buf, sizeof(IOPARMS));
- #else
- ioparms->start_in = ioparms_buf->start_in;
- ioparms->min_in = ioparms_buf->min_in;
- ioparms->max_in = ioparms_buf->max_in;
- ioparms->start_out = ioparms_buf->start_out;
- ioparms->min_out = ioparms_buf->min_out;
- ioparms->max_out = ioparms_buf->max_out;
- #endif
- }
- }
- }
-
- /**/
- /* FUNCTION */
- EXPORT REAL ug_cnio(LayN, PEN, var_idx, rwf, value)
- NINT LayN; /* layer number 0=input,... */
- NINT PEN; /* PE within layer 0=first, ... */
- NINT var_idx; /* Identifier of varibale within PE */
- NINT rwf; /* 0=read; 1=write */
- REAL value; /* value to assign (if write) */
- {
- RPC_AREA_T *rpc;
- ARGCNIO *argcnio;
-
- rpc = &Data_transfer_ptr->RPC_area;
- rpc->request = REQ_UG_CNIO;
- argcnio = &rpc->all_arg_lists.argcnio;
- argcnio->nlay = LayN;
- argcnio->nPE = PEN;
- argcnio->var_idx = var_idx;
- argcnio->rwf = rwf;
- argcnio->fweight = value;
-
- send_request_with_id();
-
- return((SREAL)rpc->return_value.buffer_real);
- }
-
- InitGMenu( gmp, chrx, chry ) /* Initialize most menu params */
- GMENU *gmp; /* Graphics menu pointer */
- int chrx, chry; /* character dimensions */
- {
- GMENU_ITEM *gmip; /* Graphics menu item pointer */
- int wx; /* work index */
- int nmi; /* number of menu items */
- int tsl; /* total string length */
- int tpl; /* total pixel length */
- int x0, y0, x1, y1, ytxt;
- int chrxover2; /* x margin */
-
- tsl = 0;
- nmi = gmp->num_items;
- /* Count total number of characters */
- for (gmip = gmp->item, wx = 0; wx < nmi; gmip++, wx++ )
- tsl += strlen( gmip->text );
-
- tpl = (nmi + tsl) * chrx + 1;
-
- /* Fill in item structures */
- y0 = 1;
- y1 = y0 + 2 * GM_MARGIN + chry - 1;
- if ( (gmp->flag & GM_AUX) != 0 ) y1 += GM_MARGIN + chry;
- ytxt = y1 - GM_MARGIN - chry;
- chrxover2 = chrx / 2;
- x0 = 1;
- for (gmip = gmp->item, wx = 0; wx < nmi ; gmip++ , wx++) {
- x1 = x0 + (1+strlen( gmip->text )) * chrx - 1;
- gmip->x0 = x0;
- gmip->x1 = x1;
- gmip->y0 = y0;
- gmip->y1 = y1;
- /* text always aligned on character size boundary rel to start of menu */
- gmip->xt = x0 + chrxover2;
- gmip->yt = ytxt;
- x0 = x1 + 2;
- gmip->flag = 0x0000;
- }
-
- gmp->x1 = x1 + 1;
- gmp->y1 = y1 + 1;
- }
-
-
- DispGMenu( gmp )
- GMENU *gmp; /* Graphics menu pointer */
- {
- GMENU_ITEM *gmip; /* Graphics menu item pointer */
- int nmi; /* number of menu items */
- int wx; /* work nint */
-
- /* Display outline */
- nmi = gmp->num_items;
-
- for (gmip = gmp->item, wx = 0; wx < nmi; gmip++, wx++ )
- ug_line( gmp->key, gm_outcolor, 0,
- gmp->x0 + gmip->x0 - 1, gmp->y0,
- gmp->x0 + gmip->x0 - 1, gmp->y0 + gmp->y1, 0 );
-
- ug_line( gmp->key, gm_outcolor, 0,
- gmp->x0 + gmp->x1, gmp->y0,
- gmp->x0 + gmp->x1, gmp->y0 + gmp->y1, 0 );
-
- /* Draw horizontal lines */
- ug_line( gmp->key, gm_outcolor, 0,
- gmp->x0, gmp->y0,
- gmp->x0 + gmp->x1, gmp->y0, 0 );
- ug_line( gmp->key, gm_outcolor, 0,
- gmp->x0, gmp->y0 + gmp->y1,
- gmp->x0 + gmp->x1, gmp->y0 + gmp->y1, 0 );
-
- for (gmip = gmp->item, wx = 0; wx < nmi; gmip++, wx++ ) {
- gmip->flag &= ~GM_HILITE; /* Unhighlight */
- DispGItem( gmp, gmip, gm_txtcolor, gm_intcolor );
- }
- }
-
-
- DispGItem( gmp, gmip, text_color, back_color )
- GMENU *gmp; /* Graphics menu pointer */
- GMENU_ITEM *gmip; /* Graphics menu item pointer */
- int text_color;
- int back_color;
- {
- ug_boxf( gmp->key, back_color, 0,
- gmp->x0 + gmip->x0, gmp->y0 + gmip->y0,
- gmp->x0 + gmip->x1, gmp->y0 + gmip->y1 );
- ug_puts( gmp->key, text_color, 0,
- gmp->x0 + gmip->xt, gmp->y0 + gmip->yt, gmip->text, 0 );
- if ( (gmp->flag & GM_AUX) != 0 )
- ug_puts( gmp->key, text_color, 0,
- gmp->x0 + gmip->xt, gmp->y0 + gmip->y0 + GM_MARGIN - 1,
- gmip->text2, 0 );
- }
-
-
- GMENU_ITEM *LookGMenu( gmp , button ) /* returns item and button code */
- GMENU *gmp; /* Graphics menu pointer */
- int *button; /* returned button code */
- {
- GMENU_ITEM *gmip; /* Graphics menu item pointer */
- GMENU_ITEM *rgmip; /* Returned graphics menu item pointer */
- int nmi; /* Number of menu items */
- int key, xp, yp; /* for mouse call */
- int wx; /* work nint */
-
- rgmip = (GMENU_ITEM *) 0;
- nmi = gmp->num_items;
-
- ug_mouse( &key, &xp, &yp, button );
- xp = xp - gmp->x0;
- yp = yp - gmp->y0;
- if ( key == gmp->key ) { /* Find item pointed to and highlight */
- for (gmip = gmp->item, wx = 0; wx < nmi; gmip++, wx++ ) {
- if ( xp >= gmip->x0 && xp <= gmip->x1 &&
- yp >= gmip->y0 && yp <= gmip->y1 &&
- rgmip == (GMENU_ITEM *)0 &&
- (gmip->flag & GM_LOCKED) == 0 )
- {
- if ( (gmip->flag & GM_HILITE) == 0) {
- gmip->flag |= GM_HILITE;
- DispGItem( gmp, gmip, gm_intcolor, gm_txtcolor ); /* highlight */
- }
- rgmip = gmip;
- } else if ( (gmip->flag & GM_HILITE) != 0) {
- gmip->flag &= ~GM_HILITE;
- DispGItem( gmp, gmip, gm_txtcolor, gm_intcolor ); /* Unhighlight */
- }
- }
- } else { /* Unhilight any highlighted items */
- for (gmip = gmp->item, wx = 0; wx < nmi; gmip++, wx++ )
- if ( (gmip->flag & GM_HILITE) != 0) {
- gmip->flag &= ~GM_HILITE;
- DispGItem( gmp, gmip, gm_txtcolor, gm_intcolor ); /* Unhighlight */
- }
- }
-
- return( rgmip );
- }
-