// ------------------------------- // // -------- Start of File -------- // // ------------------------------- // // ----------------------------------------------------------- // // C++ Source Code File Name: testprog.cpp // Compiler Used: MSVC, BCC32, GCC, HPUX aCC, SOLARIS CC // Produced By: DataReel Software Development Team // File Creation Date: 08/17/1998 // Date Last Modified: 06/17/2016 // Copyright (c) 2001-2024 DataReel Software Development // ----------------------------------------------------------- // // ------------- Program description and details ------------- // // ----------------------------------------------------------- // /* This library is free software; you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License as published by the Free Software Foundation; either version 2.1 of the License, or (at your option) any later version. This library 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. You should have received a copy of the GNU Lesser General Public License along with this library; if not, write to the Free Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA The CRC32 functions (Cyclic Redundancy Check) are used to calculate a sophisticated checksum based on the algebra of polynomials. The Cyclic Redundancy Check, is a way to detect bit errors that occur during data storage or transmission. The CRC-32 algorithm operates on a block of data as a single large numerical value. The algorithm divides this large value by the CRC-32 polynomial or generator polynomial, leaving the remainder 32-bit, which is the checksum. */ // ----------------------------------------------------------- // #include "gxdlcode.h" #if defined (__USE_ANSI_CPP__) // Use the ANSI Standard C++ library #include <iostream> #include <iomanip> using namespace std; // Use unqualified names for Standard C++ library #else // Use the old iostream library by default #include <iostream.h> #include <iomanip.h> #endif // __USE_ANSI_CPP__ #include <string.h> #include <stdlib.h> #include "gxcrc32.h" char in_file[255]; // Input file void HelpMessage(const char *program_name) { cout << "\n"; cout << "CRC-32 program." << "\n"; cerr << "Displays 32-bit CRC for a specified file or string." << "\n"; cout << "Usage: " << program_name << " [switches] infile" << "\n"; cout << "Switches: -? = Display this help message." << "\n"; cout << " -sData = Display 32-bit CRC for a specified string." << "\n"; cout << " -t = Write a CRC-32 table to the standard output." << "\n"; cout << "\n"; exit(0); } void ProcessArgs(int argc, char *argv[]) // Process the program's argument list { char *sbuf; int i; for(i = 1; i < argc; i++ ) { if(*argv[i] == '-') { char sw = *(argv[i] +1); switch(sw) { case '?' : HelpMessage(argv[0]); break; case 's': { sbuf = &argv[i][2]; unsigned long crc; crc = calcCRC32(sbuf, strlen(sbuf)); cout << sbuf << "\n"; cout << "CRC-32 = "; cout.setf(ios::uppercase); cout << "0x" << setfill('0') << setw(8) << hex << crc << "\n"; cout.unsetf(ios::uppercase); exit(0); break; } case 't': makeCRC32(cout); exit(0); break; default: cerr << "\n"; cerr << "Unknown switch " << argv[i] << "\n"; cerr << "Exiting..." << "\n"; cerr << "\n"; exit(0); break; } } else { strcpy(in_file, argv[i]); } } } int main(int argc,char *argv[]) { // If no argument is given print usage message to the screen if(argc < 2) { HelpMessage(argv[0]); return 0; } // Process the programs command line arguments ProcessArgs(argc, argv); if(in_file[0] == 0 ) { cout << "\n"; cout << "You must specify a valid input file name." << "\n"; cout << "\n"; return 0; } DiskFileB infile(in_file); if(!infile) { cerr << "\n"; cerr << "Cannot open file: " << in_file << "\n"; cerr << "Exiting..." << "\n"; cerr << "\n"; return 1; } unsigned long crc = calcCRC32(infile); cout << in_file << "\n"; cout << "CRC-32 = "; cout.setf(ios::uppercase); cout << "0x" << setfill('0') << setw(8) << hex << crc << "\n"; cout.unsetf(ios::uppercase); infile.df_Close(); return 0; } // ----------------------------------------------------------- // // ------------------------------- // // --------- End of File --------- // // ------------------------------- //