home *** CD-ROM | disk | FTP | other *** search
- { (C) Jim Everingham, 1985 }
- Const MaxScreens= 8; { change this to however many windows you will need.}
-
- 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_aray : Array[0..MaxScreens] of windowvals;
- Screen : Array[0..MaxScreens] of windata;
- MonoBuf : windata absolute $B000:$0000;
- ColorBuf : windata absolute $B800:$0000;
- Crt,Winpage,stack_top:Integer;
- CrtMode : byte absolute $0040:$0049;
- Color : boolean;
-
- 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;
- Color := CrtMode <> 7; { Color is set true if a color monitor is in use }
- end; { of initialize }
-
- 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_aray[num].fg:=1;
- Val_aray[num].x1:=x1;
- Val_aray[num].x2:=x2;
- Val_aray[num].y1:=y1;
- Val_aray[num].y2:=y2;
- Val_aray[num].fattr:=fattr;
- Val_aray[num].iattr:=iattr;
- Val_aray[num].frm:=frm;
- Val_aray[num].wind:=wind;
- Val_aray[num].cattr:=cattr;
- Val_aray[num].tattr:=tattr;
- Val_aray[num].tt:=tt;
- Val_aray[num].txt:=txt
- end else
- Writeln('Only up to ',MaxScreens,' may be defined.')
- end;
- Procedure Open(Num:integer);
- begin
- if val_aray[num].fg = 1 then
- begin
- if stack_top=0 then
- begin
- Mode(0);
- If (Color) then
- Move(ColorBuf,Screen[stack_top],4000)
- else
- Move(MonoBuf,Screen[stack_top],4000);
- Mode(1);
- Stack_top:=1
- end
- else
- begin
- Mode(0);
- If (Color) then
- Move(ColorBuf,Screen[Stack_top],4000)
- else
- Move(MonoBuf,Screen[Stack_top],4000);
- Mode(1);
- Stack_top:=Succ(Stack_top)
- end;
- Frame(Val_aray[num].x1,Val_aray[num].y1,Val_aray[num].x2,
- Val_aray[num].y2,Val_aray[num].fattr, Val_aray[num].iattr,
- Val_aray[num].frm,Val_aray[num].wind,Crt,WinPage);
- if val_aray[num].txt > '' then
- Title(Val_aray[num].txt,Val_aray[num].cattr,Val_aray[num].tattr,
- Val_aray[num].x1, Val_aray[num].y1,Val_aray[num].tt,Winpage);
- Window(Val_aray[num].x1+2,Val_aray[num].y1+2,Val_aray[num].x2,
- Val_aray[num].y2);
- Gotoxy(1,1);
- textbackground(Val_aray[num].iattr div 16);
- textcolor(Val_aray[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);
- If (Color) then
- move(screen[Stack_top-Num],ColorBuf,4000)
- else
- move(screen[Stack_top-Num],MonoBuf,4000);
- mode(1);
- Stack_top:=Stack_top-Num;
- Window(Val_aray[STack_top].x1+2,Val_aray[Stack_top].y1+2,
- Val_aray[Stack_top].x2,Val_aray[Stack_top].y2);
- gotoxy(1,1);
- textbackground(Val_aray[Stack_top].iattr div 16);
- textcolor(Val_aray[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_aray[num].x1+2,Val_aray[num].y1+2,Val_aray[num].x2,
- Val_aray[num].y2);
- Gotoxy(1,1);
- textbackground(Val_aray[num].iattr div 16);
- textcolor(Val_aray[num].iattr mod 16)
- end
- end;