1 line
8.9 KiB
OpenEdge ABL
Executable File
1 line
8.9 KiB
OpenEdge ABL
Executable File
unit HouseStuff;
|
||
|
||
interface
|
||
|
||
uses
|
||
Palettes, Globals, Utilities;
|
||
|
||
function DeleteRoom: Boolean;
|
||
function InsertRoom: Boolean;
|
||
procedure DoHouseInfo;
|
||
procedure ErrorCheckHouse;
|
||
|
||
implementation
|
||
|
||
{=================================}
|
||
|
||
function DeleteRoom;
|
||
var
|
||
i: Integer;
|
||
begin
|
||
DeleteRoom := FALSE; {assume error}
|
||
if (roomAt < thisHouse.numberORooms) then {if not on last room}
|
||
for i := roomAt to thisHouse.numberORooms do
|
||
thisHouse.theRooms[i] := thisHouse.theRooms[i + 1]; {shift rooms left}
|
||
thisHouse.numberORooms := thisHouse.numberORooms - 1; {subtract 1 from #}
|
||
if (roomAt > 1) then
|
||
roomAt := roomAt - 1 {preceding room is activated}
|
||
else
|
||
begin
|
||
roomAt := 1;
|
||
if (thisHouse.numberORooms <= 1) then {if only one room}
|
||
begin
|
||
thisHouse.numberORooms := 1; {we'll call up the dlg}
|
||
Exit(DeleteRoom); {for creating a room}
|
||
end;
|
||
end;
|
||
DeleteRoom := TRUE;
|
||
end;
|
||
|
||
{=================================}
|
||
|
||
function InsertRoom;
|
||
var
|
||
i: Integer;
|
||
begin
|
||
InsertRoom := FALSE;
|
||
if (thisHouse.numberORooms >= 40) then {trying to add 41 rooms}
|
||
begin
|
||
GenericAlert(kErrTooManyRooms);
|
||
Exit(InsertRoom);
|
||
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 roomAt over to right}
|
||
thisHouse.theRooms[roomAt] := scrapRoom; {copy scrap into house}
|
||
thisRoom := thisHouse.theRooms[roomAt]; {get copy for active room}
|
||
thisHouse.numberORooms := thisHouse.numberORooms + 1; {one more room}
|
||
InsertRoom := TRUE;
|
||
end;
|
||
|
||
{=================================}
|
||
|
||
procedure DoFlushScores;
|
||
var
|
||
i: Integer;
|
||
begin
|
||
for i := 0 to 19 do
|
||
begin
|
||
thisHouse.hiScores[i] := 0;
|
||
thisHouse.hiLevel[i] := 0;
|
||
thisHouse.hiName[i] := 'no one...';
|
||
thisHouse.hiRoom[i] := 'no room...';
|
||
end;
|
||
end;
|
||
|
||
{=================================}
|
||
|
||
procedure DoHouseInfo;
|
||
const
|
||
okayBut = 1;
|
||
nameStat = 2;
|
||
numOfStat = 3;
|
||
versStat = 4;
|
||
backStat = 5;
|
||
firstEdit = 6;
|
||
nextEdit = 7;
|
||
flushBut = 8;
|
||
lockBut = 17;
|
||
cancelBut = 18;
|
||
|
||
var
|
||
leaveDlg, willLockIt: Boolean;
|
||
theDlgPtr: DialogPtr;
|
||
wasPort: GrafPtr;
|
||
tempRect: Rect;
|
||
cntlType, index, itemHit, tempInt, rightOff, downOff: Integer;
|
||
dlgItem: Handle;
|
||
cntlHand, tempCntlHand: controlhandle;
|
||
tempStr, tempStr2: Str255;
|
||
|
||
{-------------------------}
|
||
|
||
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);
|
||
|
||
GetKeys(theKeys);
|
||
if (theKeys[$37]) then
|
||
begin
|
||
MoveTo(5, 37);
|
||
NumToString(thisHouse.timeStamp, tempStr);
|
||
DrawString(tempStr);
|
||
end;
|
||
end;
|
||
|
||
{-------------------------}
|
||
|
||
begin
|
||
GetPort(wasPort);
|
||
theDlgPtr := GetNewDialog(houseInfoID, 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);
|
||
|
||
GetDItem(theDlgPtr, nameStat, cntlType, dlgItem, tempRect);
|
||
SetIText(dlgItem, housesName);
|
||
with thisHouse do
|
||
begin
|
||
NumToString(numberORooms, tempStr); {pop in number of rooms}
|
||
GetDItem(theDlgPtr, numOfStat, cntlType, dlgItem, tempRect);
|
||
SetIText(dlgItem, tempStr);
|
||
tempInt := version div 256; {compute version number}
|
||
NumToString(tempInt, tempStr);
|
||
tempInt := version mod 256;
|
||
NumToString(tempInt, tempStr2);
|
||
tempStr := CONCAT(tempStr, '.', tempStr2); {and pop it in}
|
||
GetDItem(theDlgPtr, versStat, cntlType, dlgItem, tempRect);
|
||
SetIText(dlgItem, tempStr);
|
||
GetDItem(theDlgPtr, backStat, cntlType, dlgItem, tempRect);
|
||
SetIText(dlgItem, pictFile); {pop in background file}
|
||
GetDItem(theDlgPtr, firstEdit, cntlType, dlgItem, tempRect);
|
||
SetIText(dlgItem, firstFile); {pop in first house file}
|
||
GetDItem(theDlgPtr, nextEdit, cntlType, dlgItem, tempRect);
|
||
SetIText(dlgItem, nextFile); {pop in next house file}
|
||
end;
|
||
willLockIt := lockIt;
|
||
|
||
Redraw;
|
||
leaveDlg := FALSE;
|
||
SelIText(theDlgPtr, nextEdit, 0, 32);
|
||
|
||
repeat
|
||
ModalDialog(nil, itemHit);
|
||
GetDItem(theDlgPtr, itemHit, cntlType, dlgItem, tempRect);
|
||
|
||
if (itemHit = okayBut) then
|
||
begin
|
||
leaveDlg := TRUE;
|
||
|
||
GetDItem(theDlgPtr, firstEdit, cntlType, dlgItem, tempRect);
|
||
GetIText(dlgItem, tempStr); {Get text entered for first file}
|
||
thisHouse.firstFile := COPY(tempStr, 1, 32);
|
||
|
||
GetDItem(theDlgPtr, nextEdit, cntlType, dlgItem, tempRect);
|
||
GetIText(dlgItem, tempStr); {Get text entered for next file}
|
||
thisHouse.nextFile := COPY(tempStr, 1, 32);
|
||
|
||
lockIt := willLockIt;
|
||
|
||
changed := TRUE;
|
||
end;
|
||
|
||
if (itemHit = cancelBut) then
|
||
begin
|
||
leaveDlg := TRUE;
|
||
end;
|
||
|
||
if (itemHit = lockBut) then
|
||
begin
|
||
if (Alert(lockAlertID, nil) = 1) then
|
||
willLockIt := TRUE;
|
||
end;
|
||
|
||
if (itemHit = flushBut) then
|
||
DoFlushScores;
|
||
|
||
until leaveDlg;
|
||
|
||
DisposDialog(theDlgPtr);
|
||
if (toolWndo <> nil) then
|
||
SetPort(toolWndo)
|
||
else
|
||
SetPort(wasPort);
|
||
end;
|
||
|
||
{=================================}
|
||
|
||
procedure ErrorCheckHouse;
|
||
const
|
||
roomUnnamed = 1;
|
||
tooManyObs = 2;
|
||
badPictID = 3;
|
||
badAnimKind = 4;
|
||
badAnimNum = 5;
|
||
badAnimDelay = 6;
|
||
badRoomCond = 7;
|
||
|
||
type
|
||
problem = record
|
||
howMany: Integer;
|
||
whichOnes: array[1..40] of Boolean;
|
||
end;
|
||
|
||
problemTally = array[roomUnnamed..badRoomCond] of problem;
|
||
|
||
var
|
||
i, i2, obs: Integer;
|
||
progR: Rect;
|
||
theProblems: problemTally;
|
||
|
||
begin
|
||
SetPort(GrafPtr(mainWndo));
|
||
PenNormal;
|
||
TextFont(0);
|
||
TextSize(12);
|
||
PenSize(2, 2);
|
||
SetRect(progR, 156, 100, 356, 130);
|
||
|
||
{check house record}
|
||
EraseRect(progR);
|
||
FrameRect(progR);
|
||
MoveTo(progR.left + 20, progR.bottom - 10);
|
||
DrawString('Checking House<73>');
|
||
|
||
with thisHouse do
|
||
begin
|
||
SpinBall;
|
||
if (version > $01FF) then
|
||
begin
|
||
GenericAlert(kErrWrongHouseVers);
|
||
EraseRect(progR);
|
||
FrameRect(progR);
|
||
MoveTo(progR.left + 20, progR.bottom - 10);
|
||
DrawString('Checking House<73>');
|
||
end;
|
||
SpinBall;
|
||
if ((numberORooms < 1) or (numberORooms > 40)) then
|
||
begin
|
||
GenericAlert(18);
|
||
EraseRect(progR);
|
||
FrameRect(progR);
|
||
MoveTo(progR.left + 20, progR.bottom - 10);
|
||
DrawString('Checking House<73>');
|
||
end;
|
||
|
||
{check room records}
|
||
EraseRect(progR);
|
||
FrameRect(progR);
|
||
MoveTo(progR.left + 20, progR.bottom - 10);
|
||
DrawString('Checking Rooms<6D>');
|
||
|
||
for i := roomUnnamed to badRoomCond do
|
||
with theProblems[i] do
|
||
begin
|
||
howMany := 0;
|
||
for i2 := 1 to 40 do
|
||
whichOnes[i2] := FALSE;
|
||
end;
|
||
|
||
for i := 1 to numberORooms do
|
||
with theRooms[i] do
|
||
begin
|
||
SpinBall;
|
||
if (roomName = '') then
|
||
with theProblems[roomUnnamed] do
|
||
begin
|
||
howMany := howMany + 1;
|
||
whichOnes[i] := TRUE;
|
||
end;
|
||
SpinBall;
|
||
if ((numberOObjects < 0) or (numberOObjects > 16)) then
|
||
with theProblems[tooManyObs] do
|
||
begin
|
||
howMany := howMany + 1;
|
||
whichOnes[i] := TRUE;
|
||
end;
|
||
SpinBall;
|
||
if ((backPictID < 200) or (backPictID > 209)) then
|
||
with theProblems[badPictID] do
|
||
begin
|
||
howMany := howMany + 1;
|
||
whichOnes[i] := TRUE;
|
||
end;
|
||
SpinBall;
|
||
if ((animateKind < 0) or (animateKind > 3)) then
|
||
with theProblems[badAnimKind] do
|
||
begin
|
||
howMany := howMany + 1;
|
||
whichOnes[i] := TRUE;
|
||
end;
|
||
SpinBall;
|
||
if ((animateNumber < 0) or (animateNumber > 16)) then
|
||
with theProblems[badAnimNum] do
|
||
begin
|
||
howMany := howMany + 1;
|
||
whichOnes[i] := TRUE;
|
||
end;
|
||
SpinBall;
|
||
if (animateDelay < 0) then
|
||
with theProblems[badAnimDelay] do
|
||
begin
|
||
howMany := howMany + 1;
|
||
whichOnes[i] := TRUE;
|
||
end;
|
||
SpinBall;
|
||
if ((conditionCode < 0) or (conditionCode > 2)) then
|
||
with theProblems[badRoomCond] do
|
||
begin
|
||
howMany := howMany + 1;
|
||
whichOnes[i] := TRUE;
|
||
end;
|
||
end;
|
||
|
||
InitCursor;
|
||
|
||
for i := roomUnnamed to badRoomCond do
|
||
if (theProblems[i].howMany <> 0) then
|
||
begin
|
||
GenericAlert(19);
|
||
Leave;
|
||
end;
|
||
|
||
end;
|
||
|
||
if (inColor) then
|
||
CopyBits(BitMapPtr(loadCPtr^.portPixMap^)^, GrafPtr(mainWndo)^.portBits, progR, progR, srcCopy, GrafPtr(mainWndo)^.visRgn)
|
||
else
|
||
CopyBits(offLoadMap, mainWndo^.portBits, progR, progR, srcCopy, mainWndo^.visRgn);
|
||
|
||
if (toolWndo <> nil) then
|
||
SetPort(GrafPtr(toolWndo));
|
||
end;
|
||
|
||
{=================================}
|
||
|
||
end. |