We have implemented a similar scheme to that of Peter Shenkin. Our own
Object Oriented implementation draws on the ideas implemented in the
well known SLATEC library. The SLATEC error handling facilities are
documented in:
R. E. Jones and D. K. Kahaner, XERROR, the SLATEC error-handling
package,
Software - Practice and Experience, 13, 3 (March 1983), pp.
251-257.
In my own implementation the subroutine MP_ERR_SetError is used to set
and possibly display/log an error. It has the following interface.
For most uses default settings of many of the parameters are appropriate
which considerably simplifies calls to this routine.
MP_ERR_SetError(errorCode,message,level,source,subroutine,library,IsHeader,IsAbort,IsConsole,IsLog,errObj)
errorCode INTEGER, INTENT(IN)
Integer code assigned by the caller.
message CHARACTER (LEN = *), INTENT(IN)
Message to be displayed (if IsConsole is set) and logged
(if IsLog is set).
Message is also retained by the error handler until the
next call to MP_ERR_SetError
and can be interogated by MP_ERR_GetMessage(...).
level INTEGER, INTENT(IN), OPTIONAL
Categorizes the severity of the error
= MP_ERR_LEVEL_WARNING
= MP_ERR_LEVEL_RECOVER
= MP_ERR_LEVEL_SEVERE
= MP_ERR_LEVEL_ABORT
= MP_ERR_LEVEL_UNDEFINED
Responses to errors and default values of other parameters
are dependent on the
value of level. The default value of level is under the
control of the
programmer. Initially the default level is assigned the
program or 'factory
default' level.
source INTEGER, INTENT(IN), OPTIONAL
Categorizes the source of the error
= MP_ERR_SOURCE_INTERNAL
= MP_ERR_SOURCE_LIBUSER
= MP_ERR_SOURCE_ENDUSER
= MP_ERR_SOURCE_UNDEFINED
Similar remarks to level.
subroutine CHARACTER (LEN = *), INTENT(IN), OPTIONAL
Name of subroutine in which the error (as deemed by the
caller) originates. This provides
valuable debugging information for library developers.
library CHARACTER (LEN = *), INTENT(IN), OPTIONAL
Name of the library in which the error originates.
IsHeader LOGICAL, INTENT(IN), OPTIONAL
Determines if the error message is preceded by a header
containing the
errorCode, subroutine, library, level and source of the
error.
The default value depends on the level and source of the
error. For example
if source = MP_ERR_SOURCE_ENDUSER and level <=
MP_ERR_LEVEL_RECOVER no
header is printed by default. The default values can be
modified by
the programmer from the factory defaults.
IsConsole LOGICAL, INTENT(IN), OPTIONAL
Determines if the error message is to be displayed on the
screen. Default
values depend on the level and source of the error. The
default
values can be modified by the programmer from the factory
defaults.
IsLog LOGICAL, INTENT(IN), OPTIONAL
Determines if the error message is to be written to a log
file. Default
values depend on the level and source of the error. The
default
values can be modified by the programmer from the factory
defaults.
errObj TYPE(MP_ERR_ErrorType), INTENT(INOUT), OPTIONAL
Error object that encapsulates error handling data
including the current errorcode
message, default settings of attributes, logfile handles
etc.
By default the global error handler declared in the
MP_ERR_ErrorModule is used.
Declaration and use of alternative error objects is not
normally recommended.
Facilities are provided to open and close log files, modify default
settings of parameters,
accessing various error attributes etc.
I also have a practice of categorizing many errors. For example, in my
file handling module, I have a subroutine IOerror(...) that generically
handles errors associated with File I/O. Of course MP_ERR_SetError is
called by IOerror(...) with most of the MP_ERR_SetError arguments set to
appropriate default values within IOerror(...)
Regards,
David Vowles.
Aleksandar Donev wrote:
>
> Hello,
>
> > Using a c-wrapper, both the above two types of errors can be intercepted by
> > the try-and-catch mechanism.
>
> Do you mean C++? I thought C does not have exception handling, especially not
> throw-and-catch stuff. I am willing to add side C to my Fortran codes if it can handle
> the task better.
>
> Thanks,
> Aleksandar
>
> --
> __________________________________
> Aleksandar Donev
> Complex Materials Theory Group (http://cherrypit.princeton.edu/)
> Princeton Materials Institute & Program in Applied and Computational Mathematics
> @ Princeton University
> Address:
> 419 Bowen Hall, 70 Prospect Avenue
> Princeton University
> Princeton, NJ 08540-5211
> E-mail: [log in to unmask]
> WWW: http://atom.princeton.edu/donev
> Phone: (609) 258-2775
> Fax: (609) 258-6878
> __________________________________
|