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