draw2.c
0000/**************************************
0001 draw2.c IPC X-functions
0002**************************************/
0003#include <stdio.h>
0004#include <stdlib.h>
0005#include <math.h>
0006#include <sys/types.h>
0007#include <sys/ipc.h>
0008#include <sys/shm.h>
0009#include <sys/sem.h>
0010#include "draw2.h"
0011#include <string.h>
0012
0013extern int semid; /* semaphore identifier */
0014extern struct sembuf sb;
0015extern void *shmx;
0016
0017int sendMsg()
0018{
0019 sb.sem_num=5; /* call from a function program */
0020 sb.sem_op=1;
0021 semop(semid,&sb,1);
0022 sb.sem_num=4; /* wake up f006 */
0023 sb.sem_op=1;
0024 semop(semid,&sb,1);
0025 sb.sem_num=6; /* wait */
0026 sb.sem_op=-1;
0027 sb.sem_flg=0;
0028 semop(semid,&sb,1);
0029 sb.sem_num=7; /* test if error */
0030 sb.sem_op=0;
0031 sb.sem_flg=IPC_NOWAIT;
0032 if(semop(semid,&sb,1)!=0){
0033 sb.sem_num=7;
0034 sb.sem_op=-1;
0035 sb.sem_flg=0;
0036 semop(semid,&sb,1); /* wait */
0037 return 1;
0038 }
0039 return 0;
0040}
0041
0042int SetColorX(int r,int g,int b)
0043{
0044 unsigned long l;
0045
0046 l=(0xff*r)/100;
0047 l=(l<<8)+(0xff*g)/100;
0048 l=(l<<8)+(0xff*b)/100;
0049// XSetForeground(d,gc,nearColor(d,l));
0050 *(unsigned long*)((int*)shmx+1)=l;
0051 *(int*)shmx=0;
0052
0053 sendMsg();
0054}
0055
0056int MoveToX(int x,int y)
0057{
0058 *((int*)shmx+1)=x;
0059 *((int*)shmx+2)=y;
0060 *(int*)shmx=1;
0061 return sendMsg();
0062}
0063
0064int DrawStringX(char *c)
0065{
0066// XDrawString(d,p,gc,xcur,ycur,(char *)( ((int *) ((void **)param) [2]) +1 ),
0067// strlen((char *)( ((int *) ((void **)param) [2]) +1 )));
0068 strcpy((char*)((int*)shmx+1),c);
0069 *(int*)shmx=2;
0070
0071 return sendMsg();
0072}
0073
0074int FontInfoX(int font,int direc,int mode)
0075{
0076// FontX("-b&h-lucida-bold-i-normal-sans-34-240-100-100-p-215-iso8859-1");
0077 char f[60];
0078 char ast[]="*";
0079 char *type[]={"illegal","courier","helvetica","century","symbol","times",
0080 "utopia","lucida","lucidabright","lucidatypewriter","charter"};
0081 int sizn=15;
0082 int siz[]={8,10,11,12,14,15,17,18,19,20,24,25,26,33,34};
0083 char *sizc[]={"-8-","-10-","-11-","-12-","-14-","-15-","-17-","-18-",
0084 "-19-","-20-","-24-","-25-","-26-","-33-","-34-"};
0085 char *face[]={"medium","bold"};
0086 char *ang[]={"r-","i-","o-"};
0087 int i,j,k,l,m,n;
0088
0089 k=font/100;
0090 n=font-k*100;
0091 l=mode/100;
0092 m=mode-l*100;
0093 strcpy(f,ast);
0094 strcat(f,type[k]);
0095 strcat(f,ast);
0096 strcat(f,face[l]);
0097 strcat(f,ast);
0098 strcat(f,ang[m]);
0099 strcat(f,ast);
0100 for(i=0;i<sizn;i++) if(siz[i]==n) break;
0101 strcat(f,sizc[i]);
0102 strcat(f,ast);
0103 *((int*)shmx+1)=direc;
0104 strcpy((char*)((int*)shmx+2),f);
0105
0106 *(int*)shmx=3;
0107
0108 return sendMsg();
0109}
0110
0111int FontX(char *c)
0112{
0113// xfs=XLoadQueryFont(d,(char *)( ((int *) ((void **)param) [2]) +1 ));
0114// XSetFont(d,gc,xfs->fid);
0115 strcpy((char*)((int*)shmx+1),c);
0116 *(int*)shmx=4;
0117
0118 return sendMsg();
0119}
0120
0121int PointX(int x,int y)
0122{
0123// XDrawPoint(d,p,gc,*(int *)((void **)param)[2],*(int *)((void **)param)[3]);
0124 *((int*)shmx+1)=x;
0125 *((int*)shmx+2)=y;
0126 *(int*)shmx=5;
0127
0128 return sendMsg();
0129}
0130
0131int LineToX(int x,int y)
0132{
0133// XDrawLine(d,p,gc,xcur,ycur,x,y);
0134 *((int*)shmx+1)=x;
0135 *((int*)shmx+2)=y;
0136 *(int*)shmx=6;
0137
0138 return sendMsg();
0139}
0140
0141int LineX(int x1,int y1,int x2,int y2)
0142{
0143// XDrawLine(d,p,gc,*(int *)((void **)param)[2],*(int *)((void **)param)[3],
0144// *(int *)((void **)param)[4],*(int *)((void **)param)[5]);
0145 *((int*)shmx+1)=x1;
0146 *((int*)shmx+2)=y1;
0147 *((int*)shmx+3)=x2;
0148 *((int*)shmx+4)=y2;
0149 *(int*)shmx=7;
0150 return sendMsg();
0151}
0152
0153int FrameRectX(int x,int y,int wid,int hei)
0154{
0155// XDrawRectangle(d,p,gc,*(int *)((void **)param)[2],*(int *)((void **)param)[3],
0156// *(int *)((void **)param)[4],*(int *)((void **)param)[5]);
0157 *((int*)shmx+1)=x;
0158 *((int*)shmx+2)=y;
0159 *((int*)shmx+3)=wid;
0160 *((int*)shmx+4)=hei;
0161 *(int*)shmx=8;
0162 return sendMsg();
0163}
0164
0165int FrameOvalX(int x,int y,int wid,int hei)
0166{
0167// XDrawArc(d,p,gc,*(int *)((void **)param)[2],*(int *)((void **)param)[3],
0168// *(int *)((void **)param)[4],*(int *)((void **)param)[5],0,360*64);
0169 *((int*)shmx+1)=x;
0170 *((int*)shmx+2)=y;
0171 *((int*)shmx+3)=wid;
0172 *((int*)shmx+4)=hei;
0173 *(int*)shmx=9;
0174 return sendMsg();
0175}
0176
0177int FillRectX(int x,int y,int wid,int hei)
0178{
0179// XFillRectangle(d,p,gc,*(int *)((void **)param)[2],*(int *)((void **)param)[3],
0180// *(int *)((void **)param)[4],*(int *)((void **)param)[5]);
0181 *((int*)shmx+1)=x;
0182 *((int*)shmx+2)=y;
0183 *((int*)shmx+3)=wid;
0184 *((int*)shmx+4)=hei;
0185 *(int*)shmx=10;
0186 return sendMsg();
0187}
0188
0189int FillOvalX(int x,int y,int wid,int hei)
0190{
0191// XFillArc(d,p,gc,*(int *)((void **)param)[2],*(int *)((void **)param)[3],
0192// *(int *)((void **)param)[4],*(int *)((void **)param)[5],0,360*64);
0193 *((int*)shmx+1)=x;
0194 *((int*)shmx+2)=y;
0195 *((int*)shmx+3)=wid;
0196 *((int*)shmx+4)=hei;
0197 *(int*)shmx=11;
0198 return sendMsg();
0199}
0200
0201int OpenPolyX()
0202{
0203// xp=(XPoint *)malloc(sizeof(XPoint)*1000);
0204// nxp=0;
0205 *(int*)shmx=12;
0206 return sendMsg();
0207}
0208
0209int ClosePolyX()
0210{
0211// XFillPolygon(d,p,gc,xp,nxp,Complex,CoordModeOrigin);
0212// XSync(d,True);
0213// free(xp);
0214// nxp=-1;
0215 *(int*)shmx=13;
0216 return sendMsg();
0217}
0218
0219int LineWidthX(int w)
0220{
0221// XSetLineAttributes(d,gc,*(int *)((void **)param)[2],LineSolid,CapButt,JoinMiter);
0222 *((int*)shmx+1)=w;
0223 *(int*)shmx=14;
0224 return sendMsg();
0225}
0226
0227int TextExtentsX(char *s,int *asc,int *desc,int *wid)
0228{
0229 int i;
0230// XTextExtents(xfs,string,nchars,direction_return,ascent_return,descent_return,overall_return);
0231 strcpy((char*)((int*)shmx+4),s);
0232 *(int*)shmx=15;
0233
0234 i=sendMsg();
0235 *asc=*((int *)shmx+1);
0236 *desc=*((int *)shmx+2);
0237 *wid=*((int *)shmx+3);
0238 return 0;
0239}
0240
0241int DrawNumX(int i)
0242{
0243 char c[15];
0244 sprintf(c,"%i",i);
0245 DrawStringX(c);
0246}
0247
0248int DrawFNumX(char *f,double a)
0249{
0250 char c[30];
0251 sprintf(c,f,a);
0252 DrawStringX(c);
0253}
0254
0255int SetClipRectX(int x,int y,int wid,int hei)
0256{
0257 *((int*)shmx+1)=x;
0258 *((int*)shmx+2)=y;
0259 *((int*)shmx+3)=wid;
0260 *((int*)shmx+4)=hei;
0261 *(int*)shmx=16;
0262 return sendMsg();
0263}
0264
0265int ClrClipRectX()
0266{
0267 *(int*)shmx=17;
0268 return sendMsg();
0269}
0270