[Back to OOP SWAG index] [Back to Main SWAG index] [Original]
program Dynamic_Object_Demo;
{ DYN-DEMO.PAS }
uses Crt, Dos;
type
ScrPtr = ^SaveScreen;
BoxPtr = ^ReportBox;
SaveScreen = array[1..80,1..25] of word;
ReportBox = object
SavPtr: ScrPtr; FColor, BColor: byte;
WPosX, WPosY, WSizeX, WSizeY: integer;
constructor Init( PtX, PtY, Width, Height,
C1, C2 : integer );
destructor Done;
procedure Draw;
procedure Erase;
end;
{==========================================}
{ implementation for object type ReportBox }
{==========================================}
constructor ReportBox.Init;
var
i, j: integer;
Regs: Registers;
begin
WPosX := PtX;
WPosY := PtY;
WSizeX := Width;
WSizeY := Height;
FColor := C1;
BColor := C2;
New( SavPtr ); { allocate memory for array }
window( WPosX, WPosY, WPosX+WSizeX-1,
WPosY+WSizeY-1 );
{read character and attribute on video page 0}
for i := 1 to WSizeX do
for j := 1 to WSizeY do
begin
gotoxy(i,j);
Regs.AH := 08;
Regs.BH := 00;
intr( $10, Regs );
SavPtr^[i,j] := Regs.AX;
end;
Draw;
end;
destructor ReportBox.Done;
begin
Erase;
Dispose( SavPtr );
end;
procedure ReportBox.Erase;
var
i, j : integer;
Regs : Registers;
begin
window( WPosX, WPosY,
WPosX+WSizeX-1, WPosY+WSizeY-1 );
ClrScr; { inner window }
{ Write character and attr on video page 0 }
{ AL stores the character value }
{ BL stores the attribute value }
{ CL stores the repititions value (1) }
for i := 1 to WSizeX do
for j := 1 to WSizeY do
begin
gotoxy(i,j);
Regs.AH := 09;
Regs.BH := 00;
Regs.AL := lo( SavPtr^[i,j] );
Regs.BL := hi( SavPtr^[i,j] );
Regs.CL := 1;
intr( $10, Regs );
end;
window( 1, 1, 80, 25 );
end;
procedure ReportBox.Draw;
var
BoxStr : string[6];
i : integer;
MemSize : longint;
begin
TextColor( FColor );
TextBackground( BColor );
BoxStr := #$C9 + #$CD + #$BB +
#$BA +#$BC + #$C8;
window( WPosX, WPosY,
WPosX+WSizeX-1, WPosY+WSizeY-1 );
ClrScr;
gotoxy( 1, 1 ); write( BoxStr[1] );
for i := 1 to WSizeX-2 do write( BoxStr[2] );
write( BoxStr[3] );
gotoxy( 1, WSizeY-1 ); write( BoxStr[6] );
for i := 1 to WSizeX-2 do write( BoxStr[2] );
write( BoxStr[5] );
gotoxy( 1, 2 );
InsLine;
for i := 2 to WSizeY-1 do
begin
gotoxy( 1, i ); write( BoxStr[4] );
gotoxy( WSizeX, i ); write( BoxStr[4] );
end;
window( WPosX+1, WPosY+1,
WPosX+WSizeX-2, WPosY+WSizeY-2 );
ClrScr;
MemSize := MemAvail;
for i := 1 to 30 do
write('Memory now = ',MemSize,' bytes! ');
window( 1, 1, 80, 25 );
end;
{ **** end of methods **** }
var
Box : array[1..5] of BoxPtr;
MemSize : longint;
i : integer;
procedure Prompt;
begin
gotoxy( 1, 1 ); clreol;
write('Memory now = ', MemAvail,
'. Press ENTER to continue ');
readln;
end;
begin
ClrScr;
TextColor( White );
TextBackground( Black );
MemSize := MemAvail;
for i := 1 to 100 do
write(' Initial memory available = ',
MemSize, ' bytes! ' );
gotoxy( 1, 1 ); clreol;
write('Press ENTER to continue ');
readln;
Box[1] := New( BoxPtr, Init( 5, 12, 30, 10,
LightRed, Black ) );
gotoxy( 1, 1 ); clreol;
write('Memory now = ', MemAvail,
'. Press ENTER to continue ');
readln;
Box[2] := New( BoxPtr, Init( 40, 5, 30, 10,
LightGreen, Blue ) );
gotoxy( 1, 1 ); clreol;
write('Memory now = ', MemAvail,
'. Press ENTER to continue ');
readln;
Dispose( Box[1], Done );
Dispose( Box[2], Done );
gotoxy( 1, 1 ); clreol;
write( 'Final memory (after release) = ',
MemAvail, ' bytes...');
readln;
end.
[Back to OOP SWAG index] [Back to Main SWAG index] [Original]