home *** CD-ROM | disk | FTP | other *** search
- { (C) Jim Everingham, 1985 }
- Const MaxScreens=8; { change this to however many windows you will need.}
- Screen_seg=$B800;
- PageVal =$0000;
- type MaxStr = String[80];
- windowvals = record
- fg,x1,y1,x2,y2,fattr,iattr,cattr,tattr,tt,frm,wind : integer;
- txt : Maxstr;
- end;
- windata = Array[1..4000] of byte;
- var val : Array[0..MaxScreens] of windowvals;
- Screen : Array[0..MaxScreens] of windata;
- Page : windata absolute Screen_Seg:Pageval;
- Crt,Winpage,stack_top:Integer;
- Procedure Windmngr;External'Windmngr.bin';
- Procedure Frame(x_1,y_1,x_2,y_2,f_attr,i_attr,f_rm,_wind,c_flag,p_g:integer);External Windmngr[0];
- Procedure Title(t_xt:Maxstr;c_attr,t_attr,x_11,y_11,tt,p_g:integer);External Windmngr[3];
- Procedure Mode(md:integer);external Windmngr[6];
- Procedure WriteXY(t_xt:Maxstr;I_attr,x_,y_,p_g:integer);External Windmngr[9];
- Procedure Initialize;
- begin
- Crt:=1;
- Winpage:=0;
- Stack_top:=0;
- end;
- Procedure SetWindow(Num,x1,y1,x2,y2,fattr,iattr,frm,wind:integer; txt:Maxstr; tattr,cattr,tt:integer);
- begin
- if num<=MaxScreens then
- begin
- Val[num].fg:=1;
- Val[num].x1:=x1;
- Val[num].x2:=x2;
- Val[num].y1:=y1;
- Val[num].y2:=y2;
- Val[num].fattr:=fattr;
- Val[num].iattr:=iattr;
- Val[num].frm:=frm;
- Val[num].wind:=wind;
- Val[num].cattr:=cattr;
- Val[num].tattr:=tattr;
- Val[num].tt:=tt;
- Val[num].txt:=txt
- end else
- Writeln('Only up to ',MaxScreens,' may be defined.')
- end;
- Procedure Open(Num:integer);
- begin
- if val[num].fg = 1 then
- begin
- if stack_top=0 then
- begin
- Mode(0);
- Move(Page,Screen[stack_top],4000);
- Mode(1);
- Stack_top:=1
- end else
- begin
- Mode(0);
- Move(Page,Screen[Stack_top],4000);
- Mode(1);
- Stack_top:=Succ(Stack_top)
- end;
- Frame(Val[num].x1,Val[num].y1,Val[num].x2,Val[num].y2,Val[num].fattr,
- Val[num].iattr,Val[num].frm,Val[num].wind,Crt,WinPage);
- if val[num].txt > '' then
- Title(Val[num].txt,Val[num].cattr,Val[num].tattr,Val[num].x1,
- Val[num].y1,Val[num].tt,Winpage);
- Window(Val[num].x1+2,Val[num].y1+2,Val[num].x2,Val[num].y2);
- Gotoxy(1,1);
- textbackground(Val[num].iattr div 16);
- textcolor(Val[num].iattr mod 16)
- end else
- Writeln('Window ',num,' Not Defined.')
- end;
- Procedure Remove(Num:integer);
- begin
- if stack_top-num >= 0 then
- begin
- mode(0);
- move(screen[Stack_top-Num],page,4000);
- mode(1);
- Stack_top:=Stack_top-Num;
- Window(Val[STack_top].x1+2,Val[Stack_top].y1+2,Val[Stack_top].x2,Val[Stack_top].y2);
- gotoxy(1,1);
- textbackground(Val[Stack_top].iattr div 16);
- textcolor(Val[Stack_top].iattr mod 16);
- if stack_top=0 then begin
- normvideo;
- window(1,1,80,25);
- gotoxy(1,1)
- end
- end else
- Write('Invalid Number, only ',stack_top,' windows active.')
- end;
- Procedure SelectWindow(Num:integer);
- begin
- if Num>Stack_top then write('Window ',num,' not activated or defined.')
- else begin
- Normvideo;
- Window(Val[num].x1+2,Val[num].y1+2,Val[num].x2,Val[num].y2);
- Gotoxy(1,1);
- textbackground(Val[num].iattr div 16);
- textcolor(Val[num].iattr mod 16)
- end
- end;