
/* Implementation of CustomObject class
 *
 * Copyright (C)  1993  The Board of Trustees of  
 * The Leland Stanford Junior University.  All Rights Reserved.
 *
 * This file is part of an Objective-C class library for a window system
 *
 * Original author: Imran Qureshi
 * Additional author: Paul Kunz
 * 
 * CustomObject.m,v 1.14 1995/06/13 21:49:36 briggs Exp
 */

#include "CustomObject.h"
#include <stdlib.h>

/* From Application.m */
extern id  nibOwner;


/* Add an archiving category to object so every object can respond to
   -nibInstantiate
*/
@implementation Object(XmArchiving)
-nibInstantiate
{
	return self;
}
@end
 
@implementation CustomObject
- init
{	
	Class	theClass;

	if (realObject) {
		fprintf(stderr, "CustomObject: object already exists\n");
		return self;
	}
	if (strcmp(realClassName,"FileOwner")==0) {
		realObject = nibOwner;
		return self;
	}
	
		
	theClass = objc_get_class(realClassName);
	realObject = [[theClass alloc] init];
	return self;
} 

- write:(TypedStream *)stream
{
	[super write:stream];
	objc_write_type(stream,"*", realClassName);
	return self;
}
- read:(TypedStream *)stream
{
	[super read:stream];
	objc_read_type(stream,"*",&realClassName);
	return self;

}
- awake
{
	if (amAwake) {
		printf("CustomObject alert: -awake called more than once");
		return self;
	}
	amAwake = YES;
	[self init];

	return self;
}
-awakeFromNib
{
	if ( [realObject respondsTo:@selector(awakeFromNib)] ) {
		 [realObject awakeFromNib];
	}
	return self;
}
-nibInstantiate
{
	 return realObject;
}

@end
