Title: | DECWINDOWS 26-JAN-89 to 29-NOV-90 |
Notice: | See 1639.0 for VMS V5.3 kit; 2043.0 for 5.4 IFT kit |
Moderator: | STAR::VATNE |
Created: | Mon Oct 30 1989 |
Last Modified: | Mon Dec 31 1990 |
Last Successful Update: | Fri Jun 06 1997 |
Number of topics: | 3726 |
Total number of notes: | 19516 |
Well...I've deliberated over the scale and location for this entry and decided here is best. While this is an example program, it is presently an example program that does not work. Urgency has forced a less-than-complete period of debugging. I've included below the programming problem description from the the customer, as well as the program. Any help would be greatly appreciated! In my example program, I follow the example on page 7-8 of the VMS DECWindows Guide to Xlib Programming, VAX Binding. The example for the array comes from page 7-4, same book. This example seems to assume that the DATA parameter should be as described in your message, NOT as described in the Xlib Routines Ref., i.e. the correction for the Xlib Routines Ref. now is in agreement with the Guide to Xlib Programming. The basic chunks from my program are shown below: BYTE OUTMAP(262144) DATA OUTMAP/262144*'F0'X/ . . CALL X$CREATE_IMAGE(DPY,VISUAL,DEPTH,X$C_Z_PIXMAP, 1 0,OUTMAP,PIX_WIDTH,PIX_HEIGHT,BITMAP_PAD, 1 BYTES_PER_LINE,IMAGE) CALL X$PUT_IMAGE(DPY,WINDOW,GC,IMAGE,SRC_X,SRC_Y, 1 DST_X,DST_Y,PIX_WIDTH,PIX_HEIGHT) The result I expect is this: that the PUT_IMAGE should cause a 512x512 portion of my window (which is 600x600) to be assigned whatever color happens to correspond with the data value in the OUTMAP array. Changing the data value should cause the color of the image to change. The result I get is this: the 600x600 window is always assigned the default window background pixel value, and the 512x512 portion I would expect to see change due to the PUT_IMAGE never changes, regardless of the data value in array OUTMAP. I need to know if: A: I'm doing something wrong? I can't see what else to do from the examples in the documentation. B: The routine doesn't work? Based upon the info I have, I should at least see a 512x512 portion of the window change when the PUT_IMAGE is applied. Please see if we can get some help on this. I must say that a week and a half just to get to here is not my idea of quick problem response. I know there is not a lot you can do directly, but can you turn up the heat on your problem resolution resources? Thanks again for all your efforts... HERE IS THE EXAMPLE FORTRAN PROGRAM TO PUT A RASTER IMAGE UP IN A DECWINDOWS WINDOW. PROBLEM IS HOW TO PASS THE ARRAY ADDRESS TO THE X$CREATE_IMAGE CALL. PROGRAM EXAMPLE INCLUDE 'SYS$LIBRARY:DECW$XLIBDEF' INTEGER*4 DPY ! DISPLAY ID INTEGER*4 SCREEN ! SCREEN ID INTEGER*4 WINDOW ! WINDOW ID INTEGER*4 ATTR_MASK ! ATTRIBUTES MASK INTEGER*4 GC ! GC ID INTEGER*4 FONT ! FONT ID INTEGER*4 DEFINE_COLOR ! COLOR FUNCTION INTEGER*4 WINDOW_X, WINDOW_Y ! WINDOW ORIGIN INTEGER*4 DEPTH ! NUMBER OF PLANES INTEGER*4 STATUS, FUNC ! SYNCHRONOUS BEHAVIOR INTEGER*4 STATE ! FLAG FOR TEXT INTEGER*4 EXPOSE_FLAG RECORD /X$VISUAL/ VISUAL ! VISUAL TYPE RECORD /X$SET_WIN_ATTRIBUTES/ XSWDA ! WINDOW ATTRIBUTES RECORD /X$GC_VALUES/ XGCVL ! GC VALUES RECORD /X$SIZE_HINTS/ XSZHN ! HINTS RECORD /X$EVENT/ EVENT ! INPUT EVENT RECORD /X$IMAGE/ IMAGE CHARACTER*33 WINDOW_NAME DATA WINDOW_NAME /'Xlib Raster Graphics Test Program'/ CHARACTER*60 FONT_NAME DATA FONT_NAME 1 /'-ADOBE-NEW CENTURY SCHOOLBOOK-MEDIUM-R-NORMAL--*-140-*-*-P-*'/ PARAMETER WINDOW_W = 600, WINDOW_H = 600, 1 PIX_WIDTH = 512, PIX_HEIGHT = 512, 1 BITMAP_PAD = 8, BYTES_PER_LINE=0, 1 SRC_X = 0, SRC_Y = 0, DST_X = 50, DST_Y = 50 BYTE OUTMAP(262144) DATA OUTMAP/262144*250/ C C INITIALIZE DISPLAY ID AND SCREEN ID C DPY = X$OPEN_DISPLAY() IF (DPY .EQ. 0) THEN WRITE(6,*) 'DISPLAY NOT OPENED!' CALL SYS$EXIT(%VAL(1)) ENDIF SCREEN = X$DEFAULT_SCREEN_OF_DISPLAY(DPY) STATUS = X$SYNCHRONIZE(DPY,1,FUNC) C C CREATE THE WINDOW WINDOW C WINDOW_X = (X$WIDTH_OF_SCREEN(DPY) - WINDOW_W) / 2 WINDOW_Y = (X$HEIGHT_OF_SCREEN(DPY) - WINDOW_H) / 2 DEPTH = X$DEFAULT_DEPTH_OF_SCREEN(SCREEN) CALL X$DEFAULT_VISUAL_OF_SCREEN(SCREEN,VISUAL) ATTR_MASK = X$M_CW_EVENT_MASK .OR. X$M_CW_BACK_PIXEL XSWDA.X$L_SWDA_EVENT_MASK = X$M_EXPOSURE .OR. X$M_BUTTON_PRESS XSWDA.X$L_SWDA_BACKGROUND_PIXEL = 1 DEFINE_COLOR(DPY,SCREEN,VISUAL,1) WINDOW = X$CREATE_WINDOW(DPY, 1 X$ROOT_WINDOW_OF_SCREEN(SCREEN), 1 WINDOW_X, WINDOW_Y, WINDOW_W, WINDOW_H, 0, 1 DEPTH, X$C_INPUT_OUTPUT, VISUAL, ATTR_MASK, XSWDA) C C CREATE GRAPHICS CONTEXT C XGCVL.X$L_GCVL_FOREGROUND = 1 DEFINE_COLOR(DPY,SCREEN,VISUAL,2) XGCVL.X$L_GCVL_BACKGROUND = 1 DEFINE_COLOR(DPY,SCREEN,VISUAL,3) GC = X$CREATE_GC(DPY, WINDOW, 1 (X$M_GC_FOREGROUND .OR. X$M_GC_BACKGROUND), XGCVL) C C CREATE IMAGE C CALL X$CREATE_IMAGE(DPY,VISUAL,DEPTH,X$C_Z_PIXMAP, 1 0,OUTMAP,PIX_WIDTH,PIX_HEIGHT,BITMAP_PAD, 1 BYTES_PER_LINE,IMAGE) CALL X$PUT_IMAGE(DPY,WINDOW,GC,IMAGE,SRC_X,SRC_Y, 1 DST_X,DST_Y,PIX_WIDTH,PIX_HEIGHT) C C LOAD THE FONT FOR TEXT WRITING C FONT = X$LOAD_FONT(DPY, FONT_NAME) CALL X$SET_FONT(DPY, GC, FONT) C C DEFINE THE SIZE AND NAME OF WINDOW WINDOW C XSZHN.X$L_SZHN_X = 362 XSZHN.X$L_SZHN_Y = 282 XSZHN.X$L_SZHN_WIDTH = 600 XSZHN.X$L_SZHN_HEIGHT = 600 XSZHN.X$L_SZHN_FLAGS = X$M_P_POSITION .OR. X$M_P_SIZE CALL X$SET_NORMAL_HINTS(DPY, WINDOW, XSZHN) CALL X$STORE_NAME(DPY, WINDOW, WINDOW_NAME) C C MAP THE WINDOWS C CALL X$MAP_WINDOW(DPY, WINDOW) C C HANDLE EVENTS C DO WHILE (.TRUE.) CALL X$NEXT_EVENT(DPY, EVENT) C C IF THIS IS AND EXPOSE EVENT ON OUR CHILD WINDOW, C THEN WRITE THE TEXT. C IF (EVENT.EVNT_TYPE .EQ. X$C_EXPOSE) THEN CALL X$DRAW_IMAGE_STRING(DPY,WINDOW,GC, 1 150,75,'To exit, click MB2') IF (EXPOSE_FLAG.EQ.0)THEN EXPOSE_FLAG = 1 ELSE CALL X$DRAW_IMAGE_STRING(DPY,WINDOW,GC, 1 150,75,'To exit, click MB2') ENDIF ENDIF IF (EVENT.EVNT_TYPE.EQ.X$C_BUTTON_PRESS .AND. 1 EVENT.EVNT_BUTTON.X$L_BTEV_BUTTON.EQ.X$C_BUTTON1) THEN CALL X$DRAW_IMAGE_STRING(DPY,WINDOW,GC, 1 150,75,'To exit, click MB2') ENDIF IF (EVENT.EVNT_TYPE.EQ.X$C_BUTTON_PRESS .AND. 1 EVENT.EVNT_BUTTON.X$L_BTEV_BUTTON.EQ.X$C_BUTTON2) THEN CALL X$UNMAP_WINDOW(DPY, WINDOW) CALL X$DESTROY_WINDOW(DPY, WINDOW) CALL X$CLOSE_DISPLAY(DPY) CALL SYS$EXIT(%VAL(1)) ENDIF ENDDO END C C C CREATE COLOR C INTEGER*4 FUNCTION DEFINE_COLOR(DISP, SCRN, VISU, N) INCLUDE 'SYS$LIBRARY:DECW$XLIBDEF' INTEGER*4 DISP, SCRN, N RECORD /X$VISUAL/ VISU RECORD /X$COLOR/ SCREEN_COLOR INTEGER*4 STR_SIZE, STATUS, COLOR_MAP CHARACTER*15 COLOR_NAME(3) DATA COLOR_NAME/'DARK SLATE BLUE','LIGHT GREY ', 1 'FIREBRICK '/ IF (VISU.X$L_VISU_CLASS .EQ. X$C_PSEUDO_COLOR .OR. 1 VISU.X$L_VISU_CLASS .EQ. X$C_DIRECT_COLOR) THEN COLOR_MAP = X$DEFAULT_COLORMAP_OF_SCREEN(SCRN) STATUS = STR$TRIM(COLOR_NAME(N), 1 COLOR_NAME(N), STR_SIZE) STATUS = X$ALLOC_NAMED_COLOR(DISP, COLOR_MAP, 1 COLOR_NAME(N)(1:STR_SIZE), SCREEN_COLOR) IF (STATUS .NE. 0) THEN DEFINE_COLOR = SCREEN_COLOR.X$L_COLR_PIXEL ELSE WRITE (6,*) 'COLOR NOT ALLOCATED' CALL LIB$SIGNAL(%VAL(STATUS)) DEFINE_COLOR = 0 ENDIF ELSE IF (N .EQ. 1 .OR. N .EQ. 3) 1 DEFINE_COLOR = X$BLACK_PIXEL_OF_SCREEN(DISP) IF (N .EQ. 2) 1 DEFINE_COLOR = X$WHITE_PIXEL_OF_SCREEN(DISP) ENDIF RETURN END
T.R | Title | User | Personal Name | Date | Lines |
---|---|---|---|---|---|
721.1 | PSW::WINALSKI | Paul S. Winalski | Wed May 03 1989 16:50 | 5 | |
What's in color index 250 of the default color map? I didn't see this being set anywhere. --PSW | |||||
721.2 | An example | HGOVC::KENBERKUN | People that melt | Thu May 04 1989 01:39 | 181 |
I have trouble with your FORTRANisms, but here is some color creation code that I use that works. It is basically taken from Burns Fisher's code, from the color wheel program. You'll find my complete program (with lot's of create and put images) in note 126 in elktra::dw_examples notesfile. Sorry for the C code, you'll probably have as much trouble with that as I do with FORTRAN! /* **++ ** FUNCTIONAL DESCRIPTION: ** ** ** SetUpColorMap creates the colormap ** ** **-- */ static void SetUpColorMap () { /* Set up the colormap */ vInfoDummy.visualid = (DefaultVisual(XtDisplay(toplevel),0))->visualid; pVisualInfo = XGetVisualInfo(XtDisplay(toplevel), VisualIDMask,&vInfoDummy,&nVis); pixel = WhitePixel(XtDisplay(toplevel), DefaultScreen(XtDisplay(toplevel))); updateColor = 0; if (pVisualInfo->class != PseudoColor && pVisualInfo->class != DirectColor && pVisualInfo->class != GrayScale) { error("Unable to use this visual class"); exit(0); } if (colorCount > pVisualInfo->colormap_size) colorCount = pVisualInfo->colormap_size-2; map = XDefaultColormap(XtDisplay(toplevel), DefaultScreen(XtDisplay(toplevel))); XSetWindowColormap(XtDisplay(toplevel),XtWindow(toplevel),map); /* Set up a graphics context: */ colors = (XColor *)XtMalloc(sizeof(*colors)*colorCount); } /* **++ ** FUNCTIONAL DESCRIPTION: ** ** ** And then load some colors into the color map ** ** **-- */ static void LoadColorMap(count) int *count; { unsigned int i,j,fullcount; double h,r,g,b; int rx,gx,bx; int dummy; while (!XAllocColorCells(XtDisplay(toplevel), map,0,&dummy,0,pixels,*count) && *count >= 1) { (*count)--; } if (*count < 1) { error("Could not allocate enough colors"); exit(0); } /* This loop find out if we are using WhitePixel and BlackPixel */ fullcount = *count; for (j=0,i=0; i < fullcount; i++) { if (pixels[i]==BlackPixel(XtDisplay(toplevel), DefaultScreen(XtDisplay(toplevel))) || pixels[i]==WhitePixel(XtDisplay(toplevel), DefaultScreen(XtDisplay(toplevel)))) { if (XAllocColorCells(XtDisplay(toplevel), map,0,&dummy,0,&pixels[i],1)) i--; /*Got a replacement value; try it again*/ else (*count)--; /*No replacement; forget this one*/ } else { colors[j++].pixel = pixels[i]; } } if (*count < 1) { error("Could not allocate enough colors"); exit(0); } /*This loop fills in the colors*/ for (i=0; i<*count ; i++) { colors[i].flags=7; colors[i].red = 0; colors[i].green = 0; colors[i].blue = 0; } XStoreColors(XtDisplay(toplevel),map,colors,*count); UpdateColorMap(count); } /* **++ ** FUNCTIONAL DESCRIPTION: ** ** ** UpdateColorMap - actually sticks new values into color map ** ** ** **-- */ static void UpdateColorMap(count) int *count; { int i; for (i=0; i<*count ; i++) { if (effect) { colors[i].flags=doprimary; colors[i].red = ((i*256)/(*count)) * 256 * red_mult; colors[i].green = ((i*256)/(*count))* 256 * green_mult; colors[i].blue = ((i*256)/(*count))*256 * blue_mult; } else { colors[i].flags=doprimary; colors[i].red = ((i*256)/(*count)) * 256 << red_mult; colors[i].green = ((i*256)/(*count))* 256 << green_mult; colors[i].blue = ((i*256)/(*count))*256 << blue_mult; } } XStoreColors(XtDisplay(toplevel),map,colors,*count); } | |||||
721.3 | X$CREATE_IMAGE example from Guide to Xlib Programming | STAR::PARKER | Fri May 05 1989 15:05 | 216 | |
Here's the entire X$CREATE_IMAGE example from Guide to Xlib Programming. Note the use of X$SET_FOREGROUND to reset the foreground after the call to X$FILL_POLYGON. Hope this helps. **************** INCLUDE 'SYS$LIBRARY:DECW$XLIBDEF' INTEGER*4 DPY ! DISPLAY ID INTEGER*4 SCREEN ! SCREEN ID INTEGER*4 WINDOW ! WINDOW ID INTEGER*4 ATTR_MASK ! ATTRIBUTES MASK INTEGER*4 GC ! GC ID INTEGER*4 FONT ! FONT ID INTEGER*4 DEFINE_COLOR ! COLOR FUNCTION INTEGER*4 WINDOW_X, WINDOW_Y ! WINDOW ORIGIN INTEGER*4 PIXMAP ! PIXMAP ID INTEGER*4 DEPTH ! NUMBER OF PLANES INTEGER*4 STATUS, FUNC ! SYNCHRONOUS BEHAVIOR INTEGER*4 STATE ! FLAG FOR TEXT INTEGER*4 EXPOSE_FLAG RECORD /X$VISUAL/ VISUAL ! VISUAL TYPE RECORD /X$SET_WIN_ATTRIBUTES/ XSWDA ! WINDOW ATTRIBUTES RECORD /X$GC_VALUES/ XGCVL ! GC VALUES RECORD /X$SIZE_HINTS/ XSZHN ! HINTS RECORD /X$EVENT/ EVENT ! INPUT EVENT RECORD /X$IMAGE/ IMAGE CHARACTER*33 WINDOW_NAME DATA WINDOW_NAME /'Xlib Raster Graphics Test Program'/ CHARACTER*60 FONT_NAME DATA FONT_NAME 1 /'-ADOBE-NEW CENTURY SCHOOLBOOK-MEDIUM-R-NORMAL--*-140-*-*-P-*'/ PARAMETER WINDOW_W = 600, WINDOW_H = 600, 1 PIX_WIDTH = 512, PIX_HEIGHT = 512, 1 BITMAP_PAD = 8, BYTES_PER_LINE=0, 1 SRC_X = 0, SRC_Y = 0, DST_X = 50, DST_Y = 50 BYTE OUTMAP(262144) DATA OUTMAP/262144*250/ C C INITIALIZE DISPLAY ID AND SCREEN ID C DPY = X$OPEN_DISPLAY() IF (DPY .EQ. 0) THEN WRITE(6,*) 'DISPLAY NOT OPENED!' CALL SYS$EXIT(%VAL(1)) ENDIF SCREEN = X$DEFAULT_SCREEN_OF_DISPLAY(DPY) STATUS = X$SYNCHRONIZE(DPY,1,FUNC) C C CREATE THE WINDOW WINDOW C WINDOW_X = (X$WIDTH_OF_SCREEN(DPY) - WINDOW_W) / 2 WINDOW_Y = (X$HEIGHT_OF_SCREEN(DPY) - WINDOW_H) / 2 DEPTH = X$DEFAULT_DEPTH_OF_SCREEN(SCREEN) CALL X$DEFAULT_VISUAL_OF_SCREEN(SCREEN,VISUAL) ATTR_MASK = X$M_CW_EVENT_MASK .OR. X$M_CW_BACK_PIXEL XSWDA.X$L_SWDA_EVENT_MASK = X$M_EXPOSURE .OR. X$M_BUTTON_PRESS XSWDA.X$L_SWDA_BACKGROUND_PIXEL = 1 DEFINE_COLOR(DPY,SCREEN,VISUAL,1) WINDOW = X$CREATE_WINDOW(DPY, 1 X$ROOT_WINDOW_OF_SCREEN(SCREEN), 1 WINDOW_X, WINDOW_Y, WINDOW_W, WINDOW_H, 0, 1 DEPTH, X$C_INPUT_OUTPUT, VISUAL, ATTR_MASK, XSWDA) C C CREATE GRAPHICS CONTEXT C XGCVL.X$L_GCVL_FOREGROUND = 1 DEFINE_COLOR(DPY,SCREEN,VISUAL,2) XGCVL.X$L_GCVL_BACKGROUND = 1 DEFINE_COLOR(DPY,SCREEN,VISUAL,3) GC = X$CREATE_GC(DPY, WINDOW, 1 (X$M_GC_FOREGROUND .OR. X$M_GC_BACKGROUND), XGCVL) C C CREATE IMAGE C CALL X$CREATE_IMAGE(DPY,VISUAL,DEPTH,X$C_Z_PIXMAP, 1 0,OUTMAP,PIX_WIDTH,PIX_HEIGHT,BITMAP_PAD, 1 BYTES_PER_LINE,IMAGE) CALL X$PUT_IMAGE(DPY,WINDOW,GC,IMAGE,SRC_X,SRC_Y, 1 DST_X,DST_Y,PIX_WIDTH,PIX_HEIGHT) C C LOAD THE FONT FOR TEXT WRITING C FONT = X$LOAD_FONT(DPY, FONT_NAME) CALL X$SET_FONT(DPY, GC, FONT) C C Create the pixmap C PIXMAP = X$CREATE_PIXMAP(DPY, WINDOW, WINDOW_W, WINDOW_H, DEPTH) CALL X$FILL_RECTANGLE(DPY, PIXMAP, GC, 0, 0, WINDOW_W, WINDOW_H) CALL X$SET_FOREGROUND(DPY, GC, DEFINE_COLOR(DPY, SCREEN, 1 VISUAL, 3)) CALL X$FILL_POLYGON(DPY, PIXMAP, GC, PT_ARR, 6, X$C_COMPLEX, 1 X$C_COORD_MODE_ORIGIN) CALL X$SET_FOREGROUND(DPY, GC, DEFINE_COLOR(DPY, SCREEN, 1 VISUAL, 2)) C C Define the size and name of the WINDOW window C XSZHN.X$L_SZHN_X = 212 XSZHN.X$L_SZHN_Y = 132 XSZHN.X$L_SZHN_WIDTH = 600 XSZHN.X$L_SZHN_HEIGHT = 600 XSZHN.X$L_SZHN_FLAGS = X$M_P_POSITION .OR. X$M_P_SIZE CALL X$SET_NORMAL_HINTS(DPY, WINDOW, XSZHN) CALL X$STORE_NAME(DPY, WINDOW, 1 'Creating a Pixmap for Backing Store') C C Map the window C CALL X$MAP_WINDOW(DPY, WINDOW) C C Handle events C DO WHILE (.TRUE.) CALL X$NEXT_EVENT(DPY, EVENT) IF (EVENT.EVNT_TYPE .EQ. X$C_EXPOSE) THEN CALL X$DRAW_IMAGE_STRING(DPY, WINDOW, GC, 1 150, 25, 'To create a filled polygon, press MB1') CALL X$DRAW_IMAGE_STRING(DPY, WINDOW, GC, 1 150, 50, 'To exit, press MB2') IF (EXPOSE_FLAG .EQ. 0) THEN EXPOSE_FLAG = 1 ELSE CALL X$COPY_AREA(DPY, PIXMAP, WINDOW, GC, 0, 0, 1 WINDOW_W, WINDOW_H, 0, 0) CALL X$DRAW_IMAGE_STRING(DPY, WINDOW, GC, 1 150, 50, 'To exit, press MB2') END IF END IF IF (EVENT.EVNT_TYPE .EQ. X$C_BUTTON_PRESS .AND. 1 EVENT.EVNT_BUTTON.X$L_BTEV_BUTTON .EQ. X$C_BUTTON1) THEN CALL X$COPY_AREA(DPY, PIXMAP, WINDOW, GC, 0, 0, 1 WINDOW_W, WINDOW_H, 0, 0) CALL X$DRAW_IMAGE_STRING(DPY, WINDOW, GC, 1 150, 50, 'To exit, press MB2') ENDIF IF (EVENT.EVNT_TYPE .EQ. X$C_BUTTON_PRESS .AND. 1 EVENT.EVNT_BUTTON.X$L_BTEV_BUTTON .EQ. X$C_BUTTON2) THEN CALL X$FREE_PIXMAP(DPY, PIXMAP) CALL SYS$EXIT(%VAL(1)) END IF END DO END C C Create color C INTEGER*4 FUNCTION DEFINE_COLOR(DISP, SCRN, VISU, N) INCLUDE 'SYS$LIBRARY:DECW$XLIBDEF' INTEGER*4 DISP, SCRN, N RECORD /X$VISUAL/ VISU ! visual type RECORD /X$COLOR/ SCREEN_COLOR INTEGER*4 STR_SIZE, STATUS, COLOR_MAP CHARACTER*15 COLOR_NAME(3) DATA COLOR_NAME /'DARK SLATE BLUE','LIGHT GREY ','WHITE '/ IF (VISU.X$L_VISU_CLASS .EQ. X$C_PSEUDO_COLOR .OR. 1 VISU.X$L_VISU_CLASS .EQ. X$C_DIRECT_COLOR) THEN COLOR_MAP = X$DEFAULT_COLORMAP_OF_SCREEN(SCRN) STATUS = STR$TRIM(COLOR_NAME(N), 1 COLOR_NAME(N), STR_SIZE) STATUS = X$ALLOC_NAMED_COLOR(DISP, COLOR_MAP, 1 COLOR_NAME(N)(1:STR_SIZE), SCREEN_COLOR) IF (STATUS .NE. 0) THEN DEFINE_COLOR = SCREEN_COLOR.X$L_COLR_PIXEL ELSE WRITE(6,*) 'Color not allocated!' CALL LIB$SIGNAL(%VAL(STATUS)) DEFINE_COLOR = 0 END IF ELSE IF (N .EQ. 1 .OR. N .EQ. 3) 1 DEFINE_COLOR = X$BLACK_PIXEL_OF_SCREEN(DISP) IF (N .EQ. 2 ) 1 DEFINE_COLOR = X$WHITE_PIXEL_OF_SCREEN(DISP) END IF RETURN END | |||||
721.4 | colormap manipulation: same problem | SALSA::HUFF | cs | Mon May 08 1989 22:11 | 46 |
Thanks Jim, for the complete and revised fortran example. I have tried manipulating colormaps with the following code inserted before the X$CREATE_IMAGE call: C C CREATE THE COLOR MAP C CMAP = X$CREATE_COLORMAP(DPY,WINDOW,VISUAL,X$C_ALLOC_ALL) C C STORE COLOR VALUES IN THE COLORMAP C COLOR.X$L_COLR_PIXEL = 250 COLOR.X$W_COLR_RED = 100 COLOR.X$W_COLR_GREEN = 200 COLOR.X$W_COLR_BLUE = 50 COLOR.X$B_COLR_FLAGS = X$M_DO_RED .OR. X$M_DO_GREEN 1 .OR. X$M_DO_BLUE CALL X$STORE_COLOR(DPY,CMAP,COLOR) The result of the above code is the following error message generated by execution of the CALL X$STORE_COLOR instruction. The program continues to put up the window as before, with no apparent mapping of the image to the window. I also tried: DSCREEN = X$DEFAULT_SCREEN(DPY) CMAP = X$DEFAULT_COLORMAP(DPY,DSCREEN) and CMAP = X$DEFAULT_COLORMAP_OF_SCREEN(SCREEN) in place of CMAP = X$CREATE_COLORMAP(DPY,WINDOW,VISUAL,X$C_ALLOC_ALL) with the same results. Any ideas? | |||||
721.5 | PSW::WINALSKI | Paul S. Winalski | Tue May 09 1989 15:53 | 7 | |
>The result of the above code is the following error message generated by >execution of the CALL X$STORE_COLOR instruction. The program continues to Er, you never did tell us what the error message was! --PSW | |||||
721.6 | Q.E.D. | 16631::HUFF | cs | Thu May 18 1989 18:57 | 6 |
It seems that the error message from the call to X$STORE_COLOR is no longer relevant. We've worked through the problems with the examples pointed to; thanks much. Ste |