PASSDIRKEYSQQ

QuickWin Function: Determines the behavior of direction and page keys in a QuickWin application.

Module: USE DFLIB

Syntax

result = PASSDIRKEYSQQ (val)

val
(Input) INTEGER(4) or LOGICAL(4).

A value of .TRUE. causes direction and page keys to be input as normal characters (the PassDirKeys flag is turned on). A value of .FALSE. causes direction and page keys to be used for scrolling.

The following constants, defined in DFLIB.F90 in the \DF98\INCLUDE subdirectory), can be used as integer arguments:

Results:

The return value indicates the previous setting of the PassDirKeys flag.

The return data type is the same as the data type of val; that is, either INTEGER(4) or LOGICAL(4).

When the PassDirKeys flag is turned on, the mouse must be used for scrolling since the direction and page keys are treated as normal input characters.

The PASSDIRKEYSQQ function is meant to be used primarily with the GETCHARQQ and INCHARQQ functions. Do not use normal input statements (such as READ) with the PassDirKeys flag turned on, unless your program is prepared to interpret direction and page keys.

Compatibility

STANDARD GRAPHICS QUICKWIN GRAPHICS LIB

See Also: GETCHARQQ, INCHARQQ

Examples

use dflib

logical*4 res
character*1 ch, ch1

Print *,"Type X to exit, S to scroll, D to pass Direction keys"

123 continue
ch = getcharqq( )
! check for escapes
! 0x00 0x?? is a function key
! 0xE0 0x?? is a direction key
if (ichar(ch) .eq. 0) then
  ch1 = getcharqq()
  print *,"function key follows escape = ",ichar(ch), "  ",ichar(ch1),"  ",ch1
  goto 123
else if (ichar(ch) .eq. 224) then
  ch1 = getcharqq()
  print *,"direction key follows escape = ",ichar(ch),"  ",ichar(ch1),"  ",ch1
  goto 123
else
  print *,ichar(ch),"  ",ch

  if(ch .eq. 'S') then
   res = passdirkeysqq(.false.)
   print *, "Entering Scroll mode ",res
  endif

  if(ch .eq. 'D')  then
   res = passdirkeysqq(.true.)
   print *, "Entering Direction keys mode ",res
  endif

  if(ch .ne. 'X')  go to 123

endif
end

The following example uses an integer constant as an argument to PASSDIRKEYSQQ:

c=======================================================================
c
c dirkeys4.for
c
c The following sample requires a compiler greater that CVF6.1.
c
c=======================================================================
c
c       Compile/Load Input Line for Standard Graphics Full Screen Window
c
c       f90 /libs:qwins dirkeys4.for
c
c       Compile/Load Input Line for QuickWin Graphics
c
c       f90 /libs:qwin dirkeys4.f90
c
c  Program to illustrate how to get almost every character
c  from the keyboard in QuickWin or Standard Graphics mode.
c  Comment out the deletemenu line for Standard Graphics mode.
c
c  If you are doing a standard graphics application,
c  control C will come in as a #03 without further
c  effort.
c
c  In a QuickWin application,  The File menu Exit item must
c  be deleted, and PassDirKeysQQ called with PASS_DIR_CNTRLC
c  to get control C.
c
c=======================================================================
      use dflib

      integer(4) status

      character*1 key1,key2,ch1

      write(*,*) 'Initializing'

c-----don't do this for a Standard Grapics application
c     remove File menu Exit item.
      status = deletemenuqq(1,3) ! stop QuickWin from getting control C

c-------set up to pass all keys to window including control c.
      status  = passdirkeysqq(PASS_DIR_CNTRLC)
c===============================================================
c
c     read and print characters
c
c===============================================================

   10 key1 = getcharqq()

c-------first check for control+c
	if(ichar(key1) .eq. 3) then
	  write(*,*) 'Control C Received'
	  write(*,*) "Really want to quit?"
	  write(*,*) "Type Y <cr> to exit, or any other char <cr> to continue."
	  read(*,*) ch1
	  if(ch1.eq."y" .or. ch1.eq."Y") goto 30
	  goto 10
      endif

      if(ichar(key1).eq.0) then ! function key?
      key2 = getcharqq()
      write(*,15) ichar(key1),ichar(key2),key2
   15 format(1x,2i12,1x,a1,' function key')
      else
      if(ichar(key1).eq.224) then ! direction key?
      key2 = getcharqq()
      write(*,16) ichar(key1),ichar(key2),key2
   16 format(1x,2i12,1x,a1,' direction key')
      else
      write(*,20) key1,ichar(key1)  ! normal key
   20 format(1x,a1,i11)
      endif
      endif
      go to 10
   30 stop
      end