
Program Asciibox.pax;

Uses CRT;

{═════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════}

Procedure Horizontal_Line (HLLC,HLRC,HLR: Integer);
{Puts a  Ansi Horizontal Lines inside Boxes}
{       HLLC = Horizontal Line Left Column  }
{       HLRC = Horizontal Line Right Column }
{       HLR  = Horizontal Line Row          }

Var I : Integer;
Begin
   GotoXY (HLLC,HLR);
   Write ('╠');
   For I := HLLC+1 to HLRC-1 do
      Write ('═');
   Write ('╣');
End;
{═════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════}

Procedure Vertical_Line (VLTR,VLBR,VLC: Integer);
{Puts a  Ansi Vertiacl Lines inside Boxes}
{       VLTR = Vertical Line Top Row        }
{       VLBR = Vertical Line Bottom Row     }
{       VLC  = Vertical Line Column         }

Var I : Integer;
Begin
   GotoXY (VLC,VLTR);
   Write ('╦');
   For I := VLTR+1 to VLBR-1 do
      Begin
         GotoXY (VLC,I);
         Write ('║');
      End;
   GotoXY (VLC,VLBR);
   Write ('╩');
End;
{═════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════}

Procedure Intersect_Line (IR,IC: Integer);
{Puts a  Ansi Intersection}
{       IR  = Intersection Row        }
{       IC  = Intersection Column     }

Var I : Integer;
Begin
   GotoXY (IC,IR);
   Write ('╬');
End;
{═════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════}

Procedure Box (BULC,BULR,BLRC,BLRR: Integer);
{Puts a Ansi Character BOX on the screen at the specIfIed coordInates}
{       BULC = Box Upper Left Column     }
{       BULR = Box Upper Left Row        }
{       BLRC = Box Lower Right Column    }
{       BLRR = Box Lower Right Row       }

Var I : Integer;
BegIn
   GotoXY (BULC,BULR);
   Write ('╔');    // This is a Character #201
   for I := BULC+1 to BLRC-1 do
      Write ('═');
   Write ('╗');
   For I := 1 to BLRR-BULR-1 do
      BegIn
         GotoXY (BLRC,I+BULR);
         Write ('║');
      End;
   GotoXY (BLRC,BLRR);
   Write ('╝');
   For I := BLRC-1 downto BULC+1 do
      BegIn
         GotoXY (I,BLRR);
         Write ('═');
      End;
   GotoXY (BULC,BLRR);
   Write ('╚');
   For I := BLRR-1 downto BULR+1 do
      BegIn
         GotoXY (BULC,I);
         Write ('║');
      End;
End;
{═════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════}

Procedure ClearBox (CBULR,CBULC,CBLRR,CBLRC: Integer);
{Clears a Portion of the screen at the specIfIed coordInates}
{       CBULC = Clear Box Upper Left Column     }
{       CBULR = Clear Box Upper Left Row        }
{       CBLRC = Clear Box Lower Right Column    }
{       CBLRR = Clear Box Lower Right Row       }

var R,I : Integer;
BegIn
   For R := CBULR to CBLRR do
      Begin
         GOTOXY (CBULC,R);
         For I := CBULC to CBLRC do
         Write (' ');
      end;
end;

{═════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════}
Begin
   Clrscr;
   Box(10,5,40,30);
   Vertical_Line(5,30,25);
   Horizontal_line(10,40,15);
   Intersect_Line(15,25);
End.
{═════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════}
