7fd59977 |
1 | |
2 | #include <Xw_Extension.h> |
3 | |
4 | /* ifdef then trace on */ |
5 | #ifdef TRACE |
6 | #define TRACE_GET_WIDTH_INDEX |
7 | #endif |
8 | |
9 | /* |
10 | XW_STATUS Xw_get_width_index(awidthmap,width,index): |
11 | |
12 | XW_EXT_WIDTHMAP *awidthmap Widthmap extension structure |
13 | float width ; Line Width in MM |
14 | int *index ; Return Width index 0 >= x < MAXWIDTH |
15 | |
16 | Gets the nearest width index from width. |
17 | |
18 | Returns XW_ERROR if BadWidth Index or width is not defined |
19 | Returns XW_SUCCESS if Successful |
20 | |
21 | */ |
22 | |
23 | #ifdef XW_PROTOTYPE |
24 | XW_STATUS Xw_get_width_index(void *awidthmap,float width,int *index) |
25 | #else |
26 | XW_STATUS Xw_get_width_index(awidthmap,width,index) |
27 | void *awidthmap ; |
28 | float width ; |
29 | int *index ; |
30 | #endif /*XW_PROTOTYPE*/ |
31 | { |
32 | XW_EXT_WIDTHMAP *pwidthmap = (XW_EXT_WIDTHMAP*)awidthmap ; |
33 | XW_STATUS status = XW_ERROR ; |
34 | Screen *screen ; |
35 | int i,j,k,pwidth ; |
36 | |
37 | if( !pwidthmap ) { |
38 | /*ERROR*Bad EXT_WIDTHMAP Address*/ |
39 | Xw_set_error( 53,"Xw_get_width_index",pwidthmap ) ; |
40 | return( XW_ERROR ) ; |
41 | } |
42 | |
43 | screen = ScreenOfDisplay(_WDISPLAY,DefaultScreen(_WDISPLAY)) ; |
44 | |
45 | pwidth = (int) (0.5 + width * (float)HeightOfScreen(screen)/ |
46 | (float)HeightMMOfScreen(screen)) ; |
47 | |
48 | pwidth = (pwidth) ? pwidth : 1 ; |
49 | |
50 | for( i=j=k=0 ; i<pwidthmap->maxwidth ; i++ ) { |
51 | if( pwidthmap->widths[i] ) { |
52 | if( pwidth == pwidthmap->widths[i] ) break; |
53 | else if( abs(pwidth - pwidthmap->widths[i]) < |
54 | abs(pwidth - pwidthmap->widths[k]) ) k = i; |
55 | } else if( !j ) j = i ; |
56 | } |
57 | |
58 | if( i<pwidthmap->maxwidth ) { |
59 | *index = i ; |
60 | status = XW_SUCCESS ; |
61 | } else if( j > 0 ) { |
62 | *index = j ; |
63 | status = Xw_def_width (pwidthmap,j,width) ; |
64 | } else { |
65 | *index = k ; |
66 | status = XW_SUCCESS ; |
67 | } |
68 | |
69 | #ifdef TRACE_GET_WIDTH_INDEX |
70 | if( Xw_get_trace() > 1 ) { |
71 | printf(" %d = Xw_get_width_index(%lx,%f,%d) is %d\n", |
72 | status,(long ) pwidthmap,width,*index,pwidthmap->widths[*index]) ; |
73 | } |
74 | #endif |
75 | |
76 | return( status ) ; |
77 | } |