// ------------------------------- // // -------- Start of File -------- // // ------------------------------- // // ----------------------------------------------------------- // // C++ Source Code File Name: testprog.cpp // Compiler Used: MSVC, BCC32, GCC, HPUX aCC, SOLARIS CC // Produced By: glNET Software // File Creation Date: 08/17/1998 // Date Last Modified: 05/25/2001 // Copyright (c) 2001 glNET Software // ----------------------------------------------------------- // // ------------- 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 "gxcrc32.h" #include <iostream.h> #include <iomanip.h> #include <string.h> #include <stdlib.h> char in_file[255]; // Input file void HelpMessage(const char *program_name) { cout << endl; cout << "CRC-32 program." << endl; cerr << "Displays 32-bit CRC for a specified file or string." << endl; cout << "Usage: " << program_name << " [switches] infile" << endl; cout << "Switches: -? = Display this help message." << endl; cout << " -sData = Display 32-bit CRC for a specifed string." << endl; cout << " -t = Write a CRC-32 table to the standard output." << endl; cout << endl; 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 << endl; cout << "CRC-32 = "; cout.setf(ios::uppercase); cout << "0x" << setfill('0') << setw(8) << hex << crc << endl; cout.unsetf(ios::uppercase); exit(0); break; } case 't': makeCRC32(cout); exit(0); break; default: cerr << endl; cerr << "Unknown switch " << argv[i] << endl; cerr << "Exiting..." << endl; cerr << endl; 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 << endl; cout << "You must specify a valid input file name." << endl; cout << endl; return 0; } #if defined (__UNIX__) // In UNIX there is only one file type fstream infile(in_file, ios::in | ios::nocreate); #elif defined (__DOS__) || defined (__WIN32__) // In MS-DOS/Windows there are two file types, text and binary #ifdef __BCC32__ // The BCC 32 ios class does not have an enumeration for "nocreate" fstream infile(in_file, ios::in | ios::binary); #else fstream infile(in_file, ios::in | ios::binary | ios::nocreate); #endif // __BCC32__ #else #error You must define a file system: __DOS__ __WIN32__ or __UNIX__ #endif if(!infile) { cerr << endl; cerr << "Cannot open file: " << in_file << endl; cerr << "Exiting..." << endl; cerr << endl; return 1; } unsigned long crc = calcCRC32(infile); cout << in_file << endl; cout << "CRC-32 = "; cout.setf(ios::uppercase); cout << "0x" << setfill('0') << setw(8) << hex << crc << endl; cout.unsetf(ios::uppercase); infile.close(); return 0; } // ----------------------------------------------------------- // // ------------------------------- // // --------- End of File --------- // // ------------------------------- //