mirror of
https://github.com/lcn2/calc.git
synced 2025-08-16 01:03:29 +03:00
document prompt in shell script mode, fix man formatting, legacy awk
Documented unexpected behavior when calc is running in "shell script mode" and the prompt builtin function is used without the -p flag. Updated help/prompt, help/unexpected and the calc man page accordingly. Unless calc is given the -p command line option, calc will reopen stdin as /dev/null instead of just closing stdin. This prevents subsequent opens grabbing the 1st file descriptor. Disable regress tests 4709, 4710, and 7763 because they print multi-byte sequences, which are just fine for calc, the awk used to evaluate the regression suite output in some legacy systems report a "multibyte conversion failure". Added a number of missing Makefile variables to the "make env" rule. The man command is used to format the calc.1 man page into calc.usage. The "help calc" command now prints the formatted calc man page (calc.usage). The "help man" command now prints the formatted calc man page (calc.usage). The "help usage" command now prints the formatted calc man page (calc.usage). The file, calc.cat1, is formed by gzipping the calc.usage formatted man page. The calc.cat1 is installed as the calc cat section 1 man page. Updated the Copyright string in version.c to refer to the COPYING file and the "help copying" command. Added calc.cat1 to .gitignore. Using "sort -d -u" to sort .gitignore content. Avoiding use of modern [[ and ]] in Makefile for those legacy systems whose shell do not support them. *sigh* Fixed the order of "help full" to match the order of topics listed buy the "help help" command. Sorted the halias[] help topics table in help.c using sort -d -u.
This commit is contained in:
@@ -118,76 +118,62 @@ V=@:
|
||||
# Files managed by this Makefile #
|
||||
##################################
|
||||
|
||||
STD_HELP_FILES_1= intro overview help
|
||||
STD_HELP_FILES_1= intro overview calc
|
||||
|
||||
STD_HELP_FILES_2= assoc
|
||||
|
||||
BLT_HELP_FILES_3= builtin man
|
||||
|
||||
STD_HELP_FILES_4= command config custom define environment expression
|
||||
|
||||
BLT_HELP_FILES_3= builtin
|
||||
STD_HELP_FILES_4= command config custom define environment
|
||||
BLT_HELP_FILES_5= errorcodes
|
||||
|
||||
STD_HELP_FILES_6= file history interrupt list mat
|
||||
|
||||
STD_HELP_FILES_6= expression file history interrupt list mat
|
||||
# because obj is built special (due to confusion with it as
|
||||
# a symlink for some built environments, we treat obj specially
|
||||
# and call it obj.file
|
||||
#
|
||||
SPECIAL_HELP_7= obj.file
|
||||
|
||||
STD_HELP_FILES_8= operator statement
|
||||
|
||||
STD_HELP_FILES_8= operator
|
||||
BLT_HELP_FILES_9= resource
|
||||
STD_HELP_FILES_10= script statement types unexpected variable
|
||||
|
||||
STD_HELP_FILES_10= types script
|
||||
|
||||
BLT_HELP_FILES_10a= usage cscript
|
||||
|
||||
STD_HELP_FILES_10b= unexpected variable
|
||||
|
||||
BLT_HELP_FILES_11= bindings custom_cal libcalc new_custom resource
|
||||
BLT_HELP_FILES_11= bindings custom_cal libcalc new_custom cscript
|
||||
|
||||
STD_HELP_FILES_12= archive
|
||||
BLT_HELP_FILES_13= bugs changes contrib
|
||||
STD_HELP_FILES_14= todo wishlist
|
||||
|
||||
BLT_HELP_FILES_13= bugs changes
|
||||
STD_HELP_FILES_15= credit
|
||||
# copyright is printed by help.c is from the Copyright string found in version.c
|
||||
BLT_HELP_FILES_16= COPYING COPYING-LGPL questions releases
|
||||
|
||||
STD_HELP_FILES_14= credit
|
||||
|
||||
BLT_HELP_FILES_14= contrib COPYING COPYING-LGPL questions releases
|
||||
|
||||
STD_HELP_FILES_15= wishlist todo
|
||||
STD_HELP_FILES_17= help
|
||||
|
||||
# These files are used in the following order to construct full
|
||||
#
|
||||
FULL_HELP_FILES= ${STD_HELP_FILES_1} ${STD_HELP_FILES_2} \
|
||||
${BLT_HELP_FILES_3} ${STD_HELP_FILES_4} \
|
||||
${BLT_HELP_FILES_5} ${STD_HELP_FILES_6} \
|
||||
${SPECIAL_HELP_7} ${STD_HELP_FILES_8} \
|
||||
${BLT_HELP_FILES_9} ${STD_HELP_FILES_10} \
|
||||
${BLT_HELP_FILES_10a} ${STD_HELP_FILES_10b} \
|
||||
${BLT_HELP_FILES_11} ${STD_HELP_FILES_12} \
|
||||
${BLT_HELP_FILES_13} ${STD_HELP_FILES_14} \
|
||||
${BLT_HELP_FILES_14} ${STD_HELP_FILES_15}
|
||||
FULL_HELP_FILES= ${STD_HELP_FILES_1} ${STD_HELP_FILES_2} \
|
||||
${BLT_HELP_FILES_3} ${STD_HELP_FILES_4} \
|
||||
${BLT_HELP_FILES_5} ${STD_HELP_FILES_6} \
|
||||
${SPECIAL_HELP_7} ${STD_HELP_FILES_8} \
|
||||
${BLT_HELP_FILES_9} ${STD_HELP_FILES_10} \
|
||||
${BLT_HELP_FILES_11} ${STD_HELP_FILES_12} \
|
||||
${BLT_HELP_FILES_13} ${STD_HELP_FILES_14} \
|
||||
${STD_HELP_FILES_15} ${BLT_HELP_FILES_16} \
|
||||
${STD_HELP_FILES_17}
|
||||
|
||||
# These full files are those who are not built or constructed
|
||||
#
|
||||
STD_HELP_FILES= ${STD_HELP_FILES_1} ${STD_HELP_FILES_2} \
|
||||
${STD_HELP_FILES_4} ${STD_HELP_FILES_6} \
|
||||
${STD_HELP_FILES_8} ${STD_HELP_FILES_10} \
|
||||
${STD_HELP_FILES_10b} \
|
||||
STD_HELP_FILES= ${STD_HELP_FILES_1} ${STD_HELP_FILES_2} \
|
||||
${STD_HELP_FILES_4} ${STD_HELP_FILES_6} \
|
||||
${STD_HELP_FILES_8} ${STD_HELP_FILES_10} \
|
||||
${STD_HELP_FILES_12} ${STD_HELP_FILES_14} \
|
||||
${STD_HELP_FILES_15}
|
||||
${STD_HELP_FILES_15} ${STD_HELP_FILES_17}
|
||||
|
||||
# These full files are those who are built by this Makefile
|
||||
#
|
||||
# Note that ${SPECIAL_HELP_7} is not included in this list
|
||||
# because of problems with its name.
|
||||
#
|
||||
BLT_HELP_FILES= ${BLT_HELP_FILES_3} ${BLT_HELP_FILES_5} \
|
||||
${BLT_HELP_FILES_9} \
|
||||
${BLT_HELP_FILES_10a} \
|
||||
${BLT_HELP_FILES_11} ${BLT_HELP_FILES_13} \
|
||||
${BLT_HELP_FILES_14}
|
||||
BLT_HELP_FILES= ${BLT_HELP_FILES_3} ${BLT_HELP_FILES_5} \
|
||||
${BLT_HELP_FILES_9} ${BLT_HELP_FILES_11} \
|
||||
${BLT_HELP_FILES_13} ${BLT_HELP_FILES_16}
|
||||
|
||||
# The detailed list of help files to install
|
||||
#
|
||||
@@ -382,7 +368,7 @@ errorcodes: ../errcode${EXT}
|
||||
${TRUE}; \
|
||||
fi
|
||||
|
||||
usage: ../calc.usage
|
||||
calc: ../calc.usage
|
||||
${RM} -f $@
|
||||
${CP} ../calc.usage $@
|
||||
${CHMOD} 0444 $@
|
||||
@@ -433,18 +419,6 @@ copy: blkcpy
|
||||
${TRUE}; \
|
||||
fi
|
||||
|
||||
man: help
|
||||
${RM} -f $@
|
||||
${CP} help $@
|
||||
${CHMOD} 0444 $@
|
||||
-@if [ -z "${Q}" ]; then \
|
||||
echo ''; \
|
||||
echo '=-=-= skipping the ${CAT} of help/$@ =-=-='; \
|
||||
echo ''; \
|
||||
else \
|
||||
${TRUE}; \
|
||||
fi
|
||||
|
||||
COPYING: ../COPYING
|
||||
${RM} -f $@
|
||||
${CP} ../COPYING $@
|
||||
|
@@ -5,7 +5,7 @@ following topics:
|
||||
----- -----------
|
||||
intro introduction to calc
|
||||
overview overview of calc
|
||||
help this file
|
||||
calc calc man page, how to invoke the calc command
|
||||
|
||||
assoc using associations
|
||||
builtin builtin functions
|
||||
@@ -23,18 +23,17 @@ following topics:
|
||||
mat using matrices
|
||||
obj user defined data types
|
||||
operator math, relational, logic and variable access operators
|
||||
resource standard calc resource files
|
||||
script using calc shell scripts
|
||||
statement flow control and declaration statements
|
||||
types builtin data types
|
||||
unexpected unexpected syntax/usage surprises for C programmers
|
||||
usage how to invoke the calc command
|
||||
variable variables and variable declarations
|
||||
|
||||
bindings input & history character bindings
|
||||
custom_cal information about custom calc resource files
|
||||
libcalc using the arbitrary precision routines in a C program
|
||||
new_custom information about how to add new custom functions
|
||||
resource standard calc resource files
|
||||
script using calc shell scripts
|
||||
cscript info on the calc shell scripts supplied with calc
|
||||
|
||||
archive where to get the latest versions of calc
|
||||
@@ -51,6 +50,7 @@ following topics:
|
||||
questions how to ask simple general question about calc
|
||||
release on calc versions and releases
|
||||
|
||||
help this file
|
||||
full all of the above (in the above order)
|
||||
|
||||
For example:
|
||||
|
45
help/prompt
45
help/prompt
@@ -10,10 +10,43 @@ TYPES
|
||||
return string
|
||||
|
||||
DESCRIPTION
|
||||
When prompt(str) is called and input is from a terminal, the string
|
||||
str is displayed and execution is halted until a newline ends a line
|
||||
read from the input; the string formed by the characters in the line
|
||||
(other than the newline) is returned as the value of prompt().
|
||||
When prompt(str) is called and input is from a terminal, the string
|
||||
str is displayed and execution is halted until a newline ends a line
|
||||
read from the input; the string formed by the characters in the line
|
||||
(other than the newline) is returned as the value of prompt().
|
||||
|
||||
Be careful when using prompt(str) while calc is being used as a
|
||||
shell script. Unless calc is run with the -p command line option,
|
||||
the prompt builtin will fail and return null. This is because when
|
||||
calc is running as a shell script, calc will close stdin run in in
|
||||
a non-interactive mode.
|
||||
|
||||
The following shell script will always print "got null" because
|
||||
stdin will be closed by calc during startup:
|
||||
|
||||
#!/usr/bin/calc -q -f
|
||||
|
||||
# The prompt will ALWAYS FAIL and return a null value
|
||||
n = prompt("Test> ");
|
||||
if (isnull(n)) {
|
||||
print("got null");
|
||||
} else {
|
||||
print("got " + n);
|
||||
}
|
||||
|
||||
However the following shell script (note the -p before the -f in
|
||||
the 1st line) will be interactive, prompt with "Test> " and print
|
||||
the "got" result as expected:
|
||||
|
||||
#!/usr/bin/calc -q -p -f
|
||||
|
||||
n = prompt("Test> ");
|
||||
if (isnull(n)) {
|
||||
print("got null");
|
||||
} else {
|
||||
print("got " + n);
|
||||
}
|
||||
|
||||
|
||||
EXAMPLE
|
||||
; x = prompt("? ");
|
||||
@@ -35,9 +68,9 @@ LINK LIBRARY
|
||||
none
|
||||
|
||||
SEE ALSO
|
||||
fgetfield, fgetline, fgetstr
|
||||
command, fgetfield, fgetline, fgetstr, unexpected
|
||||
|
||||
## Copyright (C) 1999-2006 Landon Curt Noll
|
||||
## Copyright (C) 1999,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
|
||||
|
@@ -563,6 +563,7 @@ Unexpected
|
||||
; print sin(d2r(30))
|
||||
0.5
|
||||
|
||||
|
||||
* operator has has a higher precedence than <<
|
||||
==============================================
|
||||
|
||||
@@ -570,6 +571,49 @@ Unexpected
|
||||
So 3 << 2*5 evaluates to 3072 in C, whereas 3 << 2*5 evaluates to 60 in calc.
|
||||
|
||||
|
||||
prompt builtin returns null in calc shell scripts unless -p is used
|
||||
===================================================================
|
||||
|
||||
Be careful when using prompt(str) while calc is being used as a
|
||||
shell script. Unless calc is run with the -p command line option,
|
||||
the prompt builtin will fail and return null. This is because when
|
||||
calc is running as a shell script, calc will close stdin run in in
|
||||
a non-interactive mode.
|
||||
|
||||
The following shell script will always print "got null" because
|
||||
stdin will be closed by calc during startup:
|
||||
|
||||
#!/usr/bin/calc -q -f
|
||||
|
||||
n = prompt("Test> ");
|
||||
if (isnull(n)) {
|
||||
print("got null");
|
||||
} else {
|
||||
print("got " + n);
|
||||
}
|
||||
|
||||
However the following shell script (note the -p before the -f in
|
||||
the 1st line) will be interactive, prompt with "Test> " and print
|
||||
the "got" result as expected:
|
||||
|
||||
#!/usr/bin/calc -q -p -f
|
||||
|
||||
n = prompt("Test> ");
|
||||
if (isnull(n)) {
|
||||
print("got null");
|
||||
} else {
|
||||
print("got " + n);
|
||||
}
|
||||
|
||||
Note in the example above, the -p flag must be given before the
|
||||
final -f command line flag.
|
||||
|
||||
A similar problem will occur if the calc shell script attempts
|
||||
to read from standard input (stdin), unless the -p flag is used.
|
||||
|
||||
See "SHELL SCRIPT MODE" in the calc man page for more information
|
||||
about -p and about the "shell script mode".
|
||||
|
||||
## Copyright (C) 1999-2007,2014,2017,2021,2023 Landon Curt Noll
|
||||
##
|
||||
## Calc is open software; you can redistribute it and/or modify it under
|
||||
|
Reference in New Issue
Block a user