home *** CD-ROM | disk | FTP | other *** search
/ ftp.barnyard.co.uk / 2015.02.ftp.barnyard.co.uk.tar / ftp.barnyard.co.uk / cpm / walnut-creek-CDROM / CPM / TURBOPAS / WINDOW11.LBR / WINDOW.IZC / WINDOW.INC
Text File  |  2000-06-30  |  6KB  |  263 lines

  1. {***************************************************************}
  2. {* WINDOW.INC Ver 1.1 - A utility that allows easy creation of *}
  3. {* windows for I/O purposes in a program.  Works with Turbo    *}
  4. {* Pascal.                                                     *}
  5. {* Writen by Orion Poplawski                                   *}
  6. {* 07/11/88                                                    *}
  7. {***************************************************************}
  8.  
  9.  procedure screen_init;                {Initializes pointer list}
  10.   begin {SCREEN_INIT}
  11.    ss:=nil;
  12.    sl:=nil;
  13.    s1:=nil;
  14.    s2:=nil;
  15.    wind_num:=0;
  16.   end;  {SCREEN_INIT}
  17.  
  18.  procedure find(i:integer);            {Finds window i in list}
  19.  var l:integer;
  20.   begin {FIND}
  21.    s1:=ss;
  22.    repeat;
  23.     if s1^.num<>i then s1:=s1^.next;
  24.    until s1^.num=i;
  25.   end;  {FIND}
  26.  
  27.  procedure update(i:integer);          {Draws data in window}
  28.  var l:integer;
  29.      s:string[78];
  30.   begin {UPDATE}
  31.    if i<>0 then find(i);
  32.    with s1^ do
  33.     begin {WITH}
  34.      for l:=1 to yl-2 do
  35.       begin {FOR}
  36.        gotoxy(xs+1,ys+l);
  37.        write(dta[l]);
  38.       end;  {FOR}
  39.     end;  {WITH}
  40.   end;  {UPDATE}
  41.  
  42. procedure border(i:integer);           {Draws border of window}
  43. var l:integer;
  44.  begin {BORDER}
  45.   find(i);
  46.   with s1^ do
  47.    begin {WITH}
  48.     gotoxy(xs,ys);
  49.     write('+');
  50.     for l:=1 to xl-2 do
  51.      write(io,'-');
  52.     write('+');
  53.     gotoxy(xs,ys+yl-1);
  54.     write('+');
  55.     for l:=1 to xl-2 do
  56.      write('-');
  57.     write('+');
  58.     gotoxy(xs,ys+1);
  59.     write('|');
  60.     for l:=1 to yl-3 do
  61.      write(#10#8'|');
  62.     gotoxy(xs+xl-1,ys+1);
  63.     write('|');
  64.     for l:=1 to yl-3 do
  65.       write(#10#8'|');
  66.     gotoxy(xs+1,ys);
  67.     write('[');
  68.     write(num);
  69.     write(']');
  70.     if num<10 then
  71.      write('-');
  72.     write('<');
  73.     write(title);
  74.     write('>');
  75.    end;  {WITH}
  76.   end;  {BORDER}
  77.  
  78.  procedure draw(i:integer);            {Draws entire window}
  79.   begin {DRAW}
  80.    border(i);
  81.    update(i);
  82.   end;  {DRAW}
  83.  
  84.  function create(x,y,w,l:integer;t:str):integer; {Creates new window, no draw}
  85.  var loop:integer;
  86.   begin {CREATE}
  87.    new(s1);
  88.    wind_num:=wind_num+1;
  89.    if ss=nil then
  90.     begin {IF}
  91.      ss:=s1;
  92.      sl:=s1;
  93.      s1^.num:=wind_num;
  94.      s1^.next:=nil;
  95.     end   {IF}
  96.    else
  97.     begin {ELSE}
  98.      sl^.next:=s1;
  99.      sl:=s1;
  100.      s1^.num:=wind_num;
  101.      s1^.next:=nil;
  102.     end;  {ELSE}
  103.    with s1^ do
  104.     begin {WITH}
  105.      title:=t;
  106.      xs:=x;
  107.      ys:=y;
  108.      xl:=w;
  109.      yl:=l;
  110.      s:='';
  111.      for loop:=1 to xl-2 do
  112.       s:=s+' ';
  113.      for loop:=1 to yl-2 do
  114.       dta[loop]:=s;
  115.     end;  {WITH}
  116.    create:=wind_num;
  117.   end;  {CREATE}
  118.  
  119.  procedure clear(i:integer);           {Erases window data in memory}
  120.  var l:integer;
  121.      s:string[80];
  122.   begin {CLEAR}
  123.    find(i);
  124.    with s1^ do
  125.     begin {WITH}
  126.      s:='';
  127.      for l:=1 to xl-2 do
  128.       s:=s+' ';
  129.      for l:=1 to yl-2 do
  130.       dta[l]:=s;
  131.     end;  {WITH}
  132.   end;  {CLEAR}
  133.  
  134. procedure hide(i:integer);             {Hides the window from display}
  135.  var l:integer;
  136.      s:string[80];
  137.   begin {HIDE}
  138.    find(i);
  139.    with s1^ do
  140.     begin {WITH}
  141.      s:='';
  142.      for l:=1 to xl do
  143.       s:=s+' ';
  144.      for l:=1 to yl do
  145.       begin {FOR}
  146.        gotoxy(xs,ys+l-1);
  147.        write(s);
  148.       end;  {FOR}
  149.     end;  {WITH}
  150.   end;  {HIDE}
  151.  
  152.  procedure del(l:integer);             {Deletes window from list}
  153.  var loop:integer;
  154.      s:string[80];
  155.   begin {DEL}
  156.    if s1=ss then ss:=ss^.next
  157.    else if s1=sl then
  158.     begin {IF}
  159.      sl:=s2;
  160.      s2^.next:=nil;
  161.     end   {IF}
  162.    else s2^.next:=s1^.next;
  163.    dispose(s1);
  164.   end;  {DEL}
  165.  
  166.  procedure plot(i,x,y:integer;s:str);  {Plots data on window in memory}
  167.  var l:integer;
  168.   begin {PLOT}
  169.    find(i);
  170.    with s1^ do
  171.     begin {WITH}
  172.      dta[y]:='';
  173.      if x<>1 then
  174.       for l:=1 to x-1 do
  175.        dta[y]:=dta[y]+' ';
  176.      dta[y]:=dta[y]+s;
  177.      if length(dta[y])<>xl-2 then
  178.       for l:=1 to xl-length(dta[y])-2 do
  179.        dta[y]:=dta[y]+' ';
  180.     end;  {WITH}
  181.   end;  {PLOT}
  182.  
  183.  procedure ret(i:integer);             {Prints message and awaits a <RETURN>}
  184.   begin {RET}
  185.    find(i);
  186.    with s1^ do
  187.     begin {WITH}
  188.      gotoxy(xs+1,ys+yl-1);
  189.      write('Press <RETURN>');
  190.      gotoxy(1,1);
  191.      readln;
  192.      gotoxy(xs+1,ys+yl-1);
  193.      write('--------------');
  194.     end;  {WITH}
  195.   end;  {RET}
  196.  
  197. procedure move(i,x,y:integer);         {Moves cursor to point in window}
  198.  begin {MOVE}
  199.   find(i);
  200.   with s1^ do
  201.    gotoxy(xs+x,ys+y);
  202.  end;  {MOVE}
  203.  
  204. procedure write_str(i,x,y:integer; s:s40);       {Writes string at location}
  205.  begin
  206.   move(i,x,y);
  207.   write(s);
  208.  end;
  209.  
  210. procedure read_int(i,x,y:integer; var val:integer); {Reads integer at location}
  211. const clear = '  '#8#8;
  212.  begin
  213.   repeat;
  214.    write_str(i,x,y,clear);         {Optional - Use only to erase previous data}          
  215.    {$I-}
  216.    read(val);
  217.    {$I+}
  218.   until ioresult=0;
  219.  end;
  220.  
  221. procedure in_ch(i,x,y:integer; var ch:char);   {Reads char at location}
  222. const clear = ' '#8;
  223.  begin
  224.   write_str(i,x,y,clear);         {Optional - use only to erase previous data} 
  225.   read(kbd,c);
  226.  end;
  227.  
  228. Function rstr(n:integer):s40;          {Reads string of length n}
  229. var s:string[40];
  230.     l:integer;
  231.     i,b:byte;
  232.     c:char;
  233.  
  234.  begin
  235.   l:=1;
  236.   s:='';
  237.   repeat;
  238.    read(kbd,c);
  239.    case c of
  240.             #8:if l>1 then
  241.                 begin
  242.                  write(#8);
  243.                  l:=l-1;
  244.                  delete(s,l,1);
  245.                 end;
  246.       ' '..'~':if l-1=n then write(#7)
  247.                else
  248.                 begin
  249.                  s:=s+c;
  250.                  l:=l+1;
  251.                  write(c);
  252.                 end;
  253.    end;
  254.   until c=#13;
  255.   rstr:=s;
  256.  end;
  257.  
  258. procedure read_str(i,x,y,len:integer; var st:s40);
  259.  begin
  260.   move(i,x,y);
  261.   st:=rstr(len);
  262.  end;
  263.