06-05-2023, 12:50 AM
(06-05-2023, 12:31 AM)TerryRitchie Wrote:(06-04-2023, 11:59 PM)NasaCow Wrote:I've never really checked for this. I've always made sure to include an _EXIT check in all my loops where I feel a user may want to leave. I would assume _EXIT contains a testable value only when the X close button is depressed on a window. It would be easy enough to do the following to be sure _EXIT is captured:(06-04-2023, 05:38 PM)TempodiBasic Wrote: @NasaCowWell, that's what I am trying to figure out by copying the wiki example. I was just trying to get it to system out still without doing anything else but it also said you need to an initial _EXIT to enable the use.
on wikipage of _EXIT you find these instructions:
....
can you find another way to manage the issue about closing by brute force your program?
(06-04-2023, 08:35 PM)TerryRitchie Wrote: I just include _EXIT in my checks for the user wanting to leave the program:This is actually a great idea, will force run all my normal saving routinues. Does _EXIT in this case retain it value so I can system out afterwards or should I set a flag to retain the value of _EXIT? (Pressing the 'X' multiple times to system out may annoy the user...)
Foo = _EXIT
DO
.
. <code>
.
LOOP UNTIL _KEYDOWN(27) OR _EXIT ' ESC pressed or window X clicked
Foo = _EXIT
Leave = 0
DO
.
IF _EXIT THEN Leave = -1
.
. <more code>
.
LOOP UNTIL _KEYDOWN(27) OR Leave
You could:
DIM SHARED Leave AS INTEGER
somewhere at the top of your code. That way, if you enter another sub/function within the <more code> area that sub/function can set Leave appropriately as well and it will retain the value when sub/function exits. You could even have a check at the beginning of the other subs/functions:
IF Leave THEN EXIT SUB ' or EXIT FUNCTION
that would immediately exit a sub/function if Leave was already previously set. No need to continue further if the user is wanting to exit. Just a few thoughts.
I tested it real quick, it does clear out on the read on the loop so a flag is needed. Easily solved with a global ExitFlag that will system out when all work is properly saved. Should be pretty easy to bring into the program. Thanks for the back and forth, it is the best way for me to figure things out and the idea to use it with a loop-exiting mechanic!
Code: (Select All)
$NOPREFIX
OPTION EXPLICIT
DIM AS INTEGER ExitFlag
ExitFlag = EXIT
DO
LIMIT 30
ExitFlag = EXIT
LOOP UNTIL ExitFlag
PRINT "Exit code from _EXIT:"; EXIT
PRINT "Exit code from ExitFlag:"; ExitFlag
SLEEP
SYSTEM
WHILE NOT EndOfLife(1)
HappyLife = HappyWife - (Money * Time * Travel * Gifts)
Kids = (NoTime * LackOfLove) MOD NumOfKids
IF Retirement <> Rich THEN YearsOnJob = YearsOnJob + 1 ELSE SeeTheWorld
WEND
HappyLife = HappyWife - (Money * Time * Travel * Gifts)
Kids = (NoTime * LackOfLove) MOD NumOfKids
IF Retirement <> Rich THEN YearsOnJob = YearsOnJob + 1 ELSE SeeTheWorld
WEND