You can probably use alarm() and sigaction() to accomplish that also. I
learned that from Scott Klement when dealing with socket programming.
Not sure why you do not want to use INVITE. I think that is the easier
of all.
-----Original Message-----
From: rpg400-l-bounces@xxxxxxxxxxxx
[
mailto:rpg400-l-bounces@xxxxxxxxxxxx] On Behalf Of Larry Ducie
Sent: Monday, April 23, 2007 7:04 AM
To: rpg400-l@xxxxxxxxxxxx
Subject: Getting a program to move off an EXFMT (or READ) without using
INVITE
Hi chaps,
Is there a way (API or set of APIs) that allow you to move a program
from an EXFMT without requiring the device to send data? I am aware of
the INVITE keyword, but for many reasons I do not want to use it.
Currently, I have written some software that allows me to refresh the
screen whenever I need to, but I would like a more gracious way to do
it..
It works like this (simplified):
------------------------------------------------------------------------
----
----------------------------------------------
init - enable signals, set a handler sub-proc for sigalarm signals.
dou f key pressed or whatever
prepare the screen (load subfile, etc)
call sub-proc to set an alarm in 1 second (send a signal via a call to
alarm() )
exfmt(e) the screen
call sub-proc to disable the alarm (call alarm(0) )
if %error and sds_excpid = MY_ALARM_ERROR close display file open
display file endif
process F keys
process entered data
enddo
The handler sub-proc checks some values and if the screen requires
refreshing it sends an *ESCAPE message to the program - this pops the
screen off the exfmt(e) and resets the screen - nothing pressed/ entered
so the screen loop causes the screen to be rebuilt and redisplayed. If
it is not necessary to re-display the screen the sub-proc sets the alarm
to go in another second, as so on...
------------------------------------------------------------------------
----
----------------------------------------------
The benefit of this is that I only refresh the screen if something
changes before the user presses a valid F key or presses Enter. So in
most cases it is just like any normal screen process. However, I just
don't like having to use an *ESCAPE message to pop the screen off the
EXFMT. The program still thinks the device is waiting for input so I
can't write to the display file without closing and re-opening it -
major drawback. Mostly it doesn't matter because this technique would
only be used on front-end screens anyway. It does work like a charm
though. The screens refresh really well, but only when they need to. A
guy here has written a cool demo chat application based on it - google
chat in RPG - who'd have thunk it! :-)
So, any ideas if there is a workstation API that will knock the program
off the EXFMT without putting the display file or device into an error
state?
Your help would be appreciated.
Cheers
Larry Ducie
--
This is the RPG programming on the AS400 / iSeries (RPG400-L) mailing
list To post a message email: RPG400-L@xxxxxxxxxxxx To subscribe,
unsubscribe, or change list options,
visit:
http://lists.midrange.com/mailman/listinfo/rpg400-l
or email: RPG400-L-request@xxxxxxxxxxxx
Before posting, please take a moment to review the archives at
http://archive.midrange.com/rpg400-l.
As an Amazon Associate we earn from qualifying purchases.