vendor/bc: import version 6.3.1
This version adds a command to dc to query whether extended registers are enabled or not. (cherry picked from commit 61e1a12bb6c3bfdb0a4e499c88e8eaa2b548e427)
This commit is contained in:
parent
eb81dd8404
commit
103d7cdfb7
@ -51,3 +51,8 @@ existed in.
|
||||
had properly hooked Valgrind into my `bcl` tests, but I had not.
|
||||
|
||||
The first version without this bug is `6.0.1`.
|
||||
|
||||
* In version `6.0.0` until `6.2.4` (inclusive) of `bcl`, there is a possible
|
||||
use-after-free if `bcl_init()` fails.
|
||||
|
||||
The first version without this bug is `6.2.5`.
|
||||
|
@ -239,25 +239,25 @@ $(GEN_EXEC): $(GEN_DIR)
|
||||
%%GEN_EXEC_TARGET%%
|
||||
|
||||
$(BC_LIB_C): $(GEN_EXEC) $(BC_LIB)
|
||||
$(GEN_EMU) $(GEN_EXEC) $(BC_LIB) $(BC_LIB_C) $(BC_EXCLUDE_EXTRA_MATH) $(BC_LIB_C_ARGS)
|
||||
$(GEN_EMU) $(GEN_EXEC) $(BC_LIB) $(BC_LIB_C) $(BC_EXCLUDE_EXTRA_MATH) $(BC_LIB_C_ARGS) "" "" 1
|
||||
|
||||
$(BC_LIB_O): $(BC_LIB_C)
|
||||
$(CC) $(CFLAGS) -o $@ -c $<
|
||||
|
||||
$(BC_LIB2_C): $(GEN_EXEC) $(BC_LIB2)
|
||||
$(GEN_EMU) $(GEN_EXEC) $(BC_LIB2) $(BC_LIB2_C) $(BC_EXCLUDE_EXTRA_MATH) $(BC_LIB2_C_ARGS)
|
||||
$(GEN_EMU) $(GEN_EXEC) $(BC_LIB2) $(BC_LIB2_C) $(BC_EXCLUDE_EXTRA_MATH) $(BC_LIB2_C_ARGS) "" "" 1
|
||||
|
||||
$(BC_LIB2_O): $(BC_LIB2_C)
|
||||
$(CC) $(CFLAGS) -o $@ -c $<
|
||||
|
||||
$(BC_HELP_C): $(GEN_EXEC) $(BC_HELP)
|
||||
$(GEN_EMU) $(GEN_EXEC) $(BC_HELP) $(BC_HELP_C) $(BC_EXCLUDE_EXTRA_MATH) bc_help "" $(BC_ENABLED_NAME)
|
||||
$(GEN_EMU) $(GEN_EXEC) $(BC_HELP) $(BC_HELP_C) $(BC_EXCLUDE_EXTRA_MATH) bc_help "" $(BC_ENABLED_NAME) 0
|
||||
|
||||
$(BC_HELP_O): $(BC_HELP_C)
|
||||
$(CC) $(CFLAGS) -o $@ -c $<
|
||||
|
||||
$(DC_HELP_C): $(GEN_EXEC) $(DC_HELP)
|
||||
$(GEN_EMU) $(GEN_EXEC) $(DC_HELP) $(DC_HELP_C) $(BC_EXCLUDE_EXTRA_MATH) dc_help "" $(DC_ENABLED_NAME)
|
||||
$(GEN_EMU) $(GEN_EXEC) $(DC_HELP) $(DC_HELP_C) $(BC_EXCLUDE_EXTRA_MATH) dc_help "" $(DC_ENABLED_NAME) 0
|
||||
|
||||
$(DC_HELP_O): $(DC_HELP_C)
|
||||
$(CC) $(CFLAGS) -o $@ -c $<
|
||||
@ -536,6 +536,7 @@ clean:%%CLEAN_PREREQS%%
|
||||
@$(RM) -f $(BC_HELP_C) $(BC_HELP_O)
|
||||
@$(RM) -f $(DC_HELP_C) $(DC_HELP_O)
|
||||
@$(RM) -fr vs/bin/ vs/lib/
|
||||
@$(RM) -f $(BCL_PC)
|
||||
|
||||
clean_benchmarks:
|
||||
@printf 'Cleaning benchmarks...\n'
|
||||
@ -548,6 +549,7 @@ clean_config: clean clean_benchmarks
|
||||
@$(RM) -f Makefile
|
||||
@$(RM) -f $(BC_MD) $(BC_MANPAGE)
|
||||
@$(RM) -f $(DC_MD) $(DC_MANPAGE)
|
||||
@$(RM) -f compile_commands.json
|
||||
|
||||
clean_coverage:
|
||||
@printf 'Cleaning coverage files...\n'
|
||||
|
@ -1,5 +1,30 @@
|
||||
# News
|
||||
|
||||
## 6.3.1
|
||||
|
||||
This is a production release that fixes a `bc` dependency loop for minimal
|
||||
environments and Linux from Scratch.
|
||||
|
||||
## 6.3.0
|
||||
|
||||
This is a production release with a couple of fixes for manuals and a new
|
||||
feature for `dc`: there is now a command to query whether extended registers are
|
||||
enabled or not.
|
||||
|
||||
Users who don't care do not need to upgrade.
|
||||
|
||||
## 6.2.6
|
||||
|
||||
This is a production release that fixes an install bug that affected locale
|
||||
installation of all locales when using `mksh`. Users do ***NOT*** need to
|
||||
upgrade if they don't use `mksh` and/or don't need to install all locales.
|
||||
|
||||
## 6.2.5
|
||||
|
||||
This is a production release that fixes a test bug that affected Android and
|
||||
`mksh`. Users do ***NOT*** need to upgrade unless they use `mksh` or another
|
||||
affected shell and need to run the test suite.
|
||||
|
||||
## 6.2.4
|
||||
|
||||
This is a production release that fixes a test failure that happens when
|
||||
|
@ -36,7 +36,7 @@
|
||||
define p(x,y){
|
||||
auto a
|
||||
a=y$
|
||||
if(y==a)return (x^a)@scale
|
||||
if(y==a)return(x^a)@scale
|
||||
return e(y*l(x))
|
||||
}
|
||||
define r(x,p){
|
||||
@ -474,7 +474,7 @@ define bxor(a,b){
|
||||
return bunrev(t)
|
||||
}
|
||||
define bshl(a,b){return abs(a)$*2^abs(b)$}
|
||||
define bshr(a,b){return (abs(a)$/2^abs(b)$)$}
|
||||
define bshr(a,b){return(abs(a)$/2^abs(b)$)$}
|
||||
define bnotn(x,n){
|
||||
auto s,t,m[]
|
||||
s=scale
|
||||
|
@ -157,11 +157,11 @@ bc_read_file(const char* path)
|
||||
|
||||
assert(path != NULL);
|
||||
|
||||
#ifndef NDEBUG
|
||||
#if BC_DEBUG
|
||||
// Need this to quiet MSan.
|
||||
// NOLINTNEXTLINE
|
||||
memset(&pstat, 0, sizeof(struct stat));
|
||||
#endif // NDEBUG
|
||||
#endif // BC_DEBUG
|
||||
|
||||
fd = bc_read_open(path, O_RDONLY);
|
||||
|
||||
@ -360,7 +360,7 @@ main(int argc, char* argv[])
|
||||
has_define = (argc > 6 && strcmp("", argv[6]) != 0);
|
||||
define = has_define ? argv[6] : "";
|
||||
|
||||
remove_tabs = (argc > 7);
|
||||
remove_tabs = (argc > 7 && atoi(argv[7]) != 0);
|
||||
|
||||
in = bc_read_file(argv[1]);
|
||||
if (in == NULL) return INVALID_INPUT_FILE;
|
||||
|
@ -62,7 +62,9 @@ name="$4"
|
||||
label="$5"
|
||||
define="$6"
|
||||
remove_tabs="$7"
|
||||
check_bool_arg "$remove_tabs"
|
||||
if [ "$remove_tabs" != "" ]; then
|
||||
check_bool_arg "$remove_tabs"
|
||||
fi
|
||||
|
||||
tmpinput=$(mktemp -t "${input##*/}_XXXXXX")
|
||||
|
||||
|
@ -41,6 +41,12 @@
|
||||
#include <limits.h>
|
||||
#include <stdint.h>
|
||||
|
||||
#ifndef NDEBUG
|
||||
#define BC_DEBUG (1)
|
||||
#else // NDEBUG
|
||||
#define BC_DEBUG (0)
|
||||
#endif // NDEBUG
|
||||
|
||||
#ifdef _WIN32
|
||||
#include <Windows.h>
|
||||
#include <BaseTsd.h>
|
||||
|
@ -277,6 +277,9 @@ typedef enum BcInst
|
||||
|
||||
#if DC_ENABLED
|
||||
|
||||
/// dc extended registers command.
|
||||
BC_INST_EXTENDED_REGISTERS,
|
||||
|
||||
/// dc's return; it pops an executing string off of the stack.
|
||||
BC_INST_POP_EXEC,
|
||||
|
||||
@ -575,7 +578,7 @@ bc_func_insert(BcFunc* f, struct BcProgram* p, char* name, BcType type,
|
||||
void
|
||||
bc_func_reset(BcFunc* f);
|
||||
|
||||
#ifndef NDEBUG
|
||||
#if BC_DEBUG
|
||||
/**
|
||||
* Frees a function. This is a destructor. This is only used in debug builds
|
||||
* because all functions are freed at exit. We free them in debug builds to
|
||||
@ -584,7 +587,7 @@ bc_func_reset(BcFunc* f);
|
||||
*/
|
||||
void
|
||||
bc_func_free(void* func);
|
||||
#endif // NDEBUG
|
||||
#endif // BC_DEBUG
|
||||
|
||||
/**
|
||||
* Initializes an array, which is the array type in bc and dc source code. Since
|
||||
|
@ -49,11 +49,11 @@
|
||||
* @param l The lexer.
|
||||
* @param e The error.
|
||||
*/
|
||||
#ifndef NDEBUG
|
||||
#if BC_DEBUG
|
||||
#define bc_lex_err(l, e) (bc_vm_handleError((e), __FILE__, __LINE__, (l)->line))
|
||||
#else // NDEBUG
|
||||
#else // BC_DEBUG
|
||||
#define bc_lex_err(l, e) (bc_vm_handleError((e), (l)->line))
|
||||
#endif // NDEBUG
|
||||
#endif // BC_DEBUG
|
||||
|
||||
/**
|
||||
* A convenience macro for throwing errors in lex code. This takes care of
|
||||
@ -61,12 +61,12 @@
|
||||
* @param l The lexer.
|
||||
* @param e The error.
|
||||
*/
|
||||
#ifndef NDEBUG
|
||||
#if BC_DEBUG
|
||||
#define bc_lex_verr(l, e, ...) \
|
||||
(bc_vm_handleError((e), __FILE__, __LINE__, (l)->line, __VA_ARGS__))
|
||||
#else // NDEBUG
|
||||
#else // BC_DEBUG
|
||||
#define bc_lex_verr(l, e, ...) (bc_vm_handleError((e), (l)->line, __VA_ARGS__))
|
||||
#endif // NDEBUG
|
||||
#endif // BC_DEBUG
|
||||
|
||||
// BC_LEX_NEG_CHAR returns the char that corresponds to negative for the
|
||||
// current calculator.
|
||||
@ -409,6 +409,9 @@ typedef enum BcLexType
|
||||
|
||||
#if DC_ENABLED
|
||||
|
||||
/// dc extended registers keyword.
|
||||
BC_LEX_EXTENDED_REGISTERS,
|
||||
|
||||
/// A special token for dc to calculate equal without a register.
|
||||
BC_LEX_EQ_NO_REG,
|
||||
|
||||
@ -533,7 +536,7 @@ void
|
||||
bc_lex_init(BcLex* l);
|
||||
|
||||
/**
|
||||
* Frees a lexer. This is not guarded by #ifndef NDEBUG because a separate
|
||||
* Frees a lexer. This is not guarded by #if BC_DEBUG because a separate
|
||||
* parser is created at runtime to parse read() expressions and dc strings, and
|
||||
* that parser needs a lexer.
|
||||
* @param l The lexer to free.
|
||||
|
@ -110,12 +110,12 @@
|
||||
* @param p The parser.
|
||||
* @param e The error.
|
||||
*/
|
||||
#ifndef NDEBUG
|
||||
#if BC_DEBUG
|
||||
#define bc_parse_err(p, e) \
|
||||
(bc_vm_handleError((e), __FILE__, __LINE__, (p)->l.line))
|
||||
#else // NDEBUG
|
||||
#else // BC_DEBUG
|
||||
#define bc_parse_err(p, e) (bc_vm_handleError((e), (p)->l.line))
|
||||
#endif // NDEBUG
|
||||
#endif // BC_DEBUG
|
||||
|
||||
/**
|
||||
* A convenience macro for throwing errors in parse code. This takes care of
|
||||
@ -124,13 +124,13 @@
|
||||
* @param e The error.
|
||||
* @param ... The varags that are needed.
|
||||
*/
|
||||
#ifndef NDEBUG
|
||||
#if BC_DEBUG
|
||||
#define bc_parse_verr(p, e, ...) \
|
||||
(bc_vm_handleError((e), __FILE__, __LINE__, (p)->l.line, __VA_ARGS__))
|
||||
#else // NDEBUG
|
||||
#else // BC_DEBUG
|
||||
#define bc_parse_verr(p, e, ...) \
|
||||
(bc_vm_handleError((e), (p)->l.line, __VA_ARGS__))
|
||||
#endif // NDEBUG
|
||||
#endif // BC_DEBUG
|
||||
|
||||
// Forward declarations.
|
||||
struct BcParse;
|
||||
@ -215,7 +215,7 @@ void
|
||||
bc_parse_init(BcParse* p, struct BcProgram* prog, size_t func);
|
||||
|
||||
/**
|
||||
* Frees a parser. This is not guarded by #ifndef NDEBUG because a separate
|
||||
* Frees a parser. This is not guarded by #if BC_DEBUG because a separate
|
||||
* parser is created at runtime to parse read() expressions and dc strings.
|
||||
* @param p The parser to free.
|
||||
*/
|
||||
|
@ -247,9 +247,9 @@ typedef struct BcProgram
|
||||
// In debug mode, we want bc to check the stack, but otherwise, we don't because
|
||||
// the bc language implicitly mandates that the stack should always have enough
|
||||
// items.
|
||||
#ifdef NDEBUG
|
||||
#ifdef BC_DEBUG
|
||||
#define BC_PROG_NO_STACK_CHECK
|
||||
#endif // NDEBUG
|
||||
#endif // BC_DEBUG
|
||||
|
||||
#endif // DC_ENABLED
|
||||
|
||||
@ -298,7 +298,7 @@ typedef void (*BcProgramUnary)(BcResult* r, BcNum* n);
|
||||
void
|
||||
bc_program_init(BcProgram* p);
|
||||
|
||||
#ifndef NDEBUG
|
||||
#if BC_DEBUG
|
||||
|
||||
/**
|
||||
* Frees a BcProgram. This is only used in debug builds because a BcProgram is
|
||||
@ -309,7 +309,7 @@ bc_program_init(BcProgram* p);
|
||||
void
|
||||
bc_program_free(BcProgram* p);
|
||||
|
||||
#endif // NDEBUG
|
||||
#endif // BC_DEBUG
|
||||
|
||||
/**
|
||||
* Prints a stack trace of the bc functions or dc strings currently executing.
|
||||
@ -608,6 +608,7 @@ extern const char bc_program_esc_seqs[];
|
||||
&&lbl_BC_INST_MODEXP, \
|
||||
&&lbl_BC_INST_DIVMOD, \
|
||||
&&lbl_BC_INST_PRINT_STREAM, \
|
||||
&&lbl_BC_INST_EXTENDED_REGISTERS, \
|
||||
&&lbl_BC_INST_POP_EXEC, \
|
||||
&&lbl_BC_INST_EXECUTE, \
|
||||
&&lbl_BC_INST_EXEC_COND, \
|
||||
@ -701,6 +702,7 @@ extern const char bc_program_esc_seqs[];
|
||||
&&lbl_BC_INST_MODEXP, \
|
||||
&&lbl_BC_INST_DIVMOD, \
|
||||
&&lbl_BC_INST_PRINT_STREAM, \
|
||||
&&lbl_BC_INST_EXTENDED_REGISTERS, \
|
||||
&&lbl_BC_INST_POP_EXEC, \
|
||||
&&lbl_BC_INST_EXECUTE, \
|
||||
&&lbl_BC_INST_EXEC_COND, \
|
||||
@ -959,6 +961,7 @@ extern const char bc_program_esc_seqs[];
|
||||
&&lbl_BC_INST_MODEXP, \
|
||||
&&lbl_BC_INST_DIVMOD, \
|
||||
&&lbl_BC_INST_PRINT_STREAM, \
|
||||
&&lbl_BC_INST_EXTENDED_REGISTERS, \
|
||||
&&lbl_BC_INST_POP_EXEC, \
|
||||
&&lbl_BC_INST_EXECUTE, \
|
||||
&&lbl_BC_INST_EXEC_COND, \
|
||||
@ -1027,6 +1030,7 @@ extern const char bc_program_esc_seqs[];
|
||||
&&lbl_BC_INST_MODEXP, \
|
||||
&&lbl_BC_INST_DIVMOD, \
|
||||
&&lbl_BC_INST_PRINT_STREAM, \
|
||||
&&lbl_BC_INST_EXTENDED_REGISTERS, \
|
||||
&&lbl_BC_INST_POP_EXEC, \
|
||||
&&lbl_BC_INST_EXECUTE, \
|
||||
&&lbl_BC_INST_EXEC_COND, \
|
||||
|
@ -53,11 +53,11 @@
|
||||
#if BC_ENABLE_LIBRARY
|
||||
#define BC_RAND_USE_FREE (1)
|
||||
#else // BC_ENABLE_LIBRARY
|
||||
#ifndef NDEBUG
|
||||
#if BC_DEBUG
|
||||
#define BC_RAND_USE_FREE (1)
|
||||
#else // NDEBUG
|
||||
#else // BC_DEBUG
|
||||
#define BC_RAND_USE_FREE (0)
|
||||
#endif // NDEBUG
|
||||
#endif // BC_DEBUG
|
||||
#endif // BC_ENABLE_LIBRARY
|
||||
|
||||
/**
|
||||
|
@ -700,7 +700,7 @@ typedef enum BcMode
|
||||
#define BC_SIG_INTERRUPT(vm) BC_UNLIKELY((vm)->sig != 0)
|
||||
#endif // _WIN32
|
||||
|
||||
#ifndef NDEBUG
|
||||
#if BC_DEBUG
|
||||
|
||||
/// Assert that signals are locked. There are non-async-signal-safe functions in
|
||||
/// bc, and they *must* have signals locked. Other functions are expected to
|
||||
@ -724,7 +724,7 @@ typedef enum BcMode
|
||||
} \
|
||||
while (0)
|
||||
|
||||
#else // NDEBUG
|
||||
#else // BC_DEBUG
|
||||
|
||||
/// Assert that signals are locked. There are non-async-signal-safe functions in
|
||||
/// bc, and they *must* have signals locked. Other functions are expected to
|
||||
@ -738,7 +738,7 @@ typedef enum BcMode
|
||||
/// (no-op in non-debug mode) that check that signals are unlocked.
|
||||
#define BC_SIG_ASSERT_NOT_LOCKED
|
||||
|
||||
#endif // NDEBUG
|
||||
#endif // BC_DEBUG
|
||||
|
||||
/// Locks signals.
|
||||
#define BC_SIG_LOCK \
|
||||
@ -957,33 +957,33 @@ typedef enum BcMode
|
||||
* @param l The line of the script that the error happened.
|
||||
* @param ... Extra arguments for error messages as necessary.
|
||||
*/
|
||||
#ifndef NDEBUG
|
||||
#if BC_DEBUG
|
||||
#define bc_error(e, l, ...) \
|
||||
(bc_vm_handleError((e), __FILE__, __LINE__, (l), __VA_ARGS__))
|
||||
#else // NDEBUG
|
||||
#else // BC_DEBUG
|
||||
#define bc_error(e, l, ...) (bc_vm_handleError((e), (l), __VA_ARGS__))
|
||||
#endif // NDEBUG
|
||||
#endif // BC_DEBUG
|
||||
|
||||
/**
|
||||
* Call bc's error handling routine.
|
||||
* @param e The error.
|
||||
*/
|
||||
#ifndef NDEBUG
|
||||
#if BC_DEBUG
|
||||
#define bc_err(e) (bc_vm_handleError((e), __FILE__, __LINE__, 0))
|
||||
#else // NDEBUG
|
||||
#else // BC_DEBUG
|
||||
#define bc_err(e) (bc_vm_handleError((e), 0))
|
||||
#endif // NDEBUG
|
||||
#endif // BC_DEBUG
|
||||
|
||||
/**
|
||||
* Call bc's error handling routine.
|
||||
* @param e The error.
|
||||
*/
|
||||
#ifndef NDEBUG
|
||||
#if BC_DEBUG
|
||||
#define bc_verr(e, ...) \
|
||||
(bc_vm_handleError((e), __FILE__, __LINE__, 0, __VA_ARGS__))
|
||||
#else // NDEBUG
|
||||
#else // BC_DEBUG
|
||||
#define bc_verr(e, ...) (bc_vm_handleError((e), 0, __VA_ARGS__))
|
||||
#endif // NDEBUG
|
||||
#endif // BC_DEBUG
|
||||
|
||||
#endif // BC_ENABLE_LIBRARY
|
||||
|
||||
|
@ -85,12 +85,12 @@ typedef enum BcDtorType
|
||||
|
||||
#if !BC_ENABLE_LIBRARY
|
||||
|
||||
#ifndef NDEBUG
|
||||
#if BC_DEBUG
|
||||
|
||||
/// BcFunc destructor.
|
||||
BC_DTOR_FUNC,
|
||||
|
||||
#endif // NDEBUG
|
||||
#endif // BC_DEBUG
|
||||
|
||||
/// BcSlab destructor.
|
||||
BC_DTOR_SLAB,
|
||||
|
@ -37,6 +37,6 @@
|
||||
#define BC_VERSION_H
|
||||
|
||||
/// The current version.
|
||||
#define VERSION 6.2.4
|
||||
#define VERSION 6.3.1
|
||||
|
||||
#endif // BC_VERSION_H
|
||||
|
@ -999,7 +999,7 @@ bc_vm_atexit(void);
|
||||
size_t
|
||||
bc_vm_numDigits(size_t val);
|
||||
|
||||
#ifndef NDEBUG
|
||||
#if BC_DEBUG
|
||||
|
||||
/**
|
||||
* Handle an error. This is the true error handler. It will start a jump series
|
||||
@ -1013,7 +1013,7 @@ bc_vm_numDigits(size_t val);
|
||||
void
|
||||
bc_vm_handleError(BcErr e, const char* file, int fline, size_t line, ...);
|
||||
|
||||
#else // NDEBUG
|
||||
#else // BC_DEBUG
|
||||
|
||||
/**
|
||||
* Handle an error. This is the true error handler. It will start a jump series
|
||||
@ -1025,7 +1025,7 @@ bc_vm_handleError(BcErr e, const char* file, int fline, size_t line, ...);
|
||||
void
|
||||
bc_vm_handleError(BcErr e, size_t line, ...);
|
||||
|
||||
#endif // NDEBUG
|
||||
#endif // BC_DEBUG
|
||||
|
||||
/**
|
||||
* Handle a fatal error.
|
||||
|
@ -25,7 +25,7 @@
|
||||
.\" ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
|
||||
.\" POSSIBILITY OF SUCH DAMAGE.
|
||||
.\"
|
||||
.TH "BC" "1" "October 2022" "Gavin D. Howard" "General Commands Manual"
|
||||
.TH "BC" "1" "February 2023" "Gavin D. Howard" "General Commands Manual"
|
||||
.nh
|
||||
.ad l
|
||||
.SH NAME
|
||||
@ -477,8 +477,8 @@ Makes bc(1) print all numbers greater than \f[B]-1\f[R] and less than
|
||||
.RS
|
||||
.PP
|
||||
This can be set for individual numbers with the \f[B]plz(x)\f[R],
|
||||
plznl(x)**, \f[B]pnlz(x)\f[R], and \f[B]pnlznl(x)\f[R] functions in the
|
||||
extended math library (see the \f[B]LIBRARY\f[R] section).
|
||||
\f[B]plznl(x)\f[R], \f[B]pnlz(x)\f[R], and \f[B]pnlznl(x)\f[R] functions
|
||||
in the extended math library (see the \f[B]LIBRARY\f[R] section).
|
||||
.PP
|
||||
This is a \f[B]non-portable extension\f[R].
|
||||
.RE
|
||||
|
@ -372,7 +372,7 @@ The following are the options that bc(1) accepts.
|
||||
: Makes bc(1) print all numbers greater than **-1** and less than **1**, and
|
||||
not equal to **0**, with a leading zero.
|
||||
|
||||
This can be set for individual numbers with the **plz(x)**, plznl(x)**,
|
||||
This can be set for individual numbers with the **plz(x)**, **plznl(x)**,
|
||||
**pnlz(x)**, and **pnlznl(x)** functions in the extended math library (see
|
||||
the **LIBRARY** section).
|
||||
|
||||
|
@ -25,7 +25,7 @@
|
||||
.\" ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
|
||||
.\" POSSIBILITY OF SUCH DAMAGE.
|
||||
.\"
|
||||
.TH "BC" "1" "October 2022" "Gavin D. Howard" "General Commands Manual"
|
||||
.TH "BC" "1" "February 2023" "Gavin D. Howard" "General Commands Manual"
|
||||
.nh
|
||||
.ad l
|
||||
.SH NAME
|
||||
@ -433,8 +433,8 @@ Makes bc(1) print all numbers greater than \f[B]-1\f[R] and less than
|
||||
.RS
|
||||
.PP
|
||||
This can be set for individual numbers with the \f[B]plz(x)\f[R],
|
||||
plznl(x)**, \f[B]pnlz(x)\f[R], and \f[B]pnlznl(x)\f[R] functions in the
|
||||
extended math library (see the \f[B]LIBRARY\f[R] section).
|
||||
\f[B]plznl(x)\f[R], \f[B]pnlz(x)\f[R], and \f[B]pnlznl(x)\f[R] functions
|
||||
in the extended math library (see the \f[B]LIBRARY\f[R] section).
|
||||
.PP
|
||||
This is a \f[B]non-portable extension\f[R].
|
||||
.RE
|
||||
|
@ -344,7 +344,7 @@ The following are the options that bc(1) accepts.
|
||||
: Makes bc(1) print all numbers greater than **-1** and less than **1**, and
|
||||
not equal to **0**, with a leading zero.
|
||||
|
||||
This can be set for individual numbers with the **plz(x)**, plznl(x)**,
|
||||
This can be set for individual numbers with the **plz(x)**, **plznl(x)**,
|
||||
**pnlz(x)**, and **pnlznl(x)** functions in the extended math library (see
|
||||
the **LIBRARY** section).
|
||||
|
||||
|
@ -25,7 +25,7 @@
|
||||
.\" ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
|
||||
.\" POSSIBILITY OF SUCH DAMAGE.
|
||||
.\"
|
||||
.TH "BC" "1" "October 2022" "Gavin D. Howard" "General Commands Manual"
|
||||
.TH "BC" "1" "February 2023" "Gavin D. Howard" "General Commands Manual"
|
||||
.nh
|
||||
.ad l
|
||||
.SH NAME
|
||||
@ -433,8 +433,8 @@ Makes bc(1) print all numbers greater than \f[B]-1\f[R] and less than
|
||||
.RS
|
||||
.PP
|
||||
This can be set for individual numbers with the \f[B]plz(x)\f[R],
|
||||
plznl(x)**, \f[B]pnlz(x)\f[R], and \f[B]pnlznl(x)\f[R] functions in the
|
||||
extended math library (see the \f[B]LIBRARY\f[R] section).
|
||||
\f[B]plznl(x)\f[R], \f[B]pnlz(x)\f[R], and \f[B]pnlznl(x)\f[R] functions
|
||||
in the extended math library (see the \f[B]LIBRARY\f[R] section).
|
||||
.PP
|
||||
This is a \f[B]non-portable extension\f[R].
|
||||
.RE
|
||||
|
@ -344,7 +344,7 @@ The following are the options that bc(1) accepts.
|
||||
: Makes bc(1) print all numbers greater than **-1** and less than **1**, and
|
||||
not equal to **0**, with a leading zero.
|
||||
|
||||
This can be set for individual numbers with the **plz(x)**, plznl(x)**,
|
||||
This can be set for individual numbers with the **plz(x)**, **plznl(x)**,
|
||||
**pnlz(x)**, and **pnlznl(x)** functions in the extended math library (see
|
||||
the **LIBRARY** section).
|
||||
|
||||
|
@ -25,7 +25,7 @@
|
||||
.\" ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
|
||||
.\" POSSIBILITY OF SUCH DAMAGE.
|
||||
.\"
|
||||
.TH "BC" "1" "October 2022" "Gavin D. Howard" "General Commands Manual"
|
||||
.TH "BC" "1" "February 2023" "Gavin D. Howard" "General Commands Manual"
|
||||
.nh
|
||||
.ad l
|
||||
.SH NAME
|
||||
@ -433,8 +433,8 @@ Makes bc(1) print all numbers greater than \f[B]-1\f[R] and less than
|
||||
.RS
|
||||
.PP
|
||||
This can be set for individual numbers with the \f[B]plz(x)\f[R],
|
||||
plznl(x)**, \f[B]pnlz(x)\f[R], and \f[B]pnlznl(x)\f[R] functions in the
|
||||
extended math library (see the \f[B]LIBRARY\f[R] section).
|
||||
\f[B]plznl(x)\f[R], \f[B]pnlz(x)\f[R], and \f[B]pnlznl(x)\f[R] functions
|
||||
in the extended math library (see the \f[B]LIBRARY\f[R] section).
|
||||
.PP
|
||||
This is a \f[B]non-portable extension\f[R].
|
||||
.RE
|
||||
|
@ -344,7 +344,7 @@ The following are the options that bc(1) accepts.
|
||||
: Makes bc(1) print all numbers greater than **-1** and less than **1**, and
|
||||
not equal to **0**, with a leading zero.
|
||||
|
||||
This can be set for individual numbers with the **plz(x)**, plznl(x)**,
|
||||
This can be set for individual numbers with the **plz(x)**, **plznl(x)**,
|
||||
**pnlz(x)**, and **pnlznl(x)** functions in the extended math library (see
|
||||
the **LIBRARY** section).
|
||||
|
||||
|
@ -25,7 +25,7 @@
|
||||
.\" ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
|
||||
.\" POSSIBILITY OF SUCH DAMAGE.
|
||||
.\"
|
||||
.TH "BC" "1" "October 2022" "Gavin D. Howard" "General Commands Manual"
|
||||
.TH "BC" "1" "February 2023" "Gavin D. Howard" "General Commands Manual"
|
||||
.nh
|
||||
.ad l
|
||||
.SH NAME
|
||||
@ -433,8 +433,8 @@ Makes bc(1) print all numbers greater than \f[B]-1\f[R] and less than
|
||||
.RS
|
||||
.PP
|
||||
This can be set for individual numbers with the \f[B]plz(x)\f[R],
|
||||
plznl(x)**, \f[B]pnlz(x)\f[R], and \f[B]pnlznl(x)\f[R] functions in the
|
||||
extended math library (see the \f[B]LIBRARY\f[R] section).
|
||||
\f[B]plznl(x)\f[R], \f[B]pnlz(x)\f[R], and \f[B]pnlznl(x)\f[R] functions
|
||||
in the extended math library (see the \f[B]LIBRARY\f[R] section).
|
||||
.PP
|
||||
This is a \f[B]non-portable extension\f[R].
|
||||
.RE
|
||||
|
@ -344,7 +344,7 @@ The following are the options that bc(1) accepts.
|
||||
: Makes bc(1) print all numbers greater than **-1** and less than **1**, and
|
||||
not equal to **0**, with a leading zero.
|
||||
|
||||
This can be set for individual numbers with the **plz(x)**, plznl(x)**,
|
||||
This can be set for individual numbers with the **plz(x)**, **plznl(x)**,
|
||||
**pnlz(x)**, and **pnlznl(x)** functions in the extended math library (see
|
||||
the **LIBRARY** section).
|
||||
|
||||
|
@ -25,7 +25,7 @@
|
||||
.\" ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
|
||||
.\" POSSIBILITY OF SUCH DAMAGE.
|
||||
.\"
|
||||
.TH "BC" "1" "October 2022" "Gavin D. Howard" "General Commands Manual"
|
||||
.TH "BC" "1" "February 2023" "Gavin D. Howard" "General Commands Manual"
|
||||
.nh
|
||||
.ad l
|
||||
.SH NAME
|
||||
@ -477,8 +477,8 @@ Makes bc(1) print all numbers greater than \f[B]-1\f[R] and less than
|
||||
.RS
|
||||
.PP
|
||||
This can be set for individual numbers with the \f[B]plz(x)\f[R],
|
||||
plznl(x)**, \f[B]pnlz(x)\f[R], and \f[B]pnlznl(x)\f[R] functions in the
|
||||
extended math library (see the \f[B]LIBRARY\f[R] section).
|
||||
\f[B]plznl(x)\f[R], \f[B]pnlz(x)\f[R], and \f[B]pnlznl(x)\f[R] functions
|
||||
in the extended math library (see the \f[B]LIBRARY\f[R] section).
|
||||
.PP
|
||||
This is a \f[B]non-portable extension\f[R].
|
||||
.RE
|
||||
|
@ -372,7 +372,7 @@ The following are the options that bc(1) accepts.
|
||||
: Makes bc(1) print all numbers greater than **-1** and less than **1**, and
|
||||
not equal to **0**, with a leading zero.
|
||||
|
||||
This can be set for individual numbers with the **plz(x)**, plznl(x)**,
|
||||
This can be set for individual numbers with the **plz(x)**, **plznl(x)**,
|
||||
**pnlz(x)**, and **pnlznl(x)** functions in the extended math library (see
|
||||
the **LIBRARY** section).
|
||||
|
||||
|
@ -25,7 +25,7 @@
|
||||
.\" ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
|
||||
.\" POSSIBILITY OF SUCH DAMAGE.
|
||||
.\"
|
||||
.TH "BC" "1" "October 2022" "Gavin D. Howard" "General Commands Manual"
|
||||
.TH "BC" "1" "February 2023" "Gavin D. Howard" "General Commands Manual"
|
||||
.nh
|
||||
.ad l
|
||||
.SH NAME
|
||||
@ -477,8 +477,8 @@ Makes bc(1) print all numbers greater than \f[B]-1\f[R] and less than
|
||||
.RS
|
||||
.PP
|
||||
This can be set for individual numbers with the \f[B]plz(x)\f[R],
|
||||
plznl(x)**, \f[B]pnlz(x)\f[R], and \f[B]pnlznl(x)\f[R] functions in the
|
||||
extended math library (see the \f[B]LIBRARY\f[R] section).
|
||||
\f[B]plznl(x)\f[R], \f[B]pnlz(x)\f[R], and \f[B]pnlznl(x)\f[R] functions
|
||||
in the extended math library (see the \f[B]LIBRARY\f[R] section).
|
||||
.PP
|
||||
This is a \f[B]non-portable extension\f[R].
|
||||
.RE
|
||||
|
@ -372,7 +372,7 @@ The following are the options that bc(1) accepts.
|
||||
: Makes bc(1) print all numbers greater than **-1** and less than **1**, and
|
||||
not equal to **0**, with a leading zero.
|
||||
|
||||
This can be set for individual numbers with the **plz(x)**, plznl(x)**,
|
||||
This can be set for individual numbers with the **plz(x)**, **plznl(x)**,
|
||||
**pnlz(x)**, and **pnlznl(x)** functions in the extended math library (see
|
||||
the **LIBRARY** section).
|
||||
|
||||
|
@ -25,7 +25,7 @@
|
||||
.\" ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
|
||||
.\" POSSIBILITY OF SUCH DAMAGE.
|
||||
.\"
|
||||
.TH "BC" "1" "October 2022" "Gavin D. Howard" "General Commands Manual"
|
||||
.TH "BC" "1" "February 2023" "Gavin D. Howard" "General Commands Manual"
|
||||
.nh
|
||||
.ad l
|
||||
.SH NAME
|
||||
@ -477,8 +477,8 @@ Makes bc(1) print all numbers greater than \f[B]-1\f[R] and less than
|
||||
.RS
|
||||
.PP
|
||||
This can be set for individual numbers with the \f[B]plz(x)\f[R],
|
||||
plznl(x)**, \f[B]pnlz(x)\f[R], and \f[B]pnlznl(x)\f[R] functions in the
|
||||
extended math library (see the \f[B]LIBRARY\f[R] section).
|
||||
\f[B]plznl(x)\f[R], \f[B]pnlz(x)\f[R], and \f[B]pnlznl(x)\f[R] functions
|
||||
in the extended math library (see the \f[B]LIBRARY\f[R] section).
|
||||
.PP
|
||||
This is a \f[B]non-portable extension\f[R].
|
||||
.RE
|
||||
|
@ -372,7 +372,7 @@ The following are the options that bc(1) accepts.
|
||||
: Makes bc(1) print all numbers greater than **-1** and less than **1**, and
|
||||
not equal to **0**, with a leading zero.
|
||||
|
||||
This can be set for individual numbers with the **plz(x)**, plznl(x)**,
|
||||
This can be set for individual numbers with the **plz(x)**, **plznl(x)**,
|
||||
**pnlz(x)**, and **pnlznl(x)** functions in the extended math library (see
|
||||
the **LIBRARY** section).
|
||||
|
||||
|
@ -25,7 +25,7 @@
|
||||
.\" ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
|
||||
.\" POSSIBILITY OF SUCH DAMAGE.
|
||||
.\"
|
||||
.TH "BCL" "3" "October 2022" "Gavin D. Howard" "Libraries Manual"
|
||||
.TH "BCL" "3" "February 2023" "Gavin D. Howard" "Libraries Manual"
|
||||
.nh
|
||||
.ad l
|
||||
.SH NAME
|
||||
|
@ -25,7 +25,7 @@
|
||||
.\" ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
|
||||
.\" POSSIBILITY OF SUCH DAMAGE.
|
||||
.\"
|
||||
.TH "DC" "1" "October 2022" "Gavin D. Howard" "General Commands Manual"
|
||||
.TH "DC" "1" "February 2023" "Gavin D. Howard" "General Commands Manual"
|
||||
.nh
|
||||
.ad l
|
||||
.SH Name
|
||||
@ -271,10 +271,6 @@ Makes dc(1) print all numbers greater than \f[B]-1\f[R] and less than
|
||||
\f[B]1\f[R], and not equal to \f[B]0\f[R], with a leading zero.
|
||||
.RS
|
||||
.PP
|
||||
This can be set for individual numbers with the \f[B]plz(x)\f[R],
|
||||
plznl(x)**, \f[B]pnlz(x)\f[R], and \f[B]pnlznl(x)\f[R] functions in the
|
||||
extended math library (see the \f[B]LIBRARY\f[R] section).
|
||||
.PP
|
||||
This is a \f[B]non-portable extension\f[R].
|
||||
.RE
|
||||
.PP
|
||||
@ -1255,6 +1251,12 @@ section).
|
||||
Pushes the line length set by \f[B]DC_LINE_LENGTH\f[R] (see the
|
||||
\f[B]ENVIRONMENT VARIABLES\f[R] section) onto the stack.
|
||||
.TP
|
||||
\f[B]gx\f[R]
|
||||
Pushes \f[B]1\f[R] onto the stack if extended register mode is on,
|
||||
\f[B]0\f[R] otherwise.
|
||||
See the \f[I]Extended Register Mode\f[R] subsection of the
|
||||
\f[B]REGISTERS\f[R] section for more information.
|
||||
.TP
|
||||
\f[B]gz\f[R]
|
||||
Pushes \f[B]0\f[R] onto the stack if the leading zero setting has not
|
||||
been enabled with the \f[B]-z\f[R] or \f[B]--leading-zeroes\f[R] options
|
||||
|
@ -224,10 +224,6 @@ The following are the options that dc(1) accepts.
|
||||
: Makes dc(1) print all numbers greater than **-1** and less than **1**, and
|
||||
not equal to **0**, with a leading zero.
|
||||
|
||||
This can be set for individual numbers with the **plz(x)**, plznl(x)**,
|
||||
**pnlz(x)**, and **pnlznl(x)** functions in the extended math library (see
|
||||
the **LIBRARY** section).
|
||||
|
||||
This is a **non-portable extension**.
|
||||
|
||||
All long options are **non-portable extensions**.
|
||||
@ -1087,6 +1083,12 @@ other character produces a parse error (see the **ERRORS** section).
|
||||
: Pushes the line length set by **DC_LINE_LENGTH** (see the **ENVIRONMENT
|
||||
VARIABLES** section) onto the stack.
|
||||
|
||||
**gx**
|
||||
|
||||
: Pushes **1** onto the stack if extended register mode is on, **0**
|
||||
otherwise. See the *Extended Register Mode* subsection of the **REGISTERS**
|
||||
section for more information.
|
||||
|
||||
**gz**
|
||||
|
||||
: Pushes **0** onto the stack if the leading zero setting has not been enabled
|
||||
|
@ -25,7 +25,7 @@
|
||||
.\" ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
|
||||
.\" POSSIBILITY OF SUCH DAMAGE.
|
||||
.\"
|
||||
.TH "DC" "1" "October 2022" "Gavin D. Howard" "General Commands Manual"
|
||||
.TH "DC" "1" "February 2023" "Gavin D. Howard" "General Commands Manual"
|
||||
.nh
|
||||
.ad l
|
||||
.SH Name
|
||||
@ -256,10 +256,6 @@ Makes dc(1) print all numbers greater than \f[B]-1\f[R] and less than
|
||||
\f[B]1\f[R], and not equal to \f[B]0\f[R], with a leading zero.
|
||||
.RS
|
||||
.PP
|
||||
This can be set for individual numbers with the \f[B]plz(x)\f[R],
|
||||
plznl(x)**, \f[B]pnlz(x)\f[R], and \f[B]pnlznl(x)\f[R] functions in the
|
||||
extended math library (see the \f[B]LIBRARY\f[R] section).
|
||||
.PP
|
||||
This is a \f[B]non-portable extension\f[R].
|
||||
.RE
|
||||
.PP
|
||||
@ -1040,6 +1036,12 @@ section).
|
||||
Pushes the line length set by \f[B]DC_LINE_LENGTH\f[R] (see the
|
||||
\f[B]ENVIRONMENT VARIABLES\f[R] section) onto the stack.
|
||||
.TP
|
||||
\f[B]gx\f[R]
|
||||
Pushes \f[B]1\f[R] onto the stack if extended register mode is on,
|
||||
\f[B]0\f[R] otherwise.
|
||||
See the \f[I]Extended Register Mode\f[R] subsection of the
|
||||
\f[B]REGISTERS\f[R] section for more information.
|
||||
.TP
|
||||
\f[B]gz\f[R]
|
||||
Pushes \f[B]0\f[R] onto the stack if the leading zero setting has not
|
||||
been enabled with the \f[B]-z\f[R] or \f[B]--leading-zeroes\f[R] options
|
||||
|
@ -215,10 +215,6 @@ The following are the options that dc(1) accepts.
|
||||
: Makes dc(1) print all numbers greater than **-1** and less than **1**, and
|
||||
not equal to **0**, with a leading zero.
|
||||
|
||||
This can be set for individual numbers with the **plz(x)**, plznl(x)**,
|
||||
**pnlz(x)**, and **pnlznl(x)** functions in the extended math library (see
|
||||
the **LIBRARY** section).
|
||||
|
||||
This is a **non-portable extension**.
|
||||
|
||||
All long options are **non-portable extensions**.
|
||||
@ -918,6 +914,12 @@ other character produces a parse error (see the **ERRORS** section).
|
||||
: Pushes the line length set by **DC_LINE_LENGTH** (see the **ENVIRONMENT
|
||||
VARIABLES** section) onto the stack.
|
||||
|
||||
**gx**
|
||||
|
||||
: Pushes **1** onto the stack if extended register mode is on, **0**
|
||||
otherwise. See the *Extended Register Mode* subsection of the **REGISTERS**
|
||||
section for more information.
|
||||
|
||||
**gz**
|
||||
|
||||
: Pushes **0** onto the stack if the leading zero setting has not been enabled
|
||||
|
@ -25,7 +25,7 @@
|
||||
.\" ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
|
||||
.\" POSSIBILITY OF SUCH DAMAGE.
|
||||
.\"
|
||||
.TH "DC" "1" "October 2022" "Gavin D. Howard" "General Commands Manual"
|
||||
.TH "DC" "1" "February 2023" "Gavin D. Howard" "General Commands Manual"
|
||||
.nh
|
||||
.ad l
|
||||
.SH Name
|
||||
@ -256,10 +256,6 @@ Makes dc(1) print all numbers greater than \f[B]-1\f[R] and less than
|
||||
\f[B]1\f[R], and not equal to \f[B]0\f[R], with a leading zero.
|
||||
.RS
|
||||
.PP
|
||||
This can be set for individual numbers with the \f[B]plz(x)\f[R],
|
||||
plznl(x)**, \f[B]pnlz(x)\f[R], and \f[B]pnlznl(x)\f[R] functions in the
|
||||
extended math library (see the \f[B]LIBRARY\f[R] section).
|
||||
.PP
|
||||
This is a \f[B]non-portable extension\f[R].
|
||||
.RE
|
||||
.PP
|
||||
@ -1040,6 +1036,12 @@ section).
|
||||
Pushes the line length set by \f[B]DC_LINE_LENGTH\f[R] (see the
|
||||
\f[B]ENVIRONMENT VARIABLES\f[R] section) onto the stack.
|
||||
.TP
|
||||
\f[B]gx\f[R]
|
||||
Pushes \f[B]1\f[R] onto the stack if extended register mode is on,
|
||||
\f[B]0\f[R] otherwise.
|
||||
See the \f[I]Extended Register Mode\f[R] subsection of the
|
||||
\f[B]REGISTERS\f[R] section for more information.
|
||||
.TP
|
||||
\f[B]gz\f[R]
|
||||
Pushes \f[B]0\f[R] onto the stack if the leading zero setting has not
|
||||
been enabled with the \f[B]-z\f[R] or \f[B]--leading-zeroes\f[R] options
|
||||
|
@ -215,10 +215,6 @@ The following are the options that dc(1) accepts.
|
||||
: Makes dc(1) print all numbers greater than **-1** and less than **1**, and
|
||||
not equal to **0**, with a leading zero.
|
||||
|
||||
This can be set for individual numbers with the **plz(x)**, plznl(x)**,
|
||||
**pnlz(x)**, and **pnlznl(x)** functions in the extended math library (see
|
||||
the **LIBRARY** section).
|
||||
|
||||
This is a **non-portable extension**.
|
||||
|
||||
All long options are **non-portable extensions**.
|
||||
@ -918,6 +914,12 @@ other character produces a parse error (see the **ERRORS** section).
|
||||
: Pushes the line length set by **DC_LINE_LENGTH** (see the **ENVIRONMENT
|
||||
VARIABLES** section) onto the stack.
|
||||
|
||||
**gx**
|
||||
|
||||
: Pushes **1** onto the stack if extended register mode is on, **0**
|
||||
otherwise. See the *Extended Register Mode* subsection of the **REGISTERS**
|
||||
section for more information.
|
||||
|
||||
**gz**
|
||||
|
||||
: Pushes **0** onto the stack if the leading zero setting has not been enabled
|
||||
|
@ -25,7 +25,7 @@
|
||||
.\" ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
|
||||
.\" POSSIBILITY OF SUCH DAMAGE.
|
||||
.\"
|
||||
.TH "DC" "1" "October 2022" "Gavin D. Howard" "General Commands Manual"
|
||||
.TH "DC" "1" "February 2023" "Gavin D. Howard" "General Commands Manual"
|
||||
.nh
|
||||
.ad l
|
||||
.SH Name
|
||||
@ -256,10 +256,6 @@ Makes dc(1) print all numbers greater than \f[B]-1\f[R] and less than
|
||||
\f[B]1\f[R], and not equal to \f[B]0\f[R], with a leading zero.
|
||||
.RS
|
||||
.PP
|
||||
This can be set for individual numbers with the \f[B]plz(x)\f[R],
|
||||
plznl(x)**, \f[B]pnlz(x)\f[R], and \f[B]pnlznl(x)\f[R] functions in the
|
||||
extended math library (see the \f[B]LIBRARY\f[R] section).
|
||||
.PP
|
||||
This is a \f[B]non-portable extension\f[R].
|
||||
.RE
|
||||
.PP
|
||||
@ -1040,6 +1036,12 @@ section).
|
||||
Pushes the line length set by \f[B]DC_LINE_LENGTH\f[R] (see the
|
||||
\f[B]ENVIRONMENT VARIABLES\f[R] section) onto the stack.
|
||||
.TP
|
||||
\f[B]gx\f[R]
|
||||
Pushes \f[B]1\f[R] onto the stack if extended register mode is on,
|
||||
\f[B]0\f[R] otherwise.
|
||||
See the \f[I]Extended Register Mode\f[R] subsection of the
|
||||
\f[B]REGISTERS\f[R] section for more information.
|
||||
.TP
|
||||
\f[B]gz\f[R]
|
||||
Pushes \f[B]0\f[R] onto the stack if the leading zero setting has not
|
||||
been enabled with the \f[B]-z\f[R] or \f[B]--leading-zeroes\f[R] options
|
||||
|
@ -215,10 +215,6 @@ The following are the options that dc(1) accepts.
|
||||
: Makes dc(1) print all numbers greater than **-1** and less than **1**, and
|
||||
not equal to **0**, with a leading zero.
|
||||
|
||||
This can be set for individual numbers with the **plz(x)**, plznl(x)**,
|
||||
**pnlz(x)**, and **pnlznl(x)** functions in the extended math library (see
|
||||
the **LIBRARY** section).
|
||||
|
||||
This is a **non-portable extension**.
|
||||
|
||||
All long options are **non-portable extensions**.
|
||||
@ -918,6 +914,12 @@ other character produces a parse error (see the **ERRORS** section).
|
||||
: Pushes the line length set by **DC_LINE_LENGTH** (see the **ENVIRONMENT
|
||||
VARIABLES** section) onto the stack.
|
||||
|
||||
**gx**
|
||||
|
||||
: Pushes **1** onto the stack if extended register mode is on, **0**
|
||||
otherwise. See the *Extended Register Mode* subsection of the **REGISTERS**
|
||||
section for more information.
|
||||
|
||||
**gz**
|
||||
|
||||
: Pushes **0** onto the stack if the leading zero setting has not been enabled
|
||||
|
@ -25,7 +25,7 @@
|
||||
.\" ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
|
||||
.\" POSSIBILITY OF SUCH DAMAGE.
|
||||
.\"
|
||||
.TH "DC" "1" "October 2022" "Gavin D. Howard" "General Commands Manual"
|
||||
.TH "DC" "1" "February 2023" "Gavin D. Howard" "General Commands Manual"
|
||||
.nh
|
||||
.ad l
|
||||
.SH Name
|
||||
@ -256,10 +256,6 @@ Makes dc(1) print all numbers greater than \f[B]-1\f[R] and less than
|
||||
\f[B]1\f[R], and not equal to \f[B]0\f[R], with a leading zero.
|
||||
.RS
|
||||
.PP
|
||||
This can be set for individual numbers with the \f[B]plz(x)\f[R],
|
||||
plznl(x)**, \f[B]pnlz(x)\f[R], and \f[B]pnlznl(x)\f[R] functions in the
|
||||
extended math library (see the \f[B]LIBRARY\f[R] section).
|
||||
.PP
|
||||
This is a \f[B]non-portable extension\f[R].
|
||||
.RE
|
||||
.PP
|
||||
@ -1040,6 +1036,12 @@ section).
|
||||
Pushes the line length set by \f[B]DC_LINE_LENGTH\f[R] (see the
|
||||
\f[B]ENVIRONMENT VARIABLES\f[R] section) onto the stack.
|
||||
.TP
|
||||
\f[B]gx\f[R]
|
||||
Pushes \f[B]1\f[R] onto the stack if extended register mode is on,
|
||||
\f[B]0\f[R] otherwise.
|
||||
See the \f[I]Extended Register Mode\f[R] subsection of the
|
||||
\f[B]REGISTERS\f[R] section for more information.
|
||||
.TP
|
||||
\f[B]gz\f[R]
|
||||
Pushes \f[B]0\f[R] onto the stack if the leading zero setting has not
|
||||
been enabled with the \f[B]-z\f[R] or \f[B]--leading-zeroes\f[R] options
|
||||
|
@ -215,10 +215,6 @@ The following are the options that dc(1) accepts.
|
||||
: Makes dc(1) print all numbers greater than **-1** and less than **1**, and
|
||||
not equal to **0**, with a leading zero.
|
||||
|
||||
This can be set for individual numbers with the **plz(x)**, plznl(x)**,
|
||||
**pnlz(x)**, and **pnlznl(x)** functions in the extended math library (see
|
||||
the **LIBRARY** section).
|
||||
|
||||
This is a **non-portable extension**.
|
||||
|
||||
All long options are **non-portable extensions**.
|
||||
@ -918,6 +914,12 @@ other character produces a parse error (see the **ERRORS** section).
|
||||
: Pushes the line length set by **DC_LINE_LENGTH** (see the **ENVIRONMENT
|
||||
VARIABLES** section) onto the stack.
|
||||
|
||||
**gx**
|
||||
|
||||
: Pushes **1** onto the stack if extended register mode is on, **0**
|
||||
otherwise. See the *Extended Register Mode* subsection of the **REGISTERS**
|
||||
section for more information.
|
||||
|
||||
**gz**
|
||||
|
||||
: Pushes **0** onto the stack if the leading zero setting has not been enabled
|
||||
|
@ -25,7 +25,7 @@
|
||||
.\" ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
|
||||
.\" POSSIBILITY OF SUCH DAMAGE.
|
||||
.\"
|
||||
.TH "DC" "1" "October 2022" "Gavin D. Howard" "General Commands Manual"
|
||||
.TH "DC" "1" "February 2023" "Gavin D. Howard" "General Commands Manual"
|
||||
.nh
|
||||
.ad l
|
||||
.SH Name
|
||||
@ -271,10 +271,6 @@ Makes dc(1) print all numbers greater than \f[B]-1\f[R] and less than
|
||||
\f[B]1\f[R], and not equal to \f[B]0\f[R], with a leading zero.
|
||||
.RS
|
||||
.PP
|
||||
This can be set for individual numbers with the \f[B]plz(x)\f[R],
|
||||
plznl(x)**, \f[B]pnlz(x)\f[R], and \f[B]pnlznl(x)\f[R] functions in the
|
||||
extended math library (see the \f[B]LIBRARY\f[R] section).
|
||||
.PP
|
||||
This is a \f[B]non-portable extension\f[R].
|
||||
.RE
|
||||
.PP
|
||||
@ -1255,6 +1251,12 @@ section).
|
||||
Pushes the line length set by \f[B]DC_LINE_LENGTH\f[R] (see the
|
||||
\f[B]ENVIRONMENT VARIABLES\f[R] section) onto the stack.
|
||||
.TP
|
||||
\f[B]gx\f[R]
|
||||
Pushes \f[B]1\f[R] onto the stack if extended register mode is on,
|
||||
\f[B]0\f[R] otherwise.
|
||||
See the \f[I]Extended Register Mode\f[R] subsection of the
|
||||
\f[B]REGISTERS\f[R] section for more information.
|
||||
.TP
|
||||
\f[B]gz\f[R]
|
||||
Pushes \f[B]0\f[R] onto the stack if the leading zero setting has not
|
||||
been enabled with the \f[B]-z\f[R] or \f[B]--leading-zeroes\f[R] options
|
||||
|
@ -224,10 +224,6 @@ The following are the options that dc(1) accepts.
|
||||
: Makes dc(1) print all numbers greater than **-1** and less than **1**, and
|
||||
not equal to **0**, with a leading zero.
|
||||
|
||||
This can be set for individual numbers with the **plz(x)**, plznl(x)**,
|
||||
**pnlz(x)**, and **pnlznl(x)** functions in the extended math library (see
|
||||
the **LIBRARY** section).
|
||||
|
||||
This is a **non-portable extension**.
|
||||
|
||||
All long options are **non-portable extensions**.
|
||||
@ -1087,6 +1083,12 @@ other character produces a parse error (see the **ERRORS** section).
|
||||
: Pushes the line length set by **DC_LINE_LENGTH** (see the **ENVIRONMENT
|
||||
VARIABLES** section) onto the stack.
|
||||
|
||||
**gx**
|
||||
|
||||
: Pushes **1** onto the stack if extended register mode is on, **0**
|
||||
otherwise. See the *Extended Register Mode* subsection of the **REGISTERS**
|
||||
section for more information.
|
||||
|
||||
**gz**
|
||||
|
||||
: Pushes **0** onto the stack if the leading zero setting has not been enabled
|
||||
|
@ -25,7 +25,7 @@
|
||||
.\" ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
|
||||
.\" POSSIBILITY OF SUCH DAMAGE.
|
||||
.\"
|
||||
.TH "DC" "1" "October 2022" "Gavin D. Howard" "General Commands Manual"
|
||||
.TH "DC" "1" "February 2023" "Gavin D. Howard" "General Commands Manual"
|
||||
.nh
|
||||
.ad l
|
||||
.SH Name
|
||||
@ -271,10 +271,6 @@ Makes dc(1) print all numbers greater than \f[B]-1\f[R] and less than
|
||||
\f[B]1\f[R], and not equal to \f[B]0\f[R], with a leading zero.
|
||||
.RS
|
||||
.PP
|
||||
This can be set for individual numbers with the \f[B]plz(x)\f[R],
|
||||
plznl(x)**, \f[B]pnlz(x)\f[R], and \f[B]pnlznl(x)\f[R] functions in the
|
||||
extended math library (see the \f[B]LIBRARY\f[R] section).
|
||||
.PP
|
||||
This is a \f[B]non-portable extension\f[R].
|
||||
.RE
|
||||
.PP
|
||||
@ -1255,6 +1251,12 @@ section).
|
||||
Pushes the line length set by \f[B]DC_LINE_LENGTH\f[R] (see the
|
||||
\f[B]ENVIRONMENT VARIABLES\f[R] section) onto the stack.
|
||||
.TP
|
||||
\f[B]gx\f[R]
|
||||
Pushes \f[B]1\f[R] onto the stack if extended register mode is on,
|
||||
\f[B]0\f[R] otherwise.
|
||||
See the \f[I]Extended Register Mode\f[R] subsection of the
|
||||
\f[B]REGISTERS\f[R] section for more information.
|
||||
.TP
|
||||
\f[B]gz\f[R]
|
||||
Pushes \f[B]0\f[R] onto the stack if the leading zero setting has not
|
||||
been enabled with the \f[B]-z\f[R] or \f[B]--leading-zeroes\f[R] options
|
||||
|
@ -224,10 +224,6 @@ The following are the options that dc(1) accepts.
|
||||
: Makes dc(1) print all numbers greater than **-1** and less than **1**, and
|
||||
not equal to **0**, with a leading zero.
|
||||
|
||||
This can be set for individual numbers with the **plz(x)**, plznl(x)**,
|
||||
**pnlz(x)**, and **pnlznl(x)** functions in the extended math library (see
|
||||
the **LIBRARY** section).
|
||||
|
||||
This is a **non-portable extension**.
|
||||
|
||||
All long options are **non-portable extensions**.
|
||||
@ -1087,6 +1083,12 @@ other character produces a parse error (see the **ERRORS** section).
|
||||
: Pushes the line length set by **DC_LINE_LENGTH** (see the **ENVIRONMENT
|
||||
VARIABLES** section) onto the stack.
|
||||
|
||||
**gx**
|
||||
|
||||
: Pushes **1** onto the stack if extended register mode is on, **0**
|
||||
otherwise. See the *Extended Register Mode* subsection of the **REGISTERS**
|
||||
section for more information.
|
||||
|
||||
**gz**
|
||||
|
||||
: Pushes **0** onto the stack if the leading zero setting has not been enabled
|
||||
|
@ -25,7 +25,7 @@
|
||||
.\" ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
|
||||
.\" POSSIBILITY OF SUCH DAMAGE.
|
||||
.\"
|
||||
.TH "DC" "1" "October 2022" "Gavin D. Howard" "General Commands Manual"
|
||||
.TH "DC" "1" "February 2023" "Gavin D. Howard" "General Commands Manual"
|
||||
.nh
|
||||
.ad l
|
||||
.SH Name
|
||||
@ -271,10 +271,6 @@ Makes dc(1) print all numbers greater than \f[B]-1\f[R] and less than
|
||||
\f[B]1\f[R], and not equal to \f[B]0\f[R], with a leading zero.
|
||||
.RS
|
||||
.PP
|
||||
This can be set for individual numbers with the \f[B]plz(x)\f[R],
|
||||
plznl(x)**, \f[B]pnlz(x)\f[R], and \f[B]pnlznl(x)\f[R] functions in the
|
||||
extended math library (see the \f[B]LIBRARY\f[R] section).
|
||||
.PP
|
||||
This is a \f[B]non-portable extension\f[R].
|
||||
.RE
|
||||
.PP
|
||||
@ -1255,6 +1251,12 @@ section).
|
||||
Pushes the line length set by \f[B]DC_LINE_LENGTH\f[R] (see the
|
||||
\f[B]ENVIRONMENT VARIABLES\f[R] section) onto the stack.
|
||||
.TP
|
||||
\f[B]gx\f[R]
|
||||
Pushes \f[B]1\f[R] onto the stack if extended register mode is on,
|
||||
\f[B]0\f[R] otherwise.
|
||||
See the \f[I]Extended Register Mode\f[R] subsection of the
|
||||
\f[B]REGISTERS\f[R] section for more information.
|
||||
.TP
|
||||
\f[B]gz\f[R]
|
||||
Pushes \f[B]0\f[R] onto the stack if the leading zero setting has not
|
||||
been enabled with the \f[B]-z\f[R] or \f[B]--leading-zeroes\f[R] options
|
||||
|
@ -224,10 +224,6 @@ The following are the options that dc(1) accepts.
|
||||
: Makes dc(1) print all numbers greater than **-1** and less than **1**, and
|
||||
not equal to **0**, with a leading zero.
|
||||
|
||||
This can be set for individual numbers with the **plz(x)**, plznl(x)**,
|
||||
**pnlz(x)**, and **pnlznl(x)** functions in the extended math library (see
|
||||
the **LIBRARY** section).
|
||||
|
||||
This is a **non-portable extension**.
|
||||
|
||||
All long options are **non-portable extensions**.
|
||||
@ -1087,6 +1083,12 @@ other character produces a parse error (see the **ERRORS** section).
|
||||
: Pushes the line length set by **DC_LINE_LENGTH** (see the **ENVIRONMENT
|
||||
VARIABLES** section) onto the stack.
|
||||
|
||||
**gx**
|
||||
|
||||
: Pushes **1** onto the stack if extended register mode is on, **0**
|
||||
otherwise. See the *Extended Register Mode* subsection of the **REGISTERS**
|
||||
section for more information.
|
||||
|
||||
**gz**
|
||||
|
||||
: Pushes **0** onto the stack if the leading zero setting has not been enabled
|
||||
|
@ -60,6 +60,12 @@ fi
|
||||
# If it's a symlink, create an equivalent in the install directory.
|
||||
for exe in $bindir/*; do
|
||||
|
||||
# Skip any directories in case the bin/ directory is also used as the
|
||||
# prefix.
|
||||
if [ -d "$exe" ]; then
|
||||
continue
|
||||
fi
|
||||
|
||||
base=$(basename "$exe")
|
||||
|
||||
if [ -L "$exe" ]; then
|
||||
|
@ -29,6 +29,8 @@
|
||||
|
||||
scriptdir=$(dirname "$0")
|
||||
|
||||
. "$scriptdir/functions.sh"
|
||||
|
||||
cd "$scriptdir/.."
|
||||
|
||||
if [ "$#" -gt 0 ]; then
|
||||
|
@ -32,6 +32,11 @@ usage() {
|
||||
exit 1
|
||||
}
|
||||
|
||||
script="$0"
|
||||
scriptdir=$(dirname "$script")
|
||||
|
||||
. "$scriptdir/functions.sh"
|
||||
|
||||
# Command-line processing.
|
||||
test "$#" -gt 1 || usage
|
||||
|
||||
|
@ -27,7 +27,10 @@
|
||||
# POSSIBILITY OF SUCH DAMAGE.
|
||||
#
|
||||
|
||||
scriptdir=$(dirname "$0")
|
||||
script="$0"
|
||||
scriptdir=$(dirname "$script")
|
||||
|
||||
. "$scriptdir/functions.sh"
|
||||
|
||||
cd "$scriptdir/.."
|
||||
|
||||
|
@ -184,11 +184,12 @@ all_locales=0
|
||||
while getopts "l" opt; do
|
||||
|
||||
case "$opt" in
|
||||
l) all_locales=1 ; shift ;;
|
||||
l) all_locales=1 ;;
|
||||
?) usage "Invalid option: $opt" ;;
|
||||
esac
|
||||
|
||||
done
|
||||
shift $(($OPTIND - 1))
|
||||
|
||||
test "$#" -ge 2 || usage "Must have at least two arguments"
|
||||
|
||||
|
@ -41,7 +41,7 @@ set -e
|
||||
|
||||
if test "$mkdirp" ; then
|
||||
umask 022
|
||||
case "$2" in
|
||||
case "$dst" in
|
||||
*/*) mkdir -p "${dst%/*}" ;;
|
||||
esac
|
||||
fi
|
||||
@ -51,15 +51,15 @@ trap 'rm -f "$tmp"' EXIT INT QUIT TERM HUP
|
||||
umask 077
|
||||
|
||||
if test "$symlink" ; then
|
||||
ln -s "$1" "$tmp"
|
||||
ln -s "$src" "$tmp"
|
||||
else
|
||||
cat < "$1" > "$tmp"
|
||||
cat < "$src" > "$tmp"
|
||||
chmod "$mode" "$tmp"
|
||||
fi
|
||||
|
||||
mv -f "$tmp" "$2"
|
||||
test -d "$2" && {
|
||||
rm -f "$2/$tmp"
|
||||
mv -f "$tmp" "$dst"
|
||||
test -d "$dst" && {
|
||||
rm -f "$dst/$tmp"
|
||||
printf "%s: %s is a directory\n" "$0" "$dst" 1>&2
|
||||
exit 1
|
||||
}
|
||||
|
@ -345,7 +345,7 @@ bc_args(int argc, char* argv[], bool exit_exprs, BcBigDig* scale,
|
||||
}
|
||||
#endif // DC_ENABLED
|
||||
|
||||
#ifndef NDEBUG
|
||||
#if BC_DEBUG
|
||||
// We shouldn't get here because bc_opt_error()/bc_error() should
|
||||
// longjmp() out.
|
||||
case '?':
|
||||
@ -357,7 +357,7 @@ bc_args(int argc, char* argv[], bool exit_exprs, BcBigDig* scale,
|
||||
abort();
|
||||
#endif // !BC_CLANG
|
||||
}
|
||||
#endif // NDEBUG
|
||||
#endif // BC_DEBUG
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -1888,6 +1888,7 @@ bc_parse_stmt(BcParse* p)
|
||||
case BC_LEX_KW_AUTO:
|
||||
case BC_LEX_KW_DEFINE:
|
||||
#if DC_ENABLED
|
||||
case BC_LEX_EXTENDED_REGISTERS:
|
||||
case BC_LEX_EQ_NO_REG:
|
||||
case BC_LEX_COLON:
|
||||
case BC_LEX_EXECUTE:
|
||||
@ -2436,6 +2437,7 @@ bc_parse_expr_err(BcParse* p, uint8_t flags, BcParseNext next)
|
||||
case BC_LEX_KW_STREAM:
|
||||
case BC_LEX_KW_ELSE:
|
||||
#if DC_ENABLED
|
||||
case BC_LEX_EXTENDED_REGISTERS:
|
||||
case BC_LEX_EQ_NO_REG:
|
||||
case BC_LEX_COLON:
|
||||
case BC_LEX_EXECUTE:
|
||||
@ -2462,11 +2464,11 @@ bc_parse_expr_err(BcParse* p, uint8_t flags, BcParseNext next)
|
||||
case BC_LEX_ARRAY_LENGTH:
|
||||
#endif // DC_ENABLED
|
||||
{
|
||||
#ifndef NDEBUG
|
||||
#if BC_DEBUG
|
||||
// We should never get here, even in debug builds.
|
||||
bc_parse_err(p, BC_ERR_PARSE_TOKEN);
|
||||
break;
|
||||
#endif // NDEBUG
|
||||
#endif // BC_DEBUG
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -308,9 +308,9 @@ const BcVecFree bc_vec_dtors[] = {
|
||||
bc_vec_free,
|
||||
bc_num_free,
|
||||
#if !BC_ENABLE_LIBRARY
|
||||
#ifndef NDEBUG
|
||||
#if BC_DEBUG
|
||||
bc_func_free,
|
||||
#endif // NDEBUG
|
||||
#endif // BC_DEBUG
|
||||
bc_slab_free,
|
||||
bc_const_free,
|
||||
bc_result_free,
|
||||
@ -1199,12 +1199,12 @@ const uchar dc_parse_insts[] = {
|
||||
#if BC_ENABLED
|
||||
BC_INST_INVALID,
|
||||
#endif // BC_ENABLED
|
||||
BC_INST_LEADING_ZERO, BC_INST_PRINT_STREAM, BC_INST_INVALID,
|
||||
BC_INST_REL_EQ, BC_INST_INVALID, BC_INST_EXECUTE,
|
||||
BC_INST_PRINT_STACK, BC_INST_CLEAR_STACK, BC_INST_INVALID,
|
||||
BC_INST_STACK_LEN, BC_INST_DUPLICATE, BC_INST_SWAP,
|
||||
BC_INST_POP, BC_INST_INVALID, BC_INST_INVALID,
|
||||
BC_INST_INVALID,
|
||||
BC_INST_LEADING_ZERO, BC_INST_PRINT_STREAM, BC_INST_INVALID,
|
||||
BC_INST_EXTENDED_REGISTERS, BC_INST_REL_EQ, BC_INST_INVALID,
|
||||
BC_INST_EXECUTE, BC_INST_PRINT_STACK, BC_INST_CLEAR_STACK,
|
||||
BC_INST_INVALID, BC_INST_STACK_LEN, BC_INST_DUPLICATE,
|
||||
BC_INST_SWAP, BC_INST_POP, BC_INST_INVALID,
|
||||
BC_INST_INVALID, BC_INST_INVALID,
|
||||
#if BC_ENABLE_EXTRA_MATH
|
||||
BC_INST_INVALID,
|
||||
#endif // BC_ENABLE_EXTRA_MATH
|
||||
|
@ -278,6 +278,7 @@ dc_lex_token(BcLex* l)
|
||||
c2 = l->buf[l->i];
|
||||
|
||||
if (c2 == 'l') l->t = BC_LEX_KW_LINE_LENGTH;
|
||||
else if (c2 == 'x') l->t = BC_LEX_EXTENDED_REGISTERS;
|
||||
else if (c2 == 'z') l->t = BC_LEX_KW_LEADING_ZERO;
|
||||
else bc_lex_invalidChar(l, c2);
|
||||
|
||||
|
@ -349,6 +349,7 @@ dc_parse_token(BcParse* p, BcLexType t, uint8_t flags)
|
||||
case BC_LEX_KW_LEADING_ZERO:
|
||||
case BC_LEX_KW_STREAM:
|
||||
case BC_LEX_KW_ELSE:
|
||||
case BC_LEX_EXTENDED_REGISTERS:
|
||||
case BC_LEX_EQ_NO_REG:
|
||||
case BC_LEX_EXECUTE:
|
||||
case BC_LEX_PRINT_STACK:
|
||||
|
@ -336,7 +336,7 @@ bc_file_vprintf(BcFile* restrict f, const char* fmt, va_list args)
|
||||
|
||||
bc_file_puts(f, bc_flush_none, s);
|
||||
}
|
||||
#ifndef NDEBUG
|
||||
#if BC_DEBUG
|
||||
// We only print signed integers in debug code.
|
||||
else if (c == 'd')
|
||||
{
|
||||
@ -357,7 +357,7 @@ bc_file_vprintf(BcFile* restrict f, const char* fmt, va_list args)
|
||||
bc_file_puts(f, bc_flush_none, buf);
|
||||
}
|
||||
}
|
||||
#endif // NDEBUG
|
||||
#endif // BC_DEBUG
|
||||
else
|
||||
{
|
||||
unsigned long long ull;
|
||||
|
@ -2187,11 +2187,11 @@ bc_history_free(BcHistory* h)
|
||||
SetConsoleMode(GetStdHandle(STD_INPUT_HANDLE), h->orig_in);
|
||||
SetConsoleMode(GetStdHandle(STD_OUTPUT_HANDLE), h->orig_out);
|
||||
#endif // _WIN32
|
||||
#ifndef NDEBUG
|
||||
#if BC_DEBUG
|
||||
bc_vec_free(&h->buf);
|
||||
bc_vec_free(&h->history);
|
||||
bc_vec_free(&h->extras);
|
||||
#endif // NDEBUG
|
||||
#endif // BC_DEBUG
|
||||
}
|
||||
|
||||
#if BC_DEBUG_CODE
|
||||
|
@ -136,7 +136,7 @@ bc_func_reset(BcFunc* f)
|
||||
#endif // BC_ENABLED
|
||||
}
|
||||
|
||||
#ifndef NDEBUG
|
||||
#if BC_DEBUG
|
||||
void
|
||||
bc_func_free(void* func)
|
||||
{
|
||||
@ -155,7 +155,7 @@ bc_func_free(void* func)
|
||||
}
|
||||
#endif // BC_ENABLED
|
||||
}
|
||||
#endif // NDEBUG
|
||||
#endif // BC_DEBUG
|
||||
|
||||
void
|
||||
bc_array_init(BcVec* a, bool nums)
|
||||
@ -302,10 +302,10 @@ bc_result_copy(BcResult* d, BcResult* src)
|
||||
case BC_RESULT_VOID:
|
||||
case BC_RESULT_LAST:
|
||||
{
|
||||
#ifndef NDEBUG
|
||||
#if BC_DEBUG
|
||||
// We should *never* try copying either of these.
|
||||
abort();
|
||||
#endif // NDEBUG
|
||||
#endif // BC_DEBUG
|
||||
}
|
||||
#endif // BC_ENABLED
|
||||
}
|
||||
|
@ -201,6 +201,8 @@ bcl_init(void)
|
||||
|
||||
err:
|
||||
|
||||
BC_FUNC_FOOTER(vm, e);
|
||||
|
||||
// This is why we had to set them to NULL.
|
||||
if (BC_ERR(vm != NULL && vm->err))
|
||||
{
|
||||
@ -211,8 +213,6 @@ bcl_init(void)
|
||||
free(vm);
|
||||
}
|
||||
|
||||
BC_FUNC_FOOTER(vm, e);
|
||||
|
||||
return e;
|
||||
}
|
||||
|
||||
|
@ -3474,11 +3474,11 @@ bc_num_len(const BcNum* restrict n)
|
||||
void
|
||||
bc_num_parse(BcNum* restrict n, const char* restrict val, BcBigDig base)
|
||||
{
|
||||
#ifndef NDEBUG
|
||||
#if BC_DEBUG
|
||||
#if BC_ENABLE_LIBRARY
|
||||
BcVm* vm = bcl_getspecific();
|
||||
#endif // BC_ENABLE_LIBRARY
|
||||
#endif // NDEBUG
|
||||
#endif // BC_DEBUG
|
||||
|
||||
assert(n != NULL && val != NULL && base);
|
||||
assert(base >= BC_NUM_MIN_BASE && base <= vm->maxes[BC_PROG_GLOBALS_IBASE]);
|
||||
@ -3539,11 +3539,11 @@ bc_num_print(BcNum* restrict n, BcBigDig base, bool newline)
|
||||
BcBigDig
|
||||
bc_num_bigdig2(const BcNum* restrict n)
|
||||
{
|
||||
#ifndef NDEBUG
|
||||
#if BC_DEBUG
|
||||
#if BC_ENABLE_LIBRARY
|
||||
BcVm* vm = bcl_getspecific();
|
||||
#endif // BC_ENABLE_LIBRARY
|
||||
#endif // NDEBUG
|
||||
#endif // BC_DEBUG
|
||||
|
||||
// This function returns no errors because it's guaranteed to succeed if
|
||||
// its preconditions are met. Those preconditions include both n needs to
|
||||
@ -4256,11 +4256,11 @@ bc_num_modexp(BcNum* a, BcNum* b, BcNum* c, BcNum* restrict d)
|
||||
if (BC_ERR(BC_NUM_ZERO(c))) bc_err(BC_ERR_MATH_DIVIDE_BY_ZERO);
|
||||
if (BC_ERR(BC_NUM_NEG(b))) bc_err(BC_ERR_MATH_NEGATIVE);
|
||||
|
||||
#ifndef NDEBUG
|
||||
#if BC_DEBUG || BC_GCC
|
||||
// This is entirely for quieting a useless scan-build error.
|
||||
btemp.len = 0;
|
||||
ctemp.len = 0;
|
||||
#endif // NDEBUG
|
||||
#endif // BC_DEBUG || BC_GCC
|
||||
|
||||
// Eliminate fractional parts that are zero or error if they are not zero.
|
||||
if (BC_ERR(bc_num_nonInt(a, &atemp) || bc_num_nonInt(b, &btemp) ||
|
||||
|
@ -223,7 +223,7 @@ bc_parse_reset(BcParse* p)
|
||||
if (BC_ERR(vm->status)) BC_JMP;
|
||||
}
|
||||
|
||||
#ifndef NDEBUG
|
||||
#if BC_DEBUG
|
||||
void
|
||||
bc_parse_free(BcParse* p)
|
||||
{
|
||||
@ -244,7 +244,7 @@ bc_parse_free(BcParse* p)
|
||||
|
||||
bc_lex_free(&p->l);
|
||||
}
|
||||
#endif // NDEBUG
|
||||
#endif // BC_DEBUG
|
||||
|
||||
void
|
||||
bc_parse_init(BcParse* p, BcProgram* prog, size_t func)
|
||||
|
@ -411,12 +411,12 @@ bc_program_num(BcProgram* p, BcResult* r)
|
||||
// We should never get here; this is taken care of earlier because a
|
||||
// result is expected.
|
||||
case BC_RESULT_VOID:
|
||||
#ifndef NDEBUG
|
||||
#if BC_DEBUG
|
||||
{
|
||||
abort();
|
||||
// Fallthrough
|
||||
}
|
||||
#endif // NDEBUG
|
||||
#endif // BC_DEBUG
|
||||
case BC_RESULT_LAST:
|
||||
{
|
||||
n = &p->last;
|
||||
@ -839,14 +839,14 @@ bc_program_rand(BcProgram* p)
|
||||
|
||||
bc_program_pushBigdig(p, (BcBigDig) rand, BC_RESULT_TEMP);
|
||||
|
||||
#ifndef NDEBUG
|
||||
#if BC_DEBUG
|
||||
// This is just to ensure that the generated number is correct. I also use
|
||||
// braces because I declare every local at the top of the scope.
|
||||
{
|
||||
BcResult* r = bc_vec_top(&p->results);
|
||||
assert(BC_NUM_RDX_VALID_NP(r->d.n));
|
||||
}
|
||||
#endif // NDEBUG
|
||||
#endif // BC_DEBUG
|
||||
}
|
||||
#endif // BC_ENABLE_EXTRA_MATH
|
||||
|
||||
@ -1140,13 +1140,13 @@ bc_program_logical(BcProgram* p, uchar inst)
|
||||
cond = (cmp > 0);
|
||||
break;
|
||||
}
|
||||
#ifndef NDEBUG
|
||||
#if BC_DEBUG
|
||||
default:
|
||||
{
|
||||
// There is a bug if we get here.
|
||||
abort();
|
||||
}
|
||||
#endif // NDEBUG
|
||||
#endif // BC_DEBUG
|
||||
}
|
||||
}
|
||||
|
||||
@ -2689,12 +2689,20 @@ bc_program_globalSetting(BcProgram* p, uchar inst)
|
||||
BcBigDig val;
|
||||
|
||||
// Make sure the instruction is valid.
|
||||
#if DC_ENABLED
|
||||
assert((inst >= BC_INST_LINE_LENGTH && inst <= BC_INST_LEADING_ZERO) ||
|
||||
(BC_IS_DC && inst == BC_INST_EXTENDED_REGISTERS));
|
||||
#else // DC_ENABLED
|
||||
assert(inst >= BC_INST_LINE_LENGTH && inst <= BC_INST_LEADING_ZERO);
|
||||
#endif // DC_ENABLED
|
||||
|
||||
if (inst == BC_INST_LINE_LENGTH) val = (BcBigDig) vm->line_len;
|
||||
#if BC_ENABLED
|
||||
else if (inst == BC_INST_GLOBAL_STACKS) val = (BC_G != 0);
|
||||
#endif // BC_ENABLED
|
||||
#if DC_ENABLED
|
||||
else if (inst == BC_INST_EXTENDED_REGISTERS) val = (DC_X != 0);
|
||||
#endif // DC_ENABLED
|
||||
else val = (BC_Z != 0);
|
||||
|
||||
// Push the global.
|
||||
@ -2779,7 +2787,7 @@ bc_program_insertFunc(BcProgram* p, const char* name)
|
||||
return idx;
|
||||
}
|
||||
|
||||
#ifndef NDEBUG
|
||||
#if BC_DEBUG
|
||||
void
|
||||
bc_program_free(BcProgram* p)
|
||||
{
|
||||
@ -2826,7 +2834,7 @@ bc_program_free(BcProgram* p)
|
||||
if (BC_IS_DC) bc_vec_free(&p->tail_calls);
|
||||
#endif // DC_ENABLED
|
||||
}
|
||||
#endif // NDEBUG
|
||||
#endif // BC_DEBUG
|
||||
|
||||
void
|
||||
bc_program_init(BcProgram* p)
|
||||
@ -2883,11 +2891,11 @@ bc_program_init(BcProgram* p)
|
||||
if (BC_IS_BC) bc_num_init(&p->last, BC_NUM_DEF_SIZE);
|
||||
#endif // BC_ENABLED
|
||||
|
||||
#ifndef NDEBUG
|
||||
#if BC_DEBUG
|
||||
bc_vec_init(&p->fns, sizeof(BcFunc), BC_DTOR_FUNC);
|
||||
#else // NDEBUG
|
||||
#else // BC_DEBUG
|
||||
bc_vec_init(&p->fns, sizeof(BcFunc), BC_DTOR_NONE);
|
||||
#endif // NDEBUG
|
||||
#endif // BC_DEBUG
|
||||
bc_map_init(&p->fn_map);
|
||||
bc_program_insertFunc(p, bc_func_main);
|
||||
bc_program_insertFunc(p, bc_func_read);
|
||||
@ -3002,9 +3010,9 @@ bc_program_exec(BcProgram* p)
|
||||
BcNum* num;
|
||||
#endif // BC_ENABLED
|
||||
#if !BC_HAS_COMPUTED_GOTO
|
||||
#ifndef NDEBUG
|
||||
#if BC_DEBUG
|
||||
size_t jmp_bufs_len;
|
||||
#endif // NDEBUG
|
||||
#endif // BC_DEBUG
|
||||
#endif // !BC_HAS_COMPUTED_GOTO
|
||||
|
||||
#if BC_HAS_COMPUTED_GOTO
|
||||
@ -3042,9 +3050,9 @@ bc_program_exec(BcProgram* p)
|
||||
|
||||
#if !BC_HAS_COMPUTED_GOTO
|
||||
|
||||
#ifndef NDEBUG
|
||||
#if BC_DEBUG
|
||||
jmp_bufs_len = vm->jmp_bufs.len;
|
||||
#endif // NDEBUG
|
||||
#endif // BC_DEBUG
|
||||
|
||||
// This loop is the heart of the execution engine. It *is* the engine. For
|
||||
// computed goto, it is ignored.
|
||||
@ -3246,6 +3254,9 @@ bc_program_exec(BcProgram* p)
|
||||
#if BC_ENABLED
|
||||
BC_PROG_LBL(BC_INST_GLOBAL_STACKS):
|
||||
#endif // BC_ENABLED
|
||||
#if DC_ENABLED
|
||||
BC_PROG_LBL(BC_INST_EXTENDED_REGISTERS):
|
||||
#endif // DC_ENABLE
|
||||
BC_PROG_LBL(BC_INST_LEADING_ZERO):
|
||||
// clang-format on
|
||||
{
|
||||
@ -3669,9 +3680,9 @@ bc_program_exec(BcProgram* p)
|
||||
default:
|
||||
{
|
||||
BC_UNREACHABLE
|
||||
#if !defined(NDEBUG) && !BC_CLANG
|
||||
#if BC_DEBUG && !BC_CLANG
|
||||
abort();
|
||||
#endif // !defined(NDEBUG) && !BC_CLANG
|
||||
#endif // BC_DEBUG && !BC_CLANG
|
||||
}
|
||||
#endif // BC_HAS_COMPUTED_GOTO
|
||||
}
|
||||
@ -3688,12 +3699,12 @@ bc_program_exec(BcProgram* p)
|
||||
|
||||
#else // BC_HAS_COMPUTED_GOTO
|
||||
|
||||
#ifndef NDEBUG
|
||||
#if BC_DEBUG
|
||||
// This is to allow me to use a debugger to see the last instruction,
|
||||
// which will point to which function was the problem. But it's also a
|
||||
// good smoke test for error handling changes.
|
||||
assert(jmp_bufs_len == vm->jmp_bufs.len);
|
||||
#endif // NDEBUG
|
||||
#endif // BC_DEBUG
|
||||
|
||||
#endif // BC_HAS_COMPUTED_GOTO
|
||||
}
|
||||
|
@ -279,11 +279,11 @@ bc_read_file(const char* path)
|
||||
|
||||
assert(path != NULL);
|
||||
|
||||
#ifndef NDEBUG
|
||||
#if BC_DEBUG
|
||||
// Need this to quiet MSan.
|
||||
// NOLINTNEXTLINE
|
||||
memset(&pstat, 0, sizeof(struct stat));
|
||||
#endif // NDEBUG
|
||||
#endif // BC_DEBUG
|
||||
|
||||
fd = bc_read_open(path, O_RDONLY);
|
||||
|
||||
|
@ -101,9 +101,9 @@ bc_vm_jmp(void)
|
||||
bc_file_flush(&vm->ferr, bc_flush_none);
|
||||
#endif // BC_DEBUG_CODE
|
||||
|
||||
#ifndef NDEBUG
|
||||
#if BC_DEBUG
|
||||
assert(vm->jmp_bufs.len - (size_t) vm->sig_pop);
|
||||
#endif // NDEBUG
|
||||
#endif // BC_DEBUG
|
||||
|
||||
if (vm->jmp_bufs.len == 0) abort();
|
||||
if (vm->sig_pop) bc_vec_pop(&vm->jmp_bufs);
|
||||
@ -349,13 +349,13 @@ bc_vm_handleError(BcErr e)
|
||||
BC_JMP;
|
||||
}
|
||||
#else // BC_ENABLE_LIBRARY
|
||||
#ifndef NDEBUG
|
||||
#if BC_DEBUG
|
||||
void
|
||||
bc_vm_handleError(BcErr e, const char* file, int fline, size_t line, ...)
|
||||
#else // NDEBUG
|
||||
#else // BC_DEBUG
|
||||
void
|
||||
bc_vm_handleError(BcErr e, size_t line, ...)
|
||||
#endif // NDEBUG
|
||||
#endif // BC_DEBUG
|
||||
{
|
||||
BcStatus s;
|
||||
va_list args;
|
||||
@ -423,9 +423,9 @@ bc_vm_handleError(BcErr e, size_t line, ...)
|
||||
bc_file_putchar(&vm->ferr, bc_flush_none, '\n');
|
||||
}
|
||||
|
||||
#ifndef NDEBUG
|
||||
#if BC_DEBUG
|
||||
bc_file_printf(&vm->ferr, "\n %s:%d\n", file, fline);
|
||||
#endif // NDEBUG
|
||||
#endif // BC_DEBUG
|
||||
|
||||
bc_file_puts(&vm->ferr, bc_flush_none, "\n");
|
||||
|
||||
@ -650,7 +650,7 @@ bc_vm_shutdown(void)
|
||||
if (BC_TTY && !vm->history.badTerm) bc_history_free(&vm->history);
|
||||
#endif // BC_ENABLE_HISTORY
|
||||
|
||||
#ifndef NDEBUG
|
||||
#if BC_DEBUG
|
||||
#if !BC_ENABLE_LIBRARY
|
||||
bc_vec_free(&vm->env_args);
|
||||
free(vm->env_args_buffer);
|
||||
@ -670,7 +670,7 @@ bc_vm_shutdown(void)
|
||||
#endif // !BC_ENABLE_LIBRARY
|
||||
|
||||
bc_vm_freeTemps();
|
||||
#endif // NDEBUG
|
||||
#endif // BC_DEBUG
|
||||
|
||||
#if !BC_ENABLE_LIBRARY
|
||||
// We always want to flush.
|
||||
@ -1242,12 +1242,12 @@ bc_vm_stdin(void)
|
||||
goto restart;
|
||||
}
|
||||
|
||||
#ifndef NDEBUG
|
||||
#if BC_DEBUG
|
||||
// Since these are tied to this function, free them here. We only free in
|
||||
// debug mode because stdin is always the last thing read.
|
||||
bc_vec_free(&vm->line_buf);
|
||||
bc_vec_free(&vm->buffer);
|
||||
#endif // NDEBUG
|
||||
#endif // BC_DEBUG
|
||||
|
||||
BC_LONGJMP_CONT(vm);
|
||||
}
|
||||
@ -1767,17 +1767,17 @@ bc_vm_init(void)
|
||||
void
|
||||
bc_vm_atexit(void)
|
||||
{
|
||||
#ifndef NDEBUG
|
||||
#if BC_DEBUG
|
||||
#if BC_ENABLE_LIBRARY
|
||||
BcVm* vm = bcl_getspecific();
|
||||
#endif // BC_ENABLE_LIBRARY
|
||||
#endif // NDEBUG
|
||||
#endif // BC_DEBUG
|
||||
|
||||
bc_vm_shutdown();
|
||||
|
||||
#ifndef NDEBUG
|
||||
#if BC_DEBUG
|
||||
bc_vec_free(&vm->jmp_bufs);
|
||||
#endif // NDEBUG
|
||||
#endif // BC_DEBUG
|
||||
}
|
||||
#else // BC_ENABLE_LIBRARY
|
||||
int
|
||||
@ -1788,9 +1788,9 @@ bc_vm_atexit(int status)
|
||||
|
||||
bc_vm_shutdown();
|
||||
|
||||
#ifndef NDEBUG
|
||||
#if BC_DEBUG
|
||||
bc_vec_free(&vm->jmp_bufs);
|
||||
#endif // NDEBUG
|
||||
#endif // BC_DEBUG
|
||||
|
||||
return s;
|
||||
}
|
||||
|
@ -50,11 +50,12 @@ pll=1
|
||||
while getopts "n" opt; do
|
||||
|
||||
case "$opt" in
|
||||
n) pll=0 ; shift ; set -e ;;
|
||||
n) pll=0 ; set -e ;;
|
||||
?) usage "Invalid option: $opt" ;;
|
||||
esac
|
||||
|
||||
done
|
||||
shift $(($OPTIND - 1))
|
||||
|
||||
# Command-line processing.
|
||||
if [ "$#" -ge 1 ]; then
|
||||
|
@ -109,7 +109,7 @@ fi
|
||||
|
||||
printf 'Running %s error file %s with clamping...' "$d" "$t"
|
||||
|
||||
printf '%s\n' "$halt" | "$exe" "$@" $opts -c "$testfile" 2> "$out" > /dev/null
|
||||
printf '%s\n' "$halt" 2> /dev/null | "$exe" "$@" $opts -c "$testfile" 2> "$out" > /dev/null
|
||||
err="$?"
|
||||
|
||||
checkerrtest "$d" "$err" "$testfile" "$out" "$exebase" > /dev/null
|
||||
@ -118,7 +118,7 @@ printf 'pass\n'
|
||||
|
||||
printf 'Running %s error file %s without clamping...' "$d" "$t"
|
||||
|
||||
printf '%s\n' "$halt" | "$exe" "$@" $opts -C "$testfile" 2> "$out" > /dev/null
|
||||
printf '%s\n' "$halt" 2> /dev/null | "$exe" "$@" $opts -C "$testfile" 2> "$out" > /dev/null
|
||||
err="$?"
|
||||
|
||||
checkerrtest "$d" "$err" "$testfile" "$out" "$exebase" > /dev/null
|
||||
@ -127,7 +127,7 @@ printf 'pass\n'
|
||||
|
||||
printf 'Running %s error file %s through cat with clamping...' "$d" "$t"
|
||||
|
||||
cat "$testfile" | "$exe" "$@" $opts -c 2> "$out" > /dev/null
|
||||
cat "$testfile" 2> /dev/null | "$exe" "$@" $opts -c 2> "$out" > /dev/null
|
||||
err="$?"
|
||||
|
||||
checkerrtest "$d" "$err" "$testfile" "$out" "$exebase"
|
||||
@ -136,7 +136,7 @@ printf 'pass\n'
|
||||
|
||||
printf 'Running %s error file %s through cat without clamping...' "$d" "$t"
|
||||
|
||||
cat "$testfile" | "$exe" "$@" $opts -C 2> "$out" > /dev/null
|
||||
cat "$testfile" 2> /dev/null | "$exe" "$@" $opts -C 2> "$out" > /dev/null
|
||||
err="$?"
|
||||
|
||||
checkerrtest "$d" "$err" "$testfile" "$out" "$exebase"
|
||||
|
@ -98,12 +98,12 @@ fi
|
||||
|
||||
printf 'Running %s command-line error tests...' "$d"
|
||||
|
||||
printf '%s\n' "$halt" | "$exe" "$@" -e "1+1" -f- -e "2+2" 2> "$out" > /dev/null
|
||||
printf '%s\n' "$halt" 2> /dev/null | "$exe" "$@" -e "1+1" -f- -e "2+2" 2> "$out" > /dev/null
|
||||
err="$?"
|
||||
|
||||
checkerrtest "$d" "$err" "command-line -e test" "$out" "$exebase"
|
||||
|
||||
printf '%s\n' "$halt" | "$exe" "$@" -e "1+1" -f- -f "$testdir/$d/decimal.txt" 2> "$out" > /dev/null
|
||||
printf '%s\n' "$halt" 2> /dev/null | "$exe" "$@" -e "1+1" -f- -f "$testdir/$d/decimal.txt" 2> "$out" > /dev/null
|
||||
err="$?"
|
||||
|
||||
checkerrtest "$d" "$err" "command-line -f test" "$out" "$exebase"
|
||||
@ -123,7 +123,7 @@ for testfile in $testdir/$d/*errors.txt; do
|
||||
|
||||
# Just test warnings.
|
||||
line="last"
|
||||
printf '%s\n' "$line" | "$exe" "$@" "-lw" 2> "$out" > /dev/null
|
||||
printf '%s\n' "$line" 2> /dev/null | "$exe" "$@" "-lw" 2> "$out" > /dev/null
|
||||
err="$?"
|
||||
|
||||
if [ "$err" -ne 0 ]; then
|
||||
@ -150,7 +150,7 @@ for testfile in $testdir/$d/*errors.txt; do
|
||||
|
||||
rm -f "$out"
|
||||
|
||||
printf '%s\n' "$line" | "$exe" "$@" "$options" 2> "$out" > /dev/null
|
||||
printf '%s\n' "$line" 2> /dev/null | "$exe" "$@" "$options" 2> "$out" > /dev/null
|
||||
err="$?"
|
||||
|
||||
checkerrtest "$d" "$err" "$line" "$out" "$exebase"
|
||||
|
@ -112,14 +112,14 @@ set +e
|
||||
|
||||
printf '\nRunning %s quit test...' "$d"
|
||||
|
||||
printf '%s\n' "$halt" | "$exe" "$@" > /dev/null 2>&1
|
||||
printf '%s\n' "$halt" 2> /dev/null | "$exe" "$@" > /dev/null 2>&1
|
||||
|
||||
checktest_retcode "$d" "$?" "quit"
|
||||
|
||||
# bc has two halt or quit commands, so test the second as well.
|
||||
if [ "$d" = bc ]; then
|
||||
|
||||
printf '%s\n' "quit" | "$exe" "$@" > /dev/null 2>&1
|
||||
printf '%s\n' "quit" 2> /dev/null | "$exe" "$@" > /dev/null 2>&1
|
||||
|
||||
checktest_retcode "$d" "$?" quit
|
||||
|
||||
@ -142,11 +142,11 @@ if [ "$d" = "bc" ]; then
|
||||
|
||||
export BC_ENV_ARGS=" '-l' '' -q"
|
||||
|
||||
printf 's(.02893)\n' | "$exe" "$@" > /dev/null
|
||||
printf 's(.02893)\n' 2> /dev/null | "$exe" "$@" > /dev/null
|
||||
|
||||
checktest_retcode "$d" "$?" "environment var"
|
||||
|
||||
printf 'halt\n' | "$exe" "$@" -e 4 > /dev/null
|
||||
printf 'halt\n' 2> /dev/null | "$exe" "$@" -e 4 > /dev/null
|
||||
|
||||
err="$?"
|
||||
checktest_retcode "$d" "$?" "environment var"
|
||||
@ -168,19 +168,19 @@ if [ "$d" = "bc" ]; then
|
||||
|
||||
printf '5\n0\n' > "$redefine_res"
|
||||
|
||||
printf 'halt\n' | "$exe" "$@" --redefine=print -e 'define print(x) { x }' -e 'print(5)' > "$redefine_out"
|
||||
printf 'halt\n' 2> /dev/null | "$exe" "$@" --redefine=print -e 'define print(x) { x }' -e 'print(5)' > "$redefine_out"
|
||||
err="$?"
|
||||
|
||||
checktest "$d" "$err" "keyword redefinition" "$redefine_res" "$redefine_out"
|
||||
|
||||
printf 'halt\n' | "$exe" "$@" -r "abs" -r "else" -e 'abs = 5;else = 0' -e 'abs;else' > "$redefine_out"
|
||||
printf 'halt\n' 2> /dev/null | "$exe" "$@" -r "abs" -r "else" -e 'abs = 5;else = 0' -e 'abs;else' > "$redefine_out"
|
||||
err="$?"
|
||||
|
||||
checktest "$d" "$err" "keyword redefinition" "$redefine_res" "$redefine_out"
|
||||
|
||||
if [ "$extra_math" -ne 0 ]; then
|
||||
|
||||
printf 'halt\n' | "$exe" "$@" -lr abs -e "perm(5, 1)" -e "0" > "$redefine_out"
|
||||
printf 'halt\n' 2> /dev/null | "$exe" "$@" -lr abs -e "perm(5, 1)" -e "0" > "$redefine_out"
|
||||
err="$?"
|
||||
|
||||
checktest "$d" "$err" "keyword not redefined in builtin library" "$redefine_res" "$redefine_out"
|
||||
@ -204,7 +204,7 @@ if [ "$d" = "bc" ]; then
|
||||
multiline_expr_out="$outputdir/bc_outputs/multiline_expr_results.txt"
|
||||
|
||||
# tests/bc/misc1.txt happens to have a multiline comment in it.
|
||||
printf 'halt\n' | "$exe" "$@" -f "$testdir/bc/misc1.txt" > "$multiline_expr_out"
|
||||
printf 'halt\n' 2> /dev/null | "$exe" "$@" -f "$testdir/bc/misc1.txt" > "$multiline_expr_out"
|
||||
err="$?"
|
||||
|
||||
checktest "$d" "$err" "multiline comment in expression file" "$testdir/bc/misc1_results.txt" \
|
||||
@ -213,7 +213,7 @@ if [ "$d" = "bc" ]; then
|
||||
printf 'pass\n'
|
||||
printf 'Running multiline comment expression file error test...'
|
||||
|
||||
printf 'halt\n' | "$exe" "$@" -f "$testdir/bc/errors/05.txt" 2> "$multiline_expr_out"
|
||||
printf 'halt\n' 2> /dev/null | "$exe" "$@" -f "$testdir/bc/errors/05.txt" 2> "$multiline_expr_out"
|
||||
err="$?"
|
||||
|
||||
checkerrtest "$d" "$err" "multiline comment in expression file error" \
|
||||
@ -223,7 +223,7 @@ if [ "$d" = "bc" ]; then
|
||||
printf 'Running multiline string expression file test...'
|
||||
|
||||
# tests/bc/strings.txt happens to have a multiline string in it.
|
||||
printf 'halt\n' | "$exe" "$@" -f "$testdir/bc/strings.txt" > "$multiline_expr_out"
|
||||
printf 'halt\n' 2> /dev/null | "$exe" "$@" -f "$testdir/bc/strings.txt" > "$multiline_expr_out"
|
||||
err="$?"
|
||||
|
||||
checktest "$d" "$err" "multiline string in expression file" "$testdir/bc/strings_results.txt" \
|
||||
@ -232,13 +232,13 @@ if [ "$d" = "bc" ]; then
|
||||
printf 'pass\n'
|
||||
printf 'Running multiline string expression file error test...'
|
||||
|
||||
printf 'halt\n' | "$exe" "$@" -f "$testdir/bc/errors/16.txt" 2> "$multiline_expr_out"
|
||||
printf 'halt\n' 2> /dev/null | "$exe" "$@" -f "$testdir/bc/errors/16.txt" 2> "$multiline_expr_out"
|
||||
err="$?"
|
||||
|
||||
checkerrtest "$d" "$err" "multiline string in expression file with backslash error" \
|
||||
"$multiline_expr_out" "$d"
|
||||
|
||||
printf 'halt\n' | "$exe" "$@" -f "$testdir/bc/errors/04.txt" 2> "$multiline_expr_out"
|
||||
printf 'halt\n' 2> /dev/null | "$exe" "$@" -f "$testdir/bc/errors/04.txt" 2> "$multiline_expr_out"
|
||||
err="$?"
|
||||
|
||||
checkerrtest "$d" "$err" "multiline string in expression file error" \
|
||||
@ -251,7 +251,7 @@ else
|
||||
export DC_ENV_ARGS="'-x'"
|
||||
export DC_EXPR_EXIT="1"
|
||||
|
||||
printf '4s stuff\n' | "$exe" "$@" > /dev/null
|
||||
printf '4s stuff\n' 2> /dev/null | "$exe" "$@" > /dev/null
|
||||
|
||||
checktest_retcode "$d" "$?" "environment var"
|
||||
|
||||
@ -266,15 +266,15 @@ else
|
||||
# dc has an extra test for a case that someone found running this easter.dc
|
||||
# script. It went into an infinite loop, so we want to check that we did not
|
||||
# regress.
|
||||
printf 'three\n' | cut -c1-3 > /dev/null
|
||||
printf 'three\n' 2> /dev/null | cut -c1-3 > /dev/null
|
||||
err=$?
|
||||
|
||||
if [ "$err" -eq 0 ]; then
|
||||
|
||||
printf 'Running dc Easter script...'
|
||||
|
||||
easter_res="$outputdir/dc_outputs/easter.txt"
|
||||
easter_out="$outputdir/dc_outputs/easter_results.txt"
|
||||
easter_out="$outputdir/dc_outputs/easter.txt"
|
||||
easter_res="$outputdir/dc_outputs/easter_results.txt"
|
||||
|
||||
outdir=$(dirname "$easter_out")
|
||||
|
||||
@ -284,14 +284,44 @@ else
|
||||
|
||||
printf '4 April 2021\n' > "$easter_res"
|
||||
|
||||
"$testdir/dc/scripts/easter.sh" "$exe" 2021 "$@" | cut -c1-12 > "$easter_out"
|
||||
"$testdir/dc/scripts/easter.sh" "$exe" 2021 "$@" 2> /dev/null | cut -c1-12 > "$easter_out"
|
||||
err="$?"
|
||||
|
||||
checktest "$d" "$err" "Easter script" "$easter_res" "$easter_out"
|
||||
checktest "$d" "$err" "Easter script" "$easter_out" "$easter_res"
|
||||
|
||||
printf 'pass\n'
|
||||
fi
|
||||
|
||||
unset DC_ENV_ARGS
|
||||
unset DC_EXPR_EXIT
|
||||
|
||||
printf 'Running dc extended register command tests...'
|
||||
|
||||
ext_reg_out="$outputdir/dc_outputs/ext_reg.txt"
|
||||
ext_reg_res="$outputdir/dc_outputs/ext_reg_results.txt"
|
||||
|
||||
outdir=$(dirname "$ext_reg_out")
|
||||
|
||||
if [ ! -d "$outdir" ]; then
|
||||
mkdir -p "$outdir"
|
||||
fi
|
||||
|
||||
printf '0\n' > "$ext_reg_res"
|
||||
|
||||
"$exe" "$@" -e "gxpR" 2> /dev/null > "$ext_reg_out"
|
||||
err="$?"
|
||||
|
||||
checktest "$d" "$err" "Extended register command" "$ext_reg_out" "$ext_reg_res"
|
||||
|
||||
printf '1\n' > "$ext_reg_res"
|
||||
|
||||
"$exe" "$@" -x -e "gxpR" 2> /dev/null > "$ext_reg_out"
|
||||
err="$?"
|
||||
|
||||
checktest "$d" "$err" "Extended register command" "$ext_reg_out" "$ext_reg_res"
|
||||
|
||||
printf 'pass\n'
|
||||
|
||||
fi
|
||||
|
||||
out1="$outputdir/${d}_outputs/${d}_other.txt"
|
||||
@ -302,26 +332,26 @@ printf 'Running %s line length tests...' "$d"
|
||||
printf '%s\n' "$numres" > "$out1"
|
||||
|
||||
export "$line_var"=80
|
||||
printf '%s\n' "$num" | "$exe" "$@" > "$out2"
|
||||
printf '%s\n' "$num" 2> /dev/null | "$exe" "$@" > "$out2"
|
||||
|
||||
checktest "$d" "$?" "line length" "$out1" "$out2"
|
||||
|
||||
printf '%s\n' "$num70" > "$out1"
|
||||
|
||||
export "$line_var"=2147483647
|
||||
printf '%s\n' "$num" | "$exe" "$@" > "$out2"
|
||||
printf '%s\n' "$num" 2> /dev/null | "$exe" "$@" > "$out2"
|
||||
|
||||
checktest "$d" "$?" "line length 2" "$out1" "$out2"
|
||||
|
||||
printf '%s\n' "$num2" > "$out1"
|
||||
|
||||
export "$line_var"=62
|
||||
printf '%s\n' "$num" | "$exe" "$@" -L > "$out2"
|
||||
printf '%s\n' "$num" 2> /dev/null | "$exe" "$@" -L > "$out2"
|
||||
|
||||
checktest "$d" "$?" "line length 3" "$out1" "$out2"
|
||||
|
||||
printf '0\n' > "$out1"
|
||||
printf '%s\n' "$lltest" | "$exe" "$@" -L > "$out2"
|
||||
printf '%s\n' "$lltest" 2> /dev/null | "$exe" "$@" -L > "$out2"
|
||||
|
||||
checktest "$d" "$?" "line length 3" "$out1" "$out2"
|
||||
|
||||
@ -342,23 +372,23 @@ printf '%s\n%s\n%s\n%s\n' "$results" "$results" "$results" "$results" > "$out1"
|
||||
|
||||
checktest "$d" "$?" "arg" "$out1" "$out2"
|
||||
|
||||
printf '%s\n' "$halt" | "$exe" "$@" -- "$f" "$f" "$f" "$f" > "$out2"
|
||||
printf '%s\n' "$halt" 2> /dev/null | "$exe" "$@" -- "$f" "$f" "$f" "$f" > "$out2"
|
||||
|
||||
checktest "$d" "$?" "arg" "$out1" "$out2"
|
||||
|
||||
if [ "$d" = "bc" ]; then
|
||||
printf '%s\n' "$halt" | "$exe" "$@" -i > /dev/null 2>&1
|
||||
printf '%s\n' "$halt" 2> /dev/null | "$exe" "$@" -i > /dev/null 2>&1
|
||||
fi
|
||||
|
||||
printf '%s\n' "$halt" | "$exe" "$@" -h > /dev/null
|
||||
printf '%s\n' "$halt" 2> /dev/null | "$exe" "$@" -h > /dev/null
|
||||
checktest_retcode "$d" "$?" "arg"
|
||||
printf '%s\n' "$halt" | "$exe" "$@" -P > /dev/null
|
||||
printf '%s\n' "$halt" 2> /dev/null | "$exe" "$@" -P > /dev/null
|
||||
checktest_retcode "$d" "$?" "arg"
|
||||
printf '%s\n' "$halt" | "$exe" "$@" -R > /dev/null
|
||||
printf '%s\n' "$halt" 2> /dev/null | "$exe" "$@" -R > /dev/null
|
||||
checktest_retcode "$d" "$?" "arg"
|
||||
printf '%s\n' "$halt" | "$exe" "$@" -v > /dev/null
|
||||
printf '%s\n' "$halt" 2> /dev/null | "$exe" "$@" -v > /dev/null
|
||||
checktest_retcode "$d" "$?" "arg"
|
||||
printf '%s\n' "$halt" | "$exe" "$@" -V > /dev/null
|
||||
printf '%s\n' "$halt" 2> /dev/null | "$exe" "$@" -V > /dev/null
|
||||
checktest_retcode "$d" "$?" "arg"
|
||||
|
||||
out=$(printf '0.1\n-0.1\n1.1\n-1.1\n0.1\n-0.1\n')
|
||||
@ -370,12 +400,12 @@ else
|
||||
data=$(printf '0.1pR\n_0.1pR\n1.1pR\n_1.1pR\n.1pR\n_.1pR\n')
|
||||
fi
|
||||
|
||||
printf '%s\n' "$data" | "$exe" "$@" -z > "$out2"
|
||||
printf '%s\n' "$data" 2> /dev/null | "$exe" "$@" -z > "$out2"
|
||||
checktest "$d" "$?" "leading zero" "$out1" "$out2"
|
||||
|
||||
if [ "$d" = "bc" ] && [ "$extra_math" -ne 0 ]; then
|
||||
|
||||
printf '%s\n' "$halt" | "$exe" "$@" -lz "$testdir/bc/leadingzero.txt" > "$out2"
|
||||
printf '%s\n' "$halt" 2> /dev/null | "$exe" "$@" -lz "$testdir/bc/leadingzero.txt" > "$out2"
|
||||
|
||||
checktest "$d" "$?" "leading zero script" "$testdir/bc/leadingzero_results.txt" "$out2"
|
||||
|
||||
@ -446,10 +476,10 @@ if [ "$extra_math" -ne 0 ]; then
|
||||
data=$(printf 'J2@OIKAiAopRpRpRpR')
|
||||
fi
|
||||
|
||||
printf '%s\n' "$data" | "$exe" "$@" -S14 -I15 -O16 -E17.25 > "$out2"
|
||||
printf '%s\n' "$data" 2> /dev/null | "$exe" "$@" -S14 -I15 -O16 -E17.25 > "$out2"
|
||||
checktest "$d" "$?" "builtin variable args" "$out1" "$out2"
|
||||
|
||||
printf '%s\n' "$data" | "$exe" "$@" --scale=14 --ibase=15 --obase=16 --seed=17.25 > "$out2"
|
||||
printf '%s\n' "$data" 2> /dev/null | "$exe" "$@" --scale=14 --ibase=15 --obase=16 --seed=17.25 > "$out2"
|
||||
checktest "$d" "$?" "builtin variable long args" "$out1" "$out2"
|
||||
|
||||
else
|
||||
@ -463,10 +493,10 @@ else
|
||||
data=$(printf 'OIKAiAopRpRpR')
|
||||
fi
|
||||
|
||||
printf '%s\n' "$data" | "$exe" "$@" -S14 -I15 -O16 > "$out2"
|
||||
printf '%s\n' "$data" 2> /dev/null | "$exe" "$@" -S14 -I15 -O16 > "$out2"
|
||||
checktest "$d" "$?" "builtin variable args" "$out1" "$out2"
|
||||
|
||||
printf '%s\n' "$data" | "$exe" "$@" --scale=14 --ibase=15 --obase=16 > "$out2"
|
||||
printf '%s\n' "$data" 2> /dev/null | "$exe" "$@" --scale=14 --ibase=15 --obase=16 > "$out2"
|
||||
checktest "$d" "$?" "builtin variable long args" "$out1" "$out2"
|
||||
|
||||
fi
|
||||
@ -476,40 +506,40 @@ if [ "$d" = "bc" ]; then
|
||||
out=$(printf '100\n')
|
||||
printf '%s\n' "$out" > "$out1"
|
||||
|
||||
printf 'scale\n' | "$exe" "$@" -S100 -l > "$out2"
|
||||
printf 'scale\n' 2> /dev/null | "$exe" "$@" -S100 -l > "$out2"
|
||||
checktest "$d" "$?" "builtin variable args with math lib" "$out1" "$out2"
|
||||
|
||||
printf 'scale\n' | "$exe" "$@" --scale=100 --mathlib > "$out2"
|
||||
printf 'scale\n' 2> /dev/null | "$exe" "$@" --scale=100 --mathlib > "$out2"
|
||||
checktest "$d" "$?" "builtin variable long args with math lib" "$out1" "$out2"
|
||||
|
||||
export BC_ENV_ARGS="-l"
|
||||
|
||||
printf 'scale\n' | "$exe" "$@" -S100 > "$out2"
|
||||
printf 'scale\n' 2> /dev/null | "$exe" "$@" -S100 > "$out2"
|
||||
checktest "$d" "$?" "builtin variable args with math lib env arg" "$out1" "$out2"
|
||||
|
||||
printf 'scale\n' | "$exe" "$@" --scale=100 > "$out2"
|
||||
printf 'scale\n' 2> /dev/null | "$exe" "$@" --scale=100 > "$out2"
|
||||
checktest "$d" "$?" "builtin variable long args with math lib env arg" "$out1" "$out2"
|
||||
|
||||
export BC_ENV_ARGS="-S100"
|
||||
|
||||
printf 'scale\n' | "$exe" "$@" -l > "$out2"
|
||||
printf 'scale\n' 2> /dev/null | "$exe" "$@" -l > "$out2"
|
||||
checktest "$d" "$?" "builtin variable args with math lib arg" "$out1" "$out2"
|
||||
|
||||
export BC_ENV_ARGS="--scale=100"
|
||||
|
||||
printf 'scale\n' | "$exe" "$@" -l > "$out2"
|
||||
printf 'scale\n' 2> /dev/null | "$exe" "$@" -l > "$out2"
|
||||
checktest "$d" "$?" "builtin variable long args with math lib arg" "$out1" "$out2"
|
||||
|
||||
fi
|
||||
|
||||
printf 'scale\n' | "$exe" "$@" --scale=18923c.rlg > /dev/null 2> "$out2"
|
||||
printf 'scale\n' 2> /dev/null | "$exe" "$@" --scale=18923c.rlg > /dev/null 2> "$out2"
|
||||
err="$?"
|
||||
|
||||
checkerrtest "$d" "$err" "invalid command-line arg for builtin variable" "$out2" "$d"
|
||||
|
||||
if [ "$extra_math" -ne 0 ]; then
|
||||
|
||||
printf 'seed\n' | "$exe" "$@" --seed=18923c.rlg > /dev/null 2> "$out2"
|
||||
printf 'seed\n' 2> /dev/null | "$exe" "$@" --seed=18923c.rlg > /dev/null 2> "$out2"
|
||||
err="$?"
|
||||
|
||||
checkerrtest "$d" "$err" "invalid command-line arg for seed" "$out2" "$d"
|
||||
@ -540,7 +570,7 @@ printf 'pass\n'
|
||||
|
||||
printf 'Running %s binary stdin test...' "$d"
|
||||
|
||||
cat "$bin" | "$exe" "$@" > /dev/null 2> "$out2"
|
||||
cat "$bin" 2> /dev/null | "$exe" "$@" > /dev/null 2> "$out2"
|
||||
err="$?"
|
||||
|
||||
checkerrtest "$d" "$err" "binary stdin" "$out2" "$d"
|
||||
@ -550,7 +580,7 @@ printf 'pass\n'
|
||||
if [ "$d" = "bc" ]; then
|
||||
|
||||
printf 'Running %s limits tests...' "$d"
|
||||
printf 'limits\n' | "$exe" "$@" /dev/null > "$out2" 2>&1
|
||||
printf 'limits\n' 2> /dev/null | "$exe" "$@" /dev/null > "$out2" 2>&1
|
||||
|
||||
checktest_retcode "$d" "$?" "limits"
|
||||
|
||||
|
@ -194,7 +194,7 @@ else
|
||||
# where GNU bc is wrong. See the development manual
|
||||
# (manuals/development.md#script-tests) for more information.
|
||||
printf 'Generating %s results...' "$f"
|
||||
printf '%s\n' "$halt" | "$d" "$s" | sed -n -f "$testdir/script.sed" > "$results"
|
||||
printf '%s\n' "$halt" 2> /dev/null | "$d" "$s" | sed -n -f "$testdir/script.sed" > "$results"
|
||||
printf 'done\n'
|
||||
res="$results"
|
||||
fi
|
||||
@ -206,11 +206,11 @@ printf 'Running %s script %s...' "$d" "$f"
|
||||
# Yes this is poor timing, but it works.
|
||||
if [ "$time_tests" -ne 0 ]; then
|
||||
printf '\n'
|
||||
printf '%s\n' "$halt" | /usr/bin/time -p "$exe" "$@" $options "$s" > "$out"
|
||||
printf '%s\n' "$halt" 2> /dev/null | /usr/bin/time -p "$exe" "$@" $options "$s" > "$out"
|
||||
err="$?"
|
||||
printf '\n'
|
||||
else
|
||||
printf '%s\n' "$halt" | "$exe" "$@" $options "$s" > "$out"
|
||||
printf '%s\n' "$halt" 2> /dev/null | "$exe" "$@" $options "$s" > "$out"
|
||||
err="$?"
|
||||
fi
|
||||
|
||||
|
@ -31,6 +31,8 @@ script="$0"
|
||||
|
||||
testdir=$(dirname "${script}")
|
||||
|
||||
. "$testdir/../scripts/functions.sh"
|
||||
|
||||
# Just print the usage and exit with an error. This can receive a message to
|
||||
# print.
|
||||
# @param 1 A message to print.
|
||||
@ -50,11 +52,12 @@ pll=1
|
||||
while getopts "n" opt; do
|
||||
|
||||
case "$opt" in
|
||||
n) pll=0 ; shift ; set -e ;;
|
||||
n) pll=0 ; set -e ;;
|
||||
?) usage "Invalid option: $opt" ;;
|
||||
esac
|
||||
|
||||
done
|
||||
shift $(($OPTIND - 1))
|
||||
|
||||
# Command-line processing.
|
||||
if [ "$#" -eq 0 ]; then
|
||||
|
@ -138,7 +138,7 @@ fi
|
||||
# If the results do not exist, generate..
|
||||
if [ ! -f "$results" ]; then
|
||||
printf 'Generating %s %s results...' "$d" "$t"
|
||||
printf '%s\n' "$halt" | "$d" $options "$name" > "$results"
|
||||
printf '%s\n' "$halt" 2> /dev/null | "$d" $options "$name" > "$results"
|
||||
printf 'done\n'
|
||||
fi
|
||||
|
||||
@ -157,11 +157,11 @@ printf 'Running %s %s...' "$d" "$t"
|
||||
|
||||
if [ "$time_tests" -ne 0 ]; then
|
||||
printf '\n'
|
||||
printf '%s\n' "$halt" | /usr/bin/time -p "$exe" "$@" $options "$name" > "$out"
|
||||
printf '%s\n' "$halt" 2> /dev/null | /usr/bin/time -p "$exe" "$@" $options "$name" > "$out"
|
||||
err="$?"
|
||||
printf '\n'
|
||||
else
|
||||
printf '%s\n' "$halt" | "$exe" "$@" $options "$name" > "$out"
|
||||
printf '%s\n' "$halt" 2> /dev/null | "$exe" "$@" $options "$name" > "$out"
|
||||
err="$?"
|
||||
fi
|
||||
|
||||
|
@ -295,4 +295,4 @@
|
||||
<Import Project="$(VCTargetsPath)\Microsoft.Cpp.targets" />
|
||||
<ImportGroup Label="ExtensionTargets">
|
||||
</ImportGroup>
|
||||
</Project>
|
||||
</Project>
|
||||
|
Loading…
Reference in New Issue
Block a user