unit RoomStuff;

interface

	uses
		Palettes, Globals, Utilities, Drawing;

	procedure SortObjects;
	function InsertNewRoom: Boolean;
	procedure FlushRoom (var whichRoom: roomData);
	procedure DoGotoDial;
	function roomFltr (theDlg: DialogPtr; var theEvnt: EventRecord; var itemHit: integer): boolean;
	procedure DoRoomBackInfo (var shouldOpen: Boolean);
	procedure DoRoomCondInfo (var shouldOpen: Boolean);

implementation

	const
		roomCondID = 129;
		roomBackID = 130;

	var
		tempTile: array[0..7] of Integer;
		backNumber: Integer;

{=================================}

	procedure SortObjects;
		var
			holdActive, i, count, itemType: Integer;
			holdRoom: RoomData;
	begin
		FlushRoom(holdRoom);
		count := 0;
		holdActive := oneActive;

		for i := 1 to 16 do
		begin
			itemType := thisRoom.theObjects[i].objectIs;
			if ((itemType <> paintg) and (itemType <> mirror) and (itemType <> window) and (itemType <> 0)) then
			begin
				count := count + 1;
				if (oneActive = i) then
					holdActive := count;
				holdRoom.theObjects[count] := thisRoom.theObjects[i];
				thisRoom.theObjects[i].objectIs := 0;
			end;
		end;

		for i := 1 to 16 do
		begin
			itemType := thisRoom.theObjects[i].objectIs;
			if (itemType <> 0) then
			begin
				count := count + 1;
				if (oneActive = i) then
					holdActive := count;
				holdRoom.theObjects[count] := thisRoom.theObjects[i];
			end;
		end;

		for i := 1 to thisRoom.numberOObjects do
			thisRoom.theObjects[i] := holdRoom.theObjects[i];
		with thisRoom do
			if (count <> numberOObjects) then	{*** Check for agreement}
			begin
				count := 0;						{*** Run a second check}
				for i := 1 to 16 do
					if (theObjects[i].objectIs <> 0) then
						count := count + 1;
				numberOObjects := count;			{*** We'll go with this #}
				if (numberOObjects < 16) then
					for i := numberOObjects + 1 to 16 do
					begin
						theObjects[i].objectIs := 0;	{*** Zero-out excess fields}
						theObjects[i].boundRect := nullRect;
						theObjects[i].amount := 0;
						theObjects[i].extra := 0;
						theObjects[i].isOn := FALSE;
					end;
			end;

		oneActive := holdActive;				{*** Restore active object}
	end;

{=================================}

	function InsertNewRoom;
		var
			i: Integer;
	begin
		InsertNewRoom := FALSE;
		if (thisHouse.numberORooms >= 40) then				{trying to add 41 rooms}
		begin
			GenericAlert(kErrTooManyRooms);
			Exit(InsertNewRoom);
		end;
		thisHouse.theRooms[roomAt] := thisRoom;				{insert room to date}
		if (roomAt < thisHouse.numberORooms) then			{shift only if in middle}
			for i := thisHouse.numberORooms downto roomAt + 1 do
				thisHouse.theRooms[i + 1] := thisHouse.theRooms[i];	{shift rooms right}
		roomAt := roomAt + 1;							{kick active over to right}
		FlushRoom(thisRoom);								{flush new room copy}
		thisHouse.theRooms[roomAt] := thisRoom;				{copy active into house}
		thisHouse.numberORooms := thisHouse.numberORooms + 1;	{one more room}
		InsertNewRoom := TRUE;
	end;

{=================================}

	procedure FlushRoom;
		var
			index: Integer;
			defaultName: Str255;

	begin
		NumToString(roomAt, defaultName);
		defaultName := CONCAT('Room # ', defaultName);

		with whichRoom do
		begin
			roomName := defaultName;
			numberOObjects := 0;
			backPictID := 200;
			for index := 0 to 7 do
				tileOrder[index] := 0;
			animateKind := 0;
			animateNumber := 0;
			animateDelay := 0;
			conditionCode := 0;
			for index := 1 to 16 do
			begin
				theObjects[index].objectIs := 0;
				theObjects[index].boundRect := nullRect;
				theObjects[index].amount := 0;
				theObjects[index].extra := 0;
				theObjects[index].isOn := FALSE;
			end;
		end;
	end;
{=================================}

	procedure DoGotoDial;
		const
			okayBut = 1;
			cancelBut = 2;
			gotoEdit = 3;
			numOfStat = 4;
			currStat = 5;

		var
			leaveDlg: Boolean;
			tempLong: LongInt;
			theDlgPtr: DialogPtr;
			tempRect: Rect;
			cntlType, index, itemHit, tempInt, rightOff, downOff: Integer;
			dlgItem: Handle;
			cntlHand, tempCntlHand: controlhandle;
			strTemp: Str255;

{-------------------------}

		procedure Redraw;
			var
				index: Integer;
		begin
			SetPort(theDlgPtr);     		{Point to our dialog window}
			GetDItem(theDlgPtr, okayBut, cntlType, dlgItem, tempRect);{Get the item handle}
			PenSize(3, 3);  				{Change pen to draw thick default outline}
			InsetRect(tempRect, -4, -4);     	{Draw outside the button by 1 pixel}
			FrameRoundRect(tempRect, 16, 16); {Draw the outline}
			PenNormal;
		end;

{-------------------------}

	begin
		theDlgPtr := GetNewDialog(261, nil, Pointer(-1));
		with theDlgPtr^.portBits do
		begin
			rightOff := rightOffset - bounds.left;
			downOff := downOffset - bounds.top;
		end;
		MoveWindow(theDlgPtr, rightOff, downOff, FALSE);
		ShowWindow(theDlgPtr);
		SelectWindow(theDlgPtr);
		SetPort(theDlgPtr);

		with thisHouse do
		begin
			NumToString(numberORooms, strTemp);
			GetDItem(theDlgPtr, numOfStat, cntlType, dlgItem, tempRect);
			SetIText(dlgItem, strTemp);
		end;

		NumToString(roomAt, strTemp);
		GetDItem(theDlgPtr, currStat, cntlType, dlgItem, tempRect);
		SetIText(dlgItem, strTemp);
		NumToString(roomAt, strTemp);
		GetDItem(theDlgPtr, gotoEdit, cntlType, dlgItem, tempRect);
		SetIText(dlgItem, strTemp);
		SelIText(theDlgPtr, gotoEdit, 0, 3);

		Redraw;
		leaveDlg := FALSE;

		repeat
			ModalDialog(nil, itemHit);
			GetDItem(theDlgPtr, itemHit, cntlType, dlgItem, tempRect);

			if (itemHit = okayBut) then
			begin
				GetDItem(theDlgPtr, gotoEdit, cntlType, dlgItem, tempRect);
				GetIText(dlgItem, strTemp);	{Get the text entered}
				StringToNum(strTemp, tempLong);
				if ((LoWord(tempLong) > 0) and (LoWord(tempLong) < thisHouse.numberORooms + 1)) then
				begin
					leaveDlg := TRUE;
					roomAt := LoWord(tempLong);
				end
				else
				begin
					SysBeep(1);
					NumToString(roomAt, strTemp);
					GetDItem(theDlgPtr, gotoEdit, cntlType, dlgItem, tempRect);
					SetIText(dlgItem, strTemp);
					SelIText(theDlgPtr, gotoEdit, 0, 3);
				end;
			end;

			if (itemHit = cancelBut) then
			begin
				leaveDlg := TRUE;
			end;
		until leaveDlg;

		DisposDialog(theDlgPtr);

		if (toolWndo <> nil) then
			SetPort(toolWndo)
		else
			SetPort(mainWndo);
	end;

{=================================}

	function roomFltr;
		var
			cntlType, index, whichTile, itemDropped: Integer;
			wasPt, newPt: Point;
			dlgItem: Handle;
			thePict: PicHandle;
			tempRect, sameRect, dest, tempRect2: Rect;
			tempByte: SignedByte;

{----------------}

		procedure ClickedInLeftBox;
			var
				index2: Integer;

		begin
			whichTile := (wasPt.h - 17) div 8;
			SetRect(tempRect, 0, 0, 8, 49);		{a tile rect}
			OffsetRect(tempRect, 17 + (whichTile * 8), 83);

			GetMouse(wasPt);
			newPt := wasPt;
			PenPat(gray);
			PenMode(patXOr);
			FrameRect(tempRect);
			while (WaitMouseUp) do
			begin
				GetMouse(newPt);
				if (newPt.h <> wasPt.h) then
				begin
					FrameRect(tempRect);
					OffsetRect(tempRect, newPt.h - wasPt.h, 0);
					FrameRect(tempRect);
					wasPt := newPt;
				end;							{end - if (a)}
			end;							{end - while}
			FrameRect(tempRect);
			PenNormal;
			SetRect(dest, 111, 83, 175, 132);
			if (PtInRect(newPt, dest)) then
			begin
				itemDropped := (newPt.h - 111) div 8;
				if ((itemDropped > -1) and (itemDropped < 8)) then
					tempTile[itemDropped] := whichTile
				else
					SysBeep(1);
			end;
			for index2 := 0 to 7 do
			begin
				SetRect(tempRect, 0, 0, 8, 49);
				OffsetRect(tempRect, 111 + (index2 * 8), 83);
				thePict := GetPicture(300 + tempTile[index2] + (backNumber * 8));
				if (thePict <> nil) then
				begin
					tempByte := HGetState(Handle(thePict));
					HLock(Handle(thePict));
					DrawPicture(thePict, tempRect);
					HSetState(Handle(thePict), tempByte);
				end
				else
				begin
					GenericAlert(kErrGraphicLoad);
				end;
				ReleaseResource(Handle(thePict));
			end;						{end - for}
		end;							{end - if PtInRect}

{----------------}

	begin
		roomFltr := FALSE;	{assume no events}

		if ((theEvnt.what = KeyDown) and (BitAnd(theEvnt.message, CharCodeMask) = $0D)) then
		begin				{'carriage' return hit}
			itemHit := 1;
			roomFltr := TRUE;
		end;

		if (theEvnt.what = MouseDown) then
		begin
			GetMouse(wasPt);
			SetRect(tempRect, 17, 83, 81, 132);
			if (PtInRect(wasPt, tempRect)) then	{tempRect => left tile rect}
				ClickedInLeftBox;
		end;							{end - if mouseDown}

		SetRect(tempRect2, 17, 78, 81, 81);	{erase any old markers}
		EraseRect(tempRect2);
		SetRect(tempRect2, 17, 134, 81, 137);
		EraseRect(tempRect2);

		GetMouse(wasPt);
		SetRect(tempRect, 17, 83, 81, 132);
		if (PtInRect(wasPt, tempRect)) then	{tempRect => left tile rect}
		begin
			whichTile := (wasPt.h - 17) div 8;
			SetRect(tempRect, 0, 0, 8, 49);		{a tile rect}
			OffsetRect(tempRect, 17 + (whichTile * 8), 83);

			tempRect2 := tempRect;			{draw top marker over tile}
			tempRect2.top := tempRect2.top - 5;
			tempRect2.bottom := tempRect2.top + 3;
			ForeColor(redColor);
			PaintRect(tempRect2);
			ForeColor(blackColor);

			tempRect2 := tempRect;			{draw bottom marker under tile}
			tempRect2.bottom := tempRect2.bottom + 5;
			tempRect2.top := tempRect2.bottom - 3;
			ForeColor(redColor);
			PaintRect(tempRect2);
			ForeColor(blackColor);
		end;

	end;

{=================================}

	procedure DoRoomBackInfo;
		const
			okayBut = 1;
			cancelBut = 2;
			backIcon1 = 3;
			backIcon10 = 12;
			backStat = 13;
			tileStat = 14;

		var
			wasPort: GrafPtr;
			leaveDlg: Boolean;
			theDlgPtr: DialogPtr;
			tempRect, wasRect: Rect;
			cntlType, i, i2, itemHit, tempInt, rightOff, downOff: Integer;
			dlgItem: Handle;
			strTemp: Str255;
			backName: array[0..9] of string[18];
			thePict: PicHandle;
			tempRoom: roomData;

{-------------------------}

		procedure Redraw;
			var
				i, width: Integer;
				tempByte: SignedByte;
		begin
			SetPort(theDlgPtr);     		{Point to our dialog window}
			GetDItem(theDlgPtr, okayBut, cntlType, dlgItem, tempRect);{Get the item handle}
			PenSize(3, 3);  				{Change pen to draw thick default outline}
			InsetRect(tempRect, -4, -4);     	{Draw outside the button by 1 pixel}
			FrameRoundRect(tempRect, 16, 16); {Draw the outline}

			GetDItem(theDlgPtr, backNumber + backIcon1, cntlType, dlgItem, tempRect);
			PenSize(2, 2);
			InsetRect(tempRect, -2, -2);
			ForeColor(redColor);
			FrameRect(tempRect);
			ForeColor(blackColor);
			wasRect := tempRect;
			PenNormal;

			with theDlgPtr^.portRect do
				width := right - left;
			MoveTo(4, 38);
			Line(width - 8, 0);
			MoveTo(4, 40);
			Line(width - 8, 0);

			for i := 0 to 7 do
			begin
				SetRect(tempRect, 0, 0, 8, 49);
				OffsetRect(tempRect, 111 + (i * 8), 83);
				thePict := GetPicture(300 + tempTile[i] + (backNumber * 8));
				if (thePict <> nil) then
				begin
					tempByte := HGetState(Handle(thePict));
					HLock(Handle(thePict));
					DrawPicture(thePict, tempRect);
					HSetState(Handle(thePict), tempByte);
				end
				else
				begin
					GenericAlert(kErrGraphicLoad);
				end;
				ReleaseResource(Handle(thePict));
			end;
			for i := 0 to 7 do
			begin
				SetRect(tempRect, 0, 0, 8, 49);
				OffsetRect(tempRect, 17 + (i * 8), 83);
				thePict := GetPicture(300 + i + (backNumber * 8));
				if (thePict <> nil) then
				begin
					tempByte := HGetState(Handle(thePict));
					HLock(Handle(thePict));
					DrawPicture(thePict, tempRect);
					HSetState(Handle(thePict), tempByte);
				end
				else
				begin
					GenericAlert(kErrGraphicLoad);
				end;
				ReleaseResource(Handle(thePict));
			end;

			ForeColor(redColor);
			SetRect(tempRect, 15, 81, 83, 134);
			FrameRect(tempRect);
			ForeColor(blueColor);
			SetRect(tempRect, 109, 81, 177, 134);
			FrameRect(tempRect);
			ForeColor(blackColor);
		end;

{-------------------------}

	begin
		GetPort(wasPort);

		theDlgPtr := GetNewDialog(roomBackID, nil, Pointer(-1));
		if (theDlgPtr = nil) then
		begin
			GenericAlert(kErrLoadingRes);
			Exit(DoRoomBackInfo);
		end;
		with theDlgPtr^.portBits do
		begin
			rightOff := rightOffset - bounds.left;
			downOff := downOffset - bounds.top;
		end;
		MoveWindow(theDlgPtr, rightOff, downOff, FALSE);
		ShowWindow(theDlgPtr);
		SelectWindow(theDlgPtr);
		SetPort(theDlgPtr);

		backName[0] := 'Plain Room';
		backName[1] := 'Paneled Room';
		backName[2] := 'Basement';
		backName[3] := 'Japanese Room';
		backName[4] := 'ChildŐs Room';
		backName[5] := 'Unfinished Room';
		backName[6] := 'Hip Wallpaper';
		backName[7] := 'Entertainment';
		backName[8] := 'Bathroom';
		backName[9] := 'Kitchen';

		tempRoom := thisRoom;
		with tempRoom do
		begin
			backNumber := backPictID - 200;
			for i := 0 to 7 do
				tempTile[i] := tileOrder[i];
			GetDItem(theDlgPtr, backStat, cntlType, dlgItem, tempRect);
			SetIText(dlgItem, backName[backNumber]);
		end;

		if (not shouldOpen) then
			HideDItem(theDlgPtr, cancelBut);

		Redraw;
		leaveDlg := FALSE;
		shouldOpen := FALSE;

		repeat
			ModalDialog(@roomFltr, itemHit);
			GetDItem(theDlgPtr, itemHit, cntlType, dlgItem, tempRect);

			for i := backIcon1 to backIcon10 do
				if (itemHit = i) then
				begin
					PenSize(2, 2);
					PenPat(white);
					FrameRect(wasRect);
					GetDItem(theDlgPtr, i, cntlType, dlgItem, tempRect);
					InsetRect(tempRect, -2, -2);
					PenPat(black);
					ForeColor(redColor);
					FrameRect(tempRect);
					ForeColor(blackColor);
					wasRect := tempRect;
					PenNormal;
					backNumber := i - backIcon1;
					GetDItem(theDlgPtr, backStat, cntlType, dlgItem, tempRect);
					SetIText(dlgItem, backName[backNumber]);
					tempRoom.backPictID := backNumber + 200;
					for i2 := 0 to 7 do
						case backNumber of
							0..3, 5: 
								tempTile[i2] := 0;
							otherwise
								tempTile[i2] := i2
						end;
					Redraw;
				end;

			if (itemHit = okayBut) then
			begin
				leaveDlg := TRUE;
				changed := TRUE;

				with tempRoom do
				begin
					for i := 0 to 7 do
					begin
						tileOrder[i] := tempTile[i];
					end;

					case backPictId of
						200..203, 205: 
						begin
							if (tileOrder[0] = 6) then	{don't allow backward walls}
								tileOrder[0] := 0;
							if (tileOrder[7] = 7) then
								tileOrder[7] := 0;

							if (tileOrder[0] = 7) then	{check left open}
								leftOpen := FALSE
							else
								leftOpen := TRUE;
							if (tileOrder[7] = 6) then	{check right open}
								rightOpen := FALSE
							else
								rightOpen := TRUE;

							for i := 1 to 6 do			{don't allow walls in the middle}
								if ((tileOrder[i] = 6) or (tileOrder[i] = 7)) then
								begin
									SysBeep(1);
									tileOrder[i] := 0;
								end;
						end;
						otherwise
						begin
							leftOpen := TRUE;
							rightOpen := TRUE;
						end;
					end;			{end - case}
					if (roomAt = 1) then
						leftOpen := FALSE;
				end;			{end - with}

				if (leaveDlg) then
				begin
					thisRoom := tempRoom;
				end;
			end;

			if (itemHit = cancelBut) then
			begin
				if (thisHouse.numberORooms < 1) then
					shouldOpen := TRUE;
				leaveDlg := TRUE;
			end;

		until leaveDlg;

		DisposDialog(theDlgPtr);
		if (toolWndo <> nil) then
			SetPort(toolWndo)
		else
			SetPort(wasPort);
	end;

{=================================}

{=================================}

	procedure DoRoomCondInfo;
		const
			inactive = 255;
			active = 0;

			okayBut = 1;
			cancelBut = 2;

			normalRadio = 3;
			lightsRadio = 5;

			nothingRadio = 6;
			dartsRadio = 9;

			numOfEdit = 10;
			delayEdit = 11;
			nameEdit = 12;

			objectsStat = 13;
			roomNumStat = 14;

		var
			leaveDlg: Boolean;
			theDlgPtr: DialogPtr;
			tempRect, wasRect: Rect;
			cntlType, itemHit, tempInt, rightOff, downOff, i: Integer;
			tempLong: LongInt;
			dlgItem: Handle;
			strTemp: Str255;
			wasPort: GrafPtr;
			tempRoom: roomData;

{-------------------------}

		procedure Redraw;
			var
				width: Integer;
		begin
			SetPort(theDlgPtr);     		{Point to our dialog window}
			GetDItem(theDlgPtr, okayBut, cntlType, dlgItem, tempRect);{Get the item handle}
			PenSize(3, 3);  				{Change pen to draw thick default outline}
			InsetRect(tempRect, -4, -4);     	{Draw outside the button by 1 pixel}
			FrameRoundRect(tempRect, 16, 16); {Draw the outline}
			PenNormal;
			with theDlgPtr^.portRect do
				width := right - left;
			MoveTo(4, 38);
			Line(width - 8, 0);
			MoveTo(4, 40);
			Line(width - 8, 0);
		end;

{-------------------------}

	begin
		GetPort(wasPort);

		theDlgPtr := GetNewDialog(roomCondID, nil, Pointer(-1));
		if (theDlgPtr = nil) then
		begin
			GenericAlert(kErrLoadingRes);
			Exit(DoRoomCondInfo);
		end;
		with theDlgPtr^.portBits do
		begin
			rightOff := rightOffset - bounds.left;
			downOff := downOffset - bounds.top;
		end;
		MoveWindow(theDlgPtr, rightOff, downOff, FALSE);
		ShowWindow(theDlgPtr);
		SelectWindow(theDlgPtr);
		SetPort(theDlgPtr);

		tempRoom := thisRoom;
		with tempRoom do
		begin
{pop name of room into edit text field}
			GetDItem(theDlgPtr, nameEdit, cntlType, dlgItem, tempRect);
			strTemp := roomName;
			SetIText(dlgItem, strTemp);
{pop the room number as static text}
			GetDItem(theDlgPtr, roomNumStat, cntlType, dlgItem, tempRect);
			NumToString(roomAt, strTemp);
			SetIText(dlgItem, strTemp);
{pop up number of animates into edit text field}
			GetDItem(theDlgPtr, numOfEdit, cntlType, dlgItem, tempRect);
			NumToString(animateNumber, strTemp);
			SetIText(dlgItem, strTemp);
{pop up delay - convert to seconds}
			GetDItem(theDlgPtr, delayEdit, cntlType, dlgItem, tempRect);
			NumToString(animateDelay, strTemp);
			SetIText(dlgItem, strTemp);
{pop up number of objects as static text}
			GetDItem(theDlgPtr, objectsStat, cntlType, dlgItem, tempRect);
			NumToString(numberOObjects, strTemp);
			SetIText(dlgItem, strTemp);
{select radio button representing animate kind}
			if (animateNumber > 0) then
			begin
				tempInt := 9 - animateKind;
				GetDItem(theDlgPtr, tempInt, cntlType, dlgItem, tempRect);
				SetCtlValue(ControlHandle(dlgItem), 1);
			end
			else
			begin
				GetDItem(theDlgPtr, nothingRadio, cntlType, dlgItem, tempRect);
				SetCtlValue(ControlHandle(dlgItem), 1);
			end;
{select radio button representing condition of room}
			GetDItem(theDlgPtr, conditionCode + 3, cntlType, dlgItem, tempRect);
			SetCtlValue(ControlHandle(dlgItem), 1);
{decide whether or not to gray out cancel button}
			if (not shouldOpen) then
			begin
				GetDItem(theDlgPtr, cancelBut, cntlType, dlgItem, tempRect);
				HiliteControl(ControlHandle(dlgItem), inactive);
			end;
		end;	{end - with tempRoom do}
{select the name of the room}
		SelIText(theDlgPtr, nameEdit, 0, 24);
		Redraw;
		leaveDlg := FALSE;
		shouldOpen := FALSE;

		repeat
			ModalDialog(nil, itemHit);
			GetDItem(theDlgPtr, itemHit, cntlType, dlgItem, tempRect);

			for i := normalRadio to lightsRadio do
				if (itemHit = i) then
				begin
					for tempInt := normalRadio to lightsRadio do
					begin
						GetDItem(theDlgPtr, tempInt, cntlType, dlgItem, tempRect);
						SetCtlValue(ControlHandle(dlgItem), 0);
					end;
					GetDItem(theDlgPtr, i, cntlType, dlgItem, tempRect);
					SetCtlValue(ControlHandle(dlgItem), 1);
					tempRoom.conditionCode := i - normalRadio;
				end;

			for i := nothingRadio to dartsRadio do
				if (itemHit = i) then
				begin
					for tempInt := nothingRadio to dartsRadio do
					begin
						GetDItem(theDlgPtr, tempInt, cntlType, dlgItem, tempRect);
						SetCtlValue(ControlHandle(dlgItem), 0);
					end;
					GetDItem(theDlgPtr, i, cntlType, dlgItem, tempRect);
					SetCtlValue(ControlHandle(dlgItem), 1);
					if (itemHit = nothingRadio) then
					begin
						tempRoom.animateNumber := 0;
						GetDItem(theDlgPtr, numOfEdit, cntlType, dlgItem, tempRect);
						NumToString(tempRoom.animateNumber, strTemp);
						SetIText(dlgItem, strTemp);
					end
					else
					begin
						tempRoom.animateKind := 9 - i;
					end;
				end;

			if (itemHit = okayBut) then
			begin
				leaveDlg := TRUE;

				with tempRoom do
				begin
					GetDItem(theDlgPtr, numOfEdit, cntlType, dlgItem, tempRect);
					GetIText(dlgItem, strTemp);	{Get the text entered}
					StringToNum(strTemp, tempLong);
					tempRoom.animateNumber := LoWord(tempLong);
					if (tempRoom.animateNumber < 0) then
					begin
						SysBeep(1);
						leaveDlg := FALSE;
						tempInt := -tempRoom.animateNumber;
						if (tempInt > 16) then
							tempInt := 16;
						NumToString(tempInt, strTemp);
						SetIText(dlgItem, strTemp);
					end;
					if (tempRoom.animateNumber > 16) then
					begin
						SysBeep(1);
						leaveDlg := FALSE;
						NumToString(16, strTemp);
						SetIText(dlgItem, strTemp);
					end;

					GetDItem(theDlgPtr, delayEdit, cntlType, dlgItem, tempRect);
					GetIText(dlgItem, strTemp);	{Get the text entered}
					StringToNum(strTemp, tempLong);
					tempRoom.animateDelay := LoWord(tempLong);
					if (tempRoom.animateDelay < 0) then
					begin
						SysBeep(1);
						leaveDlg := FALSE;
						tempInt := -tempRoom.animateDelay;
						if (tempInt > 16) then
							tempInt := 16;
						NumToString(tempInt, strTemp);
						SetIText(dlgItem, strTemp);
					end;

					GetDItem(theDlgPtr, nameEdit, cntlType, dlgItem, tempRect);
					GetIText(dlgItem, strTemp);	{Get the text entered}
					if (LENGTH(strTemp) > 24) then
						strTemp := COPY(strTemp, 1, 24);
					tempRoom.roomName := strTemp;
				end;	{end - with tempRoom}

				if (leaveDlg) then
				begin
					changed := TRUE;
					thisRoom := tempRoom;
					DrawRoomNum;
				end;
			end;

			if (itemHit = cancelBut) then
			begin
				if (thisHouse.numberORooms < 1) then
					shouldOpen := TRUE;
				leaveDlg := TRUE;
			end;

		until leaveDlg;

		DisposDialog(theDlgPtr);
		if (toolWndo <> nil) then
			SetPort(toolWndo)
		else
			SetPort(wasPort);
	end;

{=================================}

end.