1 // Copyright (c) 1999-2012 OPEN CASCADE SAS
3 // The content of this file is subject to the Open CASCADE Technology Public
4 // License Version 6.5 (the "License"). You may not use the content of this file
5 // except in compliance with the License. Please obtain a copy of the License
6 // at http://www.opencascade.org and read it completely before using this file.
8 // The Initial Developer of the Original Code is Open CASCADE S.A.S., having its
9 // main offices at: 1, place des Freres Montgolfier, 78280 Guyancourt, France.
11 // The Original Code and all software distributed under the License is
12 // distributed on an "AS IS" basis, without warranty of any kind, and the
13 // Initial Developer hereby disclaims all such warranties, including without
14 // limitation, any warranties of merchantability, fitness for a particular
15 // purpose or non-infringement. Please see the License for the specific terms
16 // and conditions governing the rights and limitations under the License.
19 #include <Xw_Extension.h>
21 /* ifdef then trace on */
23 #define TRACE_DEF_MARKMAP
27 XW_EXT_MARKMAP* Xw_def_markmap(adisplay,nmark):
28 XW_EXT_DISPLAY *adisplay Extended Display structure
30 int nmark Number of marker cells to be allocated
32 Create a markmap extension
33 allocate the marker cells in the markmap as if possible
34 depending of the MAXMARKER define .
36 Returns Markmap extension address if successuful
42 void* Xw_def_markmap (void* adisplay,int nmark)
44 void* Xw_def_markmap (adisplay,nmark)
47 #endif /*XW_PROTOTYPE*/
49 XW_EXT_DISPLAY *pdisplay = (XW_EXT_DISPLAY*)adisplay ;
50 XW_EXT_MARKMAP *pmarkmap = NULL ;
53 if( !Xw_isdefine_display(pdisplay) ) {
54 /*ERROR*Bad EXT_DISPLAY Address*/
55 Xw_set_error(96,"Xw_def_markmap",pdisplay) ;
59 if( !(pmarkmap = Xw_add_markmap_structure(sizeof(XW_EXT_MARKMAP))) )
62 if( nmark <= 0 ) nmark = MAXMARKER ;
64 pmarkmap->connexion = pdisplay ;
65 pmarkmap->maxmarker = min(nmark,MAXMARKER) ;
67 #ifdef TRACE_DEF_MARKMAP
68 if( Xw_get_trace() ) {
69 printf(" %lx = Xw_def_markmap(%lx,%d)\n", (long ) pmarkmap,(long ) adisplay,nmark) ;
76 static XW_EXT_MARKMAP *PmarkmapList =NULL ;
79 XW_EXT_MARKMAP* Xw_add_markmap_structure(int size)
81 XW_EXT_MARKMAP* Xw_add_markmap_structure(size)
83 #endif /*XW_PROTOTYPE*/
85 Create and Insert one Extended markmap structure in the
88 returns Extended markmap address if successful
89 or NULL if Bad Allocation
92 XW_EXT_MARKMAP *pmarkmap = (XW_EXT_MARKMAP*) Xw_malloc(size) ;
96 pmarkmap->type = MARKMAP_TYPE ;
97 pmarkmap->link = PmarkmapList ;
98 PmarkmapList = pmarkmap ;
99 pmarkmap->connexion = NULL ;
100 pmarkmap->maxmarker = 0 ;
101 pmarkmap->maxwindow = 0 ;
102 for( i=0 ; i<MAXMARKER ; i++ ) {
103 pmarkmap->marks[i] = 0 ;
104 pmarkmap->npoint[i] = 0 ;
105 pmarkmap->width[i] = 0 ;
106 pmarkmap->height[i] = 0 ;
109 /*EXT_MARKMAP Allocation failed*/
110 Xw_set_error(12,"Xw_add_markmap_structure",0) ;
117 XW_STATUS Xw_close_markmap(void* amarkmap)
119 XW_STATUS Xw_close_markmap(amarkmap)
121 #endif /*XW_PROTOTYPE*/
123 XW_EXT_MARKMAP *pmarkmap = (XW_EXT_MARKMAP*) amarkmap ;
126 if( !Xw_isdefine_markmap(pmarkmap) ) {
127 /*Bad EXT_MARKMAP Address*/
128 Xw_set_error(46,"Xw_close_markmap",pmarkmap) ;
132 status = Xw_del_markmap_structure(pmarkmap) ;
134 #ifdef TRACE_DEF_MARKMAP
135 if( Xw_get_trace() ) {
136 printf(" %d = Xw_close_markmap(%lx)\n",status,(long ) pmarkmap) ;
144 XW_STATUS Xw_del_markmap_structure(XW_EXT_MARKMAP* amarkmap)
146 XW_STATUS Xw_del_markmap_structure(amarkmap)
147 XW_EXT_MARKMAP *amarkmap;
148 #endif /*XW_PROTOTYPE*/
150 Remove the Extended markmap address from the Extended List
152 returns ERROR if the markmap address is not Found in the list
153 returns SUCCESS if successful
156 XW_EXT_MARKMAP *pmarkmap = PmarkmapList ;
159 if( !amarkmap ) return (XW_ERROR) ;
161 if( amarkmap->maxwindow ) {
164 for( i=0 ; i<MAXMARKER ; i++) {
165 if( amarkmap->marks[i] ) {
166 XFreePixmap(_MDISPLAY,amarkmap->marks[i]) ;
167 // amarkmap->marks[i] = NULL;
168 amarkmap->marks[i] = 0;
170 if( amarkmap->npoint[i] > 0 ) {
171 Xw_free(amarkmap->spoint[i]);
172 Xw_free(amarkmap->xpoint[i]);
173 Xw_free(amarkmap->ypoint[i]);
174 amarkmap->npoint[i] = 0;
178 if( amarkmap == pmarkmap ) {
179 PmarkmapList = (XW_EXT_MARKMAP*) amarkmap->link ;
181 for( ; pmarkmap ; pmarkmap = (XW_EXT_MARKMAP*) pmarkmap->link ) {
182 if( pmarkmap->link == amarkmap ) {
183 pmarkmap->link = amarkmap->link ;
190 return (XW_SUCCESS) ;