[Search for users] [Overall Top Noters] [List of all Conferences] [Download this site]

Conference bulova::decw_jan-89_to_nov-90

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

1227.0. "Difference between XNextEvent and XtNextEvent?" by EWBV37::HIME () Thu Aug 03 1989 08:17

   My customer would like to flashing the text on the window, so 
 he tries to use AST routine from SYS$SETIMR().

   But, the application that uses both SYS$SETIMR() and XNextEvent, does not
 work well. Timer AST routine is delivered but after that I can't catch
 the Window-Event. 
 The program is as following.  

        (following is part of 'sample1.for')

	DO WHILE (.TRUE.)
	   CALL X$NEXT_EVENT(DPY,EVENT)
	   IF (EVENT.EVNT_TYPE .EQ. X$C_EXPOSE) THEN
	      TYPE *,'EXPOSE EVENT'
	   ELSE IF (EVENT.EVNT_TYPE .EQ. X$C_BUTTON_PRESS) THEN
	      TYPE *,'MOUSE BUTTON CLICK EVENT'
	      STATE = 0
	      CALL SET_AST_TRIG		! This subroutine sets the timer AST
	   END IF
	END DO
	END

  However, the aplication that uses XtNextEvent() ,instead of XNextEvent(),
 works well.
 What is different XNextEvent and XtNextEvent?   
 Is there any restrictions on usage of XNextEvent?

        (following is part of 'sample2.for')

	DO WHILE (.TRUE.)
	   CALL XT$NEXT_EVENT(EVENT)
	   IF (EVENT.EVNT_TYPE .EQ. X$C_EXPOSE) THEN
	      TYPE *,'EXPOSE EVENT'
	   ELSE IF (EVENT.EVNT_TYPE .EQ. X$C_BUTTON_PRESS) THEN
	      TYPE *,'MOUSE BUTTON CLICK EVENT'
	      STATE = 0
	      CALL SET_AST_TRIG
	   END IF
	END DO
	END

-Toru.

!
!	SAMPLE PROGRAM TO REPRODUCE MY PROBLEM.	
!                                                   

	PROGRAM		SAMPLE1
C
	IMPLICIT	NONE         
	INCLUDE		'SYS$LIBRARY:DECW$XLIBDEF'
C
	INTEGER*4	DPY,WINDOW,GCON,GCOFF,STATE
	COMMON		/GLOBAL/ DPY,WINDOW,GCON,GCOFF,STATE
C
	INTEGER*4	SCREEN,DEPTH,ATTR_MASK,GC_MASK
	RECORD		/X$VISUAL/	VISUAL
	RECORD		/X$SET_WIN_ATTRIBUTES/	XSWDA
	RECORD		/X$GC_VALUES/		XGCVL
	RECORD		/X$SIZE_HINTS/		XSZHN
	RECORD		/X$EVENT/		EVENT
C
	DPY = X$OPEN_DISPLAY()
	IF (DPY .EQ. 0) THEN
	   TYPE *,'DISPLAY NOT OPENED !'
	   CALL SYS$EXIT(%VAL(1))
	END IF
C
	SCREEN = X$DEFAULT_SCREEN_OF_DISPLAY(DPY)
	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 = X$WHITE_PIXEL_OF_SCREEN(SCREEN)
	WINDOW = X$CREATE_WINDOW(DPY,X$ROOT_WINDOW_OF_SCREEN(SCREEN),
     *                           100,100,100,100,
     *                           0,DEPTH,X$C_INPUT_OUTPUT,VISUAL,
     *                           ATTR_MASK,XSWDA)
	XGCVL.X$L_GCVL_FOREGROUND = X$BLACK_PIXEL_OF_SCREEN(SCREEN)
	XGCVL.X$L_GCVL_BACKGROUND = X$WHITE_PIXEL_OF_SCREEN(SCREEN)
	GC_MASK = X$M_GC_FOREGROUND .OR. X$M_GC_BACKGROUND
	GCON = X$CREATE_GC(DPY,WINDOW,GC_MASK,XGCVL)
	XGCVL.X$L_GCVL_FOREGROUND = X$WHITE_PIXEL_OF_SCREEN(SCREEN)
	GCOFF = X$CREATE_GC(DPY,WINDOW,GC_MASK,XGCVL)
C
	CALL X$MAP_WINDOW(DPY,WINDOW)
C
	DO WHILE (.TRUE.)
	   TYPE *,'GET NEXT EVENT'
	   CALL X$NEXT_EVENT(DPY,EVENT)
	   IF (EVENT.EVNT_TYPE .EQ. X$C_EXPOSE) THEN
	      TYPE *,'EXPOSE EVENT'
	   ELSE IF (EVENT.EVNT_TYPE .EQ. X$C_BUTTON_PRESS) THEN
	      TYPE *,'MOUSE BUTTON CLICK EVENT'
	      STATE = 0
	      CALL SET_AST_TRIG
	   END IF
	END DO
	END

	SUBROUTINE	SET_AST_TRIG
	INTEGER*4	SYS$SETIMR
	INTEGER*4	TIME_DELAY(2)	/-2500000,-1/
	EXTERNAL	AST_FLSH
C
	CALL		SYS$SETIMR(%VAL(2),TIME_DELAY,AST_FLSH,)
	RETURN
	END

	SUBROUTINE	AST_FLSH
	IMPLICIT	NONE
	INCLUDE		'SYS$LIBRARY:DECW$XLIBDEF'
