// Program name: cffolder.cpp // Programmed by: Anthony Barbachan // Programmed in: C++ (Turbo C++ 3.0 Compatable) // Purpose: Source file for a cabinet file folder object. // Version: 1.00 // Last modified on: 11/5/1998 // Version: 1.00a // Last modified on: 11/29/1998 // Changes: Set status variable. // Version: 1.00b // Last modified on: 12/6/1998 // Changes: Modified error checking code to check for short reads as well. // Version: 2.00 // Last modification date: 10-18-1999 // Changes: Replaced code with new classes' code. #ifndef __CFFOLDER_CPP__ #define __CFFOLDER_CPP__ #include #include "cftypes.h" #include "cfheader.h" #include "cffolder.h" ////////////////////////////////////////**************************************** Error cabinet_folder_fixed_header::read(istream& in) { return (in.read((char *) this, sizeof(*this)).bad()) ? ((in.fail()) ? READ_ERROR : UNEXPECTED_EOF) : OK; } ////////////////////////////////////////**************************************** Error cabinet_folder_fixed_header::write(ostream& out) { return (out.write((char *) this, sizeof(*this)).fail()) ? WRITE_ERROR : OK; } ////////////////////////////////////////**************************************** void cabinet_folder_header::init(cabinet_header& cab_header) { clear(); if(cab_header.has_reserved_area()) // If reserve present { if(cab_header.get_folder_ra_size()) // If folder reserve present { ra_size = cab_header.get_folder_ra_size(); reserved_area = new byte[ra_size]; memset(reserved_area, 0, ra_size); } } } ////////////////////////////////////////**************************************** Error cabinet_folder_header::read(istream& in, cabinet_header& cab_header) { Error err = OK; clear(); if((err = cabinet_folder_fixed_header::read(in)) != OK) return err; if(cab_header.has_reserved_area()) // If reserve present { if(cab_header.get_folder_ra_size()) // If folder reserve present { ra_size = cab_header.get_folder_ra_size(); reserved_area = new byte[ra_size]; if(in.read((char*)reserved_area, ra_size).bad()) { return (in.fail()) ? READ_ERROR : UNEXPECTED_EOF; } } } return OK; } ////////////////////////////////////////**************************************** Error cabinet_folder_header::write(ostream& out) { Error err = OK; if((err = cabinet_folder_fixed_header::write(out)) != OK) return err; if(ra_size) // If reserved area present { if(out.write((char*)reserved_area, ra_size).fail()) { return WRITE_ERROR; } } return OK; } ////////////////////////////////////////**************************************** #endif