home *** CD-ROM | disk | FTP | other *** search
/ POINT Software Programming / PPROG1.ISO / c / fli106c / blboxfil.cpp < prev    next >
C/C++ Source or Header  |  1992-03-11  |  4KB  |  252 lines

  1. //
  2. // The Fusion Library Interface for DOS
  3. // Version 1.06c
  4. // Copyright (C) 1990, 1991, 1992
  5. // Software Dimensions
  6. //
  7. // BlazeClass
  8. //
  9.  
  10. #ifndef __BCPLUSPLUS__
  11. #pragma inline
  12. #endif
  13.  
  14. #include "fli.h"
  15.  
  16. #ifdef __BCPLUSPLUS__
  17. #pragma hdrstop
  18. #endif
  19.  
  20. #define I asm
  21.  
  22. //-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-
  23. //
  24. // BoxFilled()
  25. //
  26. // Draws and fills a box on the screen
  27. //
  28. //-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-
  29.  
  30. void BlazeClass::BoxFilled(int X,int Y,int Width,int Height,int Color)
  31. {
  32.   if (Width<2 || Height<2 || X>=WinWide || Y>=WinHigh)
  33.     return;
  34.  
  35.   char TopLeft = BlazeClass::TopLeft;
  36.   char TopCenter = BlazeClass::TopCenter;
  37.   char TopRight = BlazeClass::TopRight;
  38.   char CenterLeft = BlazeClass::CenterLeft;
  39.   char CenterFill = BlazeClass::CenterFill;
  40.   char CenterRight = BlazeClass::CenterRight;
  41.   char BottomLeft = BlazeClass::BottomLeft;
  42.   char BottomCenter = BlazeClass::BottomCenter;
  43.   char BottomRight = BlazeClass::BottomRight;
  44.  
  45.   int ScreenWidth = BlazeClass::QuickWidth;
  46.   int WinWide = BlazeClass::WinWide;
  47.   int WinHigh = BlazeClass::WinHigh;
  48.  
  49.   if (Width>2 && Height>2 && X+1<WinWide && Y+1<WinHigh)
  50.   {
  51.  
  52.     X++;
  53.     Y++;
  54.  
  55.     int SaveWide=Width;
  56.     int SaveHeight=Height;
  57.  
  58.     Width-=2;
  59.     Height-=2;
  60.  
  61.     int Locator = ((WinY+Y)*ScreenWidth)+((WinX+X)*2);
  62.  
  63.     if (X+Width>=WinWide)
  64.       Width=WinWide-X;
  65.  
  66.     if (Y+Height>=WinHigh)
  67.       Height=WinHigh-Y;
  68.  
  69.     void far *OUTPUT=BlazeClass::OUTPUT;
  70.     I les di,OUTPUT
  71.     I add di,Locator
  72.  
  73.     I mov bx,[Width]
  74.     I mov dx,[Height]
  75.  
  76.     I cld
  77.  
  78.     I mov ah,byte ptr Color
  79.     I mov al,CenterFill
  80.  
  81.   looped:
  82.  
  83.     I push di
  84.     I mov cx,bx
  85.     I rep stosw
  86.     I pop di
  87.     I add di,ScreenWidth
  88.     I dec dx
  89.     I or dx,dx
  90.     I jne looped
  91.  
  92.     X--;
  93.     Y--;
  94.  
  95.     Width=SaveWide;
  96.     Height=SaveHeight;
  97.   }
  98.  
  99.   int Locator = ((WinY+Y)*ScreenWidth)+((WinX+X)*2);
  100.   void far *OUTPUT=BlazeClass::OUTPUT;
  101.  
  102.   I les di,OUTPUT
  103.   I add di,Locator
  104.  
  105.   ScreenWidth-=2;
  106.  
  107.   I mov bx,[Width]
  108.   I sub bx,2
  109.   I mov dx,[Height]
  110.   I sub dx,2
  111.  
  112.   I mov ah,byte ptr Color
  113.   I mov al,TopLeft
  114.   I cld
  115.  
  116.   I stosw
  117.  
  118.   X++;
  119.  
  120.   if (_BX)
  121.   {
  122.     I mov cx,bx
  123.     do                            // top
  124.     {
  125.       if (X<WinWide && Y<WinHigh)
  126.       {
  127.         I mov ah,byte ptr Color
  128.         I mov al,TopCenter
  129.         I stosw
  130.       }
  131.       else
  132.       {
  133.         I inc di
  134.         I inc di
  135.       }
  136.       X++;
  137.     }
  138.     while (--_CX);
  139.   }
  140.  
  141.   if (X<WinWide && Y<WinHigh)   // corner top right
  142.   {
  143.     I mov ah,byte ptr Color
  144.     I mov al,TopRight
  145.     I stosw
  146.   }
  147.   else
  148.   {
  149.     I inc di
  150.     I inc di
  151.   }
  152.  
  153.   I add di,ScreenWidth
  154.   Y++;
  155.  
  156.   if (_DX)
  157.   {
  158.     I mov cx,dx
  159.     do                            // right
  160.     {
  161.       if (X<WinWide && Y<WinHigh)
  162.       {
  163.         I mov ah,byte ptr Color
  164.         I mov al,CenterRight
  165.         I stosw
  166.       }
  167.       else
  168.       {
  169.         I inc di
  170.         I inc di
  171.       }
  172.       I add di,ScreenWidth
  173.       Y++;
  174.     }
  175.     while (--_CX);
  176.   }
  177.  
  178.   I std
  179.  
  180.   if (X<WinWide && Y<WinHigh)   // corner bottom right
  181.   {
  182.     I mov ah,byte ptr Color
  183.     I mov al,BottomRight
  184.     I stosw
  185.   }
  186.   else
  187.   {
  188.     I dec di
  189.     I dec di
  190.   }
  191.  
  192.   X--;
  193.  
  194.   if (_BX)
  195.   {
  196.     I mov cx,bx
  197.     do                            // bottom
  198.     {
  199.       if (X<WinWide && Y<WinHigh)
  200.       {
  201.         I mov ah,byte ptr Color
  202.         I mov al,BottomCenter
  203.         I stosw
  204.       }
  205.       else
  206.       {
  207.         I dec di
  208.         I dec di
  209.       }
  210.       X--;
  211.     }
  212.     while (--_CX);
  213.   }
  214.  
  215.   if (X<WinWide && Y<WinHigh)   // corner bottom left
  216.   {
  217.     I mov ah,byte ptr Color
  218.     I mov al,BottomLeft
  219.     I stosw
  220.   }
  221.   else
  222.   {
  223.     I dec di
  224.     I dec di
  225.   }
  226.  
  227.   I sub di,ScreenWidth
  228.   Y--;
  229.  
  230.   if (_DX)
  231.   {
  232.     I mov cx,dx
  233.     do                            // left
  234.     {
  235.       if (X<WinWide && Y<WinHigh)
  236.       {
  237.         I mov ah,byte ptr Color
  238.         I mov al,CenterLeft
  239.         I stosw
  240.       }
  241.       else
  242.       {
  243.         I dec di
  244.         I dec di
  245.       }
  246.       I sub di,ScreenWidth
  247.       Y--;
  248.     }
  249.     while (--_CX);
  250.   }
  251. }
  252.