mirror of
https://github.com/lcn2/calc.git
synced 2025-08-16 01:03:29 +03:00
Release calc version 2.11.0t7.2
This commit is contained in:
12
BUGS
12
BUGS
@@ -77,15 +77,3 @@ Known problems or mis-features:
|
|||||||
* There is some places in the source with obscure variable names
|
* There is some places in the source with obscure variable names
|
||||||
and not much in the way of comments. We need some major cleanup
|
and not much in the way of comments. We need some major cleanup
|
||||||
and documentation.
|
and documentation.
|
||||||
|
|
||||||
* On a Dec Alpha, using the Dec Alpha cc (not gcc) make check for
|
|
||||||
version 2.11.0t5.1 fails in the regression test:
|
|
||||||
|
|
||||||
From vandermj@molbio.sbphrd.com Tue Oct 5 04:06:52 1999
|
|
||||||
Subject: Re: oops, try calc version 2.10.0t5.1
|
|
||||||
Date: Tue, 05 Oct 1999 07:06:30 -0400
|
|
||||||
|
|
||||||
Regular cc on Dec alpha, 'make check' dies with:
|
|
||||||
|
|
||||||
1804: surd_value(a) == 2+3i
|
|
||||||
"": line 1706: Calling qfreenum with nozero links!!!
|
|
||||||
|
17
CHANGES
17
CHANGES
@@ -103,6 +103,23 @@ Following is the change from calc version 2.11.0t7 to date:
|
|||||||
n == 0 if -c, continue, without -c, stop
|
n == 0 if -c, continue, without -c, stop
|
||||||
n < 0 continue on error, even if -c was given on the command line
|
n < 0 continue on error, even if -c was given on the command line
|
||||||
|
|
||||||
|
Calc compilation now stops at the first scanerror.
|
||||||
|
|
||||||
|
Restored the feature where -p disables the printing of leading tabs
|
||||||
|
as of config("tab",0) had been executed. So using calc in a pipe:
|
||||||
|
|
||||||
|
calc -p 2+17 | whey
|
||||||
|
|
||||||
|
will write '19' instead of '\t17' to the whey command.
|
||||||
|
|
||||||
|
Updated calc man page and help/usage file to reflect recent
|
||||||
|
command line changes.
|
||||||
|
|
||||||
|
Converted start_done into a general calc run state enum called
|
||||||
|
run_state within the calc source.
|
||||||
|
|
||||||
|
Misc calc man page fixes.
|
||||||
|
|
||||||
|
|
||||||
Following is the change from calc version 2.11.0t1 to 2.11.0t6.3:
|
Following is the change from calc version 2.11.0t1 to 2.11.0t6.3:
|
||||||
|
|
||||||
|
96
calc.c
96
calc.c
@@ -11,7 +11,6 @@
|
|||||||
#include <pwd.h>
|
#include <pwd.h>
|
||||||
#include <sys/types.h>
|
#include <sys/types.h>
|
||||||
#include <ctype.h>
|
#include <ctype.h>
|
||||||
#include <setjmp.h>
|
|
||||||
|
|
||||||
#define CALC_C
|
#define CALC_C
|
||||||
#include "calc.h"
|
#include "calc.h"
|
||||||
@@ -37,40 +36,13 @@
|
|||||||
#include <stdlib.h>
|
#include <stdlib.h>
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
|
||||||
/*
|
|
||||||
* external definitions and functions
|
|
||||||
*/
|
|
||||||
extern int abortlevel; /* current level of aborts */
|
|
||||||
extern BOOL inputwait; /* TRUE if in a terminal input wait */
|
|
||||||
extern jmp_buf jmpbuf; /* for errors */
|
|
||||||
extern int isatty(int tty); /* TRUE if fd is a tty */
|
|
||||||
|
|
||||||
extern int p_flag; /* TRUE => pipe mode */
|
|
||||||
extern int q_flag; /* TRUE => don't execute rc files */
|
|
||||||
extern int u_flag; /* TRUE => unbuffer stdin and stdout */
|
|
||||||
extern int d_flag; /* TRUE => disable heading, lib_debug == 0 */
|
|
||||||
extern int stoponerror; /* >0 => stop, <0 => continue, ==0 => use -c */
|
|
||||||
|
|
||||||
extern char *pager; /* $PAGER or default */
|
|
||||||
extern int stdin_tty; /* TRUE if stdin is a tty */
|
|
||||||
extern int interactive; /* TRUE if interactive session (no cmd args) */
|
|
||||||
extern char *program; /* our name */
|
|
||||||
extern char cmdbuf[]; /* command line expression */
|
|
||||||
|
|
||||||
extern char *version(void); /* return version string */
|
|
||||||
|
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* static definitions and functions
|
* static definitions and functions
|
||||||
*/
|
*/
|
||||||
static char *usage = "usage: %s [-C] [-e] [-h] [-i] [-m mode] [-n] [-p]\n"
|
static char *usage = "usage: %s [-c] [-C] [-d] [-e] [-h] [-i] [-m mode]\n"
|
||||||
"\t[-q] [-u] [-c] [-d] [[--] calc_cmd ...]\n";
|
"\t[-n] [-p] [-q] [-u] [-v] [[--] calc_cmd ...]\n";
|
||||||
static void intint(int arg); /* interrupt routine */
|
static void intint(int arg); /* interrupt routine */
|
||||||
|
|
||||||
static int havecommands;
|
|
||||||
static int c_flag; /* To permit continuation after error */
|
|
||||||
static int i_flag; /* To go interactive if permitted */
|
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Top level calculator routine.
|
* Top level calculator routine.
|
||||||
@@ -163,8 +135,7 @@ main(int argc, char **argv)
|
|||||||
exit(1);
|
exit(1);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
interactive = (optind >= argc);
|
havecommands = (optind < argc);
|
||||||
havecommands = !interactive;
|
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* look at the length of any trailing command args
|
* look at the length of any trailing command args
|
||||||
@@ -258,69 +229,73 @@ main(int argc, char **argv)
|
|||||||
post_init = TRUE;
|
post_init = TRUE;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/*
|
||||||
|
* (re)establish the interrupt handler
|
||||||
|
*/
|
||||||
(void) signal(SIGINT, intint);
|
(void) signal(SIGINT, intint);
|
||||||
|
|
||||||
if (start_done == 0) {
|
/*
|
||||||
|
* execute calc code based on the run state
|
||||||
|
*/
|
||||||
|
if (run_state == RUN_PRE_BEGIN) {
|
||||||
if (!q_flag && allow_read) {
|
if (!q_flag && allow_read) {
|
||||||
start_done = 1;
|
run_state = RUN_PRE_RCFILES;
|
||||||
runrcfiles();
|
runrcfiles();
|
||||||
}
|
}
|
||||||
start_done = 2;
|
run_state = RUN_POST_RCFILES;
|
||||||
}
|
}
|
||||||
if (start_done == 1) {
|
if (run_state == RUN_PRE_RCFILES) {
|
||||||
fprintf(stderr, "Execution error in rcfiles\n");
|
fprintf(stderr, "Execution error in rcfiles\n");
|
||||||
if ((c_flag && !stoponerror) || stoponerror < 0) {
|
if ((c_flag && !stoponerror) || stoponerror < 0) {
|
||||||
getcommands(FALSE);
|
getcommands(FALSE);
|
||||||
start_done = 2;
|
run_state = RUN_POST_RCFILES;
|
||||||
} else {
|
} else {
|
||||||
if ((havecommands && !i_flag) || !stdin_tty)
|
if ((havecommands && !i_flag) || !stdin_tty)
|
||||||
start_done = 7;
|
run_state = RUN_STOP_ON_ERROR;
|
||||||
else if (havecommands)
|
else if (havecommands)
|
||||||
start_done = 4;
|
run_state = RUN_POST_CMD_ARGS;
|
||||||
else
|
else
|
||||||
start_done = 2;
|
run_state = RUN_POST_RCFILES;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
if (start_done == 2) {
|
if (run_state == RUN_POST_RCFILES) {
|
||||||
if (havecommands) {
|
if (havecommands) {
|
||||||
start_done = 3;
|
run_state = RUN_PRE_CMD_ARGS;
|
||||||
(void) openstring(cmdbuf);
|
(void) openstring(cmdbuf);
|
||||||
getcommands(FALSE);
|
getcommands(FALSE);
|
||||||
}
|
}
|
||||||
start_done = 4;
|
run_state = RUN_POST_CMD_ARGS;
|
||||||
}
|
}
|
||||||
if (start_done == 3) {
|
if (run_state == RUN_PRE_CMD_ARGS) {
|
||||||
fprintf(stderr, "Execution error in commands\n");
|
fprintf(stderr, "Execution error in commands\n");
|
||||||
if ((c_flag && !stoponerror) || stoponerror < 0) {
|
if ((c_flag && !stoponerror) || stoponerror < 0) {
|
||||||
getcommands(FALSE);
|
getcommands(FALSE);
|
||||||
start_done = 4;
|
run_state = RUN_POST_CMD_ARGS;
|
||||||
}
|
} else {
|
||||||
else {
|
|
||||||
closeinput();
|
closeinput();
|
||||||
if (!stdin_tty || !i_flag)
|
if (!stdin_tty || !i_flag)
|
||||||
start_done = 7;
|
run_state = RUN_STOP_ON_ERROR;
|
||||||
else
|
else
|
||||||
start_done = 4;
|
run_state = RUN_POST_CMD_ARGS;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
if (start_done == 4) {
|
if (run_state == RUN_POST_CMD_ARGS) {
|
||||||
if (stdin_tty && ((havecommands && !i_flag) || p_flag))
|
if (stdin_tty && ((havecommands && !i_flag) || p_flag))
|
||||||
start_done = 6;
|
run_state = RUN_NOT_TOP_LEVEL;
|
||||||
else
|
else
|
||||||
openterminal();
|
openterminal();
|
||||||
}
|
} else if (run_state == RUN_TOP_LEVEL) {
|
||||||
else if (start_done == 5) {
|
if (!stdin_tty && (!c_flag || stoponerror) &&
|
||||||
if (!stdin_tty && (!c_flag || stoponerror) && stoponerror >= 0) {
|
stoponerror >= 0) {
|
||||||
start_done = 7;
|
run_state = RUN_STOP_ON_ERROR;
|
||||||
}
|
} else if ((c_flag && !stoponerror) || stoponerror < 0)
|
||||||
else if ((c_flag && !stoponerror) || stoponerror < 0)
|
|
||||||
getcommands(FALSE);
|
getcommands(FALSE);
|
||||||
else
|
else
|
||||||
reinitialize();
|
reinitialize();
|
||||||
}
|
}
|
||||||
|
|
||||||
if (start_done < 6) {
|
if (run_state < RUN_NOT_TOP_LEVEL) {
|
||||||
start_done = 5;
|
run_state = RUN_TOP_LEVEL;
|
||||||
getcommands(TRUE);
|
getcommands(TRUE);
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -328,7 +303,8 @@ main(int argc, char **argv)
|
|||||||
* all done
|
* all done
|
||||||
*/
|
*/
|
||||||
libcalc_call_me_last();
|
libcalc_call_me_last();
|
||||||
return (start_done - 6) ? 1 : 0;
|
return (run_state == RUN_STOP_ON_ERROR ||
|
||||||
|
run_state == RUN_UNKNOWN) ? 1 : 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
42
calc.h
42
calc.h
@@ -10,6 +10,7 @@
|
|||||||
#if !defined(__CALC_H__)
|
#if !defined(__CALC_H__)
|
||||||
#define __CALC_H__
|
#define __CALC_H__
|
||||||
|
|
||||||
|
#include <setjmp.h>
|
||||||
|
|
||||||
#include "value.h"
|
#include "value.h"
|
||||||
|
|
||||||
@@ -146,15 +147,34 @@ extern void showerrors(void);
|
|||||||
*/
|
*/
|
||||||
extern void initialize(void);
|
extern void initialize(void);
|
||||||
extern void reinitialize(void);
|
extern void reinitialize(void);
|
||||||
|
extern int isatty(int tty); /* TRUE if fd is a tty */
|
||||||
|
extern char *version(void); /* return version string */
|
||||||
|
extern int post_init; /* TRUE => setjmp for math_error is ready */
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Global data definitions.
|
* global flags and definitions
|
||||||
*/
|
*/
|
||||||
|
extern int abortlevel; /* current level of aborts */
|
||||||
|
extern BOOL inputwait; /* TRUE if in a terminal input wait */
|
||||||
|
extern jmp_buf jmpbuf; /* for errors */
|
||||||
|
|
||||||
|
extern int p_flag; /* TRUE => pipe mode */
|
||||||
|
extern int q_flag; /* TRUE => don't execute rc files */
|
||||||
|
extern int u_flag; /* TRUE => unbuffer stdin and stdout */
|
||||||
|
extern int d_flag; /* TRUE => disable heading, lib_debug == 0 */
|
||||||
|
extern int c_flag; /* TRUE => continue after error if permitted */
|
||||||
|
extern int i_flag; /* TRUE => try to go interactive after error */
|
||||||
|
extern int stoponerror; /* >0 => stop, <0 => continue, ==0 => use -c */
|
||||||
|
|
||||||
|
extern char *pager; /* $PAGER or default */
|
||||||
|
extern int stdin_tty; /* TRUE if stdin is a tty */
|
||||||
|
extern int havecommands; /* TRUE if have cmd args) */
|
||||||
|
extern char *program; /* our name */
|
||||||
|
extern char cmdbuf[]; /* command line expression */
|
||||||
|
|
||||||
extern int abortlevel; /* current level of aborts */
|
extern int abortlevel; /* current level of aborts */
|
||||||
extern BOOL inputwait; /* TRUE if in a terminal input wait */
|
extern BOOL inputwait; /* TRUE if in a terminal input wait */
|
||||||
extern VALUE *stack; /* execution stack */
|
extern VALUE *stack; /* execution stack */
|
||||||
extern int start_done; /* TRUE => start up processing finished */
|
|
||||||
extern int dumpnames; /* TRUE => dump names rather than indices */
|
extern int dumpnames; /* TRUE => dump names rather than indices */
|
||||||
|
|
||||||
extern char *calcpath; /* $CALCPATH or default */
|
extern char *calcpath; /* $CALCPATH or default */
|
||||||
@@ -172,7 +192,21 @@ extern int allow_read; /* FALSE => may not open any files for reading */
|
|||||||
extern int allow_write; /* FALSE => may not open any files for writing */
|
extern int allow_write; /* FALSE => may not open any files for writing */
|
||||||
extern int allow_exec; /* FALSE => may not execute any commands */
|
extern int allow_exec; /* FALSE => may not execute any commands */
|
||||||
|
|
||||||
extern int post_init; /* TRUE => setjmp for math_error is ready */
|
/*
|
||||||
|
* calc startup and run state
|
||||||
|
*/
|
||||||
|
typedef enum {
|
||||||
|
RUN_UNKNOWN = -1, /* unknown or unset start state */
|
||||||
|
RUN_PRE_BEGIN = 0, /* pre-startup state, calc execution started */
|
||||||
|
RUN_PRE_RCFILES = 1, /* rc files about to or are being evaluated */
|
||||||
|
RUN_POST_RCFILES = 2, /* rc files have been evaluated */
|
||||||
|
RUN_PRE_CMD_ARGS = 3, /* cmd_args about to or are being evaluated */
|
||||||
|
RUN_POST_CMD_ARGS = 4, /* cmd_args have been evaluated */
|
||||||
|
RUN_TOP_LEVEL = 5, /* running at the top interactive level */
|
||||||
|
RUN_NOT_TOP_LEVEL = 6, /* running not at the top interactive level */
|
||||||
|
RUN_STOP_ON_ERROR = 7 /* we need to stop due to errors */
|
||||||
|
} run;
|
||||||
|
extern run run_state;
|
||||||
|
|
||||||
|
|
||||||
/*
|
/*
|
||||||
|
535
calc.man
535
calc.man
@@ -1,190 +1,356 @@
|
|||||||
.\"
|
.\"
|
||||||
.\" Copyright (c) 1994 David I. Bell and Landon Curt Noll
|
.\" Copyright (c) 1993 David I. Bell and Landon Curt Noll
|
||||||
|
.\" Original man page dated 15nov93
|
||||||
|
.\" Copyright (c) 1999 David I. Bell and Landon Curt Noll
|
||||||
.\" Permission is granted to use, distribute, or modify this source,
|
.\" Permission is granted to use, distribute, or modify this source,
|
||||||
.\" provided that this copyright notice remains intact.
|
.\" provided that this copyright notice remains intact.
|
||||||
.\"
|
.\"
|
||||||
.\" calculator by David I. Bell
|
.\" calculator by David I. Bell
|
||||||
.\" man page by Landon Noll
|
.\" man page by Landon Noll
|
||||||
.TH calc 1 "^..^" "15nov93"
|
.TH calc 1 "^..^" "15Oct1999"
|
||||||
.SH NAME
|
.SH NAME
|
||||||
calc \- arbitrary precision calculator
|
calc \- arbitrary precision calculator
|
||||||
.SH SYNOPSIS
|
.SH SYNOPSIS
|
||||||
\fIcalc\fP
|
\fIcalc\fP
|
||||||
[\fI\-h\fP]
|
.RB [ \-c ]
|
||||||
[\fI\-m mode\fP]
|
.RB [ \-C ]
|
||||||
[\fI\-p\fP]
|
.RB [ \-d ]
|
||||||
[\fI\-q\fP]
|
.RB [ \-e ]
|
||||||
[\fI\-u\fP]
|
.RB [ \-h ]
|
||||||
[\fI\-v\fP]
|
.RB [ \-i ]
|
||||||
[\fIcalc_cmd \&.\|.\|.\fp]
|
.RB [ \-m\ \&mode ]
|
||||||
|
.br
|
||||||
|
.in +5n
|
||||||
|
.RB [ \-n ]
|
||||||
|
.RB [ \-p ]
|
||||||
|
.RB [ \-q ]
|
||||||
|
.RB [ \-u ]
|
||||||
|
.RB [ \-v ]
|
||||||
|
.RB [ calc_cmd\ \&.\|.\|. ]
|
||||||
|
.in -5n
|
||||||
.SH DESCRIPTION
|
.SH DESCRIPTION
|
||||||
\&
|
\&
|
||||||
.br
|
.br
|
||||||
CALC COMMAND LINE
|
CALC COMMAND LINE
|
||||||
.PP
|
.PP
|
||||||
|
|
||||||
.TP
|
.TP
|
||||||
\fI\-h\fP
|
.B \-c
|
||||||
Print a help message.
|
Continue reading command lines even after an execution
|
||||||
This option implies \fI \-q\fP.
|
error has caused the abandonment of a line.
|
||||||
This is equivalent to the calc command \fIhelp help\fP.
|
.sp 1
|
||||||
The help facility is disabled unless the \fImode\fP is 5 or 7.
|
For example:
|
||||||
See \fI\-m\fP below.
|
.sp 1
|
||||||
.sp
|
.in +5n
|
||||||
.TP
|
|
||||||
\fI\-m mode\fP
|
|
||||||
This flag sets the permission mode of calc.
|
|
||||||
It controls the ability for \fIcalc\fP to open files
|
|
||||||
and execute programs.
|
|
||||||
\fIMode\fP may be a number from 0 to 7.
|
|
||||||
.sp
|
|
||||||
The \fImode\fP value is interpreted in a way similar
|
|
||||||
to that of the \fRchmod(1)\fP octal mode:
|
|
||||||
.sp
|
|
||||||
.in +0.5i
|
|
||||||
.nf
|
.nf
|
||||||
0 do not open any file, do not execute progs
|
calc read many_errors.cal
|
||||||
1 do not open any file
|
|
||||||
2 do not open files for reading, do not execute progs
|
|
||||||
3 do not open files for reading
|
|
||||||
4 do not open files for writing, do not execute progs
|
|
||||||
5 do not open files for writing
|
|
||||||
6 do not execute any program
|
|
||||||
7 allow everything (default mode)
|
|
||||||
.fi
|
.fi
|
||||||
.in -0.5i
|
.in -5n
|
||||||
.sp
|
.sp 1
|
||||||
If one wished to run calc from a privledged user, one might
|
will cause
|
||||||
want to use \fI\-m 0\fP in an effort to make calc more secure.
|
.B calc
|
||||||
.sp
|
to abort on the first error, whereas:
|
||||||
\fIMode\fP bits for reading and writing apply only on an open.
|
.sp 1
|
||||||
|
.in +5n
|
||||||
|
.nf
|
||||||
|
calc -c read many_errors.cal
|
||||||
|
.fi
|
||||||
|
.in -5n
|
||||||
|
.sp 1
|
||||||
|
will
|
||||||
|
cause
|
||||||
|
.B calc
|
||||||
|
to try to process each line being read
|
||||||
|
despite the errors that it encounters.
|
||||||
|
|
||||||
|
.TP
|
||||||
|
.B \-C
|
||||||
|
Permit the execution of custom builtin functions. Without
|
||||||
|
this flag, calling the custom() builtin function will
|
||||||
|
simply generate an error.
|
||||||
|
.sp 1
|
||||||
|
Use if this flag may cause
|
||||||
|
.B calc
|
||||||
|
to execute functions that
|
||||||
|
are non-standard and that are not portable. Custom builtin
|
||||||
|
functions are disabled by default for this reason.
|
||||||
|
|
||||||
|
.TP
|
||||||
|
.B \-d
|
||||||
|
Disable the printing of the opening title. The printing
|
||||||
|
of library debug and informational messages is also disabled
|
||||||
|
as if \fBconfig("lib_debug", 0)\fP had been executed.
|
||||||
|
.sp 1
|
||||||
|
For example:
|
||||||
|
.sp 1
|
||||||
|
.in +5n
|
||||||
|
calc 'read qtime; qtime(2)'
|
||||||
|
.in -5n
|
||||||
|
.sp 1
|
||||||
|
will output something like:
|
||||||
|
.sp 1
|
||||||
|
.in +5n
|
||||||
|
.nf
|
||||||
|
qtime(utc_hr_offset) defined
|
||||||
|
It's nearly ten past six.
|
||||||
|
.fi
|
||||||
|
.in -5n
|
||||||
|
.sp 1
|
||||||
|
whereas:
|
||||||
|
.sp 1
|
||||||
|
.in +5n
|
||||||
|
.nf
|
||||||
|
calc -d 'read qtime; qtime(2)'
|
||||||
|
.fi
|
||||||
|
.in -5n
|
||||||
|
.sp 1
|
||||||
|
will just say:
|
||||||
|
.sp 1
|
||||||
|
.in +5n
|
||||||
|
.nf
|
||||||
|
It's nearly ten past six.
|
||||||
|
.fi
|
||||||
|
.in -5n
|
||||||
|
.sp 1
|
||||||
|
|
||||||
|
.TP
|
||||||
|
.B \-e
|
||||||
|
Ignore any environment variables on startup.
|
||||||
|
The getenv() builtin will still return values, however.
|
||||||
|
|
||||||
|
.TP
|
||||||
|
.B \-h
|
||||||
|
Print a help message. This option implies
|
||||||
|
.BR \-q .
|
||||||
|
This
|
||||||
|
is equivalent to the
|
||||||
|
.B calc
|
||||||
|
command help help.
|
||||||
|
The help facility is disabled unless the mode is 5 or 7.
|
||||||
|
See
|
||||||
|
.BR \-m .
|
||||||
|
|
||||||
|
.TP
|
||||||
|
.B \-i
|
||||||
|
Become interactive if possible.
|
||||||
|
Be default, if
|
||||||
|
.I calc_cmd
|
||||||
|
args are given,
|
||||||
|
.B calc
|
||||||
|
will execute them and exit.
|
||||||
|
This flag args are given,
|
||||||
|
.B calc
|
||||||
|
will execute them and exit.
|
||||||
|
This flag will cause
|
||||||
|
.B calc
|
||||||
|
to drop into interactive mode after the
|
||||||
|
commands are executed.
|
||||||
|
.sp 1
|
||||||
|
For example:
|
||||||
|
.sp 1
|
||||||
|
.in +5n
|
||||||
|
.nf
|
||||||
|
calc 2+5
|
||||||
|
.fi
|
||||||
|
.in -5n
|
||||||
|
.sp 1
|
||||||
|
will print the value 7 and exit whereas:
|
||||||
|
.sp 1
|
||||||
|
.in +5n
|
||||||
|
.nf
|
||||||
|
calc -i 2+5
|
||||||
|
.fi
|
||||||
|
.in -5n
|
||||||
|
.sp 1
|
||||||
|
will print the value 7 and prompt the user for more
|
||||||
|
.B calc
|
||||||
|
commands.
|
||||||
|
|
||||||
|
.TP
|
||||||
|
.BR \-m " mode"
|
||||||
|
This flag sets the permission mode of
|
||||||
|
.BR calc .
|
||||||
|
It controls the ability for
|
||||||
|
.B calc
|
||||||
|
to open files and execute programs.
|
||||||
|
Mode may be a number from 0 to 7.
|
||||||
|
.sp 1
|
||||||
|
The mode value is interpreted in a way similar to that
|
||||||
|
of the
|
||||||
|
.BR chmod (1)
|
||||||
|
octal mode:
|
||||||
|
.sp 1
|
||||||
|
.in +5n
|
||||||
|
.nf
|
||||||
|
0 do not open any file, do not execute progs
|
||||||
|
1 do not open any file
|
||||||
|
2 do not open files for reading, do not execute progs
|
||||||
|
3 do not open files for reading
|
||||||
|
4 do not open files for writing, do not execute progs
|
||||||
|
5 do not open files for writing
|
||||||
|
6 do not execute any program
|
||||||
|
7 allow everything (default mode)
|
||||||
|
.fi
|
||||||
|
.in -5n
|
||||||
|
.sp 1
|
||||||
|
If one wished to run
|
||||||
|
.B calc
|
||||||
|
from a privileged user, one might want to use
|
||||||
|
.B \-m
|
||||||
|
0 in an effort to make
|
||||||
|
.B calc
|
||||||
|
somewhat more secure.
|
||||||
|
.sp 1
|
||||||
|
Mode bits for reading and writing apply only on an
|
||||||
|
open.
|
||||||
Files already open are not effected.
|
Files already open are not effected.
|
||||||
Thus if one wanted to use the \fI\-m 0\fP in an effort to make
|
Thus if one wanted to use the
|
||||||
\fIcalc\fP more secure, but still wanted to read and write a specific
|
.B \-m
|
||||||
file, one might want to do:
|
0 in an effort to make
|
||||||
.sp
|
.B calc
|
||||||
.in +0.5i
|
somewhat more secure, but still wanted to read and write a specific
|
||||||
|
file, one might want to do in
|
||||||
|
.BR sh (1),
|
||||||
|
.BR ksh (1),
|
||||||
|
.BR bash (1)-like
|
||||||
|
shells:
|
||||||
|
.sp 1
|
||||||
|
.in +5n
|
||||||
.nf
|
.nf
|
||||||
\fRcalc \-m 0 3<a.file\fP
|
calc -m 0 3<a.file
|
||||||
.fi
|
.fi
|
||||||
.in -0.5i
|
.in -5n
|
||||||
.sp
|
.sp 1
|
||||||
Files presented to \fIcalc\fP in this way are opened in an unknown mode.
|
Files presented to
|
||||||
\fICalc\fP will attempt to read or write them if directed.
|
.B calc
|
||||||
.sp
|
in this way are opened in an
|
||||||
If the \fImode\fP disables opening of files for reading, then
|
unknown mode.
|
||||||
the startup library scripts are disabled as of \fI\-q\fP was given.
|
.B Calc
|
||||||
The reading of key bindings is also disabled when the \fImode\fP
|
will attempt to read or write them if directed.
|
||||||
disables opening of files for reading.
|
.sp 1
|
||||||
|
If the mode disables opening of files for reading, then
|
||||||
|
the startup library scripts are disabled as of
|
||||||
|
.B \-q
|
||||||
|
was given.
|
||||||
|
The reading of key bindings is also disabled
|
||||||
|
when the mode disables opening of files for reading.
|
||||||
|
|
||||||
.TP
|
.TP
|
||||||
\fI \-p\fP
|
.B \-n
|
||||||
Pipe processing is enabled by use of \-p. For example:
|
Use the new configuration defaults instead of the old
|
||||||
.sp
|
default classic defaults.
|
||||||
.in +0.5i
|
This flag as the same effect
|
||||||
|
as executing \fBconfig("all", "newcfg")\fP at startup time.
|
||||||
|
|
||||||
|
.TP
|
||||||
|
.B \-p
|
||||||
|
Pipe processing is enabled by use of
|
||||||
|
.BR \-p .
|
||||||
|
For example:
|
||||||
|
.sp 1
|
||||||
|
.in +5n
|
||||||
.nf
|
.nf
|
||||||
\fRecho "print 2^21701\-1, 2^23209\-1" | calc \-p | fizzbin\fP
|
calc -p '2^21701-1' | fizzbin
|
||||||
.fi
|
.fi
|
||||||
.in -0.5i
|
.in -5n
|
||||||
.sp
|
.sp 1
|
||||||
In pipe mode, \fIcalc\fP does not prompt, does not print leading tabs
|
In pipe mode,
|
||||||
and does not print the initial header.
|
.B calc
|
||||||
|
does not prompt, does not print leading
|
||||||
|
tabs and does not print the initial header.
|
||||||
|
The
|
||||||
|
.B \-p
|
||||||
|
flag overrides
|
||||||
|
.BR \-i .
|
||||||
|
|
||||||
.TP
|
.TP
|
||||||
\fI \-q\fP
|
.B \-q
|
||||||
Disable the use of the \fI$CALCRC\fP startup scripts.
|
Disable the use of the $CALCRC startup scripts.
|
||||||
|
|
||||||
.TP
|
.TP
|
||||||
\fI \-u\fP
|
.B \-u
|
||||||
Disable buffering of stdin and stdout.
|
Disable buffering of stdin and stdout.
|
||||||
|
|
||||||
.TP
|
.TP
|
||||||
\fI \-v\fP
|
.B \-v
|
||||||
Print the version and exit.
|
Print the
|
||||||
|
.B calc
|
||||||
|
version number and exit.
|
||||||
.PP
|
.PP
|
||||||
Without \fIcalc_cmd\fPs, \fIcalc\fP operates interactively.
|
Without
|
||||||
If one or more \fIcalc_cmd\fPs are given on the command line,
|
.IR calc_cmd ,
|
||||||
\fIcalc\fP will execute them and exit.
|
.B calc
|
||||||
The printing of leading tabs on output is disabled
|
operates interactively.
|
||||||
as if \fIconfig("tab",0)\fP had been executed.
|
If one or more
|
||||||
|
.I calc_cmd
|
||||||
|
are given on the command line,
|
||||||
|
.B calc
|
||||||
|
will execute them and exit.
|
||||||
|
If
|
||||||
|
.B \-i
|
||||||
|
is given,
|
||||||
|
.B calc
|
||||||
|
will attempt to become interactive
|
||||||
|
even of one or more
|
||||||
|
.I calc_cmd
|
||||||
|
are given on the command line.
|
||||||
.PP
|
.PP
|
||||||
Normally on startup, \fIcalc\fP attempts to execute a collection
|
Normally on startup,
|
||||||
of library scripts.
|
.B calc
|
||||||
The environment variable \fI$CALCRC\fP (if non-existent then
|
attempts to execute a collection of
|
||||||
a compiled in value) contains a \fI:\fP separated list of
|
library scripts.
|
||||||
startup library scripts.
|
The environment variable $CALCRC (if non-existent
|
||||||
No error conditions are produced if these startup library scripts
|
then a compiled in value) contains a : separated list of startup
|
||||||
are not found.
|
library scripts.
|
||||||
|
No error conditions are produced if these startup
|
||||||
|
library scripts are not found.
|
||||||
.PP
|
.PP
|
||||||
If the \fImode\fP disables opening of files for reading, then
|
If the mode disables opening of files for reading, then the startup
|
||||||
the startup library scripts are disabled as of \fI\-q\fP was given
|
library scripts are disabled as of
|
||||||
and \fI$CALCRC\fP as well as the default compiled in value are ignored.
|
.B \-q
|
||||||
|
was given and $CALCRC as well
|
||||||
|
as the default compiled in value are ignored.
|
||||||
.PP
|
.PP
|
||||||
Filenames are subject to ``~'' expansion (see below).
|
Filenames are subject to ``~'' expansion (see below).
|
||||||
The environment variable \fI$CALCPATH\fP (if non-existent then
|
The
|
||||||
a compiled in value) contains a \fI:\fP separated list of search
|
environment variable $CALCPATH (if non-existent then a compiled in
|
||||||
directories.
|
value) contains a : separated list of search directories.
|
||||||
If a file does not begin with \fI/\fP, \fI~\fP or \fI./\fP,
|
If a
|
||||||
then it is searched for under each directory listed in the \fI$CALCPATH\fP.
|
file does not begin with /, ~ or ./, then it is searched for under
|
||||||
It is an error if no such readable file is found.
|
each directory listed in the $CALCPATH.
|
||||||
|
It is an error if no such
|
||||||
|
readable file is found.
|
||||||
.PP
|
.PP
|
||||||
Calc treats all open files, other than stdin, stdout and stderr
|
.B Calc
|
||||||
as files available for reading and writing.
|
treats all open files, other than stdin, stdout and
|
||||||
One may present calc with an already open file in the following way:
|
stderr as files available for reading and writing.
|
||||||
.sp
|
One may
|
||||||
.in +0.5i
|
present
|
||||||
|
.B calc
|
||||||
|
with an already open file using
|
||||||
|
.BR sh (1),
|
||||||
|
.BR ksh (1),
|
||||||
|
.BR bash (1)-like
|
||||||
|
shells is to:
|
||||||
|
.sp 1
|
||||||
|
.in +5n
|
||||||
|
calc 3<open_file 4<open_file2
|
||||||
|
.in -5n
|
||||||
|
.sp 1
|
||||||
|
For more information use the following
|
||||||
|
.B calc
|
||||||
|
commands:
|
||||||
|
.sp 1
|
||||||
|
.in +5n
|
||||||
.nf
|
.nf
|
||||||
\fRcalc 3<open_file 4<open_file2\fP
|
|
||||||
.fi
|
|
||||||
.in -0.5i
|
|
||||||
.PP
|
|
||||||
For more information use the following calc commands:
|
|
||||||
.PP
|
|
||||||
.in 1.0i
|
|
||||||
help usage
|
|
||||||
.br
|
|
||||||
help help
|
help help
|
||||||
.br
|
help overview
|
||||||
|
help usage
|
||||||
help environment
|
help environment
|
||||||
.in -1.0i
|
help config
|
||||||
.PP
|
.fi
|
||||||
OVERVIEW
|
.in -5n
|
||||||
.PP
|
.sp 1
|
||||||
\fICalc\fP is arbitrary precision arithmetic system that uses
|
|
||||||
a C-like language.
|
|
||||||
\fICalc\fP is useful as a calculator, an algorithm prototyped
|
|
||||||
and as a mathematical research tool.
|
|
||||||
More importantly, \fIcalc\fP provides one with a machine
|
|
||||||
independent means of computation.
|
|
||||||
.PP
|
|
||||||
\fICalc\fP comes with a rich set of builtin mathematical
|
|
||||||
and programmatic functions.
|
|
||||||
.PP
|
|
||||||
\fICalc\fP is distributed with library of scripts.
|
|
||||||
Written in the same C-like language, library scripts may be
|
|
||||||
read in and executed during a \fIcalc\fP session.
|
|
||||||
These library scripts are also provided because they are
|
|
||||||
useful and to serve as examples of the \fIcalc\fP language.
|
|
||||||
One may further extend \fIcalc\fP thru the
|
|
||||||
use of user defined scripts.
|
|
||||||
.PP
|
|
||||||
Internally calc represents numeric values as fractions reduced to their
|
|
||||||
lowest terms.
|
|
||||||
The numerators and denominators of these factions may grow to
|
|
||||||
arbitrarily large values.
|
|
||||||
Numeric values read in are automatically converted into rationals.
|
|
||||||
The user need not be aware of this internal representation.
|
|
||||||
.PP
|
|
||||||
For more information use the following calc commands:
|
|
||||||
.PP
|
|
||||||
.in 1.0i
|
|
||||||
help intro
|
|
||||||
.br
|
|
||||||
help builtin
|
|
||||||
.br
|
|
||||||
help stdlib
|
|
||||||
.br
|
|
||||||
help define
|
|
||||||
.br
|
|
||||||
show builtins
|
|
||||||
.br
|
|
||||||
show functions
|
|
||||||
.in -1.0i
|
|
||||||
.PP
|
.PP
|
||||||
DATA TYPES
|
DATA TYPES
|
||||||
.PP
|
.PP
|
||||||
@@ -199,7 +365,9 @@ multiplication, division, negation, squaring, modulus,
|
|||||||
rounding, exponentiation, equality, comparison, printing
|
rounding, exponentiation, equality, comparison, printing
|
||||||
and so on.
|
and so on.
|
||||||
.PP
|
.PP
|
||||||
For more information use the following calc commands:
|
For more information use the following
|
||||||
|
.B calc
|
||||||
|
commands:
|
||||||
.PP
|
.PP
|
||||||
.in 1.0i
|
.in 1.0i
|
||||||
help types
|
help types
|
||||||
@@ -220,7 +388,9 @@ procedure.
|
|||||||
Values may be grouped together in a matrix, or into a
|
Values may be grouped together in a matrix, or into a
|
||||||
a list that permits stack and queue style operations.
|
a list that permits stack and queue style operations.
|
||||||
.PP
|
.PP
|
||||||
For more information use the following calc commands:
|
For more information use the following
|
||||||
|
.B calc
|
||||||
|
commands:
|
||||||
.PP
|
.PP
|
||||||
.in 1.0i
|
.in 1.0i
|
||||||
help variable
|
help variable
|
||||||
@@ -256,7 +426,9 @@ For example:
|
|||||||
~chongo/lib/fft_multiply.cal
|
~chongo/lib/fft_multiply.cal
|
||||||
.in -1.0i
|
.in -1.0i
|
||||||
.PP
|
.PP
|
||||||
For more information use the following calc command:
|
For more information use the following
|
||||||
|
.B calc
|
||||||
|
command:
|
||||||
.PP
|
.PP
|
||||||
.in 1.0i
|
.in 1.0i
|
||||||
help file
|
help file
|
||||||
@@ -275,7 +447,9 @@ These include commands such as function definition, help,
|
|||||||
reading in library scripts, dump files to a file, error notification,
|
reading in library scripts, dump files to a file, error notification,
|
||||||
configuration control and status.
|
configuration control and status.
|
||||||
.PP
|
.PP
|
||||||
For more information use the following calc command:
|
For more information use the following
|
||||||
|
.B calc
|
||||||
|
command:
|
||||||
.PP
|
.PP
|
||||||
.in 1.0i
|
.in 1.0i
|
||||||
help command
|
help command
|
||||||
@@ -295,7 +469,8 @@ help config
|
|||||||
.PD 0
|
.PD 0
|
||||||
.TP 20
|
.TP 20
|
||||||
${LIBDIR}/*.cal
|
${LIBDIR}/*.cal
|
||||||
library scripts shipped with calc
|
library scripts shipped with
|
||||||
|
.B calc
|
||||||
.br
|
.br
|
||||||
.sp
|
.sp
|
||||||
.TP 20
|
.TP 20
|
||||||
@@ -323,7 +498,9 @@ Default value: ${CALCPATH}
|
|||||||
.TP 5
|
.TP 5
|
||||||
CALCRC
|
CALCRC
|
||||||
On startup (unless \-h or \-q was given on the command
|
On startup (unless \-h or \-q was given on the command
|
||||||
line), calc searches for files along this :-separated
|
line),
|
||||||
|
.B calc
|
||||||
|
searches for files along this :-separated
|
||||||
environment variable.
|
environment variable.
|
||||||
.br
|
.br
|
||||||
.sp
|
.sp
|
||||||
@@ -333,7 +510,9 @@ Default value: ${CALCRC}
|
|||||||
.TP 5
|
.TP 5
|
||||||
CALCBINDINGS
|
CALCBINDINGS
|
||||||
On startup (unless \fI\-h\fP or \fI\-q\fP was given on the command
|
On startup (unless \fI\-h\fP or \fI\-q\fP was given on the command
|
||||||
line, or \fI\-m\fP disallows opening files for reading), calc reads
|
line, or \fI\-m\fP disallows opening files for reading),
|
||||||
|
.B calc
|
||||||
|
reads
|
||||||
key bindings from the filename specified
|
key bindings from the filename specified
|
||||||
by this environment variable.
|
by this environment variable.
|
||||||
.br
|
.br
|
||||||
@@ -343,9 +522,12 @@ Default value: ${CALCBINDINGS}
|
|||||||
.SH CREDIT
|
.SH CREDIT
|
||||||
\&
|
\&
|
||||||
.br
|
.br
|
||||||
The majority of calc was written by David I. Bell.
|
The majority of
|
||||||
|
.B calc
|
||||||
|
was written by David I. Bell.
|
||||||
.sp
|
.sp
|
||||||
Calc archives and calc-tester mailing list maintained by Landon Curt Noll.
|
.B Calc
|
||||||
|
archives and calc-tester mailing list maintained by Landon Curt Noll.
|
||||||
.sp
|
.sp
|
||||||
Thanks for suggestions and encouragement from Peter Miller,
|
Thanks for suggestions and encouragement from Peter Miller,
|
||||||
Neil Justusson, and Landon Noll.
|
Neil Justusson, and Landon Noll.
|
||||||
@@ -378,30 +560,27 @@ Copyright (c) 19xx Ernest Bowen and Landon Curt Noll
|
|||||||
Permission is granted to use, distribute, or modify this source,
|
Permission is granted to use, distribute, or modify this source,
|
||||||
provided that this copyright notice remains intact.
|
provided that this copyright notice remains intact.
|
||||||
.sp
|
.sp
|
||||||
Send calc comments, suggestions, bug fixes, enhancements
|
Send comments, suggestions, bug fixes, enhancements
|
||||||
and interesting calc scripts that you would like you see included
|
and interesting
|
||||||
|
.B calc
|
||||||
|
scripts that you would like you see included
|
||||||
in future distributions to:
|
in future distributions to:
|
||||||
.sp
|
.sp
|
||||||
.in +0.5i
|
.in +0.5i
|
||||||
dbell@auug.org.au
|
calc-tester-request@postofc.corp.sgi.com
|
||||||
.br
|
|
||||||
chongo@toad.com
|
|
||||||
.in -0.5i
|
.in -0.5i
|
||||||
.sp
|
.sp
|
||||||
Landon Noll maintains the official calc ftp archive at:
|
Landon Noll maintains the the
|
||||||
|
.B calc
|
||||||
|
web site is located at:
|
||||||
.sp
|
.sp
|
||||||
.in +0.5i
|
.in +0.5i
|
||||||
ftp://ftp.uu.net/pub/calc
|
http://reality.sgi.com/chongo/calc
|
||||||
.in -0.5i
|
.in -0.5i
|
||||||
.sp
|
.sp
|
||||||
Alpha test versions, complete with bugs, untested code and
|
One may join the
|
||||||
experimental features may be fetched (if you are brave) under:
|
.B calc
|
||||||
.sp
|
testing group by sending a request to:
|
||||||
.in +0.5i
|
|
||||||
http://reality.sgi.com/chongo/calc/
|
|
||||||
.in -0.5i
|
|
||||||
.sp
|
|
||||||
One may join the calc testing group by sending a request to:
|
|
||||||
.sp
|
.sp
|
||||||
.in +0.5i
|
.in +0.5i
|
||||||
calc-tester-request@postofc.corp.sgi.com
|
calc-tester-request@postofc.corp.sgi.com
|
||||||
@@ -410,14 +589,14 @@ calc-tester-request@postofc.corp.sgi.com
|
|||||||
Your message body (not the subject) should consist of:
|
Your message body (not the subject) should consist of:
|
||||||
.sp
|
.sp
|
||||||
.in +0.5i
|
.in +0.5i
|
||||||
|
.nf
|
||||||
subscribe calc-tester address
|
subscribe calc-tester address
|
||||||
.br
|
|
||||||
end
|
end
|
||||||
.br
|
|
||||||
name your_full_name
|
name your_full_name
|
||||||
|
.fi
|
||||||
|
.in -0.5i
|
||||||
.sp
|
.sp
|
||||||
where "address" is your EMail address and "your_full_name"
|
where "address" is your EMail address and "your_full_name"
|
||||||
is your full name.
|
is your full name.
|
||||||
.in -0.5i
|
|
||||||
.sp
|
.sp
|
||||||
Enjoy!
|
Share and Enjoy! :\-)
|
||||||
|
76
help/usage
76
help/usage
@@ -2,7 +2,22 @@ Calc command line
|
|||||||
|
|
||||||
Calc has the following command line:
|
Calc has the following command line:
|
||||||
|
|
||||||
calc [-C] [-e] [-h] [-i] [-m mode] [-n] [-p] [-q] [-u] [calc_cmd ...]
|
calc [-c] [-C] [-d] [-e] [-h] [-i] [-m mode]
|
||||||
|
[-n] [-p] [-q] [-u] [-v] [calc_cmd ...]
|
||||||
|
|
||||||
|
-c Continue reading command lines even after an execution
|
||||||
|
error has caused the abandonment of a line.
|
||||||
|
|
||||||
|
For example:
|
||||||
|
|
||||||
|
calc read many_errors.cal
|
||||||
|
|
||||||
|
will cause calc to abort on the first error, whereas:
|
||||||
|
|
||||||
|
calc -c read many_errors.cal
|
||||||
|
|
||||||
|
will cause calc to try to process each line being read
|
||||||
|
despite the errors that it encounters.
|
||||||
|
|
||||||
-C Permit the execution of custom builtin functions. Without
|
-C Permit the execution of custom builtin functions. Without
|
||||||
this flag, calling the custom() builtin function will
|
this flag, calling the custom() builtin function will
|
||||||
@@ -12,6 +27,27 @@ Calc command line
|
|||||||
are non-standard and that are not portable. Custom builtin
|
are non-standard and that are not portable. Custom builtin
|
||||||
functions are disabled by default for this reason.
|
functions are disabled by default for this reason.
|
||||||
|
|
||||||
|
-d Disable the printing of the opening title. The printing
|
||||||
|
of library debug and informational messages is also disabled
|
||||||
|
as if config("lib_debug",0) had been executed.
|
||||||
|
|
||||||
|
For example:
|
||||||
|
|
||||||
|
calc 'read qtime; qtime(2)'
|
||||||
|
|
||||||
|
will output something like:
|
||||||
|
|
||||||
|
qtime(utc_hr_offset) defined
|
||||||
|
It's nearly ten past six.
|
||||||
|
|
||||||
|
whereas:
|
||||||
|
|
||||||
|
calc -d 'read qtime; qtime(2)'
|
||||||
|
|
||||||
|
will just say:
|
||||||
|
|
||||||
|
It's nearly ten past six.
|
||||||
|
|
||||||
-e Ignore any environment variables on startup. The
|
-e Ignore any environment variables on startup. The
|
||||||
getenv() builtin will still return values, however.
|
getenv() builtin will still return values, however.
|
||||||
|
|
||||||
@@ -19,7 +55,21 @@ Calc command line
|
|||||||
is equivalent to the calc command help help. The help
|
is equivalent to the calc command help help. The help
|
||||||
facility is disabled unless the mode is 5 or 7. See -m.
|
facility is disabled unless the mode is 5 or 7. See -m.
|
||||||
|
|
||||||
-i Do not about if the error count exceeds maxerr().
|
-i Become interactive if possible. Be default, if calc_cmd
|
||||||
|
args are given, calc will execute them and exit. This flag
|
||||||
|
will cause calc to drop into interactive mode after the
|
||||||
|
commands are executed.
|
||||||
|
|
||||||
|
For example:
|
||||||
|
|
||||||
|
calc 2+5
|
||||||
|
|
||||||
|
will print the value 7 and exit whereas:
|
||||||
|
|
||||||
|
calc -i 2+5
|
||||||
|
|
||||||
|
will print the value 7 and prompt the user for more
|
||||||
|
calc commands.
|
||||||
|
|
||||||
-m mode
|
-m mode
|
||||||
This flag sets the permission mode of calc. It
|
This flag sets the permission mode of calc. It
|
||||||
@@ -38,7 +88,7 @@ Calc command line
|
|||||||
6 do not execute any program
|
6 do not execute any program
|
||||||
7 allow everything (default mode)
|
7 allow everything (default mode)
|
||||||
|
|
||||||
If one wished to run calc from a privledged user, one
|
If one wished to run calc from a privileged user, one
|
||||||
might want to use -m 0 in an effort to make calc more
|
might want to use -m 0 in an effort to make calc more
|
||||||
secure.
|
secure.
|
||||||
|
|
||||||
@@ -46,7 +96,7 @@ Calc command line
|
|||||||
open. Files already open are not effected. Thus if one
|
open. Files already open are not effected. Thus if one
|
||||||
wanted to use the -m 0 in an effort to make calc more
|
wanted to use the -m 0 in an effort to make calc more
|
||||||
secure, but still wanted to read and write a specific
|
secure, but still wanted to read and write a specific
|
||||||
file, one might want to do:
|
file, one might want to do in sh, ksh, bash-like shells:
|
||||||
|
|
||||||
calc -m 0 3<a.file
|
calc -m 0 3<a.file
|
||||||
|
|
||||||
@@ -59,25 +109,28 @@ Calc command line
|
|||||||
given. The reading of key bindings is also disabled
|
given. The reading of key bindings is also disabled
|
||||||
when the mode disables opening of files for reading.
|
when the mode disables opening of files for reading.
|
||||||
|
|
||||||
-n Use the new configutation defaults instead of the old
|
-n Use the new configuration defaults instead of the old
|
||||||
default classic defaults. This flag as the same effect
|
default classic defaults. This flag as the same effect
|
||||||
as executing config("all", "newcfg") at startup time.
|
as executing config("all", "newcfg") at startup time.
|
||||||
|
|
||||||
-p Pipe processing is enabled by use of -p. For example:
|
-p Pipe processing is enabled by use of -p. For example:
|
||||||
|
|
||||||
echo "print 2^21701-1, 2^23209-1" | calc -p | fizzbin
|
calc -p '2^21701-1' | fizzbin
|
||||||
|
|
||||||
In pipe mode, calc does not prompt, does not print
|
In pipe mode, calc does not prompt, does not print leading
|
||||||
leading tabs and does not print the initial header.
|
tabs and does not print the initial header. The -p flag
|
||||||
|
overrides -i.
|
||||||
|
|
||||||
-q Disable the use of the $CALCRC startup scripts.
|
-q Disable the use of the $CALCRC startup scripts.
|
||||||
|
|
||||||
-u Disable buffering of stdin and stdout.
|
-u Disable buffering of stdin and stdout.
|
||||||
|
|
||||||
|
-v Print calc version number and exit.
|
||||||
|
|
||||||
Without `calc_cmd', calc operates interactively. If one or more
|
Without `calc_cmd', calc operates interactively. If one or more
|
||||||
`calc_cmd' are given on the command line, calc will execute them and
|
`calc_cmd' are given on the command line, calc will execute them and
|
||||||
exit. The printing of leading tabs on output is disabled as if
|
exit. If -i is given, calc will attempt to become interactive
|
||||||
config("tab",0) had been executed.
|
even of one or more `calc_cmd' are given on the command line.
|
||||||
|
|
||||||
Normally on startup, calc attempts to execute a collection of
|
Normally on startup, calc attempts to execute a collection of
|
||||||
library scripts. The environment variable $CALCRC (if non-existent
|
library scripts. The environment variable $CALCRC (if non-existent
|
||||||
@@ -98,7 +151,8 @@ Calc command line
|
|||||||
|
|
||||||
Calc treats all open files, other than stdin, stdout and
|
Calc treats all open files, other than stdin, stdout and
|
||||||
stderr as files available for reading and writing. One may
|
stderr as files available for reading and writing. One may
|
||||||
present calc with an already open file in the following way:
|
present calc with an already open file using sh, ksh or bash-like
|
||||||
|
shells is to:
|
||||||
|
|
||||||
calc 3<open_file 4<open_file2
|
calc 3<open_file 4<open_file2
|
||||||
|
|
||||||
|
6
input.c
6
input.c
@@ -311,7 +311,7 @@ f_open(char *name, char *mode)
|
|||||||
*/
|
*/
|
||||||
if (!allow_read && !allow_write) {
|
if (!allow_read && !allow_write) {
|
||||||
/* no reads and no writes means no opens! */
|
/* no reads and no writes means no opens! */
|
||||||
if (start_done) {
|
if (run_state > RUN_PRE_BEGIN) {
|
||||||
fprintf(stderr,
|
fprintf(stderr,
|
||||||
"open of %s mode %s - %s\n", name, mode,
|
"open of %s mode %s - %s\n", name, mode,
|
||||||
"open for read or write disallowed by -m\n");
|
"open for read or write disallowed by -m\n");
|
||||||
@@ -319,7 +319,7 @@ f_open(char *name, char *mode)
|
|||||||
return NULL;
|
return NULL;
|
||||||
} else if (!allow_read && strchr(mode, 'r') != NULL) {
|
} else if (!allow_read && strchr(mode, 'r') != NULL) {
|
||||||
/* reading new files disallowed */
|
/* reading new files disallowed */
|
||||||
if (start_done) {
|
if (run_state > RUN_PRE_BEGIN) {
|
||||||
fprintf(stderr,
|
fprintf(stderr,
|
||||||
"open of %s mode %s - %s\n", name, mode,
|
"open of %s mode %s - %s\n", name, mode,
|
||||||
"open for read disallowed by -m\n");
|
"open for read disallowed by -m\n");
|
||||||
@@ -330,7 +330,7 @@ f_open(char *name, char *mode)
|
|||||||
strchr(mode, 'a') != NULL ||
|
strchr(mode, 'a') != NULL ||
|
||||||
strchr(mode, '+') != NULL)) {
|
strchr(mode, '+') != NULL)) {
|
||||||
/* writing new files disallowed */
|
/* writing new files disallowed */
|
||||||
if (start_done) {
|
if (run_state > RUN_PRE_BEGIN) {
|
||||||
fprintf(stderr,
|
fprintf(stderr,
|
||||||
"open of %s mode %s - %s\n", name, mode,
|
"open of %s mode %s - %s\n", name, mode,
|
||||||
"open for write disallowed by -m\n");
|
"open for write disallowed by -m\n");
|
||||||
|
21
lib_calc.c
21
lib_calc.c
@@ -63,8 +63,8 @@ int new_std = FALSE; /* TRUE (-n) => use newstd configuration */
|
|||||||
int abortlevel; /* current level of aborts */
|
int abortlevel; /* current level of aborts */
|
||||||
BOOL inputwait; /* TRUE if in a terminal input wait */
|
BOOL inputwait; /* TRUE if in a terminal input wait */
|
||||||
jmp_buf jmpbuf; /* for errors */
|
jmp_buf jmpbuf; /* for errors */
|
||||||
int start_done = FALSE; /* TRUE => start up processing finished */
|
run run_state = RUN_UNKNOWN; /* calc startup and run state */
|
||||||
char *program = "calc"; /* our name */
|
char *program = "calc"; /* our name */
|
||||||
char cmdbuf[MAXCMD+1+1+1]; /* command line expression + "\n\0" + guard */
|
char cmdbuf[MAXCMD+1+1+1]; /* command line expression + "\n\0" + guard */
|
||||||
|
|
||||||
|
|
||||||
@@ -83,8 +83,8 @@ int p_flag = FALSE; /* TRUE => pipe mode */
|
|||||||
int q_flag = FALSE; /* TRUE => don't execute rc files */
|
int q_flag = FALSE; /* TRUE => don't execute rc files */
|
||||||
int u_flag = FALSE; /* TRUE => unbuffer stdin and stdout */
|
int u_flag = FALSE; /* TRUE => unbuffer stdin and stdout */
|
||||||
int d_flag = FALSE; /* TRUE => disable heading, lib_debug == 0 */
|
int d_flag = FALSE; /* TRUE => disable heading, lib_debug == 0 */
|
||||||
|
int c_flag = FALSE; /* TRUE => continue on error if permitted */
|
||||||
int stoponerror = FALSE; /* >0 => stop, <0 => continue on error */
|
int i_flag = FALSE; /* TRUE => go interactive if permitted */
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* global values
|
* global values
|
||||||
@@ -96,8 +96,9 @@ char *home; /* $HOME or default */
|
|||||||
char *pager; /* $PAGER or default */
|
char *pager; /* $PAGER or default */
|
||||||
char *shell; /* $SHELL or default */
|
char *shell; /* $SHELL or default */
|
||||||
int stdin_tty = FALSE; /* TRUE if stdin is a tty */
|
int stdin_tty = FALSE; /* TRUE if stdin is a tty */
|
||||||
int interactive = FALSE; /* TRUE if interactive session (no cmd args) */
|
int havecommands = FALSE; /* TRUE if have one or more cmd args */
|
||||||
int post_init = FALSE; /* TRUE setjmp for math_error is readready */
|
int stoponerror = FALSE; /* >0 => stop, <0 => continue on error */
|
||||||
|
int post_init = FALSE; /* TRUE setjmp for math_error is ready */
|
||||||
|
|
||||||
int no_env = FALSE; /* TRUE (-e) => ignore env vars on startup */
|
int no_env = FALSE; /* TRUE (-e) => ignore env vars on startup */
|
||||||
int errmax = ERRMAX; /* if >= 0, maximum value for errcount */
|
int errmax = ERRMAX; /* if >= 0, maximum value for errcount */
|
||||||
@@ -164,6 +165,13 @@ libcalc_call_me_first(void)
|
|||||||
conf->lib_debug = 0;
|
conf->lib_debug = 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/*
|
||||||
|
* -p turns off tab
|
||||||
|
*/
|
||||||
|
if (p_flag) {
|
||||||
|
conf->tab_ok = 0;
|
||||||
|
}
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* initialize
|
* initialize
|
||||||
*/
|
*/
|
||||||
@@ -172,6 +180,7 @@ libcalc_call_me_first(void)
|
|||||||
/*
|
/*
|
||||||
* ready to rock & roll ..
|
* ready to rock & roll ..
|
||||||
*/
|
*/
|
||||||
|
run_state = RUN_PRE_BEGIN;
|
||||||
init_done = 1;
|
init_done = 1;
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
4
token.c
4
token.c
@@ -643,6 +643,10 @@ scanerror(int skip, char *fmt, ...)
|
|||||||
va_end(ap);
|
va_end(ap);
|
||||||
fprintf(stderr, "%s\n", buf);
|
fprintf(stderr, "%s\n", buf);
|
||||||
|
|
||||||
|
/* bail out if continuation not permitted */
|
||||||
|
if ((!c_flag && !stoponerror) || stoponerror > 0)
|
||||||
|
longjmp(jmpbuf, 1);
|
||||||
|
|
||||||
/* bail out if too many errors */
|
/* bail out if too many errors */
|
||||||
if (conf->maxscancount > 0 && errorcount > conf->maxscancount) {
|
if (conf->maxscancount > 0 && errorcount > conf->maxscancount) {
|
||||||
fputs("Too many scan errors, compilation aborted.\n", stderr);
|
fputs("Too many scan errors, compilation aborted.\n", stderr);
|
||||||
|
@@ -12,7 +12,7 @@
|
|||||||
#define MAJOR_VER 2 /* major version */
|
#define MAJOR_VER 2 /* major version */
|
||||||
#define MINOR_VER 11 /* minor version */
|
#define MINOR_VER 11 /* minor version */
|
||||||
#define MAJOR_PATCH 0 /* patch level or 0 if no patch */
|
#define MAJOR_PATCH 0 /* patch level or 0 if no patch */
|
||||||
#define MINOR_PATCH "7.1" /* test number or empty string if no patch */
|
#define MINOR_PATCH "7.2" /* test number or empty string if no patch */
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* calc version constants
|
* calc version constants
|
||||||
|
Reference in New Issue
Block a user