[fpc-pascal] Cross Platform Save/Restore Screen

Michael Van Canneyt michael at freepascal.org
Tue Jun 20 16:53:02 CEST 2006



On Tue, 20 Jun 2006, Michael Preslar wrote:

> Back in the DOS Turbo Pascal days I could do the following
>
> type
> screentype= array[1..4000] of byte;
> screenptr=^screentype;
> var
> screen1: screenptr;
>
> procedure savescreen(scr:byte);
> var
> sc1: byte absolute $b000:0;
> sc2: byte absolute $b800:0;
> begin;
> if screenaddress=$b000 then move(sc1,screens1^,4000);
> if screenaddress=$b800 then move(sc2,screens1^,4000);
> end;
>
> procedure restorescreen(scr:byte);
> var
> sc1: byte absolute $b800:0;
> sc2: byte absolute $b000:0;
> begin;
> if screenaddress=$b000 then move(screens1^, sc2,4000);
> if screenaddress=$b800 then move(screens1^, sc1,4000);
> end;
>
> Now I'm stuck. How can I do the same for Win32 Console apps, and
> *nix/*bsd console apps?

The short answer: You simply can't...

You must use the 'video' unit to do this kind of tricks in a more or less
cross-platform way, but you'll have to rewrite your code completely.

You may also want to have a look at the ncurses unit and the various
descendents, ocrt, ncrt.

video is documented, and is part of the RTL.
The others are in the packages.

Michael.



More information about the fpc-pascal mailing list