home *** CD-ROM | disk | FTP | other *** search
-
- { Screen stack entries }
- Type
- Saved_Screen_Ptr = ^Saved_Screen_Type;
- Saved_Screen_Type = Record
- Screen_Image : Screen_Type;
- Screen_Row : byte;
- Screen_Column : byte;
- Screen_X1 : byte;
- Screen_Y1 : byte;
- Screen_X2 : byte;
- Screen_Y2 : byte;
- Screen_Color : byte;
- Next : Saved_Screen_Ptr;
- End;
-
- Var
- Screen_Stack_Top : Saved_Screen_Ptr;
-
- { Screen Variables }
-
-
- {----------------------------------------------------------------------}
- { Screen Manipulation Routines }
- {----------------------------------------------------------------------}
- { }
- { These routines save and restore screen images. They may be }
- { used with any Turbo Pascal Program. }
- { NOTES: The "SCRNDEF.BOX" must be included before this include }
- { file. }
- { Before invoking the Push_Screen or Pop_Screen procedures, }
- { a Call to "Set_Screen_Address( Actual_Screen )" }
- { must be made and need only be made once in a program. }
- {----------------------------------------------------------------------}
-
- {----------------------------------------------------------------------}
- { Push_Screen --- Save current screen image }
- {----------------------------------------------------------------------}
-
- procedure Push_Screen( Var StackTop: Saved_Screen_Ptr );
-
- {----------------------------------------------------------------------}
- { This version doesn't check for stack overflow. }
- { Caveat Programmer. }
- { }
- {----------------------------------------------------------------------}
- Var
- NewNode : Saved_Screen_Ptr;
- begin { Push_Screen }
- New(NewNode);
- With NewNode^ do begin
- Screen_X1 := Upper_Left_Column;
- Screen_Y1 := Upper_Left_Row;
- Screen_X2 := Lower_Right_Column;
- Screen_Y2 := Lower_Right_Row;
-
- Screen_Row := WhereY;
- Screen_Column := WhereX;
-
- Screen_Color := Mem [ Dseg:$155 ];
- Disable_Display;
- Move( Actual_Screen^.Screen_Image, Screen_Image, SizeOf(Screen_Image) );
- Enable_Display;
- end;
- NewNode^.Next := StackTop;
- StackTop := NewNode;
- end; { Push_Screen }
-
- {----------------------------------------------------------------------}
- { Pop_Screen --- Restore saved screen image }
- {----------------------------------------------------------------------}
-
- procedure Pop_Screen( Var StackTop: Saved_Screen_Ptr );
- Var
- Top : Saved_Screen_Ptr;
-
- begin { Pop_Screen }
- Top := StackTop;
- StackTop := StackTop^.Next;
- With Top^ do begin
- Upper_Left_Column := Screen_X1;
- Upper_Left_Row := Screen_Y1;
- Lower_Right_Column:= Screen_X2;
- Lower_Right_Row := Screen_Y2;
-
-
- Mnu_Window( Screen_X1+1, Screen_Y1+1, Screen_X2, Screen_Y2 );
- Disable_Display;
- Move( Screen_Image, Actual_Screen^.Screen_Image, SizeOf(Screen_Image) );
- Enable_Display;
- GoToXY( Screen_Column, Screen_Row );
- Mem [ Dseg:$155 ] := Screen_Color;
- end;
-
- Dispose( Top );
- end; { Pop_Screen }
-
-
-
-
-
-
-
-
-