+++ /dev/null
-#include "depend.h"
-#include "genint.h"
-#include "int.h"
-#include "process.h"
-#include "intproto.h"
-
-#include "nonstand.h"
-
-
-/* Call (non)standard procedures.
- * Almost totaly implementation dependent.
- */
-
-bool graphmode = FALSE; /* TRUE iff graphics mode active */
-param_struct par;
-
-char *s;
-char ss[255];
-char ii[50],ff[50];
-int scc,lastmsg;
-
-int wait_for_key()
-{
- G_MESSAGE msg;
-
- bzero(&msg,sizeof(G_MESSAGE));
- while ((msg.msg_type != MSG_GRAPH) && (msg.param.pword[0] != GRAPH_INKEY_RESPONSE))
-{ read_from_graph(&msg);
-
- }
- return(msg.param.pword[3]);
-}
-
-
-void nonstandard(nrproc) /* Call (non)standard procedure */
-word nrproc;
-{
-
- word am;
- int cnt=0;
- float r1, r2;
- word ax,bx,cx,dx,i,t1,t2;
- unsigned int v,p,h,l,r,c,sc;
- unsigned int Res_graph_X,Res_graph_Y;
- G_MESSAGE msg;
- MESSAGE msg1;
-
-
- switch ((int) nrproc)
- {
- case GRON :
- case GROFF :break;
-
- case CLS : msg.msg_type = MSG_GRAPH;
- msg.param.pword[0] = GRAPH_CLEAR;
- msg.param.pword[1] = GraphRes;
- send_to_graph(&msg);
- break;
-
- case POINT :
- msg.msg_type = MSG_GRAPH;
- msg.param.pword[0]=GRAPH_POINT;
- msg.param.pword[1] = GraphRes;
- msg.param.pword[3]=param[0].xword;
- msg.param.pword[4]=param[1].xword;
- send_to_graph(&msg);
- break;
- case MOVE :
- msg.msg_type = MSG_GRAPH;
- msg.param.pword[0]=GRAPH_MOVE;
- msg.param.pword[1] = GraphRes;
- msg.param.pword[2]=param[0].xword;
- msg.param.pword[3]=param[1].xword;
- send_to_graph(&msg);
- break;
-
- case DRAW :
- msg.msg_type = MSG_GRAPH;
- msg.param.pword[0]=GRAPH_LINETO;
- msg.param.pword[1] = GraphRes;
- msg.param.pword[3]=param[0].xword;
- msg.param.pword[4]=param[1].xword;
- send_to_graph(&msg);
- break;
-
- case INXPOS :
- msg.msg_type = MSG_GRAPH;
- msg.param.pword[0]=GRAPH_CURPOS;
- msg.param.pword[1] = GraphRes;
- send_to_graph(&msg);
- while ((msg.msg_type!=MSG_GRAPH)&&(msg.param.pword[0]!=GRAPH_CURPOS_RESPONSE))
- read_from_graph(&msg);
- param[0].xword = msg.param.pword[3];
- break;
-
- case INYPOS :
- msg.msg_type = MSG_GRAPH;
- msg.param.pword[0]=GRAPH_CURPOS;
- msg.param.pword[1] = GraphRes;
- send_to_graph(&msg);
- while ((msg.msg_type!=MSG_GRAPH)||(msg.param.pword[0]!=GRAPH_CURPOS_RESPONSE))
- read_from_graph(&msg);
- param[0].xword = msg.param.pword[4];
- break;
-
- case HFILL :
- break;
- case VFILL :
- break;
-
- case HASCII :
- msg.msg_type = MSG_GRAPH;
- msg.param.pword[0]=GRAPH_HASCII;
- msg.param.pword[1]=param[0].xword;
- send_to_graph(&msg);
- break;
-
- case COLOR :
- msg.msg_type = MSG_GRAPH;
- msg.param.pword[0]=GRAPH_FOREGROUND;
- msg.param.pword[1] = GraphRes;
- msg.param.pword[3] = param[0].xword;
- send_to_graph(&msg);
- break;
-
- case BORDER :
- msg.msg_type = MSG_GRAPH;
- msg.param.pword[0]=GRAPH_BACKGROUND;
- msg.param.pword[1] = GraphRes;
- msg.param.pword[3] = param[0].xword;
- send_to_graph(&msg);
- break;
-
- case STYLE :
- break;
-
- case INPIX :
- break;
-
- case OUTSTRING :
- msg.msg_type = MSG_GRAPH;
- msg.param.pword[0]=GRAPH_OUTSTRING;
- msg.param.pword[1] = GraphRes;
- msg.param.pword[2] = param[0].xword;
- msg.param.pword[3] = param[1].xword;
- msg.param.pword[4] = param[3].xword;
- msg.param.pword[5] = param[4].xword;
- {
- s= (char *)(M + strings + param[ 2 ].xword + 1);
- strcpy(msg.param.pstr,s);
- send_to_graph(&msg);
- }
- break;
-
- case GETMAP :
- msg.msg_type = MSG_GRAPH;
- msg.param.pword[0] = GRAPH_GETMAP;
- msg.param.pword[1] = GraphRes;
- msg.param.pword[2] = param[0].xword;
- msg.param.pword[3] = param[1].xword;
- send_to_graph(&msg);
- while ((msg.msg_type!=MSG_GRAPH)||(msg.param.pword[0]!=GRAPH_GETMAP_RESPONSE))
- read_from_graph(&msg);
-
- {
- int map;
-
- map =msg.param.pword[2];
- newarry((word) 1, 3, (word)AINT, ¶m[ 2 ].xvirt, &am);
- M[ am+3 ] = map;
- M[ am+4 ] = msg.param.pword[3];
- M[ am+5 ] = msg.param.pword[4];
-
- }
- break;
-
-
- case PUTMAP :
- if (member(¶m[ 0 ].xvirt, &am)){
- msg.msg_type = MSG_GRAPH;
- msg.param.pword[0] = GRAPH_PUTMAP;
- msg.param.pword[1] = GraphRes;
- msg.param.pword[2] = M[am+3];
- msg.param.pword[4] = M[am+4];
- msg.param.pword[5] = M[am+5];
- send_to_graph(&msg);
- }
- break;
-
- case ORMAP :
- case XORMAP :break;
-
-
- case PATERN :
- msg.msg_type = MSG_GRAPH;
- msg.param.pword[0]=GRAPH_RECT;
- msg.param.pword[1] = GraphRes;
- msg.param.pword[3] = param[0].xword;
- msg.param.pword[4] = param[1].xword;
- msg.param.pword[5] = param[2].xword;
- msg.param.pword[6] = param[3].xword;
- msg.param.pword[7] = param[4].xword;
- msg.param.pword[8] = param[5].xword;
- send_to_graph(&msg); break;
- case PALLET:break;
-
- case TRACK :
- msg.msg_type = MSG_GRAPH;
- msg.param.pword[0] = GRAPH_WRITEINTXY;
- msg.param.pword[1] = GraphRes;
- msg.param.pword[2] = param[0].xword;
- msg.param.pword[3] = param[1].xword;
- msg.param.pword[4] = param[4].xword;
- msg.param.pword[5] = param[2].xword;
- send_to_graph(&msg);
- break;
-
- case INKEY :
- msg.msg_type = MSG_GRAPH;
- msg.param.pword[0]=GRAPH_INKEY;
- msg.param.pword[1] = GraphRes;
- send_to_graph(&msg);
- param[0].xword = wait_for_key();
- break;
-
-
- case CIRB :
- msg.msg_type = MSG_GRAPH;
- msg.param.pword[0]=GRAPH_ELLIPSE;
- msg.param.pword[1] = GraphRes;
- msg.param.pword[3]=param[0].xword; msg.param.pword[4]=param[1].xword;
- msg.param.pword[5]=param[2].xword; msg.param.pword[6]=param[3].xword;
- msg.param.pword[7]=(double)param[4].xword;
- msg.param.pword[8]=(double) param[5].xword;
- msg.param.pword[9]=param[7].xword;
- send_to_graph(&msg);
- break;
-
- case HFONT8: /* ___________ magic library ____________ */
-
- if (param[0].xword==1000)
- {
- strcpy(ss,"");
- } else
- if (param[0].xword==1001)
- {
- sprintf(ss,"%s%c",ss,(char)(param[1].xword));
- } else
- if (param[0].xword==303)
- {
- msg.param.pword[1] = param[0].xword;
- msg.param.pword[2] = param[1].xword;
- msg.param.pword[3] = param[2].xword;
- msg.param.pword[4] = param[3].xword;
- msg.param.pword[5] = param[5].xword;
- msg.msg_type = MSG_GRAPH;
- msg.param.pword[0] = GRAPH_MAGIC;
- strcpy(msg.param.pstr,ss);
- send_to_graph(&msg);
- } else
- if (param[0].xword>500)
- {
- msg1.param.pword[1] = param[0].xword;
- msg1.param.pword[2] = param[1].xword;
- msg1.param.pword[3] = param[2].xword;
- msg1.param.pword[4] = param[3].xword;
- s= (char *)(M + strings + param[ 4 ].xword + 1);
- strcpy(msg1.param.pstr,s);
- msg1.param.pword[5] = param[5].xword;
- msg1.param.pword[6] = param[6].xword;
- msg1.param.pword[7] = param[7].xword;
-
- switch(msg1.param.pword[1]) /* Machine class */
- {
- case 501: /* get local node */
- newarry((word)0,2,(word)AINT,¶m[8].xvirt,&ax);
- ax+=3;
- M[ax++]=my_ctx.node;
- break;
- case 502: /* number of nodes */
- msg1.msg_type = MSG_NET;
- msg1.param.pword[0]=NET_NODES_NUM;
- write(net_sock,&msg1,sizeof(MESSAGE));
- while ((msg1.msg_type!=MSG_NET) || (msg1.param.pword[0]!=NET_NODES_NUM_RESPONSE) )
- read_from_net(&msg1);
- newarry((word)0,2,(word)AINT,¶m[8].xvirt,&ax);
- ax+=3;
- M[ax++]=msg1.param.pword[1];
- break;
- case 503: /* node exists */
- msg1.msg_type = MSG_NET;
- msg1.param.pword[0]=NET_NODE_EXIST;
- msg1.param.pword[1]=msg1.param.pword[2];
- write(net_sock,&msg1,sizeof(MESSAGE));
- bzero(&msg1,sizeof(msg1));
- while ((msg1.msg_type!=MSG_NET) || (msg1.param.pword[0]!=NET_NODE_EXIST) )
- read_from_net(&msg1);
- newarry((word)0,2,(word)AINT,¶m[8].xvirt,&ax);
- ax+=3;
- M[ax++]=msg1.param.pword[1];
- break;
- case 504: /* get nodes info */
- {
- char ss[1024];
- strcpy(ss,"");
- msg1.msg_type = MSG_NET;
- msg1.param.pword[0]=NET_GET_INFO;
- write(net_sock,&msg1,sizeof(MESSAGE));
- while ( (msg1.msg_type!=MSG_NET) ||(msg1.param.pword[0]!=NET_INFO_END) )
- {
- read_from_net(&msg1);
- if (msg1.param.pword[0]==NET_INFO)
- strcat(ss,msg1.param.pstr);
- }
- newarry((word)0,strlen(ss),(word)AINT,
- ¶m[8].xvirt,&ax);
- ax+=3;
- s=ss;
- while(*s!='\0')
- M[ax++]=*(s++);
- } ;break;
-
-
- }/* switch */
- }
- else
- { /* graphic */
-
- msg.param.pword[1] = param[0].xword;
- msg.param.pword[2] = param[1].xword;
- msg.param.pword[3] = param[2].xword;
- msg.param.pword[4] = param[3].xword;
- s= (char *)(M + strings + param[ 4 ].xword + 1);
- strcpy(msg.param.pstr,s);
- msg.param.pword[5] = param[5].xword;
- msg.param.pword[6] = param[6].xword;
- msg.param.pword[7] = param[7].xword;
-
- msg.msg_type = MSG_GRAPH;
- msg.param.pword[0] = GRAPH_MAGIC;
-
- send_to_graph(&msg);
-
- if (msg.param.pword[1]<0)
- {
- lastmsg=msg.param.pword[1];
- bzero(&msg,sizeof(G_MESSAGE));
- while (msg.param.pword[0]!=GRAPH_MAGIC_RESPONSE)
- read_from_graph(&msg);
- if (lastmsg==-305) // Read integer
- {
- newarry((word)0,10,(word)AINT,¶m[8].xvirt,&ax);
- ax+=3;
- M[ax++]=atoi(msg.param.pstr);
- }
- else
- if (lastmsg==-306) // Read char
- {
- newarry((word)0,10,(word)AINT,¶m[8].xvirt,&ax);
- ax+=3;
- M[ax++]=msg.param.pchar;
- }
- else
- if (lastmsg==-307) // Read real
- {
- newarry((word)0,10,(word)AINT,¶m[8].xvirt,&ax);
- ax+=3;
- strcpy(ii,"");strcpy(ff,"");sc=0;
- while ((sc<strlen(msg.param.pstr)) && (msg.param.pstr[sc]!='.'))
- {
- ii[sc]=msg.param.pstr[sc];
- sc++;
- }
- ii[sc++]='\0';scc=sc;sc=0;
- while (scc<strlen(msg.param.pstr))
- {
- ff[sc++]=msg.param.pstr[scc++];
- }
- ff[sc]='\0';
- M[ax++]=atoi(ii);
- M[ax++]=atoi(ff);
-
- }
- else
- if (msg.param.pword[1]==1)
- {
- newarry((word)0,10,(word)AINT,¶m[8].xvirt,&ax);
- ax+=3;
- for(l=2;l<7;l++)
- M[ax++]=msg.param.pword[l];
- }
- else
- {
- newarry((word)0,strlen(msg.param.pstr)+2,(word)AINT,
- ¶m[8].xvirt,&ax);
- ax+=3;
- s=msg.param.pstr;
- while(*s!='\0')
- M[ax++]=*(s++);
- }
- }
- } /* graphic */
- break;
-
- case INIT :
-
- break;
-
- case STATUS :
- break;
-
- case GETPRESS :
- msg.msg_type = MSG_GRAPH;
- msg.param.pword[0]=GRAPH_MGETPRESS;
- msg.param.pword[1] = GraphRes;
- send_to_graph(&msg);
- while (1)
- {
- read_from_graph(&msg);
- if ( (msg.msg_type==MSG_GRAPH)&&(msg.param.pword[0]==GRAPH_MGETPRESS_RESPONSE)) break;
- }
- param[0].xword = msg.param.pword[2];
- param[1].xword = msg.param.pword[3];
- param[2].xword = msg.param.pword[4];
- param[3].xword = msg.param.pword[5];
- param[4].xword = msg.param.pword[6];
- param[5].xword = msg.param.pword[7];
- break;
-
-
- break;
- case GETRELEASE :
- break;
-
- case SHOWCURSOR :
- case HIDECURSOR :
- case SETPOSITION :
- case SETWINDOW :
- case DEFCURSOR :
- case SETSPEED :
- case SETMARGINS :
- case SETTHRESHOLD :
- break;
-
- case GETMOVEMENT :
- break;
-
-
-
-
- default :
- errsignal(RTEUNSTP);
- }
-
-}
-