× The internal search function is temporarily non-functional. The current search engine is no longer viable and we are researching alternatives.
As a stop gap measure, we are using Google's custom search engine service.
If you know of an easy to use, open source, search engine ... please contact support@midrange.com.


  • Subject: Re: WAIT FOR KEYPRESSED WITH TIM
  • From: D.BALE@xxxxxxxxxxxxx
  • Date: Tue, 29 May 2001 11:27:00 -0400

Not a problem!

A dilemma:  The original poster asked a generic "timeout" question on the
MIDRANGE-L, which was non-specific as to the solution's language.  No arrows,
therefore, for publishing an RPG solution here, please.

Although Scott Klement gets all the credit for this nifty technique, I will
add that it's *possible* I may have "dumbed-down" his code to get it to work
at V3R2; I can't remember for certain.

Display file TIMEOUTD:
     A                                      DSPSIZ(24 80 *DS3)
     A          R SCREEN1
     A                                      INVITE
     A                                      FRCDTA
     A                                  9 17'There is a timeout on this-
     A                                        screen.  Press ENTER'
     A                                 10 27'or wait for it to time out.'
     A            MSG           50   O 14 16

RPG-IV program TIMEOUTR:    (Note: RPG-III example follows)
     fTimeOutD  cf   e             Workstn UsrOpn

     d RunCmd          pr                  ExtPgm('QCMDEXC')
     d  Cmd                         200a   Const
     d  Len                          15p 5 Const

     d RcvDtaQ         pr                  ExtPgm('QRCVDTAQ')
     d  dqname                       10a   Const
     d  dqLib                        10a   Const
     d  dqLen                         5p 0
     d  dqData                       80a
     d  dqWait                        5p 0 Const

     d DQLen           s              5p 0
     d TimeOut         s              5p 0
     d DQData          s             80a

     c* create a data queue in QTEMP.
     c                   Callp     RunCmd('CRTDTAQ DTAQ(QTEMP/TESTDQ) -
     c                             MAXLEN(80) SEQ(*FIFO)': 200)

     c* Make the display file use the new data queue
     c                   Callp     RunCmd('OVRDSPF FILE(TIMEOUTD) DTAQ(' +
     c                              'QTEMP/TESTDQ)': 200)

     c* open the display file.
     c                   Open      TimeOutD

     c* Show the screen the user.  This format has the
     c* "FRCDTA" keyword so the screen will show up immediately, and the
     c* "INVITE" keyword so the keyboard isn't locked.
     c                   Write     Screen1

     c* Wait for one of two conditions...
     c*    1) an entry to appear on the data queue or
     c*    2) A timeout while waiting for the data queue.
     c                   Eval      DQLen = 80
     c                   Eval      Timeout = 10
     c                   Callp     RcvDtaQ('TESTDQ':'QTEMP': DQLen: DQData:
     c                                 Timeout)

     c* Show the results...  (if Len=0, no data was received...)
     c                   If        dqLen = 0
     c                   Eval      Msg = 'TIMEOUT!  Press ENTER to quit.'
     c                   Else
     c                   Read      SCREEN1                              9999
     c                   Eval      Msg = 'ENTER!  Press ENTER again to quit'
     c                   Endif
     c                   Write     SCREEN1

     c* Wait "forever" for enter to be pressed, this time.
     c*    (Timeout=-1 means that it'll never timeout)
     c                   Eval      Timeout = -1
     c                   Callp     RcvDtaQ('TESTDQ':'QTEMP': DQLen: DQData:
     c                                 Timeout)
     c                   Read      SCREEN1                              9999

     c* Do some cleanup and end...
     c                   Close     TimeOutD
     c                   Callp     RunCmd('DLTOVR FILE(TIMEOUTD)':200)
     c                   Callp     RunCmd('DLTDTAQ DTAQ(QTEMP/TESTDQ)':200)

     c                   Eval      *inLR = *On

RPG-III program TIMEOUTR3:
     FTIMEOUTDCF  E                    WORKSTN                        UC
      *
     I              'CRTDTAQ DTAQ(QTEMP/- C         $CRTDQ
     I              'TESTDQ) MAXLEN(80) -
     I              ' SEQ(*FIFO)'
     I              'OVRDSPF TIMEOUTD -   C         $OVRDF
     I              ' DTAQ(QTEMP/TESTDQ) -
     I              ' OVRSCOPE(*CALLLVL)'
     I              'TIMEOUT!  Press-     C         $TIMDO
     I              ' ENTER to quit.'
     I              'ENTER!  Press ENTER- C         $NORML
     I              ' again to quit.'
     I              'DLTOVR TIMEOUTD -    C         $DLTOV
     I              ' LVL(*)'
     I              'DLTDTAQ -            C         $DLTDQ
     I              ' DTAQ(QTEMP/TESTDQ)'
      *
      * c* create a data queue in QTEMP.
     C                     MOVE *BLANKS   CMD
     C                     CALL 'QCMDEXC'
     C                     PARM $CRTDQ    CMD   200
     C                     PARM 200       CMDLEN 155
      *
      * c* Make the display file use the new data queue
     C                     MOVE *BLANKS   CMD
     C                     CALL 'QCMDEXC'
     C                     PARM $OVRDF    CMD   200
     C                     PARM 200       CMDLEN 155
      *
      * c* open the display file.
     C                     OPEN TIMEOUTD
      *
      * c* Show the screen the user.  This format has the
      * c* "FRCDTA" keyword so the screen will show up immediately, and the
      * c* "INVITE" keyword so the keyboard isn't locked.
     C                     WRITESCREEN1
      *
      * c* Wait for one of two conditions...
      * c*    1) an entry to appear on the data queue or
      * c*    2) A timeout while waiting for the data queue.
     C                     CALL 'QRCVDTAQ'
     C                     PARM 'TESTDQ'  DQNAME 10
     C                     PARM 'QTEMP'   DQLIB  10
     C                     PARM 80        DQLEN   50
     C                     PARM           DQDATA 80
     C                     PARM 10        DQWAIT  50
      *
      * c* Show the results...  (if Len=0, no data was received...)
     C           DQLEN     IFEQ *ZEROS
     C                     MOVEL$TIMDO    MSG
     C                     ELSE
     C                     READ SCREEN1                  99
     C                     MOVEL$NORML    MSG
     C                     ENDIF
     C                     WRITESCREEN1
      *
      * c* Wait "forever" for enter to be pressed, this time.
      * c*    (Timeout=-1 means that it'll never timeout)
     C                     CALL 'QRCVDTAQ'
     C                     PARM 'TESTDQ'  DQNAME 10
     C                     PARM 'QTEMP'   DQLIB  10
     C                     PARM 80        DQLEN   50
     C                     PARM           DQDATA 80
     C                     PARM -1        DQWAIT  50
     C                     READ SCREEN1                  99
      *
      * c* Do some cleanup and end...
     C                     CLOSETIMEOUTD
     C                     MOVE *BLANKS   CMD
     C                     CALL 'QCMDEXC'
     C                     PARM $DLTOV    CMD   200
     C                     PARM 200       CMDLEN 155
     C                     MOVE *BLANKS   CMD
     C                     CALL 'QCMDEXC'
     C                     PARM $DLTDQ    CMD   200
     C                     PARM 200       CMDLEN 155
      *
     C                     SETON                     LR

- Dan
Dan Bale says "BAN DALE!"
IT - AS/400
Handleman Company
248-362-4400  Ext. 4952
D.Bale@Handleman.com
  Quiquid latine dictum sit altum viditur.
  (Whatever is said in Latin seems profound.)

-------------------------- Original Message --------------------------

Well, if nothing else, it'd save me from having to post a reply :)


On Fri, 25 May 2001 D.BALE@handleman.com wrote:

> Scott Klement gave me a wonderful example of controlling a timeout at the
> record level utilizing the DDS keywords INVITE & FRCDTA and setting a
> temporary data queue in the program.  Much more flexible.  I have the source
> examples Scott provided, and I could post them here if anyone wants, the
> example source is not that lengthy.  Just say the word.
>
> - Dale
> Dale Bale says "BAN DAN!"
> IT - AS/400
> Handleman Company
> 248-362-4400  Ext. 4952
> D.Bale@Handleman.com
>   Quiquid latine dictum sit altum viditur.
>   (Whatever is said in Latin seems profound.)
>
+---
| This is the Midrange System Mailing List!
| To submit a new message, send your mail to MIDRANGE-L@midrange.com.
| To subscribe to this list send email to MIDRANGE-L-SUB@midrange.com.
| To unsubscribe from this list send email to MIDRANGE-L-UNSUB@midrange.com.
| Questions should be directed to the list owner/operator: david@midrange.com
+---

As an Amazon Associate we earn from qualifying purchases.

This thread ...


Follow On AppleNews
Return to Archive home page | Return to MIDRANGE.COM home page

This mailing list archive is Copyright 1997-2024 by midrange.com and David Gibbs as a compilation work. Use of the archive is restricted to research of a business or technical nature. Any other uses are prohibited. Full details are available on our policy page. If you have questions about this, please contact [javascript protected email address].

Operating expenses for this site are earned using the Amazon Associate program and Google Adsense.