[Back to TEXTWNDW SWAG index]  [Back to Main SWAG index]  [Original]


unit testwin2;

interface
uses crt;
procedure Popbox(x1,y1,x2,y2,UPborder,DNborder,Back: byte);
procedure CloseBox;
Procedure SaveScreen;
Procedure RestoreScreen;
procedure Cursoron;
procedure Cursoroff;
type
 windowtype = record
               x1,x2,y1,y2: byte;
               scrsave: array[1..4096] of byte;
              end;
 scrarray= array[0..3999] of byte;
 scrptr= ^scrarray;
 AScreen = Array[1..4000] of Byte;
const
 screenbase: word =$B800;
var
 Screen: scrarray Absolute $B800:$0;
 numwindows: byte;
 ws: array[1..3] of windowtype;
 scr1,scr2,scr3: scrptr;
 P : ^AScreen;    {Pointer to the Array}
 Scr : AScreen;
 CursorType : word;

implementation

procedure Cursoroff; assembler;

    asm
        mov ah, 03h
        mov bh, 00h
        int 10h
        mov CursorType, cx
        mov ah, 01h
        mov cx, 65535
        int 10h
    end;

procedure Cursoron; assembler;

    asm
        mov ah, 01h
        mov cx, CursorType
        int 10h
    end;

Procedure SaveScreen;
begin
  P := Ptr($B800,$0); {Point to video memory}
  Move(P^,Scr,4000);  {Move the screen into the Array}
end;

Procedure RestoreScreen;
begin
  Move(Scr,MEm[$B800 : 0], 4000); {Move the saved screen to video mem}
end;

procedure Popbox(x1,y1,x2,y2,UPborder,DNborder,back: byte);
var
 x,y: byte;
begin;
 window(1,1,80,25);
 textcolor(UPborder);
 textbackground(Back);
 gotoxy(x1,y1);
 for x:=x1+1 to x2 do write('Ä');
 textcolor(dnborder);
 gotoxy(x1,y2);
 for x:=x1+1 to x2 do write('Ä');
 for y:=y1+1 to y2-1 do begin;
  textcolor(upborder);
  gotoxy(x1,y);
  write('³');
  textcolor(dnborder);
  gotoxy(x2,y);
  write('³');
 end;
 textcolor(upborder);
 gotoxy(x1,y1);
 write('Ú');
 textcolor(dnborder);
 gotoxy(x2,y1);
 write('¿');
 textcolor(upborder);
 gotoxy(x1,y2);
 write('À');
 textcolor(dnborder);
 gotoxy(x2,y2);
 write('Ù');
 inc(numwindows);
 ws[numwindows].x1:=lo(windmin)+1;
 ws[numwindows].x2:=lo(windmax)+1;
 ws[numwindows].y1:=hi(windmin)+1;
 ws[numwindows].y2:=hi(windmax)+1;
 move(mem[screenbase:0000],ws[numwindows].scrsave,4096);
 window(x1+1,y1+1,x2-1,y2-1);
 clrscr;
 gotoxy(1,1);
end;

procedure CloseBox;

begin;
 move(ws[numwindows].scrsave,mem[screenbase:0000],4096);
 window(ws[numwindows].x1,ws[numwindows].y1,ws[numwindows].x2, {editor wrap}
                                                          ws[numwindows].y2);
 dec(numwindows);
end;
end.

{ ------------------------------   DEMO PROGRAM  ---------------------- }

Program Demo_for_testwin2;

uses crt,testwin2;
begin;
 cursoroff;
 new(scr1);
 new(scr2);
 textcolor(0);
 textbackground(7);
 clrscr;
gotoxy(30,12);
write('Main Screen');
savescreen;
 readkey;
 Popbox(17,9,62,17,15,0,3);
 writeln('     Window one');
 move(mem[screenbase:0000],scr1^,4096);
 readkey;
 Popbox(25,3,40,22,10,0,2);
 writeln('Window two');
 move(mem[screenbase:0000],scr2^,4096);
 readkey;
 Popbox(8,12,65,20,12,0,4);
 writeln('Window three');
 readkey;
 CloseBox;
 move(scr2^,mem[screenbase:0000],4096);
 readkey;
 CloseBox;
 move(scr1^,mem[screenbase:0000],4096);
 readkey;
 restorescreen;
 readkey;
  cursoron;
 end.


[Back to TEXTWNDW SWAG index]  [Back to Main SWAG index]  [Original]