/***************************************************************** * flface.c: FBM Release 1.0 25-Feb-90 Michael Mauldin * * Copyright (C) 1989,1990 by Michael Mauldin. Permission is granted * to use this file in whole or in part for any purpose, educational, * recreational or commercial, provided that this copyright notice * is retained unchanged. This software is available to all free of * charge by anonymous FTP and in the UUNET archives. * * flface.c: * * CONTENTS * write_face (image, stream) * read_face (image, stream, mstr, mlen) * * * EDITLOG * LastEditDate = Mon Jun 25 00:07:38 1990 - Michael Mauldin * LastFileName = /usr2/mlm/src/misc/fbm/flface.c * * HISTORY * 25-Jun-90 Michael Mauldin (mlm@cs.cmu.edu) Carnegie Mellon * Package for Release 1.0 * * 07-Mar-89 Michael Mauldin (mlm) at Carnegie Mellon University * Beta release (version 0.9) mlm@cs.cmu.edu * * 12-Nov-88 Michael Mauldin (mlm) at Carnegie-Mellon University * Created. *****************************************************************/ # include # include # include # include "fbm.h" /**************************************************************** * write_face: Write Bennet Yee's face file format ****************************************************************/ #ifndef lint static char *fbmid = "$FBM flface.c <1.0> 25-Jun-90 (C) 1989,1990 by Michael Mauldin, source \ code available free from MLM@CS.CMU.EDU and from UUNET archives$"; #endif write_face (image, stream) FBM *image; FILE *stream; { register int r, c, word, width, height; register unsigned char *bm; width = image->hdr.cols; height = image->hdr.rows; put_short (BM_MAGIC, stream, BIG); put_short (width, stream, BIG); put_short (height, stream, BIG); for (r=0; rbm[r * image->hdr.rowlen]); for (c=0; c> 1) | (*bm++ ? 0: ((1 << 15))); if ((c&15) == 15) put_short (word, stream, BIG); } if (c&15) { word >>= (16 - (c&15)); put_short (word, stream, BIG); } } return (1); } /**************************************************************** * read_face: Read Bennet Yee's FACE format ****************************************************************/ read_face (image, rfile, mstr, mlen) FBM *image; FILE *rfile; char *mstr; int mlen; { register unsigned char *bmp; register int r, c, word, width, height, rowlen, magic; magic = (NEXTMCH(rfile,mstr,mlen) & 0xff) << 8; magic |= (NEXTMCH(rfile,mstr,mlen) & 0xff); if (magic != BM_MAGIC) { fprintf (stderr, "Bad magic number %04x, not BM format\n", magic); fprintf (stderr, "Next 10 chars:"); for (r=0; r<10; r++) { c = fgetc (rfile); fprintf (stderr, " %03o", c); } fprintf (stderr, "\n"); return (0); } width = get_short (rfile, BIG); height = get_short (rfile, BIG); if (width > 5000 || height > 5000) { fprintf (stderr, "Image too big, bogus width %d or height %d maybe?\n", width, height); return (0); } /* Initialize FBM header and allocate memory for bitmap */ image->hdr.cols = width; image->hdr.rows = height; image->hdr.planes = 1; image->hdr.bits = 1; image->hdr.physbits = 8; image->hdr.rowlen = 16 * ((image->hdr.cols + 15) / 16); image->hdr.plnlen = image->hdr.rowlen * image->hdr.rows; image->hdr.clrlen = 0; image->hdr.aspect = 1.0; image->hdr.title[0] = 0; image->hdr.credits[0] = 0; alloc_fbm (image); /* Now read bits and store them in the proper place in the bitmap */ rowlen = image->hdr.rowlen; for (r=0; rbm[r * rowlen]); for (c=0; c>= 1; } } return (1); }