[Search for users]
[Overall Top Noters]
[List of all Conferences]
[Download this site]
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 |
848.0. "help DS3100,F77,Xlib error" by LARVAE::BULLARD () Fri May 26 1989 15:15
c
c Can anyone take a quick look at this program and see if they
c spot what is wrong with the program.The program has been
c borrowed from VMS modified so that it compiles and runs
c on a DS3100 using the the F77 compiler.It compiles and links
c okay but there is a segmentation error on the XNextEvent call.
c I cannot see what the problem is .Also I have commented out
c the call to XDrawLines because of the same problem.
c
c The program requires two lines of input.You can enter almost
c anything but I have been using :-
c
c 500,500 'return' followed by
c 10,10 'return'.
c
c Please excuse my rather crude debugging steps.The Makefile follows:
c
c DESTDIR=
c EXAMPLEDIR=/usr/users/bullard
c
c
c INCLUDES = -I. -I${DESTDIR}/usr/include/X11 -I${DESTDIR}/usr/include
c XLIB = ${DESTDIR}/usr/lib/libX11.a
c XLIBF77 = ${DESTDIR}/usr/lib/libX11F77.a
c DWTLIB = ${DESTDIR}/usr/lib/libdwt.a
c f77 = f77
c CFLAGS = -O ${INCLUDES}
c
c OBJS = window.o
c
c .f.o :
c ${f77} -c ${CFLAGS} $*.f
c
c
c window: ${OBJS}
c ${f77} ${CFLAGS} -o window ${OBJS} ${DWTLIB} ${XLIBF77} ${XLIB} -lm
c
c install: all
c
c Here is the code:
c
C Program to demonstrate drag using Xlib
INCLUDE '/usr/include/X11/xlibF77.h'
CHARACTER*10 DISPLAY ! display id
INTEGER*4 DPY
INTEGER*4 WINDOW_ID ! window id
INTEGER*4 SCREEN
INTEGER*4 PIXMAP_ID ! pixmap id
INTEGER*4 BITMAP_ID ! bitmap id
INTEGER*4 GC_MASK ! gc mask
INTEGER*4 EVENT_MASK ! event mask
INTEGER*4 GC ! gc id
INTEGER*4 GC_CLEAR_PIXMAP
INTEGER*4 GC_PIXMAP
INTEGER*4 GC_BITMAP
INTEGER*4 EVENT_INT
INTEGER*4 WINDOW_X, WINDOW_Y
INTEGER*4 CSIZE / 5 /
INTEGER*4 XOpenDisplay
INTEGER*4 XDefaultScreenOfDisplay
INTEGER*4 XDefaultDepthOfScreen
INTEGER*4 XWidthOfScreen
INTEGER*4 XHeightOfScreen
INTEGER*4 XBlackPixelOfScreen
INTEGER*4 XWhitePixelOfScreen
INTEGER*4 XRootWindowOfScreen
INTEGER*4 XCheckMaskEvent
INTEGER*4 XCreateSimpleWindow
INTEGER*4 XCreatePixmap
INTEGER*4 XCreateGC
INTEGER*4 I
INTEGER*4 X /-1/, Y /-1/
LOGICAL*4 EVENT_RETURN
RECORD /XGCValues/ XGCVL
RECORD /XEvent/ EVENT
PARAMETER NPOINTS = 5
RECORD /XPoint/ POINTS(NPOINTS)
RECORD /XSegment/ SEGMENTS(6)
INTEGER*4 WINDOW_W, WINDOW_H
PARAMETER SIZE = 40
PARAMETER STEPS = 100
PARAMETER XDELTA = 11, YDELTA = 11
INTEGER*4 WIDTH, HEIGHT
INTEGER*4 DEPTH /8/
INTEGER*4 FOREGROUND, BACKGROUND
PRINT *,'ENTER X AND Y DIMENSIONS OF WINDOW (PIXELS)'
READ (*,*) WINDOW_W, WINDOW_H
PRINT *,'ENTER X AND Y DIMENSIONS OF RECTANGLE TO DRAG (PIXELS)'
READ (*,*) WIDTH, HEIGHT
C Initialize display id and screen id
PRINT *,'DISPLAY ID',DPY
DISPLAY = ":0.0"
DPY =XOpenDisplay(DISPLAY)
IF (DPY .EQ. 0) THEN
WRITE (6,'('' ERROR: display not open'')')
STOP
ENDIF
PRINT *,'DISPLAY ID',DPY
PRINT *,'STEP 1'
PRINT *,'SCREEN',SCREEN
SCREEN = XDefaultScreenOfDisplay(DPY)
PRINT *,'SCREEN',SCREEN
DEPTH = XDefaultDepthOfScreen(SCREEN)
PRINT *, 'DEPTH = ', DEPTH
C Create window in centre of screen
WINDOW_X = (XWidthOfScreen(SCREEN) - WINDOW_W) / 2
WINDOW_Y = (XHeightOfScreen(SCREEN) - WINDOW_H) / 2
PRINT *, 'WINDOW X POS', WINDOW_X
PRINT *, 'WINDOW Y POS', WINDOW_Y
PRINT *, 'DEPTH = ', DEPTH
PRINT *, 'WINDOW ID ',WINDOW_ID
WINDOW_ID = XCreateSimpleWindow(DPY,
+ XRootWindowOfScreen(SCREEN),
+ WINDOW_X, WINDOW_Y, WINDOW_W, WINDOW_H, 0,
+ XBlackPixelOfScreen(SCREEN),
+ XWhitePixelOfScreen(SCREEN))
PRINT *, 'WINDOW ID ',WINDOW_ID
EVENT_MASK = ExposureMask + ButtonPressMask + PointerMotionMasK
CALL XSelectInput(DPY, WINDOW_ID,EVENT_MASK)
PRINT *,'XBlackPixelOfScreen(SCREEN) = ',
+ XBlackPixelOfScreen(SCREEN)
PRINT *,'WhitePixelOfScreen(SCREEN) = ',
+ XWhitePixelOfScreen(SCREEN)
FOREGROUND = XWhitePixelOfScreen(SCREEN)
BACKGROUND = 0
PRINT *, 'FOREGROUND = ', FOREGROUND,
+ ' BACKGROUND = ',BACKGROUND
PRINT *, 'STEP 3'
READ (*,*)
CALL XSetWindowBackground(DPY, WINDOW_ID, BACKGROUND)
PRINT *, 'STEP 4'
READ (*,*)
C Define the name of the window
CALL XStoreName(DPY, WINDOW_ID, 'Xlib Program to test drag')
PRINT *, 'STEP 5'
READ (*,*)
C Map the windows
CALL XMapWindow(DPY, WINDOW_ID)
PRINT *, 'STEP 6'
READ (*,*)
C Create Pixmap
PIXMAP_ID = XCreatePixmap(DPY, WINDOW_ID, WIDTH, HEIGHT, DEPTH)
PRINT *, 'WIDTH ',WIDTH
PRINT *, 'HEIGHT',HEIGHT
READ (*,*)
C Create Bitmap
BITMAP_ID = XCreatePixmap(DPY, WINDOW_ID, WIDTH, HEIGHT, 1)
PRINT *, 'STEP 8'
READ (*,*)
C Clear Pixmap
GC_MASK = GCFunction + GCForeground
+ + GCBackground
XGCVL.function = GXcopy
XGCVL.foreground = BACKGROUND
XGCVL.background = BACKGROUND
PRINT *, 'STEP 9'
READ (*,*)
GC_CLEAR_PIXMAP = XCreateGC(DPY, PIXMAP_ID, GC_MASK, XGCVL)
PRINT *, 'STEP 10'
CALL XFillRectangle(DPY, PIXMAP_ID, GC_CLEAR_PIXMAP,
+ 0, 0, WIDTH, HEIGHT)
C Create Graphic Contexts
GC_MASK = GCFunction + GCForeground
+ + GCBackground
XGCVL.function = GXxor
XGCVL.foreground = GCForeground
XGCVL.background = GCBackground
PRINT *, 'STEP 11'
GC = XCreateGC(DPY, WINDOW_ID, GC_MASK, XGCVL)
GC_PIXMAP = XCreateGC(DPY, PIXMAP_ID, GC_MASK, XGCVL)
XGCVL.foreground = 1
PRINT *, 'STEP 12'
GC_BITMAP = XCreateGC(DPY, PIXMAP_ID, GC_MASK, XGCVL)
C Define rectangle array
POINTS(1).x = 0
POINTS(1).y = 0
POINTS(2).x = SIZE
POINTS(2).y = 0
POINTS(3).x = 0
POINTS(3).y = -SIZE
POINTS(4).x = -SIZE
POINTS(4).y = 0
POINTS(5).x = 0
POINTS(5).y = SIZE
C Create pixmap
DO I = 1, STEPS
POINTS(1).x = (I - 1) * XDELTA + 1
POINTS(1).y = HEIGHT - (I - 1) * YDELTA - 1
PRINT *, 'STEP 13'
c CALL XDrawLines(DPY, PIXMAP_ID, GC_PIXMAP, POINTS, NPOINTS,
c + CoordModePrevious)
END DO
C Handle events
DO WHILE (.TRUE.)
PRINT *, 'STEP 14'
READ (*,*)
PRINT *, 'DISPLAY ',DPY
CALL XNextEvent(DPY, EVENT)
READ (*,*)
IF (EVENT.type .EQ. MotionNotify) THEN
C UNDRAW PIXMAP AND CURSOR
IF (X .GE. 0) THEN
PRINT *, 'STEP 15'
CALL XCopyArea(DPY, PIXMAP_ID, WINDOW_ID, GC, 0, 0,
+ WIDTH, HEIGHT, X, Y - HEIGHT)
PRINT *, 'STEP 16'
CALL XDrawSegments(DPY, WINDOW_ID, GC, SEGMENTS, 6)
ENDIF
C GET MOST RECENT X AND Y POINTER COORDINATES
PRINT *, 'STEP 17'
READ (*,*)
EVENT_INT= XCheckMaskEvent(DPY,EVENT_MASK,EVENT)
PRINT *, 'STEP 18'
READ (*,*)
EVENT_RETURN = EVENT_INT
DO WHILE (EVENT_RETURN)
PRINT *, 'STEP 19'
READ (*,*)
EVENT_INT= XCheckMaskEvent(DPY,EVENT_MASK,EVENT)
EVENT_RETURN = EVENT_INT
END DO
X = Event.XMotion.x
Y = Event.XMotion.y
C PRINT *,X,Y
C REDRAW PIXMAP
PRINT *, 'STEP 20'
READ (*,*)
CALL XCopyArea(DPY, PIXMAP_ID, WINDOW_ID, GC, 0, 0,
+ WIDTH, HEIGHT, X, Y - HEIGHT)
C REDRAW CURSOR
SEGMENTS(1).x1 = X
SEGMENTS(1).y1 = 0
SEGMENTS(1).x2 = X
SEGMENTS(1).y2 = Y - CSIZE
SEGMENTS(2).x1 = X
SEGMENTS(2).y1 = Y + CSIZE
SEGMENTS(2).x2 = X
SEGMENTS(2).y2 = WINDOW_H
SEGMENTS(3).x1 = 0
SEGMENTS(3).y1 = Y
SEGMENTS(3).x2 = X - CSIZE
SEGMENTS(3).y2 = Y
SEGMENTS(4).x1 = X + CSIZE
SEGMENTS(4).y1 = Y
SEGMENTS(4).y2 = Y
SEGMENTS(5).x1 = X - CSIZE
SEGMENTS(5).y1 = Y - CSIZE
SEGMENTS(5).x2 = X + CSIZE
SEGMENTS(5).y2 = Y + CSIZE
SEGMENTS(6).x1 = X - CSIZE
SEGMENTS(6).y1 = Y + CSIZE
SEGMENTS(6).x2 = X + CSIZE
SEGMENTS(6).y2 = Y - CSIZE
PRINT *, 'STEP 21'
READ(*,*)
CALL XDrawSegments(DPY, WINDOW_ID, GC, SEGMENTS, 6)
ENDIF
IF (EVENT.type .EQ.ButtonPress) THEN
C Unmap and destroy windows
CALL XUnmapWINDOW(DPY, WINDOW_ID)
CALL XDestroyWindow(DPY, WINDOW_ID)
CALL XCloseDisplay(DPY)
STOP
ENDIF
END DO
END
T.R | Title | User | Personal Name | Date | Lines
|
---|