Beispiel #1
0
GBWindow::GBWindow(GBView * contents, short left, short top, bool vis)
	: showGrowBox(false), //TODO
	window(nil),
	view(contents),
	visible(vis)
{
	Rect bounds;
	bounds.left = left;
	bounds.top = top;
	bounds.right = left + view->PreferredWidth();
	bounds.bottom = top + view->PreferredHeight();
	Str255 s;
	ToPascalString(view->Name(), s);
	view->SetBounds(GBRect(0, 0, view->PreferredWidth(), view->PreferredHeight()));
	if ( CreateNewWindow(kDocumentWindowClass,
			view->Resizable() ? kWindowStandardDocumentAttributes
				: (kWindowCloseBoxAttribute | kWindowCollapseBoxAttribute),
			&bounds, &window) )
		throw GBOutOfMemoryError();
	SetWTitle(window, s);
	SetWRefCon(window, (long)this);
	SetWindowKind(window, kMacWindowKind);
	view->SetGraphics(&graphics);
	if ( vis )
		ShowWindow(window);
}
Beispiel #2
0
void GBStackBrain::WriteLocalMemory(GBStackAddress addr, GBStackDatum val, GBRobot * robot) {
	if ( addr < 1 || addr > robot->hardware.Memory() ) throw GBIndexOutOfRangeError();
	if ( ! memory ) {
		if ( ! robot->hardware.Memory() ) return; // fail silently
		memory = new GBStackDatum[robot->hardware.Memory()];
		if ( ! memory ) throw GBOutOfMemoryError();
	}
	memory[addr - 1] = val;
}
Beispiel #3
0
GBStackBrain::GBStackBrain(const GBStackBrainSpec * spc)
	: spec(spc),
	pc(spc->StartAddress()),
	variables(new GBStackDatum[spc->NumVariables()]),
	vectorVariables(new GBVector[spc->NumVectorVariables()]),
	stack(new GBStackDatum[kStackLimit]), stackHeight(0),
	returnStack(new GBStackAddress[kReturnStackLimit]), returnStackHeight(0),
	memory(nil),
	used(0), remaining(0),
	lastPrint(nil)
{
	if ( ! variables || ! vectorVariables || ! stack || ! returnStack )
		throw GBOutOfMemoryError();
	GBSymbolIndex i;
	for ( i = 0; i < spc->NumVariables(); i ++ )
		variables[i] = spc->ReadVariable(i);
	for ( i = 0; i < spc->NumVectorVariables(); i ++ )
		vectorVariables[i] = spc->ReadVectorVariable(i);
}