Thread Rating:
  • 0 Vote(s) - 0 Average
  • 1
  • 2
  • 3
  • 4
  • 5
DAY 029: _EXIT
#1
Not to be confused with _BREXIT, which was a useful keyword to get the hell out of the E.U., _EXIT is a useful keyword to get you out of trouble if you mistakenly click the "X" symbol before parts of your app have completed, like writing to a very large file.

SYNTAX:  var% = _EXIT

Values are as follows...

Code: (Select All)
' "x"......... 1
' Alt + F4.....1
' Ctrl + Break 2
DO
    a% = _EXIT
    PRINT a%
    _LIMIT 1
    IF INKEY$ = CHR$(27) THEN END
LOOP

_EXIT covers all exit routines, which is why I put that INKEY Esc to end line in the code; otherwise, you'd have to shut it down with Task manager.

So, what's it good for? Well, let's say your cat walks into the room, jumps on your mouse and sits its kitty-butt down on the left mouse button. Well wouldn't you know it, the mouse pointer is positioned on the "x" and the program is running a pi algorithm that has been going on for days! Well, before you think about getting rid of your cat, and getting a life, try _EXIT in your program instead; here's how...

Code: (Select All)
DO
    FOR i = 1 TO 10
        ON _EXIT GOSUB pete ' Pauses this count routine when the "x" is clicked.
        PRINT i
        _DELAY .5
    NEXT
LOOP UNTIL LEN(INKEY$) ' If you press a key, it will end after it prints "10".
END

pete:
LINE INPUT "Are you sure you want to quit? Y/N: "; ans$
IF LCASE$(ans$) = "y" THEN SYSTEM
RETURN


So you might ask, hey Pete, why'd you put the _EXIT command in the FOR LOOP, instead of the DO LOOP? And I'd reply, so the user doesn't think the "x" close program function is broken.

Now let's try it in the DO LOOP, and see what happens...

Code: (Select All)
DO
    ON _EXIT GOSUB pete ' Pauses this count routine after count "10".
    FOR i = 1 TO 10
          PRINT i
        _DELAY .5
    NEXT
LOOP UNTIL LEN(INKEY$) ' If you press a key, it will end after it prints "10".
END

pete:
LINE INPUT "Are you sure you want to quit? Y/N: "; ans$
IF LCASE$(ans$) = "y" THEN SYSTEM
RETURN

So we click "x" after it prints 2 or 3, whatever... and it keeps counting. Go ahead, click the hell out of "x", it won't matter. It isn't going to move to the sub-routine until it finishes the FOR LOOP.

Now you could do worse, and put it outside the DO LOOP. This disables the "x" quit function, but keeps the click in memory. That's a problem as our program is supposed to "END" with the screen still up and a, "Press any key to continue." message at the bottom. Oops, that click in memory kills the window!

So knowing what effect you want and where to place the _EXIT command is important. For instance, let's say it was imperative we get that FOR LOOP to complete before we quit. I'd say code a warning message something like this...

Code: (Select All)
DO
    stopexit = -1
    FOR i = 1 TO 10
        ON _EXIT GOSUB pete
        PRINT i
        _DELAY .5
    NEXT
    IF stopexit = 0 THEN END
    PRINT "You have 10 seconds to exit before the next loop begins..."
    stopexit = 0
    z1 = TIMER
    DO: ON _EXIT GOSUB pete: LOOP UNTIL ABS(TIMER - z1) >= 10
LOOP UNTIL LEN(INKEY$) ' If you press a key, it will end after it prints "10".
END

pete:
SELECT CASE stopexit
    CASE -1
        PRINT: PRINT "Okay, the program will end after it prints to 10.": PRINT: _DELAY 3
        stopexit = 0
    CASE 0
        SYSTEM ' But Yogi, won't exiting before returning cause a stack space leak? I don't give a **** Booboo.
END SELECT
RETURN

So in review, _EXIT returns 1 for "x" in the window or in the task bar projection, 1 for Alt + F4, and 2 for Ctrl + Break. Where you place it determines the behavior, either immediate or delayed action, and be sure to use a key routine or sub-routine to bail yourself out so you don't have to resort to Task manager to suspend the program window.

<--- Pete _EXIT stage left...
Reply


Messages In This Thread
DAY 029: _EXIT - by Pete - 12-10-2022, 05:41 AM
RE: DAY 029: _EXIT - by SMcNeill - 12-10-2022, 06:08 AM
RE: DAY 029: _EXIT - by vince - 12-10-2022, 07:10 AM
RE: DAY 029: _EXIT - by Pete - 12-10-2022, 07:21 AM
RE: DAY 029: _EXIT - by Pete - 12-10-2022, 07:17 AM
RE: DAY 029: _EXIT - by mnrvovrfc - 12-10-2022, 07:30 AM
RE: DAY 029: _EXIT - by Pete - 12-10-2022, 07:55 AM
RE: DAY 029: _EXIT - by mnrvovrfc - 12-14-2022, 10:12 AM
RE: DAY 029: _EXIT - by Pete - 12-14-2022, 09:42 PM



Users browsing this thread: 1 Guest(s)