Trapping I/O runtime errors in GPC_(re)

Mon, 27 Oct 1997 08:50:16 GMT



Bill Currie wrote:

> On 23 Oct 97 at 10:43, Peter Gerwinski wrote:
> 
> > According to Jesper Lund:
> > > Is there a (simple) way of trapping runtime I/O errors in GPC, like the {$I-}
> > > compiler directive in Borland Pascal? [...]
> > 
> > Not yet, but it is being worked on.  (Interested to take part?;-)
> 
> Agh, does that mean I have to pull my finger out?
> 
> I think I've got the compiler side working in an older beta, but the 
> rtl has to be modified to support it.

I think I can do the RTS part, if you send me a patch for your changes,
along with a short description about how you did it.

I'd imagine I'll do it as follows:

- Whenever an I/O function encounters an error condition, it sets InOutRes to
  the according error code (which will, of course, *not* be the same as in
  BP ;-), and return in a clean state. (The latter is the difficult bit; I've
  already done so for the Read/Write procedures, but I expect there will be
  more to do so that the program can continue safely.)

- At the start, each I/O function checks InOutRes, and if <>0, returns
  immediately, doing nothing. (Like BP does.)

- After calling an I/O function, if {$I+} is turned on, the calling program
  must check InOutRes. The code to be generated (perhaps you've already done
  so) would look like "if InOutRes<>0 then _p_ioerror;" where _p_ioerror will
  be a RTS function I can provide. (The check "if InOutRes<>0" could also be
  done in the function (like in BP!), but that's inefficient, because the
  function has to be called after each I/O operation then.)

Does this seem OK to you, or to anyone else? Any comments?

One question is what kind of errors is to be considered as I/O errors. E.g.,
overflowing the destination string length in WriteStr, if the automatic
truncating of strings (an option that will be introduced soon) is turned off,
is this an I/O error or rather a "generic" (string) error? Any opinions?
If there are more cases of doubt, I'll ask them here, too, when I find them.

-- 
Frank Heckenbach, Erlangen, Germany
heckenb@mi.uni-erlangen.de
http://home.pages.de/~fjf/links.htm


Frank Heckenbach (heckenb@mi.uni-erlangen.de)

HTML conversion by Lluís de Yzaguirre i Maura
Institut de Lingüística Aplicada - Universitat "Pompeu Fabra"
e-mail: de_yza@upf.es