#!/usr/bin/calc -q -f
/*
 * fproduct - write the big Endian product of terms to a file
 *
 * Copyright (C) 2001,2014,2019,2021  Landon Curt Noll
 *
 * usage:
 *      fproduct filename term [term ...]
 *
 *      filename        where to write the product, use - for stdout
 *      term ...        terms to multiply
 *
 * 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);
}
