Files
calc/help/errsym
Landon Curt Noll db77e29a23 convert ASCII TABs to ASCII SPACEs
Converted all ASCII tabs to ASCII spaces using a 8 character
tab stop, for all files, except for all Makefiles (plus rpm.mk).
The `git diff -w` reports no changes.
2024-07-11 22:03:52 -07:00

190 lines
6.4 KiB
Plaintext

NAME
errsym - convert between "E_STRING" errsym into a errnum number
SYNOPSIS
errsym(errnum | "E_STRING")
TYPES
errnum integer
E_STRING string
return integer or string or error value
DESCRIPTION
When called with in integer errnum argument:
When E__BASE < errnum <= E__HIGHEST, the corresponding errsym E_STRING
from the error_table[] array is returned.
For example:
; print errsym(10003)
E_ADD
When an errnum that matches one of the following errtbl.h #define,
then the #define string is returned:
E__NONE
E__BASE
E__USERDEF
E__USERMAX
NOTE: For errnum == E__HIGHEST, the corresponding E_STRING that
is returned is NOT "E__HIGHEST". Instead the E_STRING corresponding
to the highest errnum number from the error_table[] array is returned.
For example:
; print errsym(0)
E_NONE
When E__NONE <= errnum < E__BASE, or when E__USERDEF <= errnum <= E__USERMAX,
an "E_STRING" errsym of the form "E_digits" is returned where "digits"
are the ASCII digits of the decimal value of errnum.
For example:
; print errsym(123)
E_123
For all other errnum values, an error is returned.
When called with E_STRING string argument:
When the E_STRING starts with "E_" followed by only decimal digits:
If E_STRING is "E_0", 0 is returned.
If E_STRING matches the regular expression:
^E_[1-9][0-9]+$
where digits 0 < errnum <= 32767, the errnum value is returned.
For all other cases of "E_" by only decimal digits, an error is returned.
When the E_STRING matches one of the following special
symbols, the symbol's numeric value as #define-d in errsym.h
or errtbl.h is returned:
E__NONE
E__BASE
E__HIGHEST
E__USERDEF
E__USERMAX
For example:
; print errsym("E_NONE")
0
For all other E_STRING strings that start with "E__", an error is returned.
When the E_STRING starts with "E_" followed by an UPPER CASE LETTER that
also matches the regular expression:
^E_[A-Z][A-Z0-9_]+$
The error_table[] is searched for an errsym that exactly matches
the E_STRING. If a match is found, the corresponding errnum number
is returned. If no match is found, an error is returned.
For example:
; print errsym("E_ADD")
10003
For all other string arguments, an error is returned.
When errsym returns an integer, the global calc error count (see help errcount)
is NOT changed. And of course, when errsym("E_STRING") returns an error, the
global calc error count is incremented by 1.
Consider the E_MUL calc error condition:
Given a E_STRING errsym, errsym("E_STRING") will return the errnum integer
error code that is associated with the E_STRING errsym.
The 4th entry of struct errtbl error_table is:
{ 10005, "E_MUL", "Bad arguments for +" },
And errcode -d produces a errsym.h with the following #define:
#define E_MUL 10005 /* Bad arguments for * */
Thus 10005 is the errnum, "E_MUL" is the E_STRING errsym that is
associated with the errmsg error message: "Bad arguments for +".
In the above example, errsym("E_MUL") will return 10005.
Also errsym("E_10005") will also return 10005.
To complete the E_STRING use in the above example:
Both error(10005) and error("E_MUL") both raise the E_MUL calc error condition
Both errno(10005) and errno("E_MUL") both return 10005
Both strerror(10005) and strerror("E_MUL") both return "Bad arguments for *"
EXAMPLE
; print errsym("E_ADD"), errsym("E_SUB"), errsym("E_MUL"), errsym("E_DIV")
10003 10004 10005 10006
; print errsym("E__NONE"), errsym("E__BASE"), errsym("E__USERDEF"), errsym("E__USERMAX")
0 10000 20000 32767
; print errsym(10003), errsym(10004), errsym(10005), errsym(10006)
E_ADD E_SUB E_MUL E_DIV
; print errsym(0), errsym(10000), errsym(20000), errsym(32767)
E__NONE E__BASE E__USERDEF E__USERMAX
LIMITS
0 <= errnum < 32767
E_STRING is string that must match the regular expression: ^E_[A-Z0-9_]+$
LINK LIBRARY
int calc_errno; /* global calc_errno value */
CONST struct errtbl error_table[ECOUNT+2]; /* calc error codes, error symbols and error messages */
bool is_e_digits(CONST char *errsym);
bool is_valid_errnum(int errnum);
bool is_errnum_in_error_table(int errnum);
bool is_e_1string(CONST char *errsym);
bool is_e_2string(CONST char *errsym);
struct errtbl *find_errsym_in_errtbl(CONST char *errsym, CONST struct errtbl *tbl);
struct errtbl *find_errnum_in_errtbl(int errnum, CONST struct errtbl *tbl);
CONST struct errtbl *lookup_errnum_in_error_table(int errnum);
int errsym_2_errnum(CONST char *errsym);
char *errnum_2_errsym(int errnum, bool *palloced);
char *errnum_2_errmsg(int errnum, bool *palloced);
char *errsym_2_errmsg(CONST char *errsym, bool *palloced);
SEE ALSO
errcount, errmax, errno, errorcodes, iserror, newerror, stoponerror, strerror
## Copyright (C) 2023 Landon Curt Noll
##
## Calc is open software; you can redistribute it and/or modify it under
## the terms of the version 2.1 of the GNU Lesser General Public License
## as published by the Free Software Foundation.
##
## Calc is distributed in the hope that it will be useful, but WITHOUT
## ANY WARRANTY; without even the implied warranty of MERCHANTABILITY
## or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General
## Public License for more details.
##
## A copy of version 2.1 of the GNU Lesser General Public License is
## distributed with calc under the filename COPYING-LGPL. You should have
## received a copy with calc; if not, write to Free Software Foundation, Inc.
## 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
##
## Under source code control: 1995/12/18 03:30:59
## File existed as early as: 1995
##
## chongo <was here> /\oo/\ http://www.isthe.com/chongo/
## Share and enjoy! :-) http://www.isthe.com/chongo/tech/comp/calc/