mirror of
https://github.com/lcn2/calc.git
synced 2025-08-19 01:13:27 +03:00
89 lines
2.2 KiB
Plaintext
89 lines
2.2 KiB
Plaintext
#!/usr/local/src/cmd/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 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.
|
|
* 59 Temple Place, Suite 330, Boston, MA 02111-1307, USA.
|
|
*
|
|
* @(#) $Revision: 29.2 $
|
|
* @(#) $Id: fproduct.calc,v 29.2 2001/06/06 09:06:29 chongo Exp $
|
|
* @(#) $Source: /usr/local/src/cmd/calc/cscript/RCS/fproduct.calc,v $
|
|
*
|
|
* 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();
|
|
if (argc < 2) {
|
|
fprintf(files(2), "usage: %s term [term ...]\n", argv(0));
|
|
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);
|
|
}
|