Thread View: gnu.g++.bug
2 messages
2 total messages
Started by Webster Dove
Sun, 02 Oct 1988 23:35
Haven't been able to compile InterViews-2.3 since g++-1.22.2
Author: Webster Dove
Date: Sun, 02 Oct 1988 23:35
Date: Sun, 02 Oct 1988 23:35
421 lines
9892 bytes
9892 bytes
InterViews caused g++-1.25.0 to core dump. It seems to generate spurious
error messages on g++-1.27.0.
Has anyone out there gotten it compiled with anything more recent than
1.22.2?
Could InterViews be used by the developers as an additional test suite
beyond what is in libg++-1.25.0?
With g++-1.27.0 compiling InterViews-2.3/src/lib/bitmap.c I get the
following errors. (The code is at the end of the message.)
---------
g++ -c -I.. -DX11 -O -finline-functions ../bitmap.c
use .cc filename extension!
In function struct Bitmap *Bitmap::Bitmap (short int *, int, int):
../bitmap.c:37: too few arguments for constructor `Bitmap'
../bitmap.c:37: no default constructor defined for type `Bitmap'
In function struct Bitmap *Bitmap::Bitmap (struct Bitmap *):
../bitmap.c:48: too few arguments for constructor `Bitmap'
../bitmap.c:48: no default constructor defined for type `Bitmap'
In function struct Bitmap *Bitmap::Bitmap (const char *):
../bitmap.c:292: too few arguments for constructor `Bitmap'
../bitmap.c:292: no default constructor defined for type `Bitmap'
*** Error code 1
----- bitmap.h
/*
* Bitmap - Bit map for InterViews
*/
#ifndef bitmap_h
#define bitmap_h
#include <InterViews/defs.h>
#include <InterViews/resource.h>
class Canvas;
class Color;
class Font;
class Transformer;
class Bitmap : public Resource {
void * bitmap;
void * pixmap;
short * data;
int width;
int height;
Coord x0;
Coord y0;
Color * foreground;
Color * background;
void Init();
void FreeMaps();
int Index( int x, int y ) { return (width+15)/16 * (height-y-1) + x/16; }
short Bit( int x, int ) { return 1 << ( x%16 ); }
boolean Valid( int x, int y ) {
return ! (x < 0 || x >= width || y < 0 || y >= height);
}
public:
Bitmap(const char * filename); // bitmap(1) file
Bitmap(short *, int width, int height); // raw data
Bitmap(Bitmap *); // copy
~Bitmap();
void Draw(Canvas *);
int Width();
int Height();
void SetColors(Color * f, Color * b);
Color * GetFgColor();
Color * GetBgColor();
void Transform(Transformer *);
void Scale(float x, float y);
void Rotate(float);
void SetOrigin(int x0, int y0);
void GetOrigin(int& x0, int& y0);
void FlipHorizontal();
void FlipVertical();
void Rotate90();
void Invert();
boolean Peek(int x, int y);
void Poke(boolean bit, int x, int y);
};
#endif
--------- bitmap.c
/*
* Bitmap - Bit map for InterViews
*/
#include <InterViews/bitmap.h>
#include <InterViews/transformer.h>
#include <InterViews/Xwindow.h>
#include <InterViews/Xoutput.h>
#include <InterViews/paint.h>
#include <InterViews/canvas.h>
extern void bcopy( void * src, void * dst, int count );
extern void bzero( void * dst, int count );
#ifdef X10
# define DoFreePixmap(p) XFreePixmap(p)
#endif
#ifdef X11
# define DoFreePixmap(p) XFreePixmap(_World_dpy, p)
# define BitmapSize(w, h) \
((w)*(h)*XBitmapUnit(_World_dpy) + XBitmapPad(_World_dpy) - 1) >> 3
#endif
Bitmap::Bitmap( short * d, int w, int h ) {
Init();
width = w;
height = h;
int size = BitmapSize( w, h );
data = new short[ size/2 ];
if ( d != nil ) {
bcopy( d, data, size );
} else {
bzero( data, size );
}
}
Bitmap::Bitmap( Bitmap * b ) {
Init();
width = b->width;
height = b->height;
if ( b->data != nil ) {
int size = BitmapSize(width,height);
data = new short[ size/2 ];
bcopy( b->data, data, size );
}
}
void Bitmap::Init() {
x0 = 0;
y0 = 0;
width = 0;
height = 0;
data = nil;
bitmap = nil;
pixmap = nil;
foreground = black;
background = white;
}
Bitmap::~Bitmap() {
FreeMaps();
delete data;
}
int Bitmap::Width() { return width; }
int Bitmap::Height() { return height; }
void Bitmap::SetColors(Color * fg, Color * bg ) {
if ( fg != foreground ) {
if ( pixmap != nil ) {
DoFreePixmap(pixmap);
pixmap = nil;
}
foreground = fg;
}
if ( bg != background ) {
if ( pixmap != nil ) {
DoFreePixmap(pixmap);
pixmap = nil;
}
background = bg;
}
}
Color * Bitmap::GetFgColor() {
return foreground;
}
Color * Bitmap::GetBgColor() {
return background;
}
void Bitmap::Transform(Transformer * t) {
int x1 = 0, y1 = 0;
int x2 = 0, y2 = height-1;
int x3 = width-1, y3 = height-1;
int x4 = width-1, y4 = 0;
t->Transform( x1, y1 );
t->Transform( x2, y2 );
t->Transform( x3, y3 );
t->Transform( x4, y4 );
t->Invert();
int xmax = max(x1,max(x2,max(x3,x4)));
int xmin = min(x1,min(x2,min(x3,x4)));
int ymax = max(y1,max(y2,max(y3,y4)));
int ymin = min(y1,min(y2,min(y3,y4)));
Bitmap * b = new Bitmap( nil, xmax-xmin+1, ymax-ymin+1 );
for ( int x = xmin; x <= xmax; ++x ) {
for ( int y = ymin; y <= ymax; ++y ) {
int xx = x;
int yy = y;
t->Transform( xx, yy );
b->Poke( Peek(xx,yy), x-xmin, y-ymin );
}
}
delete data;
data = b->data;
width = b->width;
height = b->height;
b->data = nil;
delete b;
FreeMaps();
}
void Bitmap::Scale(float sx, float sy) {
Transformer * t = new Transformer;
t->Scale(sx,sy);
Transform(t);
delete t;
}
void Bitmap::Rotate(float angle) {
Transformer * t = new Transformer;
t->Rotate(angle);
Transform(t);
delete t;
}
void Bitmap::SetOrigin(int x, int y) {
x0 = x;
y0 = y;
}
void Bitmap::GetOrigin(int &x, int &y ) {
x = x0;
y = y0;
}
void Bitmap::FlipHorizontal() {
for ( int x = 0; x < width/2; ++x ) {
for ( int y = 0; y < height; ++y ) {
boolean bit = Peek( x, y );
Poke( Peek( width-x-1, y ), x, y );
Poke( bit, width-x-1, y );
}
}
FreeMaps();
}
void Bitmap::FlipVertical() {
for ( int x = 0; x < width; ++x ) {
for ( int y = 0; y < height/2; ++y ) {
boolean bit = Peek( x, y );
Poke( Peek( x, height-y-1 ), x, y );
Poke( bit, x, height-y-1 );
}
}
FreeMaps();
}
void Bitmap::Invert() {
for ( int x = 0; x < width; ++x ) {
for ( int y = 0; y < height; ++y ) {
Poke( !Peek(x,y), x, y );
}
}
FreeMaps();
}
void Bitmap::Rotate90() {
Bitmap * b = new Bitmap( nil, height, width );
for ( int x = 0; x < width; ++x ) {
for ( int y = 0; y < height; ++y ) {
b->Poke( Peek(x,y), width-y-1, x );
}
}
delete data;
data = b->data;
b->data = nil;
width = b->width;
height = b->height;
delete b;
FreeMaps();
}
boolean Bitmap::Peek( int x, int y ) {
if ( Valid(x,y) ) {
return (data[Index(x,y)] & Bit(x,y)) != 0;
} else {
return false;
}
}
void Bitmap::Poke( boolean bit, int x, int y ) {
if ( Valid(x,y) ) {
if ( bit ) {
data[Index(x,y)] |= Bit(x,y);
} else {
data[Index(x,y)] &= ~Bit(x,y);
}
}
}
#ifdef X10
extern int XReadBitmapFile(
const char * filename,
int& width, int& height, short*& data,
int *x_hot, int *y_hot
);
Bitmap::Bitmap( const char * filename ) {
Init();
XReadBitmapFile(filename, width, height, data, nil, nil);
}
void Bitmap::FreeMaps() {
if ( bitmap != nil ) {
XFreeBitmap( bitmap );
bitmap = nil;
}
if ( pixmap != nil ) {
DoFreePixmap( pixmap );
pixmap = nil;
}
}
void Bitmap::Draw( Canvas * c ) {
if ( bitmap == nil && data != nil ) {
bitmap = XStoreBitmap( width, height, data );
}
if ( pixmap == nil && bitmap != nil ) {
pixmap = XMakePixmap( bitmap,
foreground->PixelValue(), background->PixelValue()
);
}
int xx = x0 - c->left;
int yy = (c->height - 1) - (height - 1) - (y0 - c->bottom);
if ( pixmap != nil ) {
XPixmapPut(c->id,
0, 0, xx, yy, width, height,
pixmap, GXcopy, AllPlanes
);
} else {
XPixSet(c->id, xx, yy, width, height, background->PixelValue());
if ( bitmap != nil ) {
XPixFill(c->id,
xx, yy, width, height, foreground->PixelValue(),
bitmap, GXcopy, AllPlanes
);
}
}
}
#endif
#ifdef X11
extern int XReadBitmapFile(
XDisplay *, XDrawable, const char *,
int& width, int& height, XPixmap&,
int * x_hot, int * y_hot
);
extern XPixmap XCreateBitmapFromData(
XDisplay*, XDrawable, void *, int, int
);
Bitmap::Bitmap( const char * filename ) {
Init();
XReadBitmapFile(
_World_dpy, _World_root, filename, width, height, pixmap, nil, nil
);
}
void Bitmap::FreeMaps() {
if ( pixmap != nil ) {
DoFreePixmap( pixmap );
pixmap = nil;
}
}
void Bitmap::Draw( Canvas * c ) {
if ( pixmap == nil && data != nil ) {
pixmap = XCreateBitmapFromData(
_World_dpy, _World_root, data, width, height
);
}
if ( pixmap != nil ) {
int xx = x0;
int yy = (c->height - 1) - (height - 1) - y0;
Xgc gc = XCreateGC(_World_dpy, _World_root, 0, nil);
XSetForeground(_World_dpy, gc, foreground->PixelValue());
XSetBackground(_World_dpy, gc, background->PixelValue());
XCopyArea(
_World_dpy, pixmap, c->id, gc, 0, 0, width, height, xx, yy
);
c->WaitForCopy();
}
}
#endif
Re: Haven't been able to compile InterViews-2.3 since g++-1.22.2
Author: ekrell
Date: Mon, 03 Oct 1988 12:23
Date: Mon, 03 Oct 1988 12:23
40 lines
1367 bytes
1367 bytes
if you read a message I sent a while ago, you'll find the changes that
are needed to compile InterViews 2.3 with g++ 1.25. The ones to bitmap.c
are:
*** old/bitmap.c Mon Sep 5 17:58:25 1988
--- bitmap.c Thu Sep 15 13:51:28 1988
***************
*** 11,17 ****
return (x >= 0 && x < width && y >= 0 && y < height);
}
! Bitmap::Bitmap (void* d, int w, int h) {
Init();
width = w;
height = h;
--- 11,17 ----
return (x >= 0 && x < width && y >= 0 && y < height);
}
! Bitmap::Bitmap (void* d, int w, int h) : () {
Init();
width = w;
height = h;
***************
*** 24,30 ****
}
}
! Bitmap::Bitmap (Bitmap* b) {
Init();
width = b->width;
height = b->height;
--- 24,30 ----
}
}
! Bitmap::Bitmap (Bitmap* b) : () {
Init();
width = b->width;
height = b->height;
Thread Navigation
This is a paginated view of messages in the thread with full content displayed inline.
Messages are displayed in chronological order, with the original post highlighted in green.
Use pagination controls to navigate through all messages in large threads.
Back to All Threads