home *** CD-ROM | disk | FTP | other *** search
/ Programmer 7500 / MAX_PROGRAMMERS.iso / INFO / TURBOPAS / BOXMENU.ZIP / SCRNSAVE.BOX < prev    next >
Encoding:
Text File  |  1985-09-17  |  3.8 KB  |  106 lines

  1.  
  2.                    { Screen stack entries      }
  3. Type
  4.    Saved_Screen_Ptr  = ^Saved_Screen_Type;
  5.    Saved_Screen_Type = Record
  6.                           Screen_Image  : Screen_Type;
  7.                           Screen_Row    : byte;
  8.                           Screen_Column : byte;
  9.                           Screen_X1     : byte;
  10.                           Screen_Y1     : byte;
  11.                           Screen_X2     : byte;
  12.                           Screen_Y2     : byte;
  13.                           Screen_Color  : byte;
  14.                           Next          : Saved_Screen_Ptr;
  15.                        End;
  16.  
  17. Var
  18.   Screen_Stack_Top : Saved_Screen_Ptr;
  19.  
  20.                    { Screen Variables }
  21.  
  22.  
  23. {----------------------------------------------------------------------}
  24. {                 Screen Manipulation Routines                         }
  25. {----------------------------------------------------------------------}
  26. {                                                                      }
  27. {   These routines save and restore screen images.  They may be        }
  28. {   used with any Turbo Pascal Program.                                }
  29. {   NOTES:  The "SCRNDEF.BOX" must be included before this include     }
  30. {           file.                                                      }
  31. {           Before invoking the Push_Screen or Pop_Screen procedures,  }
  32. {           a Call to "Set_Screen_Address( Actual_Screen )"            }
  33. {           must be made and need only be made once in a program.      }
  34. {----------------------------------------------------------------------}
  35.  
  36. {----------------------------------------------------------------------}
  37. {                Push_Screen --- Save current screen image             }
  38. {----------------------------------------------------------------------}
  39.  
  40. procedure Push_Screen( Var StackTop: Saved_Screen_Ptr );
  41.  
  42. {----------------------------------------------------------------------}
  43. {        This version doesn't check for stack overflow.                }
  44. {        Caveat Programmer.                                            }
  45. {                                                                      }
  46. {----------------------------------------------------------------------}
  47. Var
  48.   NewNode : Saved_Screen_Ptr;
  49. begin  { Push_Screen }
  50.   New(NewNode);
  51.   With NewNode^ do begin
  52.     Screen_X1     := Upper_Left_Column;
  53.     Screen_Y1     := Upper_Left_Row;
  54.     Screen_X2     := Lower_Right_Column;
  55.     Screen_Y2     := Lower_Right_Row;
  56.  
  57.     Screen_Row    := WhereY;
  58.     Screen_Column := WhereX;
  59.  
  60.     Screen_Color  := Mem [ Dseg:$155 ];
  61.     Disable_Display;
  62.     Move( Actual_Screen^.Screen_Image, Screen_Image, SizeOf(Screen_Image) );
  63.     Enable_Display;
  64.   end;
  65.   NewNode^.Next := StackTop;
  66.   StackTop := NewNode;
  67. end;   { Push_Screen }
  68.  
  69. {----------------------------------------------------------------------}
  70. {              Pop_Screen --- Restore saved screen image               }
  71. {----------------------------------------------------------------------}
  72.  
  73. procedure Pop_Screen( Var StackTop: Saved_Screen_Ptr );
  74. Var
  75.   Top : Saved_Screen_Ptr;
  76.  
  77. begin  { Pop_Screen }
  78.     Top := StackTop;
  79.     StackTop := StackTop^.Next;
  80.     With Top^ do begin
  81.       Upper_Left_Column := Screen_X1;
  82.       Upper_Left_Row    := Screen_Y1;
  83.       Lower_Right_Column:= Screen_X2;
  84.       Lower_Right_Row   := Screen_Y2;
  85.  
  86.  
  87.       Mnu_Window( Screen_X1+1, Screen_Y1+1, Screen_X2, Screen_Y2 );
  88.       Disable_Display;
  89.       Move( Screen_Image, Actual_Screen^.Screen_Image, SizeOf(Screen_Image) );
  90.       Enable_Display;
  91.       GoToXY( Screen_Column, Screen_Row );
  92.       Mem [ Dseg:$155 ] := Screen_Color;
  93.     end;
  94.  
  95.     Dispose( Top );
  96. end;   { Pop_Screen }
  97.  
  98.  
  99.  
  100.  
  101.  
  102.  
  103.  
  104.  
  105.  
  106.