C
	INTEGER*4	DPY,WINDOW,GCON,GCOFF,STATE
	COMMON		/GLOBAL/ DPY,WINDOW,GCON,GCOFF,STATE
	INTEGER*4	STATUS

	CALL		SET_AST_TRIG
	IF (STATE .EQ. 0) THEN
	   CALL X$DRAW_IMAGE_STRING(DPY,WINDOW,GCON,10,10,'HELLO')
	ELSE
	   CALL X$DRAW_IMAGE_STRING(DPY,WINDOW,GCOFF,10,10,'HELLO')
	END IF
	STATE = STATE .XOR. 1
	CALL X$SYNC(DPY,STATUS)
	RETURN
	END

!
!	SAMPLE PROGRAM TO REPRODUCE MY PROBLEM.	
!                                                   
	PROGRAM		SAMPLE2
C
	IMPLICIT	NONE         
	INCLUDE		'SYS$LIBRARY:DECW$XLIBDEF'
	INCLUDE		'SYS$LIBRARY:DECW$DWTDEF'
C
	INTEGER*4	DPY,WINDOW,GCON,GCOFF,STATE
	COMMON		/GLOBAL/ DPY,WINDOW,GCON,GCOFF,STATE
C
	INTEGER*4	SCREEN,DEPTH,ATTR_MASK,GC_MASK
	INTEGER*4	TOPLEVEL,ARGC
	RECORD		/X$VISUAL/	VISUAL
	RECORD		/X$SET_WIN_ATTRIBUTES/	XSWDA
	RECORD		/X$GC_VALUES/		XGCVL
	RECORD		/X$SIZE_HINTS/		XSZHN
	RECORD		/X$EVENT/		EVENT
C
	CALL DWT$INITIALIZE_DRM
	ARGC = 0
	TOPLEVEL = XT$INITIALIZE (
     *                            ' ',
     *                            'EXAMPLE',
     *                            %VAL(0),
     *                            0,
     *                            ARGC,
     *                            %VAL(0))
	DPY = XT$DISPLAY(TOPLEVEL)
	IF (DPY .EQ. 0) THEN
	   TYPE *,'DISPLAY NOT OPENED !'
	   CALL SYS$EXIT(%VAL(1))
	END IF
C
	SCREEN = X$DEFAULT_SCREEN_OF_DISPLAY(DPY)
	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 = X$WHITE_PIXEL_OF_SCREEN(SCREEN)
	WINDOW = X$CREATE_WINDOW(DPY,X$ROOT_WINDOW_OF_SCREEN(SCREEN),
     *                           100,100,100,100,
     *                           0,DEPTH,X$C_INPUT_OUTPUT,VISUAL,
     *                           ATTR_MASK,XSWDA)
	XGCVL.X$L_GCVL_FOREGROUND = X$BLACK_PIXEL_OF_SCREEN(SCREEN)
	XGCVL.X$L_GCVL_BACKGROUND = X$WHITE_PIXEL_OF_SCREEN(SCREEN)
	GC_MASK = X$M_GC_FOREGROUND .OR. X$M_GC_BACKGROUND
	GCON = X$CREATE_GC(DPY,WINDOW,GC_MASK,XGCVL)
	XGCVL.X$L_GCVL_FOREGROUND = X$WHITE_PIXEL_OF_SCREEN(SCREEN)
	GCOFF = X$CREATE_GC(DPY,WINDOW,GC_MASK,XGCVL)
C
	CALL X$MAP_WINDOW(DPY,WINDOW)
C
	DO WHILE (.TRUE.)
	   TYPE *,'GET NEXT EVENT'
	   CALL XT$NEXT_EVENT(EVENT)
!	   CALL X$NEXT_EVENT(DPY,EVENT)
	   IF (EVENT.EVNT_TYPE .EQ. X$C_EXPOSE) THEN
	      TYPE *,'EXPOSE EVENT'
	   ELSE IF (EVENT.EVNT_TYPE .EQ. X$C_BUTTON_PRESS) THEN
	      TYPE *,'MOUSE BUTTON CLICK EVENT'
	      STATE = 0
	      CALL SET_AST_TRIG
	   END IF
	END DO
	END

	SUBROUTINE	SET_AST_TRIG
	INTEGER*4	SYS$SETIMR
	INTEGER*4	TIME_DELAY(2)	/-2500000,-1/
	EXTERNAL	AST_FLSH
C
	CALL		SYS$SETIMR(%VAL(2),TIME_DELAY,AST_FLSH,)
	RETURN
	END

	SUBROUTINE	AST_FLSH
	IMPLICIT	NONE
	INCLUDE		'SYS$LIBRARY:DECW$XLIBDEF'
C
	INTEGER*4	DPY,WINDOW,GCON,GCOFF,STATE
	COMMON		/GLOBAL/ DPY,WINDOW,GCON,GCOFF,STATE
	INTEGER*4	STATUS

	CALL		SET_AST_TRIG
	IF (STATE .EQ. 0) THEN
	   CALL X$DRAW_IMAGE_STRING(DPY,WINDOW,GCON,10,10,'HELLO')
	ELSE
	   CALL X$DRAW_IMAGE_STRING(DPY,WINDOW,GCOFF,10,10,'HELLO')
	END IF
	STATE = STATE .XOR. 1
	CALL X$SYNC(DPY,STATUS)
	RETURN
	END


T.RTitleUserPersonal
Name
DateLines