| 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 15: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 00: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 14: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 21: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 14: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 17: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
| |||||