mirror of
https://github.com/lcn2/calc.git
synced 2025-08-16 01:03:29 +03:00
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.
190 lines
6.4 KiB
Plaintext
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/
|