⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 intfile.cal

📁 Calc Software Package for Number Calc
💻 CAL
字号:
/* * intfile - integer to file and file to integer conversion * * 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.5 $ * @(#) $Id: intfile.cal,v 29.5 2001/04/10 22:09:34 chongo Exp $ * @(#) $Source: /usr/local/src/cmd/calc/cal/RCS/intfile.cal,v $ * * Under source code control:   2001/03/31 08: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/ *//* * NOTE: Because leading HALF values are trimmed from integer, a file *	 that begins with lots of 0 bits (in the case of big endian) *	 or that ends with lots of 0 bits (in the case of little endian) *	 will be changed when the subsequent integer is written back. *//* * file2be - convert a file into an big endian integer * * given: *	filename	filename to read * * returns: *	integer read from its contents on big endian order */define file2be(filename){    local fd;	/* open file */    local ret;	/* integer to return */    local c;	/* character read from the file */    local i;    /*     * open the file for reading     */    fd = fopen(filename, "rb");    if (!isfile(fd)) quit "file2be: cannot open file for reading";    /*     * read the contents of the file     *     * The first octets become the most significant bits of the integer.     */    ret = 0;    while (! isnull(c = fgetc(fd))) {	ret <<= 8;	ret += ord(c);    }    /*     * cleanup and return the integer     */    fclose(fd);    return ret;}/* * file2le - convert a file into an little endian integer * * given: *	filename	filename to read * * returns: *	integer read from its contents on little endian order */define file2le(filename){    local fd;	/* open file */    local ret;	/* integer to return */    local c;	/* character read from the file */    local shft;	/* bit shift for the c value */    local i;    /*     * open the file for reading     */    fd = fopen(filename, "rb");    if (!isfile(fd)) quit "file2le: cannot open file for reading";    /*     * read the contents of the file into a string     *     * The first octets become are the least significant bits of the integer.     */    ret = 0;    shft = 0;    while (! isnull(c = fgetc(fd))) {	ret |= (ord(c) << shft);	shft += 8;    }    /*     * cleanup and return the integer     */    fclose(fd);    return ret;}/* * be2file - convert a big endian integer into a file * * given: *	v		integer to write to the file *	filename	filename to write * * returns: *	The number of octets written to the file. * * NOTE: The absolute value of the integer is written to the file. */define be2file(v, filename){    local fd;		/* open file */    local octlen;	/* length of v in octets */    local i;    /*     * firewall     */    if (!isint(v)) {	quit "be2file: 1st arg not an integer";    }    v = abs(v);    /*     * open the file for writing     */    fd = fopen(filename, "wb");    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.     */    octlen = int((highbit(v)+8) / 8);    for (i=octlen-1; i >= 0; --i) {    	fputc(fd, char(v >> (i*8)));    }    /*     * cleanup     */    fclose(fd);    return octlen;}/* * le2file - convert a little endian integer into a file * * given: *	v		integer to write to the file *	filename	filename to write * * returns: *	The number of octets written to the file. * * NOTE: The absolute value of the integer is written to the file. */define le2file(v, filename){    local fd;	/* open file */    local cnt;	/* octets written */    /*     * firewall     */    if (!isint(v)) {	quit "be2file: 1st arg not an integer";    }    v = abs(v);    /*     * open the file for writing     */    fd = fopen(filename, "wb");    if (!isfile(fd)) quit "le2file: cannot open file for writing";    /*     * Write the octets to the file.     *     * The least significant bits of the integer become the first file octets.     */    cnt = 0;    while (v > 0) {	fputc(fd, char(v));	v >>= 8;	++cnt;    }    /*     * cleanup     */    fclose(fd);    return cnt;}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -