home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
Photo CD Demo 1
/
Demo.bin
/
gle
/
gle
/
bitmap.h
< prev
next >
Wrap
C/C++ Source or Header
|
1992-11-29
|
3KB
|
123 lines
#ifdef __TURBOC__
#include <alloc.h>
#endif
#include "all.h"
#include <math.h>
#include "core.h"
#include "mygraph.h"
#include "mydev.h"
#ifndef __TURBOC__
#define huge
#endif
#define true (!false)
#define false 0
unsigned char (huge *bitmap)[NXBITS/8+2];
int d_open(double x, double y);
extern int gdebug;
extern int nxbits,nybits;
#define dbg if (gdebug==true)
int bitmap_print(void);
int bitmap_free(void);
int bitmap_alloc(void);
int bitmap_paint(int row, int x1, int x2);
int printmem(char *x,int n);
#ifdef aix
void pprintf(va_list);
#else
void pprintf(va_list arg_list, ...);
#endif
int dvitype(void);
/*--------------------------------------------------------------*/
/* Bitmap output for EPSON printers */
/*--------------------------------------------------------------*/
int bitmap_print(void);
char *bitmap_line(int y);
int bitmap_size(int *xbits, int *ybits, double *width, double *height);
bitmap_size(int *xbits, int *ybits, double *width, double *height)
{
*xbits = NXBITS; *ybits = NYBITS; *width = XSIZECM; *height = YSIZECM;
}
int print_row(int i);
bitmap_free(void)
{
if (bitmap==NULL) return;
#ifdef __TURBOC__
farfree(bitmap);
#else
free(bitmap);
#endif
bitmap = 0;
}
bitmap_alloc(void)
{
long bsize;
if (bitmap!=NULL) return;
bsize = ((long) nybits+1)*(NXBITS/8+2);
#ifdef __TURBOC__
bitmap = farcalloc(nybits+1,NXBITS/8 +2);
printf("Core memory left %ld, just used %ld %d %d \n"
,coreleft(),bsize,NXBITS,nybits);
#else
bitmap = calloc(nybits+1,(NXBITS/8+2));
#endif
dbg printf("bitmap allocated %p \n",bitmap);
if (bitmap==0) gle_abort("Not able to allocate bitmap \n");
}
unsigned int grey_bits[] = {0x0000, 0x0200, 0x0802, 0x0a02,
0x5050, 0x5250, 0x5852, 0x5a52,
0xa5a5, 0xa7a5, 0xada7, 0xafa7,
0xf5f5, 0xf7f5, 0xfdf7, 0xfff7, 0xffff};
unsigned int cur_bits[4];
#define NGREY 17
set_grey(float f)
{
int i,j,m;
i = (1.0-f)*(NGREY-.8);
m = grey_bits[i];
for (j=0; j<4; j++) {
cur_bits[j] = m & 0x000f;
m = m >> 4;
}
}
bitmap_paint(int row, int x1, int x2)
{
int i,xm,ym,xadd=0;
x1-=1; x2-=1;
if (x1<0) x1 = 0;
if (x2>=nxbits) x2 = nxbits-1;
dbg printf("paint row,%d %d %d \n",row,x1,x2);
ym = row % 4;
if ((row & 4)>0) xadd = 1;
for (;x1<=x2;x1++) {
xm = 1 << ((x1+xadd) % 4);
if ((cur_bits[ym] & xm)!=0) {
i = bitmap[row][x1/8];
bitmap[row][x1/8] = i | (1 << (x1 % 8));
}
}
}
char *bitmap_line(int y)
{
return &bitmap[y][0];
}
bitmap_pixel(int x, int y)
{
static char *line;
static int ly= -2;
/* if (x<0 || x>nxbits || y < 0 || y > nybits) return; */
if (ly!=y) line = &bitmap[y][0];
line[x/8] |= (1 << (x % 8));
ly = y;
}