home *** CD-ROM | disk | FTP | other *** search
/ Programmer 7500 / MAX_PROGRAMMERS.iso / INFO / TURBOPAS / TP002.ZIP / WINDMNGR.INC < prev    next >
Encoding:
Text File  |  1986-08-13  |  4.4 KB  |  133 lines

  1. { (C) Jim Everingham, 1985 }
  2. Const MaxScreens= 8;  { change this to however many windows you will need.}
  3.  
  4. type MaxStr     = String[80];
  5.      windowvals = record
  6.      fg,x1,y1,x2,y2,fattr,iattr,cattr,tattr,tt,frm,wind : integer;
  7.       txt : Maxstr;
  8.    end;
  9.      windata    = Array[1..4000] of byte;
  10.  
  11. var  val_aray   : Array[0..MaxScreens] of windowvals;
  12.      Screen     : Array[0..MaxScreens] of windata;
  13.      MonoBuf    : windata absolute $B000:$0000;
  14.      ColorBuf   : windata absolute $B800:$0000;
  15.      Crt,Winpage,stack_top:Integer;
  16.      CrtMode    : byte absolute $0040:$0049;
  17.      Color      : boolean;
  18.  
  19. Procedure Windmngr;External'Windmngr.bin';
  20. Procedure Frame(x_1,y_1,x_2,y_2,f_attr,i_attr,f_rm,_wind,c_flag,
  21.                                       p_g:integer);External Windmngr[0];
  22. Procedure Title(t_xt:Maxstr;c_attr,t_attr,x_11,y_11,tt,
  23.                                       p_g:integer);External Windmngr[3];
  24. Procedure Mode(md:integer);external Windmngr[6];
  25. Procedure WriteXY(t_xt:Maxstr;I_attr,x_,y_,p_g:integer);External Windmngr[9];
  26. Procedure Initialize;
  27. begin
  28.   Crt:=1;
  29.   Winpage:=0;
  30.   Stack_top:=0;
  31.   Color := CrtMode <> 7;   { Color is set true if a color monitor is in use }
  32. end; { of initialize }
  33.  
  34. Procedure SetWindow(Num,x1,y1,x2,y2,fattr,iattr,frm,wind:integer;
  35.                                          txt:Maxstr; tattr,cattr,tt:integer);
  36. begin
  37.     if num<=MaxScreens then
  38.       begin
  39.         Val_aray[num].fg:=1;
  40.         Val_aray[num].x1:=x1;
  41.         Val_aray[num].x2:=x2;
  42.         Val_aray[num].y1:=y1;
  43.         Val_aray[num].y2:=y2;
  44.         Val_aray[num].fattr:=fattr;
  45.         Val_aray[num].iattr:=iattr;
  46.         Val_aray[num].frm:=frm;
  47.         Val_aray[num].wind:=wind;
  48.         Val_aray[num].cattr:=cattr;
  49.         Val_aray[num].tattr:=tattr;
  50.         Val_aray[num].tt:=tt;
  51.         Val_aray[num].txt:=txt
  52.       end else
  53.         Writeln('Only up to ',MaxScreens,' may be defined.')
  54. end;
  55. Procedure Open(Num:integer);
  56. begin
  57.      if val_aray[num].fg = 1 then
  58.        begin
  59.          if stack_top=0 then
  60.            begin
  61.              Mode(0);
  62.              If (Color) then
  63.                Move(ColorBuf,Screen[stack_top],4000)
  64.              else
  65.                Move(MonoBuf,Screen[stack_top],4000);
  66.              Mode(1);
  67.              Stack_top:=1
  68.            end
  69.          else
  70.            begin
  71.              Mode(0);
  72.              If (Color) then
  73.                Move(ColorBuf,Screen[Stack_top],4000)
  74.              else
  75.                Move(MonoBuf,Screen[Stack_top],4000);
  76.              Mode(1);
  77.              Stack_top:=Succ(Stack_top)
  78.            end;
  79.          Frame(Val_aray[num].x1,Val_aray[num].y1,Val_aray[num].x2,
  80.                Val_aray[num].y2,Val_aray[num].fattr, Val_aray[num].iattr,
  81.                Val_aray[num].frm,Val_aray[num].wind,Crt,WinPage);
  82.          if val_aray[num].txt > '' then
  83.          Title(Val_aray[num].txt,Val_aray[num].cattr,Val_aray[num].tattr,
  84.                Val_aray[num].x1, Val_aray[num].y1,Val_aray[num].tt,Winpage);
  85.          Window(Val_aray[num].x1+2,Val_aray[num].y1+2,Val_aray[num].x2,
  86.                 Val_aray[num].y2);
  87.          Gotoxy(1,1);
  88.          textbackground(Val_aray[num].iattr div 16);
  89.          textcolor(Val_aray[num].iattr mod 16)
  90.        end
  91.      else
  92.        Writeln('Window ',num,' Not Defined.')
  93. end;
  94.  
  95. Procedure Remove(Num:integer);
  96. begin
  97.   if stack_top-num >= 0 then
  98.    begin
  99.      mode(0);
  100.      If (Color) then
  101.        move(screen[Stack_top-Num],ColorBuf,4000)
  102.      else
  103.        move(screen[Stack_top-Num],MonoBuf,4000);
  104.      mode(1);
  105.      Stack_top:=Stack_top-Num;
  106.      Window(Val_aray[STack_top].x1+2,Val_aray[Stack_top].y1+2,
  107.             Val_aray[Stack_top].x2,Val_aray[Stack_top].y2);
  108.      gotoxy(1,1);
  109.      textbackground(Val_aray[Stack_top].iattr div 16);
  110.      textcolor(Val_aray[Stack_top].iattr mod 16);
  111.      if stack_top=0 then begin
  112.        normvideo;
  113.        window(1,1,80,25);
  114.        gotoxy(1,1)
  115.      end
  116.    end
  117.  else
  118.   Write('Invalid Number, only ',stack_top,' windows active.')
  119. end;
  120.  
  121. Procedure SelectWindow(Num:integer);
  122. begin
  123.      if Num>Stack_top then write('Window ',num,' not activated or defined.')
  124.      else begin
  125.        Normvideo;
  126.        Window(Val_aray[num].x1+2,Val_aray[num].y1+2,Val_aray[num].x2,
  127.               Val_aray[num].y2);
  128.        Gotoxy(1,1);
  129.        textbackground(Val_aray[num].iattr div 16);
  130.        textcolor(Val_aray[num].iattr mod 16)
  131.      end
  132. end;
  133.