mirror of
https://github.com/lcn2/calc.git
synced 2025-08-19 01:13:27 +03:00
87 lines
2.1 KiB
Plaintext
87 lines
2.1 KiB
Plaintext
#!/usr/local/src/bin/calc/calc -q -s -f
|
|
/*
|
|
* fproduct - write the big Endian product of terms to a file
|
|
*
|
|
* usage:
|
|
* fproduct filename term [term ...]
|
|
*
|
|
* filename where to write the product, use - for stdout
|
|
* term ... terms to multiply
|
|
*
|
|
* Copyright (C) 2001,2014,2019 Landon Curt Noll
|
|
*
|
|
* Calc is open software; you can redistribute it and/or modify it under
|
|
* the terms of the version 2.1 of the GNU Lesser General Public License
|
|
* as published by the Free Software Foundation.
|
|
*
|
|
* Calc is distributed in the hope that it will be useful, but WITHOUT
|
|
* ANY WARRANTY; without even the implied warranty of MERCHANTABILITY
|
|
* or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General
|
|
* Public License for more details.
|
|
*
|
|
* A copy of version 2.1 of the GNU Lesser General Public License is
|
|
* distributed with calc under the filename COPYING-LGPL. You should have
|
|
* received a copy with calc; if not, write to Free Software Foundation, Inc.
|
|
* 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
|
|
*
|
|
* Under source code control: 2001/04/07 20:13:11
|
|
* File existed as early as: 2001
|
|
*
|
|
* chongo <was here> /\oo/\ http://www.isthe.com/chongo/
|
|
* Share and enjoy! :-) http://www.isthe.com/chongo/tech/comp/calc/
|
|
*/
|
|
|
|
/*
|
|
* parse args
|
|
*/
|
|
argc = argv();
|
|
stderr = files(2);
|
|
program = argv(0);
|
|
if (argc < 2) {
|
|
fprintf(stderr, "usage: %s term [term ...]\n", program);
|
|
exit;
|
|
}
|
|
filename = argv(1);
|
|
|
|
|
|
/*
|
|
* build the product
|
|
*/
|
|
product = 1;
|
|
for (i=2; i < argc; ++i) {
|
|
product *= eval(argv(i));
|
|
}
|
|
product = abs(product);
|
|
|
|
|
|
/*
|
|
* open the file for writing, "-" is stdout
|
|
*/
|
|
if (filename == "-") {
|
|
fd = files(1);
|
|
} else {
|
|
fd = fopen(filename, "w");
|
|
if (!isfile(fd)) quit "be2file: cannot open file for writing";
|
|
}
|
|
|
|
|
|
/*
|
|
* write the octets to the file
|
|
*
|
|
* The most significant bits of the integer become the first file octets.
|
|
*/
|
|
if (product > 0) {
|
|
octlen = int((highbit(product)+8) / 8);
|
|
for (i=octlen-1; i >= 0; --i) {
|
|
fputc(fd, char(product >> (i*8)));
|
|
}
|
|
}
|
|
|
|
|
|
/*
|
|
* cleanup
|
|
*/
|
|
if (filename != "-") {
|
|
fclose(fd);
|
|
}
|