/* * Vdi drawing primitives library interface * * v_bar bar * v_arc arc * v_pieslice pie * v_circle circle * v_ellarc elliptical arc * v_ellpie elliptical pie * v_ellipse ellipse * v_rbox rounded rect * v_rfbox rounded filled rect * v_justified justified text * * ++jrb bammi@cadence.com * modified: mj -- ntomczak@vm.ucs.ualberta.ca */ #include #include "common.h" #ifdef __DEF_ALL__ #define L_v_bar #define L_v_arc #define L_v_piesli #define L_v_circle #define L_v_ellarc #define L_v_ellpie #define L_v_ellips #define L_v_rbox #define L_v_rfbox #define L_v_justif #endif /* __DEF_ALL__ */ #ifdef L_v_bar /* v_bar bar * returns void */ void v_bar(int handle, int pxyarray[]) { #ifdef __MSHORT__ /* we have 16 bit ints, just change vdi params */ _vdiparams[2] = (void *) &pxyarray[0]; #else /* 32 bit ints - let's copy */ register int i; for(i = 0; i < 4; i++) _ptsin[i] = pxyarray[i]; #endif __vdi__(VDI_CONTRL_ENCODE(11, 2, 0, 1), handle); #ifdef __MSHORT__ _vdiparams[2] = (void *)&_ptsin[0]; /* restore vdi parameters */ #endif } #endif /* L_v_bar */ #ifdef L_v_arc /* v_arc arc * returns void */ void v_arc(int handle, int x, int y, int radius, int begang, int endang) { extern void bzero(void *, size_t); bzero(_ptsin, 8 * sizeof(short)); _ptsin[0] = x; _ptsin[1] = y; _ptsin[6] = radius; _intin[0] = begang; _intin[1] = endang; __vdi__(VDI_CONTRL_ENCODE(11, 4, 2, 2), handle); } #endif /* L_v_arc */ #ifdef L_v_piesli /* v_pieslice pie * returns void */ void v_pieslice(int handle, int x, int y, int radius, int begang, int endang) { extern void bzero(void *, size_t); bzero(_ptsin, 8 * sizeof(short)); _ptsin[0] = x; _ptsin[1] = y; _ptsin[6] = radius; _intin[0] = begang; _intin[1] = endang; __vdi__(VDI_CONTRL_ENCODE(11, 4, 2, 3), handle); } #endif /* L_v_piesli */ #ifdef L_v_circle /* v_circle circle * returns void */ void v_circle(int handle, int x, int y, int radius) { extern void bzero(void *, size_t); bzero(_ptsin, 6 * sizeof(short)); _ptsin[0] = x; _ptsin[1] = y; _ptsin[4] = radius; __vdi__(VDI_CONTRL_ENCODE(11, 3, 0, 4), handle); } #endif /* L_v_circle */ #ifdef L_v_ellarc /* v_ellarc elliptical arc * return void */ void v_ellarc(int handle, int x, int y, int xrad, int yrad, int begang, int endang) { _ptsin[0] = x; _ptsin[1] = y; _ptsin[2] = xrad; _ptsin[3] = yrad; _intin[0] = begang; _intin[1] = endang; __vdi__(VDI_CONTRL_ENCODE(11, 2, 2, 6), handle); } #endif /* L_v_ellarc */ #ifdef L_v_ellpie /* v_ellpie elliptical pie * return void */ void v_ellpie(int handle, int x, int y, int xrad, int yrad, int begang, int endang) { _ptsin[0] = x; _ptsin[1] = y; _ptsin[2] = xrad; _ptsin[3] = yrad; _intin[0] = begang; _intin[1] = endang; __vdi__(VDI_CONTRL_ENCODE(11, 2, 2, 7), handle); } #endif /* L_v_ellpie */ #ifdef L_v_ellips /* v_ellipse ellipse * returns void */ void v_ellipse(int handle, int x, int y, int xrad, int yrad) { _ptsin[0] = x; _ptsin[1] = y; _ptsin[2] = xrad; _ptsin[3] = yrad; __vdi__(VDI_CONTRL_ENCODE(11, 2, 0, 5), handle); } #endif /* L_v_ellips */ #ifdef L_v_rbox /* v_rbox rounded rect * returns void */ void v_rbox(int handle, int pxyarray[]) { #ifdef __MSHORT__ /* we have 16 bit ints, just change vdi params */ _vdiparams[2] = (void *) &pxyarray[0]; #else /* 32 bit ints - let's copy */ register int i; for(i = 0; i < 4; i++) _ptsin[i] = pxyarray[i]; #endif __vdi__(VDI_CONTRL_ENCODE(11, 2, 0, 8), handle); #ifdef __MSHORT__ _vdiparams[2] = (void *)&_ptsin[0]; /* restore vdi parameters */ #endif } #endif /* L_v_rbox */ #ifdef L_v_rfbox /* v_rfbox rounded filled rect * returns void */ void v_rfbox(int handle, int pxyarray[]) { #ifdef __MSHORT__ /* we have 16 bit ints, just change vdi params */ _vdiparams[2] = (void *) &pxyarray[0]; #else /* 32 bit ints - let's copy */ register int i; for(i = 0; i < 4; i++) _ptsin[i] = pxyarray[i]; #endif __vdi__(VDI_CONTRL_ENCODE(11, 2, 0, 9), handle); #ifdef __MSHORT__ _vdiparams[2] = (void *)&_ptsin[0]; /* restore vdi parameters */ #endif } #endif /* L_v_rfbox */ #ifdef L_v_justif /* v_justified justified text * returns void */ void v_justified(int handle, int x, int y, char *str, int len, int word_space, int char_space) { register short *wptr = _intin; _ptsin[0] = x; _ptsin[1] = y; _ptsin[2] = len; _ptsin[3] = 0; *wptr++ = word_space; *wptr++ = char_space; while (0 != (*wptr = (unsigned char) *str++)) wptr += 1; __vdi__(VDI_CONTRL_ENCODE(11, 2, (int)(wptr - _intin), 10), handle); } #endif /* L_v_justif */ /* -eof- */