/* Catacomb Armageddon Source Code * Copyright (C) 1993-2014 Flat Rock Software * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program 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 General Public License for more details. * * You should have received a copy of the GNU General Public License along * with this program; if not, write to the Free Software Foundation, Inc., * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. */ #include #include #include #include #include #include #include #include #include "def.h" #include "gelib.h" #include "jam_io.h" //---------------------------------------------------------------------------- // // PTR/PTR COMPRESSION ROUTINES // // //---------------------------------------------------------------------------- //--------------------------------------------------------------------------- // WritePtr() -- Outputs data to a particular ptr type // // PtrType MUST be of type DEST_TYPE. // // NOTE : For PtrTypes DEST_MEM a ZERO (0) is always returned. // //--------------------------------------------------------------------------- char WritePtr(long outfile, unsigned char data, unsigned PtrType) { int returnval = 0; switch (PtrType & DEST_TYPES) { case DEST_FILE: write(*(int far *)outfile,(char *)&data,1); break; case DEST_FFILE: returnval = putc(data, *(FILE **)outfile); break; case DEST_IMEM: printf("WritePtr - unsupported ptr type\n"); exit(0); break; case DEST_MEM: *((char far *)*(char far **)outfile)++ = data; break; } return(returnval); } //--------------------------------------------------------------------------- // ReadPtr() -- Reads data from a particular ptr type // // PtrType MUST be of type SRC_TYPE. // // RETURNS : // The char read in or EOF for SRC_FFILE type of reads. // // //--------------------------------------------------------------------------- int ReadPtr(long infile, unsigned PtrType) { int returnval = 0; switch (PtrType & SRC_TYPES) { case SRC_FILE: read(*(int far *)infile,(char *)&returnval,1); break; case SRC_FFILE: returnval = getc(*(FILE far **)infile ); break; case SRC_BFILE: returnval = bio_readch((BufferedIO *)*(void far **)infile); break; // case SRC_IMEM: // printf("WritePtr - unsupported ptr type\n"); // exit(0); // break; case SRC_MEM: returnval = (unsigned char)*((char far *)*(char far **)infile)++; break; } return(returnval); }