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.