Path: utzoo!mnetor!uunet!portal!atari!apratt From: apratt@atari.UUCP (Allan Pratt) Newsgroups: comp.sys.atari.st Subject: Re: C and autostarting GEM programs Message-ID: <1008@atari.UUCP> Date: 7 Mar 88 19:19:59 GMT References: <167@bdt.UUCP> Organization: Atari Corp., Sunnyvale CA Lines: 30 From article <167@bdt.UUCP>, by david@bdt.UUCP (David Beckemeyer): > What happens to the stack? How can the > handler fix-up the stack? A long-jump? But then what happens in > the above case where now the DTA points to a place that will be used > again for new stack space. > > Open files also remain open when the Pterm is called, so these must > also be cleaned up. > > My point is: don't be mislead into thinking that a Pterm handler is > nothing more than a simple longjump. It *is* just a simple longjmp! (Except that it gets executed in Super mode -- but the handler can just consist of a longjmp.) If you have a global pointer (like an extern or your DTA) pointing into your stack, and you do a longjmp, it still points to your stack (or where the stack will someday be). It's up to you not to use those pointers -- in the case where the ^C might occur while the DTA is on the stack, your Pterm-recovery routine should reset the DTA to somewhere else. On the other hand, since the DTA is only used for Fsfirst/Fsnext, you should explicitly set it before each round of calls. Then you're sure to be safe from DTA fever. Other globals have always had that problem, though: if you longjmp, you have to be sure you reinitialize them. ============================================ Opinions expressed above do not necessarily -- Allan Pratt, Atari Corp. reflect those of Atari Corp. or anyone else. ...ames!atari!apratt