xref: /aosp_15_r20/external/bc/NEWS.md (revision 5a6e848804d15c18a0125914844ee4eb0bda4fcf)
1*5a6e8488SAndroid Build Coastguard Worker# News
2*5a6e8488SAndroid Build Coastguard Worker
3*5a6e8488SAndroid Build Coastguard Worker## 7.0.3
4*5a6e8488SAndroid Build Coastguard Worker
5*5a6e8488SAndroid Build Coastguard WorkerThis is a production release that fixes build warnings on the musl libc.
6*5a6e8488SAndroid Build Coastguard Worker
7*5a6e8488SAndroid Build Coastguard WorkerOther users do ***NOT*** need to upgrade.
8*5a6e8488SAndroid Build Coastguard Worker
9*5a6e8488SAndroid Build Coastguard Worker## 7.0.2
10*5a6e8488SAndroid Build Coastguard Worker
11*5a6e8488SAndroid Build Coastguard WorkerThis is a production release that fixes `Ctrl+d` on FreeBSD and Linux when using
12*5a6e8488SAndroid Build Coastguard Worker`editline`.
13*5a6e8488SAndroid Build Coastguard Worker
14*5a6e8488SAndroid Build Coastguard WorkerThis bug was caused by the macOS fix in `7.0.0`. Unfortunately, this means that
15*5a6e8488SAndroid Build Coastguard WorkermacOS does not respond properly to `Ctrl+d`.
16*5a6e8488SAndroid Build Coastguard Worker
17*5a6e8488SAndroid Build Coastguard Worker## 7.0.1
18*5a6e8488SAndroid Build Coastguard Worker
19*5a6e8488SAndroid Build Coastguard WorkerThis is a production release that fixes a warning using GCC on FreeBSD.
20*5a6e8488SAndroid Build Coastguard Worker
21*5a6e8488SAndroid Build Coastguard WorkerOther users do ***NOT*** need to upgrade.
22*5a6e8488SAndroid Build Coastguard Worker
23*5a6e8488SAndroid Build Coastguard Worker## 7.0.0
24*5a6e8488SAndroid Build Coastguard Worker
25*5a6e8488SAndroid Build Coastguard WorkerThis is a production release to fix three bugs.
26*5a6e8488SAndroid Build Coastguard Worker
27*5a6e8488SAndroid Build Coastguard WorkerThe first bug is that `bc`/`dc` will exit on macOS when the terminal is resized.
28*5a6e8488SAndroid Build Coastguard Worker
29*5a6e8488SAndroid Build Coastguard WorkerThe second bug is that an array, which should only be a function parameter, was
30*5a6e8488SAndroid Build Coastguard Workeraccepted as part of larger expressions.
31*5a6e8488SAndroid Build Coastguard Worker
32*5a6e8488SAndroid Build Coastguard WorkerThe third bug is that value stack for `dc` was cleared on any error. However,
33*5a6e8488SAndroid Build Coastguard Workerthis is not how other `dc` behave. To bring `dc` more in line with other
34*5a6e8488SAndroid Build Coastguard Workerimplementations, this behavior was changed. This change is why this version is a
35*5a6e8488SAndroid Build Coastguard Workernew major version.
36*5a6e8488SAndroid Build Coastguard Worker
37*5a6e8488SAndroid Build Coastguard Worker## 6.7.6
38*5a6e8488SAndroid Build Coastguard Worker
39*5a6e8488SAndroid Build Coastguard WorkerThis is a production release to fix one bug.
40*5a6e8488SAndroid Build Coastguard Worker
41*5a6e8488SAndroid Build Coastguard WorkerThe bug was that `bc` attempted to jump out when flushing `stdout` on exit, but
42*5a6e8488SAndroid Build Coastguard Workerthere is no jump buf at that point.
43*5a6e8488SAndroid Build Coastguard Worker
44*5a6e8488SAndroid Build Coastguard Worker## 6.7.5
45*5a6e8488SAndroid Build Coastguard Worker
46*5a6e8488SAndroid Build Coastguard WorkerThis is a production release to fix one small bug.
47*5a6e8488SAndroid Build Coastguard Worker
48*5a6e8488SAndroid Build Coastguard WorkerThe bug is that sometimes numbers are printed to incorrect line lengths. The
49*5a6e8488SAndroid Build Coastguard Workernumber is always correct; the line is just longer than the limit.
50*5a6e8488SAndroid Build Coastguard Worker
51*5a6e8488SAndroid Build Coastguard WorkerUsers who do not care do not need to update.
52*5a6e8488SAndroid Build Coastguard Worker
53*5a6e8488SAndroid Build Coastguard Worker## 6.7.4
54*5a6e8488SAndroid Build Coastguard Worker
55*5a6e8488SAndroid Build Coastguard WorkerThis is a production release to fix problems in the `bc` manual.
56*5a6e8488SAndroid Build Coastguard Worker
57*5a6e8488SAndroid Build Coastguard WorkerUsers only need to update if desired.
58*5a6e8488SAndroid Build Coastguard Worker
59*5a6e8488SAndroid Build Coastguard Worker## 6.7.3
60*5a6e8488SAndroid Build Coastguard Worker
61*5a6e8488SAndroid Build Coastguard WorkerThis is a production release to fix the library build on Mac OSX.
62*5a6e8488SAndroid Build Coastguard Worker
63*5a6e8488SAndroid Build Coastguard WorkerUsers on other platforms do *not* need to update.
64*5a6e8488SAndroid Build Coastguard Worker
65*5a6e8488SAndroid Build Coastguard Worker## 6.7.2
66*5a6e8488SAndroid Build Coastguard Worker
67*5a6e8488SAndroid Build Coastguard WorkerThis is a production release to remove some debugging code that I accidentally
68*5a6e8488SAndroid Build Coastguard Workercommitted.
69*5a6e8488SAndroid Build Coastguard Worker
70*5a6e8488SAndroid Build Coastguard Worker## 6.7.1
71*5a6e8488SAndroid Build Coastguard Worker
72*5a6e8488SAndroid Build Coastguard WorkerThis is a production release with a bug fix for `SIGINT` only being handled
73*5a6e8488SAndroid Build Coastguard Workeronce.
74*5a6e8488SAndroid Build Coastguard Worker
75*5a6e8488SAndroid Build Coastguard Worker## 6.7.0
76*5a6e8488SAndroid Build Coastguard Worker
77*5a6e8488SAndroid Build Coastguard WorkerThis is a production release with three new functions in the [extended math
78*5a6e8488SAndroid Build Coastguard Workerlibrary][16]: `min()`, `max()`, and `i2rand()`.
79*5a6e8488SAndroid Build Coastguard Worker
80*5a6e8488SAndroid Build Coastguard Worker## 6.6.1
81*5a6e8488SAndroid Build Coastguard Worker
82*5a6e8488SAndroid Build Coastguard WorkerThis is a production release with an improved `p()` function in the [extended
83*5a6e8488SAndroid Build Coastguard Workermath library][16].
84*5a6e8488SAndroid Build Coastguard Worker
85*5a6e8488SAndroid Build Coastguard WorkerUsers who don't care do not need to upgrade.
86*5a6e8488SAndroid Build Coastguard Worker
87*5a6e8488SAndroid Build Coastguard Worker## 6.6.0
88*5a6e8488SAndroid Build Coastguard Worker
89*5a6e8488SAndroid Build Coastguard WorkerThis is a production release with two bug fixes and one change.
90*5a6e8488SAndroid Build Coastguard Worker
91*5a6e8488SAndroid Build Coastguard WorkerThe first bug fix is to fix the build on Mac OSX.
92*5a6e8488SAndroid Build Coastguard Worker
93*5a6e8488SAndroid Build Coastguard WorkerThe second bug was to remove printing a leading zero in scientific or
94*5a6e8488SAndroid Build Coastguard Workerengineering output modes.
95*5a6e8488SAndroid Build Coastguard Worker
96*5a6e8488SAndroid Build Coastguard WorkerThe change was that the implementation of `irand()` was improved to call the
97*5a6e8488SAndroid Build Coastguard WorkerPRNG less.
98*5a6e8488SAndroid Build Coastguard Worker
99*5a6e8488SAndroid Build Coastguard Worker## 6.5.0
100*5a6e8488SAndroid Build Coastguard Worker
101*5a6e8488SAndroid Build Coastguard WorkerThis is a production release that fixes an infinite loop bug in `root()` and
102*5a6e8488SAndroid Build Coastguard Worker`cbrt()`, fixes a bug with `BC_LINE_LENGTH=0`, and adds the `fib()` function to
103*5a6e8488SAndroid Build Coastguard Workerthe extended math library to calculate Fibonacci numbers.
104*5a6e8488SAndroid Build Coastguard Worker
105*5a6e8488SAndroid Build Coastguard Worker## 6.4.0
106*5a6e8488SAndroid Build Coastguard Worker
107*5a6e8488SAndroid Build Coastguard WorkerThis is a production release that fixes a `read()`/`?` bug and adds features to
108*5a6e8488SAndroid Build Coastguard Worker`bcl`.
109*5a6e8488SAndroid Build Coastguard Worker
110*5a6e8488SAndroid Build Coastguard WorkerThe bug was that multiple read calls could repeat old data.
111*5a6e8488SAndroid Build Coastguard Worker
112*5a6e8488SAndroid Build Coastguard WorkerThe new features in `bcl` are functions to preserve `BclNumber` arguments and
113*5a6e8488SAndroid Build Coastguard Workernot free them.
114*5a6e8488SAndroid Build Coastguard Worker
115*5a6e8488SAndroid Build Coastguard Worker***WARNING for `bcl` Users***: The `bcl_rand_seedWithNum()` function used to not
116*5a6e8488SAndroid Build Coastguard Workerconsume its arguments. Now it does. This change could have made this version
117*5a6e8488SAndroid Build Coastguard Worker`7.0.0`, but I'm 99.9% confident that there are no `bcl` users, or if there are,
118*5a6e8488SAndroid Build Coastguard Workerthey probably don't use the PRNG. So I took a risk and didn't update the major
119*5a6e8488SAndroid Build Coastguard Workerversion.
120*5a6e8488SAndroid Build Coastguard Worker
121*5a6e8488SAndroid Build Coastguard Worker`bcl` now includes more capacity to check for invalid numbers when built to run
122*5a6e8488SAndroid Build Coastguard Workerunder Valgrind.
123*5a6e8488SAndroid Build Coastguard Worker
124*5a6e8488SAndroid Build Coastguard Worker## 6.3.1
125*5a6e8488SAndroid Build Coastguard Worker
126*5a6e8488SAndroid Build Coastguard WorkerThis is a production release that fixes a `bc` dependency loop for minimal
127*5a6e8488SAndroid Build Coastguard Workerenvironments and Linux from Scratch.
128*5a6e8488SAndroid Build Coastguard Worker
129*5a6e8488SAndroid Build Coastguard Worker## 6.3.0
130*5a6e8488SAndroid Build Coastguard Worker
131*5a6e8488SAndroid Build Coastguard WorkerThis is a production release with a couple of fixes for manuals and a new
132*5a6e8488SAndroid Build Coastguard Workerfeature for `dc`: there is now a command to query whether extended registers are
133*5a6e8488SAndroid Build Coastguard Workerenabled or not.
134*5a6e8488SAndroid Build Coastguard Worker
135*5a6e8488SAndroid Build Coastguard WorkerUsers who don't care do not need to upgrade.
136*5a6e8488SAndroid Build Coastguard Worker
137*5a6e8488SAndroid Build Coastguard Worker## 6.2.6
138*5a6e8488SAndroid Build Coastguard Worker
139*5a6e8488SAndroid Build Coastguard WorkerThis is a production release that fixes an install bug that affected locale
140*5a6e8488SAndroid Build Coastguard Workerinstallation of all locales when using `mksh`. Users do ***NOT*** need to
141*5a6e8488SAndroid Build Coastguard Workerupgrade if they don't use `mksh` and/or don't need to install all locales.
142*5a6e8488SAndroid Build Coastguard Worker
143*5a6e8488SAndroid Build Coastguard Worker## 6.2.5
144*5a6e8488SAndroid Build Coastguard Worker
145*5a6e8488SAndroid Build Coastguard WorkerThis is a production release that fixes a test bug that affected Android and
146*5a6e8488SAndroid Build Coastguard Worker`mksh`. Users do ***NOT*** need to upgrade unless they use `mksh` or another
147*5a6e8488SAndroid Build Coastguard Workeraffected shell and need to run the test suite.
148*5a6e8488SAndroid Build Coastguard Worker
149*5a6e8488SAndroid Build Coastguard Worker## 6.2.4
150*5a6e8488SAndroid Build Coastguard Worker
151*5a6e8488SAndroid Build Coastguard WorkerThis is a production release that fixes a test failure that happens when
152*5a6e8488SAndroid Build Coastguard Worker`tests/bc/scripts/timeconst.bc` doesn't exist. This should only affect
153*5a6e8488SAndroid Build Coastguard Workerpackagers.
154*5a6e8488SAndroid Build Coastguard Worker
155*5a6e8488SAndroid Build Coastguard WorkerThis bug happened because I forgot something I added in the previous release:
156*5a6e8488SAndroid Build Coastguard Workerbetter error checking in tests to help packagers. Unfortunately, I was too
157*5a6e8488SAndroid Build Coastguard Workerzealous with the error checking.
158*5a6e8488SAndroid Build Coastguard Worker
159*5a6e8488SAndroid Build Coastguard Worker## 6.2.3
160*5a6e8488SAndroid Build Coastguard Worker
161*5a6e8488SAndroid Build Coastguard WorkerThis is a production release that moves `bc` to <https://git.gavinhoward.com>.
162*5a6e8488SAndroid Build Coastguard Worker
163*5a6e8488SAndroid Build Coastguard WorkerThat's all it does: update links. Users do ***NOT*** need to upgrade; there are
164*5a6e8488SAndroid Build Coastguard Workerredirects that will stay in place indefinitely. This release is only for new
165*5a6e8488SAndroid Build Coastguard Workerusers.
166*5a6e8488SAndroid Build Coastguard Worker
167*5a6e8488SAndroid Build Coastguard Worker## 6.2.2
168*5a6e8488SAndroid Build Coastguard Worker
169*5a6e8488SAndroid Build Coastguard WorkerThis is a production release that fixes a bug.
170*5a6e8488SAndroid Build Coastguard Worker
171*5a6e8488SAndroid Build Coastguard WorkerThe bug was that if an array element was used as a parameter, and then a later
172*5a6e8488SAndroid Build Coastguard Workerparameter had the same name as the array whose element was used, `bc` would grab
173*5a6e8488SAndroid Build Coastguard Workerthe element from the new array parameter, not the actual element from before the
174*5a6e8488SAndroid Build Coastguard Workerfunction call.
175*5a6e8488SAndroid Build Coastguard Worker
176*5a6e8488SAndroid Build Coastguard Worker## 6.2.1
177*5a6e8488SAndroid Build Coastguard Worker
178*5a6e8488SAndroid Build Coastguard WorkerThis is a production release with one bug fix for a memory bug in history.
179*5a6e8488SAndroid Build Coastguard Worker
180*5a6e8488SAndroid Build Coastguard Worker## 6.2.0
181*5a6e8488SAndroid Build Coastguard Worker
182*5a6e8488SAndroid Build Coastguard WorkerThis is a production release with a new feature and a few bug fixes.
183*5a6e8488SAndroid Build Coastguard Worker
184*5a6e8488SAndroid Build Coastguard WorkerThe bug fixes include:
185*5a6e8488SAndroid Build Coastguard Worker
186*5a6e8488SAndroid Build Coastguard Worker* A crash when `bc` and `dc` are built using editline, but history is not
187*5a6e8488SAndroid Build Coastguard Worker  activated.
188*5a6e8488SAndroid Build Coastguard Worker* A missing local in the `uint*()` family of functions in the extended math
189*5a6e8488SAndroid Build Coastguard Worker  library.
190*5a6e8488SAndroid Build Coastguard Worker* A failure to clear the tail call list in `dc` on error.
191*5a6e8488SAndroid Build Coastguard Worker* A crash when attempting to swap characters in command-line history when no
192*5a6e8488SAndroid Build Coastguard Worker  characters exist.
193*5a6e8488SAndroid Build Coastguard Worker* `SIGWINCH` was activated even when history was not.
194*5a6e8488SAndroid Build Coastguard Worker
195*5a6e8488SAndroid Build Coastguard WorkerThe new feature is that stack traces are now given for runtime errors. In debug
196*5a6e8488SAndroid Build Coastguard Workermode, the C source file and line of errors are given as well.
197*5a6e8488SAndroid Build Coastguard Worker
198*5a6e8488SAndroid Build Coastguard Worker## 6.1.1
199*5a6e8488SAndroid Build Coastguard Worker
200*5a6e8488SAndroid Build Coastguard WorkerThis is a production release that fixes a build issue with predefined builds and
201*5a6e8488SAndroid Build Coastguard Workergenerated tests.
202*5a6e8488SAndroid Build Coastguard Worker
203*5a6e8488SAndroid Build Coastguard Worker## 6.1.0
204*5a6e8488SAndroid Build Coastguard Worker
205*5a6e8488SAndroid Build Coastguard WorkerThis is a production release that fixes a discrepancy from the `bc` standard,
206*5a6e8488SAndroid Build Coastguard Workera couple of memory bugs, and adds new features.
207*5a6e8488SAndroid Build Coastguard Worker
208*5a6e8488SAndroid Build Coastguard WorkerThe discrepancy from the `bc` standard was with regards to the behavior of the
209*5a6e8488SAndroid Build Coastguard Worker`quit` command. This `bc` used to quit whenever it encountered `quit` during
210*5a6e8488SAndroid Build Coastguard Workerparsing, even if it was parsing a full file. Now, `bc` only quits when
211*5a6e8488SAndroid Build Coastguard Workerencountering `quit` *after* it has executed all executable statements up to that
212*5a6e8488SAndroid Build Coastguard Workerpoint.
213*5a6e8488SAndroid Build Coastguard Worker
214*5a6e8488SAndroid Build Coastguard WorkerThis behavior is slightly different from GNU `bc`, but users will only notice
215*5a6e8488SAndroid Build Coastguard Workerthe difference if they put `quit` on the same line as other statements.
216*5a6e8488SAndroid Build Coastguard Worker
217*5a6e8488SAndroid Build Coastguard WorkerThe first memory bug could be reproduced by assigning a string to a non-local
218*5a6e8488SAndroid Build Coastguard Workervariable in a function, then redefining the function with use of the same
219*5a6e8488SAndroid Build Coastguard Workernon-local variable, which would still refer to a string in the previous version
220*5a6e8488SAndroid Build Coastguard Workerof the function.
221*5a6e8488SAndroid Build Coastguard Worker
222*5a6e8488SAndroid Build Coastguard WorkerThe second memory bug was caused by passing an array argument to the `asciify()`
223*5a6e8488SAndroid Build Coastguard Workerbuilt-in function. In certain cases, that was wrongly allowed, and the
224*5a6e8488SAndroid Build Coastguard Workerinterpreter just assumed everything was correct and accessed memory. Now that
225*5a6e8488SAndroid Build Coastguard Workerarrays are allowed as arguments (see below), this is not an issue.
226*5a6e8488SAndroid Build Coastguard Worker
227*5a6e8488SAndroid Build Coastguard WorkerThe first feature was the addition of the `is_number()` built-in function (`u`
228*5a6e8488SAndroid Build Coastguard Workerin `dc`) that returns 1 if the runtime argument is a number and 0 otherwise.
229*5a6e8488SAndroid Build Coastguard Worker
230*5a6e8488SAndroid Build Coastguard WorkerThe second feature was the addition of the `is_string()` built-in function (`t`
231*5a6e8488SAndroid Build Coastguard Workerin `dc`) that returns 1 if the runtime argument is a string and 0 otherwise.
232*5a6e8488SAndroid Build Coastguard Worker
233*5a6e8488SAndroid Build Coastguard WorkerThese features were added because I realized that type-checking is necessary now
234*5a6e8488SAndroid Build Coastguard Workerthat strings can be assigned to variables in `bc` and because they've always
235*5a6e8488SAndroid Build Coastguard Workerbeen assignable to variables in `dc`.
236*5a6e8488SAndroid Build Coastguard Worker
237*5a6e8488SAndroid Build Coastguard WorkerThe last added feature is the ability of the `asciify()` built-in function in
238*5a6e8488SAndroid Build Coastguard Worker`bc` to convert a full array of numbers into a string. This means that
239*5a6e8488SAndroid Build Coastguard Workercharacter-by-character printing will not be necessary, and more strings than
240*5a6e8488SAndroid Build Coastguard Workerjust single-character ones will be able to be created.
241*5a6e8488SAndroid Build Coastguard Worker
242*5a6e8488SAndroid Build Coastguard Worker## 6.0.4
243*5a6e8488SAndroid Build Coastguard Worker
244*5a6e8488SAndroid Build Coastguard WorkerThis is a production release that most users will not need to upgrade to.
245*5a6e8488SAndroid Build Coastguard Worker
246*5a6e8488SAndroid Build Coastguard WorkerThis fixes a build bug for `bcl` only on OpenBSD. Users that do not need `bcl`
247*5a6e8488SAndroid Build Coastguard Workeror have not run into build errors with `bcl` do ***NOT*** need to upgrade.
248*5a6e8488SAndroid Build Coastguard Worker
249*5a6e8488SAndroid Build Coastguard Worker## 6.0.3
250*5a6e8488SAndroid Build Coastguard Worker
251*5a6e8488SAndroid Build Coastguard WorkerThis is a production release that fixes a build bug for cross-compilation.
252*5a6e8488SAndroid Build Coastguard Worker
253*5a6e8488SAndroid Build Coastguard WorkerUsers that do not need cross-compilation do ***NOT*** need to upgrade.
254*5a6e8488SAndroid Build Coastguard Worker
255*5a6e8488SAndroid Build Coastguard Worker## 6.0.2
256*5a6e8488SAndroid Build Coastguard Worker
257*5a6e8488SAndroid Build Coastguard WorkerThis is a production release that fixes two bugs:
258*5a6e8488SAndroid Build Coastguard Worker
259*5a6e8488SAndroid Build Coastguard Worker* The `-l` option overrode the `-S` option.
260*5a6e8488SAndroid Build Coastguard Worker* A double-free and crash when sending a `SIGINT` while executing expressions
261*5a6e8488SAndroid Build Coastguard Worker  given on the command-line.
262*5a6e8488SAndroid Build Coastguard Worker
263*5a6e8488SAndroid Build Coastguard Worker## 6.0.1
264*5a6e8488SAndroid Build Coastguard Worker
265*5a6e8488SAndroid Build Coastguard WorkerThis is a production release that fixes memory bugs and memory leaks in `bcl`.
266*5a6e8488SAndroid Build Coastguard Worker
267*5a6e8488SAndroid Build Coastguard WorkerUsers that do not use `bcl` (use only `bc` and/or `dc`) do ***NOT*** need to
268*5a6e8488SAndroid Build Coastguard Workerupgrade.
269*5a6e8488SAndroid Build Coastguard Worker
270*5a6e8488SAndroid Build Coastguard WorkerThese happened because I was unaware that the `bcl` test was not hooked into the
271*5a6e8488SAndroid Build Coastguard WorkerValgrind test infrastructure. Then, when I ran the release script, which tests
272*5a6e8488SAndroid Build Coastguard Workereverything under Valgrind (or so I thought), it caught nothing, and I thought it
273*5a6e8488SAndroid Build Coastguard Workerwas safe.
274*5a6e8488SAndroid Build Coastguard Worker
275*5a6e8488SAndroid Build Coastguard WorkerBut it was not.
276*5a6e8488SAndroid Build Coastguard Worker
277*5a6e8488SAndroid Build Coastguard WorkerNevertheless, I have now run it under Valgrind and fixed all of the memory bugs
278*5a6e8488SAndroid Build Coastguard Worker(caused by not using `memset()` where I should have but previously didn't have
279*5a6e8488SAndroid Build Coastguard Workerto) and memory leaks.
280*5a6e8488SAndroid Build Coastguard Worker
281*5a6e8488SAndroid Build Coastguard Worker## 6.0.0
282*5a6e8488SAndroid Build Coastguard Worker
283*5a6e8488SAndroid Build Coastguard WorkerThis is a production release that fixes an oversight in the `bc` parser (that
284*5a6e8488SAndroid Build Coastguard Workersometimes caused the wrong error message) and adds a feature for compatibility
285*5a6e8488SAndroid Build Coastguard Workerwith the BSD `bc` and `dc`: turning off digit clamping when parsing numbers.
286*5a6e8488SAndroid Build Coastguard Worker
287*5a6e8488SAndroid Build Coastguard WorkerThe default for clamping can be set during the build (see the [build
288*5a6e8488SAndroid Build Coastguard Workermanual][13]), it can be set with the `BC_DIGIT_CLAMP` and `DC_DIGIT_CLAMP`
289*5a6e8488SAndroid Build Coastguard Workerenvironment variables, and it can be set with the `-c` and `-C` command-line
290*5a6e8488SAndroid Build Coastguard Workeroptions.
291*5a6e8488SAndroid Build Coastguard Worker
292*5a6e8488SAndroid Build Coastguard WorkerTurning off clamping was also added to the `bcl` library.
293*5a6e8488SAndroid Build Coastguard Worker
294*5a6e8488SAndroid Build Coastguard WorkerIn addition, signal handling was removed from the `bcl` library in order to add
295*5a6e8488SAndroid Build Coastguard Workerthe capability for multi-threading. This required a major version bump. I
296*5a6e8488SAndroid Build Coastguard Workerapologize to all library users (I don't know of any), but signals and threads do
297*5a6e8488SAndroid Build Coastguard Workernot play well together.
298*5a6e8488SAndroid Build Coastguard Worker
299*5a6e8488SAndroid Build Coastguard WorkerTo help with building, a convenience option (`-p`) to `configure.sh` was added
300*5a6e8488SAndroid Build Coastguard Workerto build a `bc` and `dc` that is by default compatible with either the BSD `bc`
301*5a6e8488SAndroid Build Coastguard Workerand `dc` or the GNU `bc` and `dc`.
302*5a6e8488SAndroid Build Coastguard Worker
303*5a6e8488SAndroid Build Coastguard Worker## 5.3.3
304*5a6e8488SAndroid Build Coastguard Worker
305*5a6e8488SAndroid Build Coastguard WorkerThis is a production release that fixes a build problem in the FreeBSD base
306*5a6e8488SAndroid Build Coastguard Workersystem.
307*5a6e8488SAndroid Build Coastguard Worker
308*5a6e8488SAndroid Build Coastguard WorkerAll other users do **NOT** need to upgrade.
309*5a6e8488SAndroid Build Coastguard Worker
310*5a6e8488SAndroid Build Coastguard Worker## 5.3.2
311*5a6e8488SAndroid Build Coastguard Worker
312*5a6e8488SAndroid Build Coastguard WorkerThis is a production release that fixes prompt bugs with editline and readline
313*5a6e8488SAndroid Build Coastguard Workerwhere the `BC_PROMPT` environment variable was not being respected.
314*5a6e8488SAndroid Build Coastguard Worker
315*5a6e8488SAndroid Build Coastguard WorkerThis also fixes editline and readline output on `EOF`.
316*5a6e8488SAndroid Build Coastguard Worker
317*5a6e8488SAndroid Build Coastguard Worker## 5.3.1
318*5a6e8488SAndroid Build Coastguard Worker
319*5a6e8488SAndroid Build Coastguard WorkerThis is a production release that fixes a build problem in the FreeBSD base
320*5a6e8488SAndroid Build Coastguard Workersystem, as well as a problem in the `en_US` locale. If you don't have problems
321*5a6e8488SAndroid Build Coastguard Workerwith either, you do not need to upgrade.
322*5a6e8488SAndroid Build Coastguard Worker
323*5a6e8488SAndroid Build Coastguard Worker## 5.3.0
324*5a6e8488SAndroid Build Coastguard Worker
325*5a6e8488SAndroid Build Coastguard WorkerThis is a production release that adds features and has a few bug fixes.
326*5a6e8488SAndroid Build Coastguard Worker
327*5a6e8488SAndroid Build Coastguard WorkerFirst, support for editline and readline history has been added. To use
328*5a6e8488SAndroid Build Coastguard Workereditline, pass `-e` to `configure.sh`, and to use readline, pass `-r`.
329*5a6e8488SAndroid Build Coastguard Worker
330*5a6e8488SAndroid Build Coastguard WorkerSecond, history support for Windows has been fixed and re-enabled.
331*5a6e8488SAndroid Build Coastguard Worker
332*5a6e8488SAndroid Build Coastguard WorkerThird, command-line options to set `scale`, `ibase`, `obase`, and `seed` were
333*5a6e8488SAndroid Build Coastguard Workeradded. This was requested long ago, and I originally disagreed with the idea.
334*5a6e8488SAndroid Build Coastguard Worker
335*5a6e8488SAndroid Build Coastguard WorkerFourth, the manuals had typos and were missing information. That has been fixed.
336*5a6e8488SAndroid Build Coastguard Worker
337*5a6e8488SAndroid Build Coastguard WorkerFifth, the manuals received different formatting to be more readable as
338*5a6e8488SAndroid Build Coastguard Workermanpages.
339*5a6e8488SAndroid Build Coastguard Worker
340*5a6e8488SAndroid Build Coastguard Worker## 5.2.5
341*5a6e8488SAndroid Build Coastguard Worker
342*5a6e8488SAndroid Build Coastguard WorkerThis is a production release that fixes this `bc`'s behavior on `^D` to match
343*5a6e8488SAndroid Build Coastguard WorkerGNU `bc`.
344*5a6e8488SAndroid Build Coastguard Worker
345*5a6e8488SAndroid Build Coastguard Worker## 5.2.4
346*5a6e8488SAndroid Build Coastguard Worker
347*5a6e8488SAndroid Build Coastguard WorkerThis is a production release that fixes two bugs in history:
348*5a6e8488SAndroid Build Coastguard Worker
349*5a6e8488SAndroid Build Coastguard Worker* Without prompt, the cursor could not be placed on the first character in a
350*5a6e8488SAndroid Build Coastguard Worker  line.
351*5a6e8488SAndroid Build Coastguard Worker* Home and End key handling in `tmux` was fixed.
352*5a6e8488SAndroid Build Coastguard Worker
353*5a6e8488SAndroid Build Coastguard WorkerAny users that do not care about these improvements do not need to upgrade.
354*5a6e8488SAndroid Build Coastguard Worker
355*5a6e8488SAndroid Build Coastguard Worker## 5.2.3
356*5a6e8488SAndroid Build Coastguard Worker
357*5a6e8488SAndroid Build Coastguard WorkerThis is a production release that fixes one bug, a parse error when passing a
358*5a6e8488SAndroid Build Coastguard Workerfile to `bc` using `-f` if that file had a multiline comment or string in it.
359*5a6e8488SAndroid Build Coastguard Worker
360*5a6e8488SAndroid Build Coastguard Worker## 5.2.2
361*5a6e8488SAndroid Build Coastguard Worker
362*5a6e8488SAndroid Build Coastguard WorkerThis is a production release that fixes one bug, a segmentation fault if
363*5a6e8488SAndroid Build Coastguard Worker`argv[0]` equals `NULL`.
364*5a6e8488SAndroid Build Coastguard Worker
365*5a6e8488SAndroid Build Coastguard WorkerThis is not a critical bug; there will be no vulnerability as far as I can tell.
366*5a6e8488SAndroid Build Coastguard WorkerThere is no need to update if you do not wish to.
367*5a6e8488SAndroid Build Coastguard Worker
368*5a6e8488SAndroid Build Coastguard Worker## 5.2.1
369*5a6e8488SAndroid Build Coastguard Worker
370*5a6e8488SAndroid Build Coastguard WorkerThis is a production release that fixes two parse bugs when in POSIX standard
371*5a6e8488SAndroid Build Coastguard Workermode. One of these bugs was due to a quirk of the POSIX grammar, and the other
372*5a6e8488SAndroid Build Coastguard Workerwas because `bc` was too strict.
373*5a6e8488SAndroid Build Coastguard Worker
374*5a6e8488SAndroid Build Coastguard Worker## 5.2.0
375*5a6e8488SAndroid Build Coastguard Worker
376*5a6e8488SAndroid Build Coastguard WorkerThis is a production release that adds a new feature, fixes some bugs, and adds
377*5a6e8488SAndroid Build Coastguard Workerout-of-source builds and a `pkg-config` file for `bcl`.
378*5a6e8488SAndroid Build Coastguard Worker
379*5a6e8488SAndroid Build Coastguard WorkerThe new feature is the ability to turn off exiting on expressions. It is also
380*5a6e8488SAndroid Build Coastguard Workerpossible to set the default using `configure.sh`. This behavior used to exist
381*5a6e8488SAndroid Build Coastguard Workerwith the `BC_EXPR_EXIT` environment variable, which is now used again.
382*5a6e8488SAndroid Build Coastguard Worker
383*5a6e8488SAndroid Build Coastguard WorkerBugs fixed include:
384*5a6e8488SAndroid Build Coastguard Worker
385*5a6e8488SAndroid Build Coastguard Worker* Some possible race conditions with error handling.
386*5a6e8488SAndroid Build Coastguard Worker* Install and uninstall targets for `bcl` did not work.
387*5a6e8488SAndroid Build Coastguard Worker
388*5a6e8488SAndroid Build Coastguard Worker## 5.1.1
389*5a6e8488SAndroid Build Coastguard Worker
390*5a6e8488SAndroid Build Coastguard WorkerThis is a production release that completes a bug fix from `5.1.0`. The bug
391*5a6e8488SAndroid Build Coastguard Workerexists in all versions of `bc`.
392*5a6e8488SAndroid Build Coastguard Worker
393*5a6e8488SAndroid Build Coastguard WorkerThe bug was that `if` statements without `else` statements would not be handled
394*5a6e8488SAndroid Build Coastguard Workercorrectly at the end of files or right before a function definition.
395*5a6e8488SAndroid Build Coastguard Worker
396*5a6e8488SAndroid Build Coastguard Worker## 5.1.0
397*5a6e8488SAndroid Build Coastguard Worker
398*5a6e8488SAndroid Build Coastguard WorkerThis is a production release with some fixes and new features.
399*5a6e8488SAndroid Build Coastguard Worker
400*5a6e8488SAndroid Build Coastguard Worker* Fixed a bug where an `if` statement without an `else` before defining a
401*5a6e8488SAndroid Build Coastguard Worker  function caused an error.
402*5a6e8488SAndroid Build Coastguard Worker* Fixed a bug with the `bc` banner and `-q`.
403*5a6e8488SAndroid Build Coastguard Worker* Fixed a bug on Windows where files were not read correctly.
404*5a6e8488SAndroid Build Coastguard Worker* Added a command-line flag (`-z`) to make `bc` and `dc` print leading zeroes on
405*5a6e8488SAndroid Build Coastguard Worker  numbers `-1 < x < 1`.
406*5a6e8488SAndroid Build Coastguard Worker* Added four functions to `lib2.bc` (`plz()`, `plznl()`, `pnlz()`, and
407*5a6e8488SAndroid Build Coastguard Worker  `pnlznl()`) to allow printing numbers with or without leading zeros, despite
408*5a6e8488SAndroid Build Coastguard Worker  the use of `-z` or not.
409*5a6e8488SAndroid Build Coastguard Worker* Added builtin functions to query global state like line length, global stacks,
410*5a6e8488SAndroid Build Coastguard Worker  and leading zeroes.
411*5a6e8488SAndroid Build Coastguard Worker* Added a command-line flag (`-L`) to disable wrapping when printing numbers.
412*5a6e8488SAndroid Build Coastguard Worker* Improved builds on Windows.
413*5a6e8488SAndroid Build Coastguard Worker
414*5a6e8488SAndroid Build Coastguard Worker## 5.0.2
415*5a6e8488SAndroid Build Coastguard Worker
416*5a6e8488SAndroid Build Coastguard WorkerThis is a production release with one fix for a flaky test. If you have not
417*5a6e8488SAndroid Build Coastguard Workerexperienced problems with the test suite, you do ***NOT*** need to upgrade.
418*5a6e8488SAndroid Build Coastguard Worker
419*5a6e8488SAndroid Build Coastguard WorkerThe test was one that tested whether `bc` fails gracefully when it can't
420*5a6e8488SAndroid Build Coastguard Workerallocate memory. Unfortunately, there are cases when Linux and FreeBSD lie and
421*5a6e8488SAndroid Build Coastguard Workerpretend to allocate the memory.
422*5a6e8488SAndroid Build Coastguard Worker
423*5a6e8488SAndroid Build Coastguard WorkerThe reason they do this is because a lot of programs don't use all of the memory
424*5a6e8488SAndroid Build Coastguard Workerthey allocate, so those OS's usually get away with it.
425*5a6e8488SAndroid Build Coastguard Worker
426*5a6e8488SAndroid Build Coastguard WorkerHowever, this `bc` uses all of the memory it allocates (at least at page
427*5a6e8488SAndroid Build Coastguard Workergranularity), so when it tries to use the memory, FreeBSD and Linux kill it.
428*5a6e8488SAndroid Build Coastguard Worker
429*5a6e8488SAndroid Build Coastguard WorkerThis only happens sometimes, however. Other times (on my machine), they do, in
430*5a6e8488SAndroid Build Coastguard Workerfact, refuse the request.
431*5a6e8488SAndroid Build Coastguard Worker
432*5a6e8488SAndroid Build Coastguard WorkerSo I changed the test to not test for that because I think the graceful failure
433*5a6e8488SAndroid Build Coastguard Workercode won't really change much.
434*5a6e8488SAndroid Build Coastguard Worker
435*5a6e8488SAndroid Build Coastguard Worker## 5.0.1
436*5a6e8488SAndroid Build Coastguard Worker
437*5a6e8488SAndroid Build Coastguard WorkerThis is a production release with two fixes:
438*5a6e8488SAndroid Build Coastguard Worker
439*5a6e8488SAndroid Build Coastguard Worker* Fix for the build on Mac OSX.
440*5a6e8488SAndroid Build Coastguard Worker* Fix for the build on Android.
441*5a6e8488SAndroid Build Coastguard Worker
442*5a6e8488SAndroid Build Coastguard WorkerUsers that do not use those platforms do ***NOT*** need to update.
443*5a6e8488SAndroid Build Coastguard Worker
444*5a6e8488SAndroid Build Coastguard Worker## 5.0.0
445*5a6e8488SAndroid Build Coastguard Worker
446*5a6e8488SAndroid Build Coastguard WorkerThis is a major production release with several changes:
447*5a6e8488SAndroid Build Coastguard Worker
448*5a6e8488SAndroid Build Coastguard Worker* Added support for OpenBSD's `pledge()` and `unveil()`.
449*5a6e8488SAndroid Build Coastguard Worker* Fixed print bug where a backslash newline combo was printed even if only one
450*5a6e8488SAndroid Build Coastguard Worker  digit was left, something I blindly copied from GNU `bc`, like a fool.
451*5a6e8488SAndroid Build Coastguard Worker* Fixed bugs in the manuals.
452*5a6e8488SAndroid Build Coastguard Worker* Fixed a possible multiplication overflow in power.
453*5a6e8488SAndroid Build Coastguard Worker* Temporary numbers are garbage collected if allocation fails, and the
454*5a6e8488SAndroid Build Coastguard Worker  allocation is retried. This is to make `bc` and `dc` more resilient to running
455*5a6e8488SAndroid Build Coastguard Worker  out of memory.
456*5a6e8488SAndroid Build Coastguard Worker* Limited the number of temporary numbers and made the space for them static so
457*5a6e8488SAndroid Build Coastguard Worker  that allocating more space for them cannot fail.
458*5a6e8488SAndroid Build Coastguard Worker* Allowed integers with non-zero `scale` to be used with power, places, and
459*5a6e8488SAndroid Build Coastguard Worker  shift operators.
460*5a6e8488SAndroid Build Coastguard Worker* Added greatest common divisor and least common multiple to `lib2.bc`.
461*5a6e8488SAndroid Build Coastguard Worker* Added `SIGQUIT` handling to history.
462*5a6e8488SAndroid Build Coastguard Worker* Added a command to `dc` (`y`) to get the length of register stacks.
463*5a6e8488SAndroid Build Coastguard Worker* Fixed multi-digit bugs in `lib2.bc`.
464*5a6e8488SAndroid Build Coastguard Worker* Removed the no prompt build option.
465*5a6e8488SAndroid Build Coastguard Worker* Created settings that builders can set defaults for and users can set their
466*5a6e8488SAndroid Build Coastguard Worker  preferences for. This includes the `bc` banner, resetting on `SIGINT`, TTY
467*5a6e8488SAndroid Build Coastguard Worker  mode, and prompt.
468*5a6e8488SAndroid Build Coastguard Worker* Added history support to Windows.
469*5a6e8488SAndroid Build Coastguard Worker* Fixed bugs with the handling of register names in `dc`.
470*5a6e8488SAndroid Build Coastguard Worker* Fixed bugs with multi-line comments and strings in both calculators.
471*5a6e8488SAndroid Build Coastguard Worker* Added a new error type and message for `dc` when register stacks don't have
472*5a6e8488SAndroid Build Coastguard Worker  enough items.
473*5a6e8488SAndroid Build Coastguard Worker* Optimized string allocation.
474*5a6e8488SAndroid Build Coastguard Worker* Made `bc` and `dc` UTF-8 capable.
475*5a6e8488SAndroid Build Coastguard Worker* Fixed a bug with `void` functions.
476*5a6e8488SAndroid Build Coastguard Worker* Fixed a misspelled symbol in `bcl`. This is technically a breaking change,
477*5a6e8488SAndroid Build Coastguard Worker  which requires this to be `5.0.0`.
478*5a6e8488SAndroid Build Coastguard Worker* Added the ability for users to get the copyright banner back.
479*5a6e8488SAndroid Build Coastguard Worker* Added the ability for users to have `bc` and `dc` quit on `SIGINT`.
480*5a6e8488SAndroid Build Coastguard Worker* Added the ability for users to disable prompt and TTY mode by environment
481*5a6e8488SAndroid Build Coastguard Worker  variables.
482*5a6e8488SAndroid Build Coastguard Worker* Added the ability for users to redefine keywords. This is another reason this
483*5a6e8488SAndroid Build Coastguard Worker  is `5.0.0`.
484*5a6e8488SAndroid Build Coastguard Worker* Added `dc`'s modular exponentiation and divmod to `bc`.
485*5a6e8488SAndroid Build Coastguard Worker* Added the ability to assign strings to variables and array elements and pass
486*5a6e8488SAndroid Build Coastguard Worker  them to functions in `bc`.
487*5a6e8488SAndroid Build Coastguard Worker* Added `dc`'s asciify command and stream printing to `bc`.
488*5a6e8488SAndroid Build Coastguard Worker* Added a command to `dc` (`Y`) to get the length of an array.
489*5a6e8488SAndroid Build Coastguard Worker* Added a command to `dc` (`,`) to get the depth of the execution stack.
490*5a6e8488SAndroid Build Coastguard Worker* Added bitwise and, or, xor, left shift, right shift, reverse, left rotate,
491*5a6e8488SAndroid Build Coastguard Worker  right rotate, and mod functions to `lib2.bc`.
492*5a6e8488SAndroid Build Coastguard Worker* Added the functions `s2u(x)` and `s2un(x,n)`, to `lib2.bc`.
493*5a6e8488SAndroid Build Coastguard Worker
494*5a6e8488SAndroid Build Coastguard Worker## 4.0.2
495*5a6e8488SAndroid Build Coastguard Worker
496*5a6e8488SAndroid Build Coastguard WorkerThis is a production release that fixes two bugs:
497*5a6e8488SAndroid Build Coastguard Worker
498*5a6e8488SAndroid Build Coastguard Worker1.	If no files are used and the first statement on `stdin` is invalid, `scale`
499*5a6e8488SAndroid Build Coastguard Worker	would not be set to `20` even if `-l` was used.
500*5a6e8488SAndroid Build Coastguard Worker2.	When using history, `bc` failed to respond properly to `SIGSTOP` and
501*5a6e8488SAndroid Build Coastguard Worker	`SIGTSTP`.
502*5a6e8488SAndroid Build Coastguard Worker
503*5a6e8488SAndroid Build Coastguard Worker## 4.0.1
504*5a6e8488SAndroid Build Coastguard Worker
505*5a6e8488SAndroid Build Coastguard WorkerThis is a production release that only adds one thing: flushing output when it
506*5a6e8488SAndroid Build Coastguard Workeris printed with a print statement.
507*5a6e8488SAndroid Build Coastguard Worker
508*5a6e8488SAndroid Build Coastguard Worker## 4.0.0
509*5a6e8488SAndroid Build Coastguard Worker
510*5a6e8488SAndroid Build Coastguard WorkerThis is a production release with many fixes, a new command-line option, and a
511*5a6e8488SAndroid Build Coastguard Workerbig surprise:
512*5a6e8488SAndroid Build Coastguard Worker
513*5a6e8488SAndroid Build Coastguard Worker* A bug was fixed in `dc`'s `P` command where the item on the stack was *not*
514*5a6e8488SAndroid Build Coastguard Worker  popped.
515*5a6e8488SAndroid Build Coastguard Worker* Various bugs in the manuals have been fixed.
516*5a6e8488SAndroid Build Coastguard Worker* A known bug was fixed where history did not interact well with prompts printed
517*5a6e8488SAndroid Build Coastguard Worker  by user code without newlines.
518*5a6e8488SAndroid Build Coastguard Worker* A new command-line option, `-R` and `--no-read-prompt` was added to disable
519*5a6e8488SAndroid Build Coastguard Worker  just the prompt when using `read()` (`bc`) or `?` (`dc`).
520*5a6e8488SAndroid Build Coastguard Worker* And finally, **official support for Windows was added**.
521*5a6e8488SAndroid Build Coastguard Worker
522*5a6e8488SAndroid Build Coastguard WorkerThe last item is why this is a major version bump.
523*5a6e8488SAndroid Build Coastguard Worker
524*5a6e8488SAndroid Build Coastguard WorkerCurrently, only one set of build options (extra math and prompt enabled, history
525*5a6e8488SAndroid Build Coastguard Workerand NLS/locale support disabled, both calculators enabled) is supported on
526*5a6e8488SAndroid Build Coastguard WorkerWindows. However, both debug and release builds are supported.
527*5a6e8488SAndroid Build Coastguard Worker
528*5a6e8488SAndroid Build Coastguard WorkerIn addition, Windows builds are supported for the the library (`bcl`).
529*5a6e8488SAndroid Build Coastguard Worker
530*5a6e8488SAndroid Build Coastguard WorkerFor more details about how to build on Windows, see the [README][5] or the
531*5a6e8488SAndroid Build Coastguard Worker[build manual][13].
532*5a6e8488SAndroid Build Coastguard Worker
533*5a6e8488SAndroid Build Coastguard Worker## 3.3.4
534*5a6e8488SAndroid Build Coastguard Worker
535*5a6e8488SAndroid Build Coastguard WorkerThis is a production release that fixes a small bug.
536*5a6e8488SAndroid Build Coastguard Worker
537*5a6e8488SAndroid Build Coastguard WorkerThe bug was that output was not flushed before a `read()` call, so prompts
538*5a6e8488SAndroid Build Coastguard Workerwithout a newline on the end were not flushed before the `read()` call.
539*5a6e8488SAndroid Build Coastguard Worker
540*5a6e8488SAndroid Build Coastguard WorkerThis is such a tiny bug that users only need to upgrade if they are affected.
541*5a6e8488SAndroid Build Coastguard Worker
542*5a6e8488SAndroid Build Coastguard Worker## 3.3.3
543*5a6e8488SAndroid Build Coastguard Worker
544*5a6e8488SAndroid Build Coastguard WorkerThis is a production release with one tweak and fixes for manuals.
545*5a6e8488SAndroid Build Coastguard Worker
546*5a6e8488SAndroid Build Coastguard WorkerThe tweak is that `length(0)` returns `1` instead of `0`. In `3.3.1`, I changed
547*5a6e8488SAndroid Build Coastguard Workerit so `length(0.x)`, where `x` could be any number of digits, returned the
548*5a6e8488SAndroid Build Coastguard Worker`scale`, but `length(0)` still returned `0` because I believe that `0` has `0`
549*5a6e8488SAndroid Build Coastguard Workersignificant digits.
550*5a6e8488SAndroid Build Coastguard Worker
551*5a6e8488SAndroid Build Coastguard WorkerAfter request of FreeBSD and considering the arguments of a mathematician,
552*5a6e8488SAndroid Build Coastguard Workercompatibility with other `bc`'s, and the expectations of users, I decided to
553*5a6e8488SAndroid Build Coastguard Workermake the change.
554*5a6e8488SAndroid Build Coastguard Worker
555*5a6e8488SAndroid Build Coastguard WorkerThe fixes for manuals fixed a bug where `--` was rendered as `-`.
556*5a6e8488SAndroid Build Coastguard Worker
557*5a6e8488SAndroid Build Coastguard Worker## 3.3.2
558*5a6e8488SAndroid Build Coastguard Worker
559*5a6e8488SAndroid Build Coastguard WorkerThis is a production release that fixes a divide-by-zero bug in `root()` in the
560*5a6e8488SAndroid Build Coastguard Worker[extended math library][16]. All previous versions with `root()` have the bug.
561*5a6e8488SAndroid Build Coastguard Worker
562*5a6e8488SAndroid Build Coastguard Worker## 3.3.1
563*5a6e8488SAndroid Build Coastguard Worker
564*5a6e8488SAndroid Build Coastguard WorkerThis is a production release that fixes a bug.
565*5a6e8488SAndroid Build Coastguard Worker
566*5a6e8488SAndroid Build Coastguard WorkerThe bug was in the reporting of number length when the value was 0.
567*5a6e8488SAndroid Build Coastguard Worker
568*5a6e8488SAndroid Build Coastguard Worker## 3.3.0
569*5a6e8488SAndroid Build Coastguard Worker
570*5a6e8488SAndroid Build Coastguard WorkerThis is a production release that changes one behavior and fixes documentation
571*5a6e8488SAndroid Build Coastguard Workerbugs.
572*5a6e8488SAndroid Build Coastguard Worker
573*5a6e8488SAndroid Build Coastguard WorkerThe changed behavior is the treatment of `-e` and `-f` when given through
574*5a6e8488SAndroid Build Coastguard Worker`BC_ENV_ARGS` or `DC_ENV_ARGS`. Now `bc` and `dc` do not exit when those options
575*5a6e8488SAndroid Build Coastguard Worker(or their equivalents) are given through those environment variables. However,
576*5a6e8488SAndroid Build Coastguard Worker`bc` and `dc` still exit when they or their equivalents are given on the
577*5a6e8488SAndroid Build Coastguard Workercommand-line.
578*5a6e8488SAndroid Build Coastguard Worker
579*5a6e8488SAndroid Build Coastguard Worker## 3.2.7
580*5a6e8488SAndroid Build Coastguard Worker
581*5a6e8488SAndroid Build Coastguard WorkerThis is a production release that removes a small non-portable shell operation
582*5a6e8488SAndroid Build Coastguard Workerin `configure.sh`. This problem was only noticed on OpenBSD, not FreeBSD or
583*5a6e8488SAndroid Build Coastguard WorkerLinux.
584*5a6e8488SAndroid Build Coastguard Worker
585*5a6e8488SAndroid Build Coastguard WorkerNon-OpenBSD users do ***NOT*** need to upgrade, although NetBSD users may also
586*5a6e8488SAndroid Build Coastguard Workerneed to upgrade.
587*5a6e8488SAndroid Build Coastguard Worker
588*5a6e8488SAndroid Build Coastguard Worker## 3.2.6
589*5a6e8488SAndroid Build Coastguard Worker
590*5a6e8488SAndroid Build Coastguard WorkerThis is a production release that fixes the build on FreeBSD.
591*5a6e8488SAndroid Build Coastguard Worker
592*5a6e8488SAndroid Build Coastguard WorkerThere was a syntax error in `configure.sh` that the Linux shell did not catch,
593*5a6e8488SAndroid Build Coastguard Workerand FreeBSD depends on the existence of `tests/all.sh`.
594*5a6e8488SAndroid Build Coastguard Worker
595*5a6e8488SAndroid Build Coastguard WorkerAll users that already upgraded to `3.2.5` should update to this release, with
596*5a6e8488SAndroid Build Coastguard Workermy apologies for the poor release of `3.2.5`. Other users should skip `3.2.5` in
597*5a6e8488SAndroid Build Coastguard Workerfavor of this version.
598*5a6e8488SAndroid Build Coastguard Worker
599*5a6e8488SAndroid Build Coastguard Worker## 3.2.5
600*5a6e8488SAndroid Build Coastguard Worker
601*5a6e8488SAndroid Build Coastguard WorkerThis is a production release that fixes several bugs and adds a couple small
602*5a6e8488SAndroid Build Coastguard Workerthings.
603*5a6e8488SAndroid Build Coastguard Worker
604*5a6e8488SAndroid Build Coastguard WorkerThe two most important bugs were bugs that causes `dc` to access memory
605*5a6e8488SAndroid Build Coastguard Workerout-of-bounds (crash in debug builds). This was found by upgrading to `afl++`
606*5a6e8488SAndroid Build Coastguard Workerfrom `afl`. Both were caused by a failure to distinguish between the same two
607*5a6e8488SAndroid Build Coastguard Workercases.
608*5a6e8488SAndroid Build Coastguard Worker
609*5a6e8488SAndroid Build Coastguard WorkerAnother bug was the failure to put all of the licenses in the `LICENSE.md` file.
610*5a6e8488SAndroid Build Coastguard Worker
611*5a6e8488SAndroid Build Coastguard WorkerThird, some warnings by `scan-build` were found and eliminated. This needed one
612*5a6e8488SAndroid Build Coastguard Workerbig change: `bc` and `dc` now bail out as fast as possible on fatal errors
613*5a6e8488SAndroid Build Coastguard Workerinstead of unwinding the stack.
614*5a6e8488SAndroid Build Coastguard Worker
615*5a6e8488SAndroid Build Coastguard WorkerFourth, the pseudo-random number now attempts to seed itself with `/dev/random`
616*5a6e8488SAndroid Build Coastguard Workerif `/dev/urandom` fails.
617*5a6e8488SAndroid Build Coastguard Worker
618*5a6e8488SAndroid Build Coastguard WorkerFinally, this release has a few quality-of-life changes to the build system. The
619*5a6e8488SAndroid Build Coastguard Workerusage should not change at all; the only thing that changed was making sure the
620*5a6e8488SAndroid Build Coastguard Worker`Makefile.in` was written to rebuild properly when headers changed and to not
621*5a6e8488SAndroid Build Coastguard Workerrebuild when not necessary.
622*5a6e8488SAndroid Build Coastguard Worker
623*5a6e8488SAndroid Build Coastguard Worker## 3.2.4
624*5a6e8488SAndroid Build Coastguard Worker
625*5a6e8488SAndroid Build Coastguard WorkerThis is a production release that fixes a warning on `gcc` 6 or older, which
626*5a6e8488SAndroid Build Coastguard Workerdoes not have an attribute that is used.
627*5a6e8488SAndroid Build Coastguard Worker
628*5a6e8488SAndroid Build Coastguard WorkerUsers do ***NOT*** need to upgrade if they don't use `gcc` 6 or older.
629*5a6e8488SAndroid Build Coastguard Worker
630*5a6e8488SAndroid Build Coastguard Worker## 3.2.3
631*5a6e8488SAndroid Build Coastguard Worker
632*5a6e8488SAndroid Build Coastguard WorkerThis is a production release that fixes a bug in `gen/strgen.sh`. I recently
633*5a6e8488SAndroid Build Coastguard Workerchanged `gen/strgen.c`, but I did not change `gen/strgen.sh`.
634*5a6e8488SAndroid Build Coastguard Worker
635*5a6e8488SAndroid Build Coastguard WorkerUsers that do not use `gen/strgen.sh` do not need to upgrade.
636*5a6e8488SAndroid Build Coastguard Worker
637*5a6e8488SAndroid Build Coastguard Worker## 3.2.2
638*5a6e8488SAndroid Build Coastguard Worker
639*5a6e8488SAndroid Build Coastguard WorkerThis is a production release that fixes a portability bug in `configure.sh`. The
640*5a6e8488SAndroid Build Coastguard Workerbug was using the GNU `find` extension `-wholename`.
641*5a6e8488SAndroid Build Coastguard Worker
642*5a6e8488SAndroid Build Coastguard Worker## 3.2.1
643*5a6e8488SAndroid Build Coastguard Worker
644*5a6e8488SAndroid Build Coastguard WorkerThis is a production release that has one fix for `bcl(3)`. It is technically
645*5a6e8488SAndroid Build Coastguard Workernot a bug fix since the behavior is undefined, but the `BclNumber`s that
646*5a6e8488SAndroid Build Coastguard Worker`bcl_divmod()` returns will be set to `BCL_ERROR_INVALID_NUM` if there is an
647*5a6e8488SAndroid Build Coastguard Workererror. Previously, they were not set.
648*5a6e8488SAndroid Build Coastguard Worker
649*5a6e8488SAndroid Build Coastguard Worker## 3.2.0
650*5a6e8488SAndroid Build Coastguard Worker
651*5a6e8488SAndroid Build Coastguard WorkerThis is a production release that has one bug fix and a major addition.
652*5a6e8488SAndroid Build Coastguard Worker
653*5a6e8488SAndroid Build Coastguard WorkerThe bug fix was a missing `auto` variable in the bessel `j()` function in the
654*5a6e8488SAndroid Build Coastguard Workermath library.
655*5a6e8488SAndroid Build Coastguard Worker
656*5a6e8488SAndroid Build Coastguard WorkerThe major addition is a way to build a version of `bc`'s math code as a library.
657*5a6e8488SAndroid Build Coastguard WorkerThis is done with the `-a` option to `configure.sh`. The API for the library can
658*5a6e8488SAndroid Build Coastguard Workerbe read in `./manuals/bcl.3.md` or `man bcl` once the library is installed with
659*5a6e8488SAndroid Build Coastguard Worker`make install`.
660*5a6e8488SAndroid Build Coastguard Worker
661*5a6e8488SAndroid Build Coastguard WorkerThis library was requested by developers before I even finished version 1.0, but
662*5a6e8488SAndroid Build Coastguard WorkerI could not figure out how to do it until now.
663*5a6e8488SAndroid Build Coastguard Worker
664*5a6e8488SAndroid Build Coastguard WorkerIf the library has API breaking changes, the major version of `bc` will be
665*5a6e8488SAndroid Build Coastguard Workerincremented.
666*5a6e8488SAndroid Build Coastguard Worker
667*5a6e8488SAndroid Build Coastguard Worker## 3.1.6
668*5a6e8488SAndroid Build Coastguard Worker
669*5a6e8488SAndroid Build Coastguard WorkerThis is a production release that fixes a new warning from Clang 12 for FreeBSD
670*5a6e8488SAndroid Build Coastguard Workerand also removes some possible undefined behavior found by UBSan that compilers
671*5a6e8488SAndroid Build Coastguard Workerdid not seem to take advantage of.
672*5a6e8488SAndroid Build Coastguard Worker
673*5a6e8488SAndroid Build Coastguard WorkerUsers do ***NOT*** need to upgrade, if they do not want to.
674*5a6e8488SAndroid Build Coastguard Worker
675*5a6e8488SAndroid Build Coastguard Worker## 3.1.5
676*5a6e8488SAndroid Build Coastguard Worker
677*5a6e8488SAndroid Build Coastguard WorkerThis is a production release that fixes the Chinese locales (which caused `bc`
678*5a6e8488SAndroid Build Coastguard Workerto crash) and a crash caused by `bc` executing code when it should not have been
679*5a6e8488SAndroid Build Coastguard Workerable to.
680*5a6e8488SAndroid Build Coastguard Worker
681*5a6e8488SAndroid Build Coastguard Worker***ALL USERS SHOULD UPGRADE.***
682*5a6e8488SAndroid Build Coastguard Worker
683*5a6e8488SAndroid Build Coastguard Worker## 3.1.4
684*5a6e8488SAndroid Build Coastguard Worker
685*5a6e8488SAndroid Build Coastguard WorkerThis is a production release that fixes one bug, changes two behaviors, and
686*5a6e8488SAndroid Build Coastguard Workerremoves one environment variable.
687*5a6e8488SAndroid Build Coastguard Worker
688*5a6e8488SAndroid Build Coastguard WorkerThe bug is like the one in the last release except it applies if files are being
689*5a6e8488SAndroid Build Coastguard Workerexecuted. I also made the fix more general.
690*5a6e8488SAndroid Build Coastguard Worker
691*5a6e8488SAndroid Build Coastguard WorkerThe behavior that was changed is that `bc` now exits when given `-e`, `-f`,
692*5a6e8488SAndroid Build Coastguard Worker`--expression` or `--file`. However, if the last one of those is `-f-` (using
693*5a6e8488SAndroid Build Coastguard Worker`stdin` as the file), `bc` does not exit. If `-f-` exists and is not the last of
694*5a6e8488SAndroid Build Coastguard Workerthe `-e` and `-f` options (and equivalents), `bc` gives a fatal error and exits.
695*5a6e8488SAndroid Build Coastguard Worker
696*5a6e8488SAndroid Build Coastguard WorkerNext, I removed the `BC_EXPR_EXIT` and `DC_EXPR_EXIT` environment variables
697*5a6e8488SAndroid Build Coastguard Workersince their use is not needed with the behavior change.
698*5a6e8488SAndroid Build Coastguard Worker
699*5a6e8488SAndroid Build Coastguard WorkerFinally, I made it so `bc` does not print the header, though the `-q` and
700*5a6e8488SAndroid Build Coastguard Worker`--quiet` options were kept for compatibility with GNU `bc`.
701*5a6e8488SAndroid Build Coastguard Worker
702*5a6e8488SAndroid Build Coastguard Worker## 3.1.3
703*5a6e8488SAndroid Build Coastguard Worker
704*5a6e8488SAndroid Build Coastguard WorkerThis is a production release that fixes one minor bug: if `bc` was invoked like
705*5a6e8488SAndroid Build Coastguard Workerthe following, it would error:
706*5a6e8488SAndroid Build Coastguard Worker
707*5a6e8488SAndroid Build Coastguard Worker```
708*5a6e8488SAndroid Build Coastguard Workerecho "if (1 < 3) 1" | bc
709*5a6e8488SAndroid Build Coastguard Worker```
710*5a6e8488SAndroid Build Coastguard Worker
711*5a6e8488SAndroid Build Coastguard WorkerUnless users run into this bug, they do not need to upgrade, but it is suggested
712*5a6e8488SAndroid Build Coastguard Workerthat they do.
713*5a6e8488SAndroid Build Coastguard Worker
714*5a6e8488SAndroid Build Coastguard Worker## 3.1.2
715*5a6e8488SAndroid Build Coastguard Worker
716*5a6e8488SAndroid Build Coastguard WorkerThis is a production release that adds a way to install *all* locales. Users do
717*5a6e8488SAndroid Build Coastguard Worker***NOT*** need to upgrade.
718*5a6e8488SAndroid Build Coastguard Worker
719*5a6e8488SAndroid Build Coastguard WorkerFor package maintainers wishing to make use of the change, just pass `-l` to
720*5a6e8488SAndroid Build Coastguard Worker`configure.sh`.
721*5a6e8488SAndroid Build Coastguard Worker
722*5a6e8488SAndroid Build Coastguard Worker## 3.1.1
723*5a6e8488SAndroid Build Coastguard Worker
724*5a6e8488SAndroid Build Coastguard WorkerThis is a production release that adds two Spanish locales. Users do ***NOT***
725*5a6e8488SAndroid Build Coastguard Workerneed to upgrade, unless they want those locales.
726*5a6e8488SAndroid Build Coastguard Worker
727*5a6e8488SAndroid Build Coastguard Worker## 3.1.0
728*5a6e8488SAndroid Build Coastguard Worker
729*5a6e8488SAndroid Build Coastguard WorkerThis is a production release that adjusts one behavior, fixes eight bugs, and
730*5a6e8488SAndroid Build Coastguard Workerimproves manpages for FreeBSD. Because this release fixes bugs, **users and
731*5a6e8488SAndroid Build Coastguard Workerpackage maintainers should update to this version as soon as possible**.
732*5a6e8488SAndroid Build Coastguard Worker
733*5a6e8488SAndroid Build Coastguard WorkerThe behavior that was adjusted was how code from the `-e` and `-f` arguments
734*5a6e8488SAndroid Build Coastguard Worker(and equivalents) were executed. They used to be executed as one big chunk, but
735*5a6e8488SAndroid Build Coastguard Workerin this release, they are now executed line-by-line.
736*5a6e8488SAndroid Build Coastguard Worker
737*5a6e8488SAndroid Build Coastguard WorkerThe first bug fix in how output to `stdout` was handled in `SIGINT`. If a
738*5a6e8488SAndroid Build Coastguard Worker`SIGINT` came in, the `stdout` buffer was not correctly flushed. In fact, a
739*5a6e8488SAndroid Build Coastguard Workerclean-up function was not getting called. This release fixes that bug.
740*5a6e8488SAndroid Build Coastguard Worker
741*5a6e8488SAndroid Build Coastguard WorkerThe second bug is in how `dc` handled input from `stdin`. This affected `bc` as
742*5a6e8488SAndroid Build Coastguard Workerwell since it was a mishandling of the `stdin` buffer.
743*5a6e8488SAndroid Build Coastguard Worker
744*5a6e8488SAndroid Build Coastguard WorkerThe third fixed bug was that `bc` and `dc` could `abort()` (in debug mode) when
745*5a6e8488SAndroid Build Coastguard Workerreceiving a `SIGTERM`. This one was a race condition with pushing and popping
746*5a6e8488SAndroid Build Coastguard Workeritems onto and out of vectors.
747*5a6e8488SAndroid Build Coastguard Worker
748*5a6e8488SAndroid Build Coastguard WorkerThe fourth bug fixed was that `bc` could leave extra items on the stack and
749*5a6e8488SAndroid Build Coastguard Workerthus, not properly clean up some memory. (The memory would still get
750*5a6e8488SAndroid Build Coastguard Worker`free()`'ed, but it would not be `free()`'ed when it could have been.)
751*5a6e8488SAndroid Build Coastguard Worker
752*5a6e8488SAndroid Build Coastguard WorkerThe next two bugs were bugs in `bc`'s parser that caused crashes when executing
753*5a6e8488SAndroid Build Coastguard Workerthe resulting code.
754*5a6e8488SAndroid Build Coastguard Worker
755*5a6e8488SAndroid Build Coastguard WorkerThe last two bugs were crashes in `dc` that resulted from mishandling of
756*5a6e8488SAndroid Build Coastguard Workerstrings.
757*5a6e8488SAndroid Build Coastguard Worker
758*5a6e8488SAndroid Build Coastguard WorkerThe manpage improvement was done by switching from [ronn][20] to [Pandoc][21] to
759*5a6e8488SAndroid Build Coastguard Workergenerate manpages. Pandoc generates much cleaner manpages and doesn't leave
760*5a6e8488SAndroid Build Coastguard Workerblank lines where they shouldn't be.
761*5a6e8488SAndroid Build Coastguard Worker
762*5a6e8488SAndroid Build Coastguard Worker## 3.0.3
763*5a6e8488SAndroid Build Coastguard Worker
764*5a6e8488SAndroid Build Coastguard WorkerThis is a production release that adds one new feature: specific manpages.
765*5a6e8488SAndroid Build Coastguard Worker
766*5a6e8488SAndroid Build Coastguard WorkerBefore this release, `bc` and `dc` only used one manpage each that referred to
767*5a6e8488SAndroid Build Coastguard Workervarious build options. This release changes it so there is one manpage set per
768*5a6e8488SAndroid Build Coastguard Workerrelevant build type. Each manual only has information about its particular
769*5a6e8488SAndroid Build Coastguard Workerbuild, and `configure.sh` selects the correct set for install.
770*5a6e8488SAndroid Build Coastguard Worker
771*5a6e8488SAndroid Build Coastguard Worker## 3.0.2
772*5a6e8488SAndroid Build Coastguard Worker
773*5a6e8488SAndroid Build Coastguard WorkerThis is a production release that adds `utf8` locale symlinks and removes an
774*5a6e8488SAndroid Build Coastguard Workerunused `auto` variable from the `ceil()` function in the [extended math
775*5a6e8488SAndroid Build Coastguard Workerlibrary][16].
776*5a6e8488SAndroid Build Coastguard Worker
777*5a6e8488SAndroid Build Coastguard WorkerUsers do ***NOT*** need to update unless they want the locales.
778*5a6e8488SAndroid Build Coastguard Worker
779*5a6e8488SAndroid Build Coastguard Worker## 3.0.1
780*5a6e8488SAndroid Build Coastguard Worker
781*5a6e8488SAndroid Build Coastguard WorkerThis is a production release with two small changes. Users do ***NOT*** need to
782*5a6e8488SAndroid Build Coastguard Workerupgrade to this release; however, if they haven't upgraded to `3.0.0` yet, it
783*5a6e8488SAndroid Build Coastguard Workermay be worthwhile to upgrade to this release.
784*5a6e8488SAndroid Build Coastguard Worker
785*5a6e8488SAndroid Build Coastguard WorkerThe first change is fixing a compiler warning on FreeBSD with strict warnings
786*5a6e8488SAndroid Build Coastguard Workeron.
787*5a6e8488SAndroid Build Coastguard Worker
788*5a6e8488SAndroid Build Coastguard WorkerThe second change is to make the new implementation of `ceil()` in `lib2.bc`
789*5a6e8488SAndroid Build Coastguard Workermuch more efficient.
790*5a6e8488SAndroid Build Coastguard Worker
791*5a6e8488SAndroid Build Coastguard Worker## 3.0.0
792*5a6e8488SAndroid Build Coastguard Worker
793*5a6e8488SAndroid Build Coastguard Worker*Notes for package maintainers:*
794*5a6e8488SAndroid Build Coastguard Worker
795*5a6e8488SAndroid Build Coastguard Worker*First, the `2.7.0` release series saw a change in the option parsing. This made
796*5a6e8488SAndroid Build Coastguard Workerme change one error message and add a few others. The error message that was
797*5a6e8488SAndroid Build Coastguard Workerchanged removed one format specifier. This means that `printf()` will seqfault
798*5a6e8488SAndroid Build Coastguard Workeron old locale files. Unfortunately, `bc` cannot use any locale files except the
799*5a6e8488SAndroid Build Coastguard Workerglobal ones that are already installed, so it will use the previous ones while
800*5a6e8488SAndroid Build Coastguard Workerrunning tests during install. **If `bc` segfaults while running arg tests when
801*5a6e8488SAndroid Build Coastguard Workerupdating, it is because the global locale files have not been replaced. Make
802*5a6e8488SAndroid Build Coastguard Workersure to either prevent the test suite from running on update or remove the old
803*5a6e8488SAndroid Build Coastguard Workerlocale files before updating.** (Removing the locale files can be done with
804*5a6e8488SAndroid Build Coastguard Worker`make uninstall` or by running the [`locale_uninstall.sh`][22] script.) Once
805*5a6e8488SAndroid Build Coastguard Workerthis is done, `bc` should install without problems.*
806*5a6e8488SAndroid Build Coastguard Worker
807*5a6e8488SAndroid Build Coastguard Worker*Second, **the option to build without signal support has been removed**. See
808*5a6e8488SAndroid Build Coastguard Workerbelow for the reasons why.*
809*5a6e8488SAndroid Build Coastguard Worker
810*5a6e8488SAndroid Build Coastguard WorkerThis is a production release with some small bug fixes, a few improvements,
811*5a6e8488SAndroid Build Coastguard Workerthree major bug fixes, and a complete redesign of `bc`'s error and signal
812*5a6e8488SAndroid Build Coastguard Workerhandling. **Users and package maintainers should update to this version as soon
813*5a6e8488SAndroid Build Coastguard Workeras possible.**
814*5a6e8488SAndroid Build Coastguard Worker
815*5a6e8488SAndroid Build Coastguard WorkerThe first major bug fix was in how `bc` executed files. Previously, a whole file
816*5a6e8488SAndroid Build Coastguard Workerwas parsed before it was executed, but if a function is defined *after* code,
817*5a6e8488SAndroid Build Coastguard Workerespecially if the function definition was actually a redefinition, and the code
818*5a6e8488SAndroid Build Coastguard Workerbefore the definition referred to the previous function, this `bc` would replace
819*5a6e8488SAndroid Build Coastguard Workerthe function before executing any code. The fix was to make sure that all code
820*5a6e8488SAndroid Build Coastguard Workerthat existed before a function definition was executed.
821*5a6e8488SAndroid Build Coastguard Worker
822*5a6e8488SAndroid Build Coastguard WorkerThe second major bug fix was in `bc`'s `lib2.bc`. The `ceil()` function had a
823*5a6e8488SAndroid Build Coastguard Workerbug where a `0` in the decimal place after the truncation position, caused it to
824*5a6e8488SAndroid Build Coastguard Workeroutput the wrong numbers if there was any non-zero digit after.
825*5a6e8488SAndroid Build Coastguard Worker
826*5a6e8488SAndroid Build Coastguard WorkerThe third major bug is that when passing parameters to functions, if an
827*5a6e8488SAndroid Build Coastguard Workerexpression included an array (not an array element) as a parameter, it was
828*5a6e8488SAndroid Build Coastguard Workeraccepted, when it should have been rejected. It is now correctly rejected.
829*5a6e8488SAndroid Build Coastguard Worker
830*5a6e8488SAndroid Build Coastguard WorkerBeyond that, this `bc` got several improvements that both sped it up, improved
831*5a6e8488SAndroid Build Coastguard Workerthe handling of signals, and improved the error handling.
832*5a6e8488SAndroid Build Coastguard Worker
833*5a6e8488SAndroid Build Coastguard WorkerFirst, the requirements for `bc` were pushed back to POSIX 2008. `bc` uses one
834*5a6e8488SAndroid Build Coastguard Workerfunction, `strdup()`, which is not in POSIX 2001, and it is in the X/Open System
835*5a6e8488SAndroid Build Coastguard WorkerInterfaces group 2001. It is, however, in POSIX 2008, and since POSIX 2008 is
836*5a6e8488SAndroid Build Coastguard Workerold enough to be supported anywhere that I care, that should be the requirement.
837*5a6e8488SAndroid Build Coastguard Worker
838*5a6e8488SAndroid Build Coastguard WorkerSecond, the `BcVm` global variable was put into `bss`. This actually slightly
839*5a6e8488SAndroid Build Coastguard Workerreduces the size of the executable from a massive code shrink, and it will stop
840*5a6e8488SAndroid Build Coastguard Worker`bc` from allocating a large set of memory when `bc` starts.
841*5a6e8488SAndroid Build Coastguard Worker
842*5a6e8488SAndroid Build Coastguard WorkerThird, the default Karatsuba length was updated from 64 to 32 after making the
843*5a6e8488SAndroid Build Coastguard Workeroptimization changes below, since 32 is going to be better than 64 after the
844*5a6e8488SAndroid Build Coastguard Workerchanges.
845*5a6e8488SAndroid Build Coastguard Worker
846*5a6e8488SAndroid Build Coastguard WorkerFourth, Spanish translations were added.
847*5a6e8488SAndroid Build Coastguard Worker
848*5a6e8488SAndroid Build Coastguard WorkerFifth, the interpreter received a speedup to make performance on non-math-heavy
849*5a6e8488SAndroid Build Coastguard Workerscripts more competitive with GNU `bc`. While improvements did, in fact, get it
850*5a6e8488SAndroid Build Coastguard Workermuch closer (see the [benchmarks][19]), it isn't quite there.
851*5a6e8488SAndroid Build Coastguard Worker
852*5a6e8488SAndroid Build Coastguard WorkerThere were several things done to speed up the interpreter:
853*5a6e8488SAndroid Build Coastguard Worker
854*5a6e8488SAndroid Build Coastguard WorkerFirst, several small inefficiencies were removed. These inefficiencies included
855*5a6e8488SAndroid Build Coastguard Workercalling the function `bc_vec_pop(v)` twice instead of calling
856*5a6e8488SAndroid Build Coastguard Worker`bc_vec_npop(v, 2)`. They also included an extra function call for checking the
857*5a6e8488SAndroid Build Coastguard Workersize of the stack and checking the size of the stack more than once on several
858*5a6e8488SAndroid Build Coastguard Workeroperations.
859*5a6e8488SAndroid Build Coastguard Worker
860*5a6e8488SAndroid Build Coastguard WorkerSecond, since the current `bc` function is the one that stores constants and
861*5a6e8488SAndroid Build Coastguard Workerstrings, the program caches pointers to the current function's vectors of
862*5a6e8488SAndroid Build Coastguard Workerconstants and strings to prevent needing to grab the current function in order
863*5a6e8488SAndroid Build Coastguard Workerto grab a constant or a string.
864*5a6e8488SAndroid Build Coastguard Worker
865*5a6e8488SAndroid Build Coastguard WorkerThird, `bc` tries to reuse `BcNum`'s (the internal representation of
866*5a6e8488SAndroid Build Coastguard Workerarbitary-precision numbers). If a `BcNum` has the default capacity of
867*5a6e8488SAndroid Build Coastguard Worker`BC_NUM_DEF_SIZE` (32 on 64-bit and 16 on 32-bit) when it is freed, it is added
868*5a6e8488SAndroid Build Coastguard Workerto a list of available `BcNum`'s. And then, when a `BcNum` is allocated with a
869*5a6e8488SAndroid Build Coastguard Workercapacity of `BC_NUM_DEF_SIZE` and any `BcNum`'s exist on the list of reusable
870*5a6e8488SAndroid Build Coastguard Workerones, one of those ones is grabbed instead.
871*5a6e8488SAndroid Build Coastguard Worker
872*5a6e8488SAndroid Build Coastguard WorkerIn order to support these changes, the `BC_NUM_DEF_SIZE` was changed. It used to
873*5a6e8488SAndroid Build Coastguard Workerbe 16 bytes on all systems, but it was changed to more closely align with the
874*5a6e8488SAndroid Build Coastguard Workerminimum allocation size on Linux, which is either 32 bytes (64-bit musl), 24
875*5a6e8488SAndroid Build Coastguard Workerbytes (64-bit glibc), 16 bytes (32-bit musl), or 12 bytes (32-bit glibc). Since
876*5a6e8488SAndroid Build Coastguard Workerthese are the minimum allocation sizes, these are the sizes that would be
877*5a6e8488SAndroid Build Coastguard Workerallocated anyway, making it worth it to just use the whole space, so the value
878*5a6e8488SAndroid Build Coastguard Workerof `BC_NUM_DEF_SIZE` on 64-bit systems was changed to 32 bytes.
879*5a6e8488SAndroid Build Coastguard Worker
880*5a6e8488SAndroid Build Coastguard WorkerOn top of that, at least on 64-bit, `BC_NUM_DEF_SIZE` supports numbers with
881*5a6e8488SAndroid Build Coastguard Workereither 72 integer digits or 45 integer digits and 27 fractional digits. This
882*5a6e8488SAndroid Build Coastguard Workershould be more than enough for most cases since `bc`'s default `scale` values
883*5a6e8488SAndroid Build Coastguard Workerare 0 or 20, meaning that, by default, it has at most 20 fractional digits. And
884*5a6e8488SAndroid Build Coastguard Worker45 integer digits are *a lot*; it's enough to calculate the amount of mass in
885*5a6e8488SAndroid Build Coastguard Workerthe Milky Way galaxy in kilograms. Also, 72 digits is enough to calculate the
886*5a6e8488SAndroid Build Coastguard Workerdiameter of the universe in Planck lengths.
887*5a6e8488SAndroid Build Coastguard Worker
888*5a6e8488SAndroid Build Coastguard Worker(For 32-bit, these numbers are either 32 integer digits or 12 integer digits and
889*5a6e8488SAndroid Build Coastguard Worker20 fractional digits. These are also quite big, and going much bigger on a
890*5a6e8488SAndroid Build Coastguard Worker32-bit system seems a little pointless since 12 digits is just under a trillion
891*5a6e8488SAndroid Build Coastguard Workerand 20 fractional digits is still enough for about any use since `10^-20` light
892*5a6e8488SAndroid Build Coastguard Workeryears is just under a millimeter.)
893*5a6e8488SAndroid Build Coastguard Worker
894*5a6e8488SAndroid Build Coastguard WorkerAll of this together means that for ordinary uses, and even uses in scientific
895*5a6e8488SAndroid Build Coastguard Workerwork, the default number size will be all that is needed, which means that
896*5a6e8488SAndroid Build Coastguard Workernearly all, if not all, numbers will be reused, relieving pressure on the system
897*5a6e8488SAndroid Build Coastguard Workerallocator.
898*5a6e8488SAndroid Build Coastguard Worker
899*5a6e8488SAndroid Build Coastguard WorkerI did several experiments to find the changes that had the most impact,
900*5a6e8488SAndroid Build Coastguard Workerespecially with regard to reusing `BcNum`'s. One was putting `BcNum`'s into
901*5a6e8488SAndroid Build Coastguard Workerbuckets according to their capacity in powers of 2 up to 512. That performed
902*5a6e8488SAndroid Build Coastguard Workerworse than `bc` did in `2.7.2`. Another was putting any `BcNum` on the reuse
903*5a6e8488SAndroid Build Coastguard Workerlist that had a capacity of `BC_NUM_DEF_SIZE * 2` and reusing them for `BcNum`'s
904*5a6e8488SAndroid Build Coastguard Workerthat requested `BC_NUM_DEF_SIZE`. This did reduce the amount of time spent, but
905*5a6e8488SAndroid Build Coastguard Workerit also spent a lot of time in the system allocator for an unknown reason. (When
906*5a6e8488SAndroid Build Coastguard Workerusing `strace`, a bunch more `brk` calls showed up.) Just reusing `BcNum`'s that
907*5a6e8488SAndroid Build Coastguard Workerhad exactly `BC_NUM_DEF_SIZE` capacity spent the smallest amount of time in both
908*5a6e8488SAndroid Build Coastguard Workeruser and system time. This makes sense, especially with the changes to make
909*5a6e8488SAndroid Build Coastguard Worker`BC_NUM_DEF_SIZE` bigger on 64-bit systems, since the vast majority of numbers
910*5a6e8488SAndroid Build Coastguard Workerwill only ever use numbers with a size less than or equal to `BC_NUM_DEF_SIZE`.
911*5a6e8488SAndroid Build Coastguard Worker
912*5a6e8488SAndroid Build Coastguard WorkerLast of all, `bc`'s signal handling underwent a complete redesign. (This is the
913*5a6e8488SAndroid Build Coastguard Workerreason that this version is `3.0.0` and not `2.8.0`.) The change was to move
914*5a6e8488SAndroid Build Coastguard Workerfrom a polling approach to signal handling to an interrupt-based approach.
915*5a6e8488SAndroid Build Coastguard Worker
916*5a6e8488SAndroid Build Coastguard WorkerPreviously, every single loop condition had a check for signals. I suspect that
917*5a6e8488SAndroid Build Coastguard Workerthis could be expensive when in tight loops.
918*5a6e8488SAndroid Build Coastguard Worker
919*5a6e8488SAndroid Build Coastguard WorkerNow, the signal handler just uses `longjmp()` (actually `siglongjmp()`) to start
920*5a6e8488SAndroid Build Coastguard Workeran unwinding of the stack until it is stopped or the stack is unwound to
921*5a6e8488SAndroid Build Coastguard Worker`main()`, which just returns. If `bc` is currently executing code that cannot be
922*5a6e8488SAndroid Build Coastguard Workersafely interrupted (according to POSIX), then signals are "locked." The signal
923*5a6e8488SAndroid Build Coastguard Workerhandler checks if the lock is taken, and if it is, it just sets the status to
924*5a6e8488SAndroid Build Coastguard Workerindicate that a signal arrived. Later, when the signal lock is released, the
925*5a6e8488SAndroid Build Coastguard Workerstatus is checked to see if a signal came in. If so, the stack unwinding starts.
926*5a6e8488SAndroid Build Coastguard Worker
927*5a6e8488SAndroid Build Coastguard WorkerThis design eliminates polling in favor of maintaining a stack of `jmp_buf`'s.
928*5a6e8488SAndroid Build Coastguard WorkerThis has its own performance implications, but it gives better interaction. And
929*5a6e8488SAndroid Build Coastguard Workerthe cost of pushing and popping a `jmp_buf` in a function is paid at most twice.
930*5a6e8488SAndroid Build Coastguard WorkerMost functions do not pay that price, and most of the rest only pay it once.
931*5a6e8488SAndroid Build Coastguard Worker(There are only some 3 functions in `bc` that push and pop a `jmp_buf` twice.)
932*5a6e8488SAndroid Build Coastguard Worker
933*5a6e8488SAndroid Build Coastguard WorkerAs a side effect of this change, I had to eliminate the use of `stdio.h` in `bc`
934*5a6e8488SAndroid Build Coastguard Workerbecause `stdio` does not play nice with signals and `longjmp()`. I implemented
935*5a6e8488SAndroid Build Coastguard Workercustom I/O buffer code that takes a fraction of the size. This means that static
936*5a6e8488SAndroid Build Coastguard Workerbuilds will be smaller, but non-static builds will be bigger, though they will
937*5a6e8488SAndroid Build Coastguard Workerhave less linking time.
938*5a6e8488SAndroid Build Coastguard Worker
939*5a6e8488SAndroid Build Coastguard WorkerThis change is also good because my history implementation was already bypassing
940*5a6e8488SAndroid Build Coastguard Worker`stdio` for good reasons, and unifying the architecture was a win.
941*5a6e8488SAndroid Build Coastguard Worker
942*5a6e8488SAndroid Build Coastguard WorkerAnother reason for this change is that my `bc` should *always* behave correctly
943*5a6e8488SAndroid Build Coastguard Workerin the presence of signals like `SIGINT`, `SIGTERM`, and `SIGQUIT`. With the
944*5a6e8488SAndroid Build Coastguard Workeraddition of my own I/O buffering, I needed to also make sure that the buffers
945*5a6e8488SAndroid Build Coastguard Workerwere correctly flushed even when such signals happened.
946*5a6e8488SAndroid Build Coastguard Worker
947*5a6e8488SAndroid Build Coastguard WorkerFor this reason, I **removed the option to build without signal support**.
948*5a6e8488SAndroid Build Coastguard Worker
949*5a6e8488SAndroid Build Coastguard WorkerAs a nice side effect of this change, the error handling code could be changed
950*5a6e8488SAndroid Build Coastguard Workerto take advantage of the stack unwinding that signals used. This means that
951*5a6e8488SAndroid Build Coastguard Workersignals and error handling use the same code paths, which means that the stack
952*5a6e8488SAndroid Build Coastguard Workerunwinding is well-tested. (Errors are tested heavily in the test suite.)
953*5a6e8488SAndroid Build Coastguard Worker
954*5a6e8488SAndroid Build Coastguard WorkerIt also means that functions do not need to return a status code that
955*5a6e8488SAndroid Build Coastguard Worker***every*** caller needs to check. This eliminated over 100 branches that simply
956*5a6e8488SAndroid Build Coastguard Workerchecked return codes and then passed that return code up the stack if necessary.
957*5a6e8488SAndroid Build Coastguard WorkerThe code bloat savings from this is at least 1700 bytes on `x86_64`, *before*
958*5a6e8488SAndroid Build Coastguard Workertaking into account the extra code from removing `stdio.h`.
959*5a6e8488SAndroid Build Coastguard Worker
960*5a6e8488SAndroid Build Coastguard Worker## 2.7.2
961*5a6e8488SAndroid Build Coastguard Worker
962*5a6e8488SAndroid Build Coastguard WorkerThis is a production release with one major bug fix.
963*5a6e8488SAndroid Build Coastguard Worker
964*5a6e8488SAndroid Build Coastguard WorkerThe `length()` built-in function can take either a number or an array. If it
965*5a6e8488SAndroid Build Coastguard Workertakes an array, it returns the length of the array. Arrays can be passed by
966*5a6e8488SAndroid Build Coastguard Workerreference. The bug is that the `length()` function would not properly
967*5a6e8488SAndroid Build Coastguard Workerdereference arrays that were references. This is a bug that affects all users.
968*5a6e8488SAndroid Build Coastguard Worker
969*5a6e8488SAndroid Build Coastguard Worker**ALL USERS SHOULD UPDATE `bc`**.
970*5a6e8488SAndroid Build Coastguard Worker
971*5a6e8488SAndroid Build Coastguard Worker## 2.7.1
972*5a6e8488SAndroid Build Coastguard Worker
973*5a6e8488SAndroid Build Coastguard WorkerThis is a production release with fixes for new locales and fixes for compiler
974*5a6e8488SAndroid Build Coastguard Workerwarnings on FreeBSD.
975*5a6e8488SAndroid Build Coastguard Worker
976*5a6e8488SAndroid Build Coastguard Worker## 2.7.0
977*5a6e8488SAndroid Build Coastguard Worker
978*5a6e8488SAndroid Build Coastguard WorkerThis is a production release with a bug fix for Linux, new translations, and new
979*5a6e8488SAndroid Build Coastguard Workerfeatures.
980*5a6e8488SAndroid Build Coastguard Worker
981*5a6e8488SAndroid Build Coastguard WorkerBug fixes:
982*5a6e8488SAndroid Build Coastguard Worker
983*5a6e8488SAndroid Build Coastguard Worker* Option parsing in `BC_ENV_ARGS` was broken on Linux in 2.6.1 because `glibc`'s
984*5a6e8488SAndroid Build Coastguard Worker  `getopt_long()` is broken. To get around that, and to support long options on
985*5a6e8488SAndroid Build Coastguard Worker  every platform, an adapted version of [`optparse`][17] was added. Now, `bc`
986*5a6e8488SAndroid Build Coastguard Worker  does not even use `getopt()`.
987*5a6e8488SAndroid Build Coastguard Worker* Parsing `BC_ENV_ARGS` with quotes now works. It isn't the smartest, but it
988*5a6e8488SAndroid Build Coastguard Worker  does the job if there are spaces in file names.
989*5a6e8488SAndroid Build Coastguard Worker
990*5a6e8488SAndroid Build Coastguard WorkerThe following new languages are supported:
991*5a6e8488SAndroid Build Coastguard Worker
992*5a6e8488SAndroid Build Coastguard Worker* Dutch
993*5a6e8488SAndroid Build Coastguard Worker* Polish
994*5a6e8488SAndroid Build Coastguard Worker* Russian
995*5a6e8488SAndroid Build Coastguard Worker* Japanes
996*5a6e8488SAndroid Build Coastguard Worker* Simplified Chinese
997*5a6e8488SAndroid Build Coastguard Worker
998*5a6e8488SAndroid Build Coastguard WorkerAll of these translations were generated using [DeepL][18], so improvements are
999*5a6e8488SAndroid Build Coastguard Workerwelcome.
1000*5a6e8488SAndroid Build Coastguard Worker
1001*5a6e8488SAndroid Build Coastguard WorkerThere is only one new feature: **`bc` now has a built-in pseudo-random number
1002*5a6e8488SAndroid Build Coastguard Workergenerator** (PRNG).
1003*5a6e8488SAndroid Build Coastguard Worker
1004*5a6e8488SAndroid Build Coastguard WorkerThe PRNG is seeded, making it useful for applications where
1005*5a6e8488SAndroid Build Coastguard Worker`/dev/urandom` does not work because output needs to be reproducible. However,
1006*5a6e8488SAndroid Build Coastguard Workerit also uses `/dev/urandom` to seed itself by default, so it will start with a
1007*5a6e8488SAndroid Build Coastguard Workergood seed by default.
1008*5a6e8488SAndroid Build Coastguard Worker
1009*5a6e8488SAndroid Build Coastguard WorkerIt also outputs 32 bits on 32-bit platforms and 64 bits on 64-bit platforms, far
1010*5a6e8488SAndroid Build Coastguard Workerbetter than the 15 bits of C's `rand()` and `bash`'s `$RANDOM`.
1011*5a6e8488SAndroid Build Coastguard Worker
1012*5a6e8488SAndroid Build Coastguard WorkerIn addition, the PRNG can take a bound, and when it gets a bound, it
1013*5a6e8488SAndroid Build Coastguard Workerautomatically adjusts to remove bias. It can also generate numbers of arbitrary
1014*5a6e8488SAndroid Build Coastguard Workersize. (As of the time of release, the largest pseudo-random number generated by
1015*5a6e8488SAndroid Build Coastguard Workerthis `bc` was generated with a bound of `2^(2^20)`.)
1016*5a6e8488SAndroid Build Coastguard Worker
1017*5a6e8488SAndroid Build Coastguard Worker***IMPORTANT: read the [`bc` manual][9] and the [`dc` manual][10] to find out
1018*5a6e8488SAndroid Build Coastguard Workerexactly what guarantees the PRNG provides. The underlying implementation is not
1019*5a6e8488SAndroid Build Coastguard Workerguaranteed to stay the same, but the guarantees that it provides are guaranteed
1020*5a6e8488SAndroid Build Coastguard Workerto stay the same regardless of the implementation.***
1021*5a6e8488SAndroid Build Coastguard Worker
1022*5a6e8488SAndroid Build Coastguard WorkerOn top of that, four functions were added to `bc`'s [extended math library][16]
1023*5a6e8488SAndroid Build Coastguard Workerto make using the PRNG easier:
1024*5a6e8488SAndroid Build Coastguard Worker
1025*5a6e8488SAndroid Build Coastguard Worker* `frand(p)`: Generates a number between `[0,1)` to `p` decimal places.
1026*5a6e8488SAndroid Build Coastguard Worker* `ifrand(i, p)`: Generates an integer with bound `i` and adds it to `frand(p)`.
1027*5a6e8488SAndroid Build Coastguard Worker* `srand(x)`: Randomizes the sign of `x`. In other words, it flips the sign of
1028*5a6e8488SAndroid Build Coastguard Worker  `x` with probability `0.5`.
1029*5a6e8488SAndroid Build Coastguard Worker* `brand()`: Returns a random boolean value (either `0` or `1`).
1030*5a6e8488SAndroid Build Coastguard Worker
1031*5a6e8488SAndroid Build Coastguard Worker## 2.6.1
1032*5a6e8488SAndroid Build Coastguard Worker
1033*5a6e8488SAndroid Build Coastguard WorkerThis is a production release with a bug fix for FreeBSD.
1034*5a6e8488SAndroid Build Coastguard Worker
1035*5a6e8488SAndroid Build Coastguard WorkerThe bug was that when `bc` was built without long options, it would give a fatal
1036*5a6e8488SAndroid Build Coastguard Workererror on every run. This was caused by a mishandling of `optind`.
1037*5a6e8488SAndroid Build Coastguard Worker
1038*5a6e8488SAndroid Build Coastguard Worker## 2.6.0
1039*5a6e8488SAndroid Build Coastguard Worker
1040*5a6e8488SAndroid Build Coastguard WorkerThis release is a production release ***with no bugfixes***. If you do not want
1041*5a6e8488SAndroid Build Coastguard Workerto upgrade, you don't have to.
1042*5a6e8488SAndroid Build Coastguard Worker
1043*5a6e8488SAndroid Build Coastguard WorkerNo source code changed; the only thing that changed was `lib2.bc`.
1044*5a6e8488SAndroid Build Coastguard Worker
1045*5a6e8488SAndroid Build Coastguard WorkerThis release adds one function to the [extended math library][16]: `p(x, y)`,
1046*5a6e8488SAndroid Build Coastguard Workerwhich calculates `x` to the power of `y`, whether or not `y` is an integer. (The
1047*5a6e8488SAndroid Build Coastguard Worker`^` operator can only accept integer powers.)
1048*5a6e8488SAndroid Build Coastguard Worker
1049*5a6e8488SAndroid Build Coastguard WorkerThis release also includes a couple of small tweaks to the [extended math
1050*5a6e8488SAndroid Build Coastguard Workerlibrary][16], mostly to fix returning numbers with too high of `scale`.
1051*5a6e8488SAndroid Build Coastguard Worker
1052*5a6e8488SAndroid Build Coastguard Worker## 2.5.3
1053*5a6e8488SAndroid Build Coastguard Worker
1054*5a6e8488SAndroid Build Coastguard WorkerThis release is a production release which addresses inconsistencies in the
1055*5a6e8488SAndroid Build Coastguard WorkerPortuguese locales. No `bc` code was changed.
1056*5a6e8488SAndroid Build Coastguard Worker
1057*5a6e8488SAndroid Build Coastguard WorkerThe issues were that the ISO files used different naming, and also that the
1058*5a6e8488SAndroid Build Coastguard Workerfiles that should have been symlinks were not. I did not catch that because
1059*5a6e8488SAndroid Build Coastguard WorkerGitHub rendered them the exact same way.
1060*5a6e8488SAndroid Build Coastguard Worker
1061*5a6e8488SAndroid Build Coastguard Worker## 2.5.2
1062*5a6e8488SAndroid Build Coastguard Worker
1063*5a6e8488SAndroid Build Coastguard WorkerThis release is a production release.
1064*5a6e8488SAndroid Build Coastguard Worker
1065*5a6e8488SAndroid Build Coastguard WorkerNo code was changed, but the build system was changed to allow `CFLAGS` to be
1066*5a6e8488SAndroid Build Coastguard Workergiven to `CC`, like this:
1067*5a6e8488SAndroid Build Coastguard Worker
1068*5a6e8488SAndroid Build Coastguard Worker```
1069*5a6e8488SAndroid Build Coastguard WorkerCC="gcc -O3 -march=native" ./configure.sh
1070*5a6e8488SAndroid Build Coastguard Worker```
1071*5a6e8488SAndroid Build Coastguard Worker
1072*5a6e8488SAndroid Build Coastguard WorkerIf this happens, the flags are automatically put into `CFLAGS`, and the compiler
1073*5a6e8488SAndroid Build Coastguard Workeris set appropriately. In the example above this means that `CC` will be "gcc"
1074*5a6e8488SAndroid Build Coastguard Workerand `CFLAGS` will be "-O3 -march=native".
1075*5a6e8488SAndroid Build Coastguard Worker
1076*5a6e8488SAndroid Build Coastguard WorkerThis behavior was added to conform to GNU autotools practices.
1077*5a6e8488SAndroid Build Coastguard Worker
1078*5a6e8488SAndroid Build Coastguard Worker## 2.5.1
1079*5a6e8488SAndroid Build Coastguard Worker
1080*5a6e8488SAndroid Build Coastguard WorkerThis is a production release which addresses portability concerns discovered
1081*5a6e8488SAndroid Build Coastguard Workerin the `bc` build system. No `bc` code was changed.
1082*5a6e8488SAndroid Build Coastguard Worker
1083*5a6e8488SAndroid Build Coastguard Worker* Support for Solaris SPARC and AIX were added.
1084*5a6e8488SAndroid Build Coastguard Worker* Minor documentations edits were performed.
1085*5a6e8488SAndroid Build Coastguard Worker* An option for `configure.sh` was added to disable long options if
1086*5a6e8488SAndroid Build Coastguard Worker  `getopt_long()` is missing.
1087*5a6e8488SAndroid Build Coastguard Worker
1088*5a6e8488SAndroid Build Coastguard Worker## 2.5.0
1089*5a6e8488SAndroid Build Coastguard Worker
1090*5a6e8488SAndroid Build Coastguard WorkerThis is a production release with new translations. No code changed.
1091*5a6e8488SAndroid Build Coastguard Worker
1092*5a6e8488SAndroid Build Coastguard WorkerThe translations were contributed by [bugcrazy][15], and they are for
1093*5a6e8488SAndroid Build Coastguard WorkerPortuguese, both Portugal and Brazil locales.
1094*5a6e8488SAndroid Build Coastguard Worker
1095*5a6e8488SAndroid Build Coastguard Worker## 2.4.0
1096*5a6e8488SAndroid Build Coastguard Worker
1097*5a6e8488SAndroid Build Coastguard WorkerThis is a production release primarily aimed at improving `dc`.
1098*5a6e8488SAndroid Build Coastguard Worker
1099*5a6e8488SAndroid Build Coastguard Worker* A couple of copy and paste errors in the [`dc` manual][10] were fixed.
1100*5a6e8488SAndroid Build Coastguard Worker* `dc` startup was optimized by making sure it didn't have to set up `bc`-only
1101*5a6e8488SAndroid Build Coastguard Worker  things.
1102*5a6e8488SAndroid Build Coastguard Worker* The `bc` `&&` and `||` operators were made available to `dc` through the `M`
1103*5a6e8488SAndroid Build Coastguard Worker  and `m` commands, respectively.
1104*5a6e8488SAndroid Build Coastguard Worker* `dc` macros were changed to be tail call-optimized.
1105*5a6e8488SAndroid Build Coastguard Worker
1106*5a6e8488SAndroid Build Coastguard WorkerThe last item, tail call optimization, means that if the last thing in a macro
1107*5a6e8488SAndroid Build Coastguard Workeris a call to another macro, then the old macro is popped before executing the
1108*5a6e8488SAndroid Build Coastguard Workernew macro. This change was made to stop `dc` from consuming more and more memory
1109*5a6e8488SAndroid Build Coastguard Workeras macros are executed in a loop.
1110*5a6e8488SAndroid Build Coastguard Worker
1111*5a6e8488SAndroid Build Coastguard WorkerThe `q` and `Q` commands still respect the "hidden" macros by way of recording
1112*5a6e8488SAndroid Build Coastguard Workerhow many macros were removed by tail call optimization.
1113*5a6e8488SAndroid Build Coastguard Worker
1114*5a6e8488SAndroid Build Coastguard Worker## 2.3.2
1115*5a6e8488SAndroid Build Coastguard Worker
1116*5a6e8488SAndroid Build Coastguard WorkerThis is a production release meant to fix warnings in the Gentoo `ebuild` by
1117*5a6e8488SAndroid Build Coastguard Workermaking it possible to disable binary stripping. Other users do *not* need to
1118*5a6e8488SAndroid Build Coastguard Workerupgrade.
1119*5a6e8488SAndroid Build Coastguard Worker
1120*5a6e8488SAndroid Build Coastguard Worker## 2.3.1
1121*5a6e8488SAndroid Build Coastguard Worker
1122*5a6e8488SAndroid Build Coastguard WorkerThis is a production release. It fixes a bug that caused `-1000000000 < -1` to
1123*5a6e8488SAndroid Build Coastguard Workerreturn `0`. This only happened with negative numbers and only if the value on
1124*5a6e8488SAndroid Build Coastguard Workerthe left was more negative by a certain amount. That said, this bug *is* a bad
1125*5a6e8488SAndroid Build Coastguard Workerbug, and needs to be fixed.
1126*5a6e8488SAndroid Build Coastguard Worker
1127*5a6e8488SAndroid Build Coastguard Worker**ALL USERS SHOULD UPDATE `bc`**.
1128*5a6e8488SAndroid Build Coastguard Worker
1129*5a6e8488SAndroid Build Coastguard Worker## 2.3.0
1130*5a6e8488SAndroid Build Coastguard Worker
1131*5a6e8488SAndroid Build Coastguard WorkerThis is a production release with changes to the build system.
1132*5a6e8488SAndroid Build Coastguard Worker
1133*5a6e8488SAndroid Build Coastguard Worker## 2.2.0
1134*5a6e8488SAndroid Build Coastguard Worker
1135*5a6e8488SAndroid Build Coastguard WorkerThis release is a production release. It only has new features and performance
1136*5a6e8488SAndroid Build Coastguard Workerimprovements.
1137*5a6e8488SAndroid Build Coastguard Worker
1138*5a6e8488SAndroid Build Coastguard Worker1.	The performance of `sqrt(x)` was improved.
1139*5a6e8488SAndroid Build Coastguard Worker2.	The new function `root(x, n)` was added to the extended math library to
1140*5a6e8488SAndroid Build Coastguard Worker	calculate `n`th roots.
1141*5a6e8488SAndroid Build Coastguard Worker3.	The new function `cbrt(x)` was added to the extended math library to
1142*5a6e8488SAndroid Build Coastguard Worker	calculate cube roots.
1143*5a6e8488SAndroid Build Coastguard Worker
1144*5a6e8488SAndroid Build Coastguard Worker## 2.1.3
1145*5a6e8488SAndroid Build Coastguard Worker
1146*5a6e8488SAndroid Build Coastguard WorkerThis is a non-critical release; it just changes the build system, and in
1147*5a6e8488SAndroid Build Coastguard Workernon-breaking ways:
1148*5a6e8488SAndroid Build Coastguard Worker
1149*5a6e8488SAndroid Build Coastguard Worker1.	Linked locale files were changed to link to their sources with a relative
1150*5a6e8488SAndroid Build Coastguard Worker	link.
1151*5a6e8488SAndroid Build Coastguard Worker2.	A bug in `configure.sh` that caused long option parsing to fail under `bash`
1152*5a6e8488SAndroid Build Coastguard Worker	was fixed.
1153*5a6e8488SAndroid Build Coastguard Worker
1154*5a6e8488SAndroid Build Coastguard Worker## 2.1.2
1155*5a6e8488SAndroid Build Coastguard Worker
1156*5a6e8488SAndroid Build Coastguard WorkerThis release is not a critical release.
1157*5a6e8488SAndroid Build Coastguard Worker
1158*5a6e8488SAndroid Build Coastguard Worker1.	A few codes were added to history.
1159*5a6e8488SAndroid Build Coastguard Worker2.	Multiplication was optimized a bit more.
1160*5a6e8488SAndroid Build Coastguard Worker3.	Addition and subtraction were both optimized a bit more.
1161*5a6e8488SAndroid Build Coastguard Worker
1162*5a6e8488SAndroid Build Coastguard Worker## 2.1.1
1163*5a6e8488SAndroid Build Coastguard Worker
1164*5a6e8488SAndroid Build Coastguard WorkerThis release contains a fix for the test suite made for Linux from Scratch: now
1165*5a6e8488SAndroid Build Coastguard Workerthe test suite prints `pass` when a test is passed.
1166*5a6e8488SAndroid Build Coastguard Worker
1167*5a6e8488SAndroid Build Coastguard WorkerOther than that, there is no change in this release, so distros and other users
1168*5a6e8488SAndroid Build Coastguard Workerdo not need to upgrade.
1169*5a6e8488SAndroid Build Coastguard Worker
1170*5a6e8488SAndroid Build Coastguard Worker## 2.1.0
1171*5a6e8488SAndroid Build Coastguard Worker
1172*5a6e8488SAndroid Build Coastguard WorkerThis release is a production release.
1173*5a6e8488SAndroid Build Coastguard Worker
1174*5a6e8488SAndroid Build Coastguard WorkerThe following bugs were fixed:
1175*5a6e8488SAndroid Build Coastguard Worker
1176*5a6e8488SAndroid Build Coastguard Worker1.	A `dc` bug that caused stack mishandling was fixed.
1177*5a6e8488SAndroid Build Coastguard Worker2.	A warning on OpenBSD was fixed.
1178*5a6e8488SAndroid Build Coastguard Worker3.	Bugs in `ctrl+arrow` operations in history were fixed.
1179*5a6e8488SAndroid Build Coastguard Worker4.	The ability to paste multiple lines in history was added.
1180*5a6e8488SAndroid Build Coastguard Worker5.	A `bc` bug, mishandling of array arguments to functions, was fixed.
1181*5a6e8488SAndroid Build Coastguard Worker6.	A crash caused by freeing the wrong pointer was fixed.
1182*5a6e8488SAndroid Build Coastguard Worker7.	A `dc` bug where strings, in a rare case, were mishandled in parsing was
1183*5a6e8488SAndroid Build Coastguard Worker	fixed.
1184*5a6e8488SAndroid Build Coastguard Worker
1185*5a6e8488SAndroid Build Coastguard WorkerIn addition, the following changes were made:
1186*5a6e8488SAndroid Build Coastguard Worker
1187*5a6e8488SAndroid Build Coastguard Worker1.	Division was slightly optimized.
1188*5a6e8488SAndroid Build Coastguard Worker2.	An option was added to the build to disable printing of prompts.
1189*5a6e8488SAndroid Build Coastguard Worker3.	The special case of empty arguments is now handled. This is to prevent
1190*5a6e8488SAndroid Build Coastguard Worker	errors in scripts that end up passing empty arguments.
1191*5a6e8488SAndroid Build Coastguard Worker4.	A harmless bug was fixed. This bug was that, with the pop instructions
1192*5a6e8488SAndroid Build Coastguard Worker	(mostly) removed (see below), `bc` would leave extra values on its stack for
1193*5a6e8488SAndroid Build Coastguard Worker	`void` functions and in a few other cases. These extra items would not
1194*5a6e8488SAndroid Build Coastguard Worker	affect anything put on the stack and would not cause any sort of crash or
1195*5a6e8488SAndroid Build Coastguard Worker	even buggy behavior, but they would cause `bc` to take more memory than it
1196*5a6e8488SAndroid Build Coastguard Worker	needed.
1197*5a6e8488SAndroid Build Coastguard Worker
1198*5a6e8488SAndroid Build Coastguard WorkerOn top of the above changes, the following optimizations were added:
1199*5a6e8488SAndroid Build Coastguard Worker
1200*5a6e8488SAndroid Build Coastguard Worker1.	The need for pop instructions in `bc` was removed.
1201*5a6e8488SAndroid Build Coastguard Worker2.	Extra tests on every iteration of the interpreter loop were removed.
1202*5a6e8488SAndroid Build Coastguard Worker3.	Updating function and code pointers on every iteration of the interpreter
1203*5a6e8488SAndroid Build Coastguard Worker	loop was changed to only updating them when necessary.
1204*5a6e8488SAndroid Build Coastguard Worker4.	Extra assignments to pointers were removed.
1205*5a6e8488SAndroid Build Coastguard Worker
1206*5a6e8488SAndroid Build Coastguard WorkerAltogether, these changes sped up the interpreter by around 2x.
1207*5a6e8488SAndroid Build Coastguard Worker
1208*5a6e8488SAndroid Build Coastguard Worker***NOTE***: This is the last release with new features because this `bc` is now
1209*5a6e8488SAndroid Build Coastguard Workerconsidered complete. From now on, only bug fixes and new translations will be
1210*5a6e8488SAndroid Build Coastguard Workeradded to this `bc`.
1211*5a6e8488SAndroid Build Coastguard Worker
1212*5a6e8488SAndroid Build Coastguard Worker## 2.0.3
1213*5a6e8488SAndroid Build Coastguard Worker
1214*5a6e8488SAndroid Build Coastguard WorkerThis is a production, bug-fix release.
1215*5a6e8488SAndroid Build Coastguard Worker
1216*5a6e8488SAndroid Build Coastguard WorkerTwo bugs were fixed in this release:
1217*5a6e8488SAndroid Build Coastguard Worker
1218*5a6e8488SAndroid Build Coastguard Worker1.	A rare and subtle signal handling bug was fixed.
1219*5a6e8488SAndroid Build Coastguard Worker2.	A misbehavior on `0` to a negative power was fixed.
1220*5a6e8488SAndroid Build Coastguard Worker
1221*5a6e8488SAndroid Build Coastguard WorkerThe last bug bears some mentioning.
1222*5a6e8488SAndroid Build Coastguard Worker
1223*5a6e8488SAndroid Build Coastguard WorkerWhen I originally wrote power, I did not thoroughly check its error cases;
1224*5a6e8488SAndroid Build Coastguard Workerinstead, I had it check if the first number was `0` and then if so, just return
1225*5a6e8488SAndroid Build Coastguard Worker`0`. However, `0` to a negative power means that `1` will be divided by `0`,
1226*5a6e8488SAndroid Build Coastguard Workerwhich is an error.
1227*5a6e8488SAndroid Build Coastguard Worker
1228*5a6e8488SAndroid Build Coastguard WorkerI caught this, but only after I stopped being cocky. You see, sometime later, I
1229*5a6e8488SAndroid Build Coastguard Workerhad noticed that GNU `bc` returned an error, correctly, but I thought it was
1230*5a6e8488SAndroid Build Coastguard Workerwrong simply because that's not what my `bc` did. I saw it again later and had a
1231*5a6e8488SAndroid Build Coastguard Workerdouble take. I checked for real, finally, and found out that my `bc` was wrong
1232*5a6e8488SAndroid Build Coastguard Workerall along.
1233*5a6e8488SAndroid Build Coastguard Worker
1234*5a6e8488SAndroid Build Coastguard WorkerThat was bad on me. But the bug was easy to fix, so it is fixed now.
1235*5a6e8488SAndroid Build Coastguard Worker
1236*5a6e8488SAndroid Build Coastguard WorkerThere are two other things in this release:
1237*5a6e8488SAndroid Build Coastguard Worker
1238*5a6e8488SAndroid Build Coastguard Worker1.	Subtraction was optimized by [Stefan Eßer][14].
1239*5a6e8488SAndroid Build Coastguard Worker2.	Division was also optimized, also by Stefan Eßer.
1240*5a6e8488SAndroid Build Coastguard Worker
1241*5a6e8488SAndroid Build Coastguard Worker## 2.0.2
1242*5a6e8488SAndroid Build Coastguard Worker
1243*5a6e8488SAndroid Build Coastguard WorkerThis release contains a fix for a possible overflow in the signal handling. I
1244*5a6e8488SAndroid Build Coastguard Workerwould be surprised if any users ran into it because it would only happen after 2
1245*5a6e8488SAndroid Build Coastguard Workerbillion (`2^31-1`) `SIGINT`'s, but I saw it and had to fix it.
1246*5a6e8488SAndroid Build Coastguard Worker
1247*5a6e8488SAndroid Build Coastguard Worker## 2.0.1
1248*5a6e8488SAndroid Build Coastguard Worker
1249*5a6e8488SAndroid Build Coastguard WorkerThis release contains very few things that will apply to any users.
1250*5a6e8488SAndroid Build Coastguard Worker
1251*5a6e8488SAndroid Build Coastguard Worker1.	A slight bug in `dc`'s interactive mode was fixed.
1252*5a6e8488SAndroid Build Coastguard Worker2.	A bug in the test suite that was only triggered on NetBSD was fixed.
1253*5a6e8488SAndroid Build Coastguard Worker3.	**The `-P`/`--no-prompt` option** was added for users that do not want a
1254*5a6e8488SAndroid Build Coastguard Worker	prompt.
1255*5a6e8488SAndroid Build Coastguard Worker4.	A `make check` target was added as an alias for `make test`.
1256*5a6e8488SAndroid Build Coastguard Worker5.	`dc` got its own read prompt: `?> `.
1257*5a6e8488SAndroid Build Coastguard Worker
1258*5a6e8488SAndroid Build Coastguard Worker## 2.0.0
1259*5a6e8488SAndroid Build Coastguard Worker
1260*5a6e8488SAndroid Build Coastguard WorkerThis release is a production release.
1261*5a6e8488SAndroid Build Coastguard Worker
1262*5a6e8488SAndroid Build Coastguard WorkerThis release is also a little different from previous releases. From here on
1263*5a6e8488SAndroid Build Coastguard Workerout, I do not plan on adding any more features to this `bc`; I believe that it
1264*5a6e8488SAndroid Build Coastguard Workeris complete. However, there may be bug fix releases in the future, if I or any
1265*5a6e8488SAndroid Build Coastguard Workerothers manage to find bugs.
1266*5a6e8488SAndroid Build Coastguard Worker
1267*5a6e8488SAndroid Build Coastguard WorkerThis release has only a few new features:
1268*5a6e8488SAndroid Build Coastguard Worker
1269*5a6e8488SAndroid Build Coastguard Worker1.	`atan2(y, x)` was added to the extended math library as both `a2(y, x)` and
1270*5a6e8488SAndroid Build Coastguard Worker	`atan2(y, x)`.
1271*5a6e8488SAndroid Build Coastguard Worker2.	Locales were fixed.
1272*5a6e8488SAndroid Build Coastguard Worker3.	A **POSIX shell-compatible script was added as an alternative to compiling
1273*5a6e8488SAndroid Build Coastguard Worker	`gen/strgen.c`** on a host machine. More details about making the choice
1274*5a6e8488SAndroid Build Coastguard Worker	between the two can be found by running `./configure.sh --help` or reading
1275*5a6e8488SAndroid Build Coastguard Worker	the [build manual][13].
1276*5a6e8488SAndroid Build Coastguard Worker4.	Multiplication was optimized by using **diagonal multiplication**, rather
1277*5a6e8488SAndroid Build Coastguard Worker	than straight brute force.
1278*5a6e8488SAndroid Build Coastguard Worker5.	The `locale_install.sh` script was fixed.
1279*5a6e8488SAndroid Build Coastguard Worker6.	`dc` was given the ability to **use the environment variable
1280*5a6e8488SAndroid Build Coastguard Worker	`DC_ENV_ARGS`**.
1281*5a6e8488SAndroid Build Coastguard Worker7.	`dc` was also given the ability to **use the `-i` or `--interactive`**
1282*5a6e8488SAndroid Build Coastguard Worker	options.
1283*5a6e8488SAndroid Build Coastguard Worker8.	Printing the prompt was fixed so that it did not print when it shouldn't.
1284*5a6e8488SAndroid Build Coastguard Worker9.	Signal handling was fixed.
1285*5a6e8488SAndroid Build Coastguard Worker10.	**Handling of `SIGTERM` and `SIGQUIT`** was fixed.
1286*5a6e8488SAndroid Build Coastguard Worker11.	The **built-in functions `maxibase()`, `maxobase()`, and `maxscale()`** (the
1287*5a6e8488SAndroid Build Coastguard Worker	commands `T`, `U`, `V` in `dc`, respectively) were added to allow scripts to
1288*5a6e8488SAndroid Build Coastguard Worker	query for the max allowable values of those globals.
1289*5a6e8488SAndroid Build Coastguard Worker12.	Some incompatibilities with POSIX were fixed.
1290*5a6e8488SAndroid Build Coastguard Worker
1291*5a6e8488SAndroid Build Coastguard WorkerIn addition, this release is `2.0.0` for a big reason: the internal format for
1292*5a6e8488SAndroid Build Coastguard Workernumbers changed. They used to be a `char` array. Now, they are an array of
1293*5a6e8488SAndroid Build Coastguard Workerlarger integers, packing more decimal digits into each integer. This has
1294*5a6e8488SAndroid Build Coastguard Workerdelivered ***HUGE*** performance improvements, especially for multiplication,
1295*5a6e8488SAndroid Build Coastguard Workerdivision, and power.
1296*5a6e8488SAndroid Build Coastguard Worker
1297*5a6e8488SAndroid Build Coastguard WorkerThis `bc` should now be the fastest `bc` available, but I may be wrong.
1298*5a6e8488SAndroid Build Coastguard Worker
1299*5a6e8488SAndroid Build Coastguard Worker## 1.2.8
1300*5a6e8488SAndroid Build Coastguard Worker
1301*5a6e8488SAndroid Build Coastguard WorkerThis release contains a fix for a harmless bug (it is harmless in that it still
1302*5a6e8488SAndroid Build Coastguard Workerworks, but it just copies extra data) in the [`locale_install.sh`][12] script.
1303*5a6e8488SAndroid Build Coastguard Worker
1304*5a6e8488SAndroid Build Coastguard Worker## 1.2.7
1305*5a6e8488SAndroid Build Coastguard Worker
1306*5a6e8488SAndroid Build Coastguard WorkerThis version contains fixes for the build on Arch Linux.
1307*5a6e8488SAndroid Build Coastguard Worker
1308*5a6e8488SAndroid Build Coastguard Worker## 1.2.6
1309*5a6e8488SAndroid Build Coastguard Worker
1310*5a6e8488SAndroid Build Coastguard WorkerThis release removes the use of `local` in shell scripts because it's not POSIX
1311*5a6e8488SAndroid Build Coastguard Workershell-compatible, and also updates a man page that should have been updated a
1312*5a6e8488SAndroid Build Coastguard Workerlong time ago but was missed.
1313*5a6e8488SAndroid Build Coastguard Worker
1314*5a6e8488SAndroid Build Coastguard Worker## 1.2.5
1315*5a6e8488SAndroid Build Coastguard Worker
1316*5a6e8488SAndroid Build Coastguard WorkerThis release contains some missing locale `*.msg` files.
1317*5a6e8488SAndroid Build Coastguard Worker
1318*5a6e8488SAndroid Build Coastguard Worker## 1.2.4
1319*5a6e8488SAndroid Build Coastguard Worker
1320*5a6e8488SAndroid Build Coastguard WorkerThis release contains a few bug fixes and new French translations.
1321*5a6e8488SAndroid Build Coastguard Worker
1322*5a6e8488SAndroid Build Coastguard Worker## 1.2.3
1323*5a6e8488SAndroid Build Coastguard Worker
1324*5a6e8488SAndroid Build Coastguard WorkerThis release contains a fix for a bug: use of uninitialized data. Such data was
1325*5a6e8488SAndroid Build Coastguard Workeronly used when outputting an error message, but I am striving for perfection. As
1326*5a6e8488SAndroid Build Coastguard WorkerMichelangelo said, "Trifles make perfection, and perfection is no trifle."
1327*5a6e8488SAndroid Build Coastguard Worker
1328*5a6e8488SAndroid Build Coastguard Worker## 1.2.2
1329*5a6e8488SAndroid Build Coastguard Worker
1330*5a6e8488SAndroid Build Coastguard WorkerThis release contains fixes for OpenBSD.
1331*5a6e8488SAndroid Build Coastguard Worker
1332*5a6e8488SAndroid Build Coastguard Worker## 1.2.1
1333*5a6e8488SAndroid Build Coastguard Worker
1334*5a6e8488SAndroid Build Coastguard WorkerThis release contains bug fixes for some rare bugs.
1335*5a6e8488SAndroid Build Coastguard Worker
1336*5a6e8488SAndroid Build Coastguard Worker## 1.2.0
1337*5a6e8488SAndroid Build Coastguard Worker
1338*5a6e8488SAndroid Build Coastguard WorkerThis is a production release.
1339*5a6e8488SAndroid Build Coastguard Worker
1340*5a6e8488SAndroid Build Coastguard WorkerThere have been several changes since `1.1.0`:
1341*5a6e8488SAndroid Build Coastguard Worker
1342*5a6e8488SAndroid Build Coastguard Worker1.	The build system had some changes.
1343*5a6e8488SAndroid Build Coastguard Worker2.	Locale support has been added. (Patches welcome for translations.)
1344*5a6e8488SAndroid Build Coastguard Worker3.	**The ability to turn `ibase`, `obase`, and `scale` into stacks** was added
1345*5a6e8488SAndroid Build Coastguard Worker	with the `-g` command-line option. (See the [`bc` manual][9] for more
1346*5a6e8488SAndroid Build Coastguard Worker	details.)
1347*5a6e8488SAndroid Build Coastguard Worker4.	Support for compiling on Mac OSX out of the box was added.
1348*5a6e8488SAndroid Build Coastguard Worker5.	The extended math library got `t(x)`, `ceil(x)`, and some aliases.
1349*5a6e8488SAndroid Build Coastguard Worker6.	The extended math library also got `r2d(x)` (for converting from radians to
1350*5a6e8488SAndroid Build Coastguard Worker	degrees) and `d2r(x)` (for converting from degrees to radians). This is to
1351*5a6e8488SAndroid Build Coastguard Worker	allow using degrees with the standard library.
1352*5a6e8488SAndroid Build Coastguard Worker7.	Both calculators now accept numbers in **scientific notation**. See the
1353*5a6e8488SAndroid Build Coastguard Worker	[`bc` manual][9] and the [`dc` manual][10] for details.
1354*5a6e8488SAndroid Build Coastguard Worker8.	Both calculators can **output in either scientific or engineering
1355*5a6e8488SAndroid Build Coastguard Worker	notation**. See the [`bc` manual][9] and the [`dc` manual][10] for details.
1356*5a6e8488SAndroid Build Coastguard Worker9.	Some inefficiencies were removed.
1357*5a6e8488SAndroid Build Coastguard Worker10.	Some bugs were fixed.
1358*5a6e8488SAndroid Build Coastguard Worker11.	Some bugs in the extended library were fixed.
1359*5a6e8488SAndroid Build Coastguard Worker12.	Some defects from [Coverity Scan][11] were fixed.
1360*5a6e8488SAndroid Build Coastguard Worker
1361*5a6e8488SAndroid Build Coastguard Worker## 1.1.4
1362*5a6e8488SAndroid Build Coastguard Worker
1363*5a6e8488SAndroid Build Coastguard WorkerThis release contains a fix to the build system that allows it to build on older
1364*5a6e8488SAndroid Build Coastguard Workerversions of `glibc`.
1365*5a6e8488SAndroid Build Coastguard Worker
1366*5a6e8488SAndroid Build Coastguard Worker## 1.1.3
1367*5a6e8488SAndroid Build Coastguard Worker
1368*5a6e8488SAndroid Build Coastguard WorkerThis release contains a fix for a bug in the test suite where `bc` tests and
1369*5a6e8488SAndroid Build Coastguard Worker`dc` tests could not be run in parallel.
1370*5a6e8488SAndroid Build Coastguard Worker
1371*5a6e8488SAndroid Build Coastguard Worker## 1.1.2
1372*5a6e8488SAndroid Build Coastguard Worker
1373*5a6e8488SAndroid Build Coastguard WorkerThis release has a fix for a history bug; the down arrow did not work.
1374*5a6e8488SAndroid Build Coastguard Worker
1375*5a6e8488SAndroid Build Coastguard Worker## 1.1.1
1376*5a6e8488SAndroid Build Coastguard Worker
1377*5a6e8488SAndroid Build Coastguard WorkerThis release fixes a bug in the `1.1.0` build system. The source is exactly the
1378*5a6e8488SAndroid Build Coastguard Workersame.
1379*5a6e8488SAndroid Build Coastguard Worker
1380*5a6e8488SAndroid Build Coastguard WorkerThe bug that was fixed was a failure to install if no `EXECSUFFIX` was used.
1381*5a6e8488SAndroid Build Coastguard Worker
1382*5a6e8488SAndroid Build Coastguard Worker## 1.1.0
1383*5a6e8488SAndroid Build Coastguard Worker
1384*5a6e8488SAndroid Build Coastguard WorkerThis is a production release. However, many new features were added since `1.0`.
1385*5a6e8488SAndroid Build Coastguard Worker
1386*5a6e8488SAndroid Build Coastguard Worker1.	**The build system has been changed** to use a custom, POSIX
1387*5a6e8488SAndroid Build Coastguard Worker	shell-compatible configure script ([`configure.sh`][6]) to generate a POSIX
1388*5a6e8488SAndroid Build Coastguard Worker	make-compatible `Makefile`, which means that `bc` and `dc` now build out of
1389*5a6e8488SAndroid Build Coastguard Worker	the box on any POSIX-compatible system.
1390*5a6e8488SAndroid Build Coastguard Worker2.	Out-of-memory and output errors now cause the `bc` to report the error,
1391*5a6e8488SAndroid Build Coastguard Worker	clean up, and die, rather than just reporting and trying to continue.
1392*5a6e8488SAndroid Build Coastguard Worker3.	**Strings and constants are now garbage collected** when possible.
1393*5a6e8488SAndroid Build Coastguard Worker4.	Signal handling and checking has been made more simple and more thorough.
1394*5a6e8488SAndroid Build Coastguard Worker5.	`BcGlobals` was refactored into `BcVm` and `BcVm` was made global. Some
1395*5a6e8488SAndroid Build Coastguard Worker	procedure names were changed to reflect its difference to everything else.
1396*5a6e8488SAndroid Build Coastguard Worker6.	Addition got a speed improvement.
1397*5a6e8488SAndroid Build Coastguard Worker7.	Some common code for addition and multiplication was refactored into its own
1398*5a6e8488SAndroid Build Coastguard Worker	procedure.
1399*5a6e8488SAndroid Build Coastguard Worker8.	A bug was removed where `dc` could have been selected, but the internal
1400*5a6e8488SAndroid Build Coastguard Worker	`#define` that returned `true` for a query about `dc` would not have
1401*5a6e8488SAndroid Build Coastguard Worker	returned `true`.
1402*5a6e8488SAndroid Build Coastguard Worker9.	Useless calls to `bc_num_zero()` were removed.
1403*5a6e8488SAndroid Build Coastguard Worker10.	**History support was added.** The history support is based off of a
1404*5a6e8488SAndroid Build Coastguard Worker	[UTF-8 aware fork][7] of [`linenoise`][8], which has been customized with
1405*5a6e8488SAndroid Build Coastguard Worker	`bc`'s own data structures and signal handling.
1406*5a6e8488SAndroid Build Coastguard Worker11.	Generating C source from the math library now removes tabs from the library,
1407*5a6e8488SAndroid Build Coastguard Worker	shrinking the size of the executable.
1408*5a6e8488SAndroid Build Coastguard Worker12.	The math library was shrunk.
1409*5a6e8488SAndroid Build Coastguard Worker13.	Error handling and reporting was improved.
1410*5a6e8488SAndroid Build Coastguard Worker14.	Reallocations were reduced by giving access to the request size for each
1411*5a6e8488SAndroid Build Coastguard Worker	operation.
1412*5a6e8488SAndroid Build Coastguard Worker15.	**`abs()` (`b` command for `dc`) was added as a builtin.**
1413*5a6e8488SAndroid Build Coastguard Worker16.	Both calculators were tested on FreeBSD.
1414*5a6e8488SAndroid Build Coastguard Worker17.	Many obscure parse bugs were fixed.
1415*5a6e8488SAndroid Build Coastguard Worker18.	Markdown and man page manuals were added, and the man pages are installed by
1416*5a6e8488SAndroid Build Coastguard Worker	`make install`.
1417*5a6e8488SAndroid Build Coastguard Worker19.	Executable size was reduced, though the added features probably made the
1418*5a6e8488SAndroid Build Coastguard Worker	executable end up bigger.
1419*5a6e8488SAndroid Build Coastguard Worker20.	**GNU-style array references were added as a supported feature.**
1420*5a6e8488SAndroid Build Coastguard Worker21.	Allocations were reduced.
1421*5a6e8488SAndroid Build Coastguard Worker22.	**New operators were added**: `$` (`$` for `dc`), `@` (`@` for `dc`), `@=`,
1422*5a6e8488SAndroid Build Coastguard Worker	`<<` (`H` for `dc`), `<<=`, `>>` (`h` for `dc`), and `>>=`. See the
1423*5a6e8488SAndroid Build Coastguard Worker	[`bc` manual][9] and the [`dc` manual][10] for more details.
1424*5a6e8488SAndroid Build Coastguard Worker23.	**An extended math library was added.** This library contains code that
1425*5a6e8488SAndroid Build Coastguard Worker	makes it so I can replace my desktop calculator with this `bc`. See the
1426*5a6e8488SAndroid Build Coastguard Worker	[`bc` manual][3] for more details.
1427*5a6e8488SAndroid Build Coastguard Worker24.	Support for all capital letters as numbers was added.
1428*5a6e8488SAndroid Build Coastguard Worker25.	**Support for GNU-style void functions was added.**
1429*5a6e8488SAndroid Build Coastguard Worker26.	A bug fix for improper handling of function parameters was added.
1430*5a6e8488SAndroid Build Coastguard Worker27.	Precedence for the or (`||`) operator was changed to match GNU `bc`.
1431*5a6e8488SAndroid Build Coastguard Worker28.	`dc` was given an explicit negation command.
1432*5a6e8488SAndroid Build Coastguard Worker29.	`dc` was changed to be able to handle strings in arrays.
1433*5a6e8488SAndroid Build Coastguard Worker
1434*5a6e8488SAndroid Build Coastguard Worker## 1.1 Release Candidate 3
1435*5a6e8488SAndroid Build Coastguard Worker
1436*5a6e8488SAndroid Build Coastguard WorkerThis release is the eighth release candidate for 1.1, though it is the third
1437*5a6e8488SAndroid Build Coastguard Workerrelease candidate meant as a general release candidate. The new code has not
1438*5a6e8488SAndroid Build Coastguard Workerbeen tested as thoroughly as it should for release.
1439*5a6e8488SAndroid Build Coastguard Worker
1440*5a6e8488SAndroid Build Coastguard Worker## 1.1 Release Candidate 2
1441*5a6e8488SAndroid Build Coastguard Worker
1442*5a6e8488SAndroid Build Coastguard WorkerThis release is the seventh release candidate for 1.1, though it is the second
1443*5a6e8488SAndroid Build Coastguard Workerrelease candidate meant as a general release candidate. The new code has not
1444*5a6e8488SAndroid Build Coastguard Workerbeen tested as thoroughly as it should for release.
1445*5a6e8488SAndroid Build Coastguard Worker
1446*5a6e8488SAndroid Build Coastguard Worker## 1.1 FreeBSD Beta 5
1447*5a6e8488SAndroid Build Coastguard Worker
1448*5a6e8488SAndroid Build Coastguard WorkerThis release is the sixth release candidate for 1.1, though it is the fifth
1449*5a6e8488SAndroid Build Coastguard Workerrelease candidate meant specifically to test if `bc` works on FreeBSD. The new
1450*5a6e8488SAndroid Build Coastguard Workercode has not been tested as thoroughly as it should for release.
1451*5a6e8488SAndroid Build Coastguard Worker
1452*5a6e8488SAndroid Build Coastguard Worker## 1.1 FreeBSD Beta 4
1453*5a6e8488SAndroid Build Coastguard Worker
1454*5a6e8488SAndroid Build Coastguard WorkerThis release is the fifth release candidate for 1.1, though it is the fourth
1455*5a6e8488SAndroid Build Coastguard Workerrelease candidate meant specifically to test if `bc` works on FreeBSD. The new
1456*5a6e8488SAndroid Build Coastguard Workercode has not been tested as thoroughly as it should for release.
1457*5a6e8488SAndroid Build Coastguard Worker
1458*5a6e8488SAndroid Build Coastguard Worker## 1.1 FreeBSD Beta 3
1459*5a6e8488SAndroid Build Coastguard Worker
1460*5a6e8488SAndroid Build Coastguard WorkerThis release is the fourth release candidate for 1.1, though it is the third
1461*5a6e8488SAndroid Build Coastguard Workerrelease candidate meant specifically to test if `bc` works on FreeBSD. The new
1462*5a6e8488SAndroid Build Coastguard Workercode has not been tested as thoroughly as it should for release.
1463*5a6e8488SAndroid Build Coastguard Worker
1464*5a6e8488SAndroid Build Coastguard Worker## 1.1 FreeBSD Beta 2
1465*5a6e8488SAndroid Build Coastguard Worker
1466*5a6e8488SAndroid Build Coastguard WorkerThis release is the third release candidate for 1.1, though it is the second
1467*5a6e8488SAndroid Build Coastguard Workerrelease candidate meant specifically to test if `bc` works on FreeBSD. The new
1468*5a6e8488SAndroid Build Coastguard Workercode has not been tested as thoroughly as it should for release.
1469*5a6e8488SAndroid Build Coastguard Worker
1470*5a6e8488SAndroid Build Coastguard Worker## 1.1 FreeBSD Beta 1
1471*5a6e8488SAndroid Build Coastguard Worker
1472*5a6e8488SAndroid Build Coastguard WorkerThis release is the second release candidate for 1.1, though it is meant
1473*5a6e8488SAndroid Build Coastguard Workerspecifically to test if `bc` works on FreeBSD. The new code has not been tested as
1474*5a6e8488SAndroid Build Coastguard Workerthoroughly as it should for release.
1475*5a6e8488SAndroid Build Coastguard Worker
1476*5a6e8488SAndroid Build Coastguard Worker## 1.1 Release Candidate 1
1477*5a6e8488SAndroid Build Coastguard Worker
1478*5a6e8488SAndroid Build Coastguard WorkerThis is the first release candidate for 1.1. The new code has not been tested as
1479*5a6e8488SAndroid Build Coastguard Workerthoroughly as it should for release.
1480*5a6e8488SAndroid Build Coastguard Worker
1481*5a6e8488SAndroid Build Coastguard Worker## 1.0
1482*5a6e8488SAndroid Build Coastguard Worker
1483*5a6e8488SAndroid Build Coastguard WorkerThis is the first non-beta release. `bc` is ready for production use.
1484*5a6e8488SAndroid Build Coastguard Worker
1485*5a6e8488SAndroid Build Coastguard WorkerAs such, a lot has changed since 0.5.
1486*5a6e8488SAndroid Build Coastguard Worker
1487*5a6e8488SAndroid Build Coastguard Worker1.	`dc` has been added. It has been tested even more thoroughly than `bc` was
1488*5a6e8488SAndroid Build Coastguard Worker	for `0.5`. It does not have the `!` command, and for security reasons, it
1489*5a6e8488SAndroid Build Coastguard Worker	never will, so it is complete.
1490*5a6e8488SAndroid Build Coastguard Worker2.	`bc` has been more thoroughly tested. An entire section of the test suite
1491*5a6e8488SAndroid Build Coastguard Worker	(for both programs) has been added to test for errors.
1492*5a6e8488SAndroid Build Coastguard Worker3.	A prompt (`>>> `) has been added for interactive mode, making it easier to
1493*5a6e8488SAndroid Build Coastguard Worker	see inputs and outputs.
1494*5a6e8488SAndroid Build Coastguard Worker4.	Interrupt handling has been improved, including elimination of race
1495*5a6e8488SAndroid Build Coastguard Worker	conditions (as much as possible).
1496*5a6e8488SAndroid Build Coastguard Worker5.	MinGW and [Windows Subsystem for Linux][1] support has been added (see
1497*5a6e8488SAndroid Build Coastguard Worker	[xstatic][2] for binaries).
1498*5a6e8488SAndroid Build Coastguard Worker6.	Memory leaks and errors have been eliminated (as far as ASan and Valgrind
1499*5a6e8488SAndroid Build Coastguard Worker	can tell).
1500*5a6e8488SAndroid Build Coastguard Worker7.	Crashes have been eliminated (as far as [afl][3] can tell).
1501*5a6e8488SAndroid Build Coastguard Worker8.	Karatsuba multiplication was added (and thoroughly) tested, speeding up
1502*5a6e8488SAndroid Build Coastguard Worker	multiplication and power by orders of magnitude.
1503*5a6e8488SAndroid Build Coastguard Worker9.	Performance was further enhanced by using a "divmod" function to reduce
1504*5a6e8488SAndroid Build Coastguard Worker	redundant divisions and by removing superfluous `memset()` calls.
1505*5a6e8488SAndroid Build Coastguard Worker10.	To switch between Karatsuba and `O(n^2)` multiplication, the config variable
1506*5a6e8488SAndroid Build Coastguard Worker	`BC_NUM_KARATSUBA_LEN` was added. It is set to a sane default, but the
1507*5a6e8488SAndroid Build Coastguard Worker	optimal number can be found with [`karatsuba.py`][4] (requires Python 3)
1508*5a6e8488SAndroid Build Coastguard Worker	and then configured through `make`.
1509*5a6e8488SAndroid Build Coastguard Worker11.	The random math test generator script was changed to Python 3 and improved.
1510*5a6e8488SAndroid Build Coastguard Worker	`bc` and `dc` have together been run through 30+ million random tests.
1511*5a6e8488SAndroid Build Coastguard Worker12.	All known math bugs have been fixed, including out of control memory
1512*5a6e8488SAndroid Build Coastguard Worker	allocations in `sine` and `cosine` (that was actually a parse bug), certain
1513*5a6e8488SAndroid Build Coastguard Worker	cases of infinite loop on square root, and slight inaccuracies (as much as
1514*5a6e8488SAndroid Build Coastguard Worker	possible; see the [README][5]) in transcendental functions.
1515*5a6e8488SAndroid Build Coastguard Worker13.	Parsing has been fixed as much as possible.
1516*5a6e8488SAndroid Build Coastguard Worker14.	Test coverage was improved to 94.8%. The only paths not covered are ones
1517*5a6e8488SAndroid Build Coastguard Worker	that happen when `malloc()` or `realloc()` fails.
1518*5a6e8488SAndroid Build Coastguard Worker15.	An extension to get the length of an array was added.
1519*5a6e8488SAndroid Build Coastguard Worker16.	The boolean not (`!`) had its precedence change to match negation.
1520*5a6e8488SAndroid Build Coastguard Worker17.	Data input was hardened.
1521*5a6e8488SAndroid Build Coastguard Worker18.	`bc` was made fully compliant with POSIX when the `-s` flag is used or
1522*5a6e8488SAndroid Build Coastguard Worker	`POSIXLY_CORRECT` is defined.
1523*5a6e8488SAndroid Build Coastguard Worker19.	Error handling was improved.
1524*5a6e8488SAndroid Build Coastguard Worker20.	`bc` now checks that files it is given are not directories.
1525*5a6e8488SAndroid Build Coastguard Worker
1526*5a6e8488SAndroid Build Coastguard Worker## 1.0 Release Candidate 7
1527*5a6e8488SAndroid Build Coastguard Worker
1528*5a6e8488SAndroid Build Coastguard WorkerThis is the seventh release candidate for 1.0. It fixes a few bugs in 1.0
1529*5a6e8488SAndroid Build Coastguard WorkerRelease Candidate 6.
1530*5a6e8488SAndroid Build Coastguard Worker
1531*5a6e8488SAndroid Build Coastguard Worker## 1.0 Release Candidate 6
1532*5a6e8488SAndroid Build Coastguard Worker
1533*5a6e8488SAndroid Build Coastguard WorkerThis is the sixth release candidate for 1.0. It fixes a few bugs in 1.0 Release
1534*5a6e8488SAndroid Build Coastguard WorkerCandidate 5.
1535*5a6e8488SAndroid Build Coastguard Worker
1536*5a6e8488SAndroid Build Coastguard Worker## 1.0 Release Candidate 5
1537*5a6e8488SAndroid Build Coastguard Worker
1538*5a6e8488SAndroid Build Coastguard WorkerThis is the fifth release candidate for 1.0. It fixes a few bugs in 1.0 Release
1539*5a6e8488SAndroid Build Coastguard WorkerCandidate 4.
1540*5a6e8488SAndroid Build Coastguard Worker
1541*5a6e8488SAndroid Build Coastguard Worker## 1.0 Release Candidate 4
1542*5a6e8488SAndroid Build Coastguard Worker
1543*5a6e8488SAndroid Build Coastguard WorkerThis is the fourth release candidate for 1.0. It fixes a few bugs in 1.0 Release
1544*5a6e8488SAndroid Build Coastguard WorkerCandidate 3.
1545*5a6e8488SAndroid Build Coastguard Worker
1546*5a6e8488SAndroid Build Coastguard Worker## 1.0 Release Candidate 3
1547*5a6e8488SAndroid Build Coastguard Worker
1548*5a6e8488SAndroid Build Coastguard WorkerThis is the third release candidate for 1.0. It fixes a few bugs in 1.0 Release
1549*5a6e8488SAndroid Build Coastguard WorkerCandidate 2.
1550*5a6e8488SAndroid Build Coastguard Worker
1551*5a6e8488SAndroid Build Coastguard Worker## 1.0 Release Candidate 2
1552*5a6e8488SAndroid Build Coastguard Worker
1553*5a6e8488SAndroid Build Coastguard WorkerThis is the second release candidate for 1.0. It fixes a few bugs in 1.0 Release
1554*5a6e8488SAndroid Build Coastguard WorkerCandidate 1.
1555*5a6e8488SAndroid Build Coastguard Worker
1556*5a6e8488SAndroid Build Coastguard Worker## 1.0 Release Candidate 1
1557*5a6e8488SAndroid Build Coastguard Worker
1558*5a6e8488SAndroid Build Coastguard WorkerThis is the first Release Candidate for 1.0. `bc` is complete, with `dc`, but it
1559*5a6e8488SAndroid Build Coastguard Workeris not tested.
1560*5a6e8488SAndroid Build Coastguard Worker
1561*5a6e8488SAndroid Build Coastguard Worker## 0.5
1562*5a6e8488SAndroid Build Coastguard Worker
1563*5a6e8488SAndroid Build Coastguard WorkerThis beta release completes more features, but it is still not complete nor
1564*5a6e8488SAndroid Build Coastguard Workertested as thoroughly as necessary.
1565*5a6e8488SAndroid Build Coastguard Worker
1566*5a6e8488SAndroid Build Coastguard Worker## 0.4.1
1567*5a6e8488SAndroid Build Coastguard Worker
1568*5a6e8488SAndroid Build Coastguard WorkerThis beta release fixes a few bugs in 0.4.
1569*5a6e8488SAndroid Build Coastguard Worker
1570*5a6e8488SAndroid Build Coastguard Worker## 0.4
1571*5a6e8488SAndroid Build Coastguard Worker
1572*5a6e8488SAndroid Build Coastguard WorkerThis is a beta release. It does not have the complete set of features, and it is
1573*5a6e8488SAndroid Build Coastguard Workernot thoroughly tested.
1574*5a6e8488SAndroid Build Coastguard Worker
1575*5a6e8488SAndroid Build Coastguard Worker[1]: https://docs.microsoft.com/en-us/windows/wsl/install-win10
1576*5a6e8488SAndroid Build Coastguard Worker[2]: https://pkg.musl.cc/bc/
1577*5a6e8488SAndroid Build Coastguard Worker[3]: http://lcamtuf.coredump.cx/afl/
1578*5a6e8488SAndroid Build Coastguard Worker[4]: ./scripts/karatsuba.py
1579*5a6e8488SAndroid Build Coastguard Worker[5]: ./README.md
1580*5a6e8488SAndroid Build Coastguard Worker[6]: ./configure.sh
1581*5a6e8488SAndroid Build Coastguard Worker[7]: https://github.com/rain-1/linenoise-mob
1582*5a6e8488SAndroid Build Coastguard Worker[8]: https://github.com/antirez/linenoise
1583*5a6e8488SAndroid Build Coastguard Worker[9]: ./manuals/bc/A.1.md
1584*5a6e8488SAndroid Build Coastguard Worker[10]: ./manuals/dc/A.1.md
1585*5a6e8488SAndroid Build Coastguard Worker[11]: https://scan.coverity.com/projects/gavinhoward-bc
1586*5a6e8488SAndroid Build Coastguard Worker[12]: ./scripts/locale_install.sh
1587*5a6e8488SAndroid Build Coastguard Worker[13]: ./manuals/build.md
1588*5a6e8488SAndroid Build Coastguard Worker[14]: https://github.com/stesser
1589*5a6e8488SAndroid Build Coastguard Worker[15]: https://github.com/bugcrazy
1590*5a6e8488SAndroid Build Coastguard Worker[16]: ./manuals/bc/A.1.md#extended-library
1591*5a6e8488SAndroid Build Coastguard Worker[17]: https://github.com/skeeto/optparse
1592*5a6e8488SAndroid Build Coastguard Worker[18]: https://www.deepl.com/translator
1593*5a6e8488SAndroid Build Coastguard Worker[19]: ./manuals/benchmarks.md
1594*5a6e8488SAndroid Build Coastguard Worker[20]: https://github.com/apjanke/ronn-ng
1595*5a6e8488SAndroid Build Coastguard Worker[21]: https://pandoc.org/
1596*5a6e8488SAndroid Build Coastguard Worker[22]: ./scripts/locale_uninstall.sh
1597