{$ifndef unix}
{$A+,B-,D+,E+,F-,G+,I+,L+,N+,O+,P+,Q-,R-,S+,T-,V-,X+,Y+}
{$else}
{$B-,I+,S+,T-,X+}
{$endif}
unit listen;

interface
uses
 tstring,
 types;

procedure VisualContact(rasse,typ:word;id:longint);
{ typ:0=Schiff 1=Basis 2=Planet 3=Gegner-Schiff 4=unbek. Planet
	5=bekannter, fremder Planet 6=fremde Basis}

function getrace(x1:byte;x2:longint;t:string78):longint;
function shiplist(rasse,x,y,z,mode:integer;xclude:longint;t:string78;plan:byte):longint;
{ -1:ESC/kein Schiff -2:Planet/Basis }
function PlanList(rasse,x,y,z,mode:integer):longint;
{-1:ESC -2 kein Planet}
function BaseList(rasse,x,y,z,mode:integer):longint;
{-1:ESC -2 kein Planet}

implementation

uses
 utils,
 kb,
 evgraph,
 grafik,
 data,
 maus2kb;

function getrace(x1:byte;x2:longint;t:string78):longint;
var
 k:longint;
 i:word;
 rdata:t_bdata;
 c:char;
begin
 x2:=not(x2 or (longint(1) shl x1) and usedrassen);
 if x2=0 then begin
  getrace:=32;
  exit;
 end else begin
  k:=x2;
  for x1:=0 to 31 do begin
   if k=longint(1)shl x1 then begin
    getrace:=x1;
    exit;
   end;
  end;
 end;
 initb(rdata,12,44,64,17,$f,8);
 window(10,42,13+64*8,45+17*16);
 writeg(rdata,#12+t);
 for i:=0 to 15 do begin
  if (longint(1) shl i)and x2<>0
  then writeg(rdata,#13#10#0'C'#$8c+az10[i+1]+':'+#0'C'#$8e)
  else writeg(rdata,#13#10#0'C'#$87+az10[i+1]+':');
  writeg(rdata,nstring(rassen[i],32));
  if (longint(1) shl (i+16))and x2<>0
  then writeg(rdata,#0'C'#$8c+az10[i+17]+':'+#0'C'#$8e)
  else writeg(rdata,#0'C'#$87+az10[i+17]+':');
  writeg(rdata,nstring(rassen[i+16],32));
 end;
 repeat
  c:=upcase2(kbreadkey);
  case c of
   #0:begin kbreadkey;mreset;end;
   '0'..'9','A'..'V':begin
    x1:=pos(c,az10)-1;
    if x2 and (longint(1) shl x1)<>0 then begin
     getrace:=x1;
     exit;
    end else beep;
   end;
   #27:begin
    getrace:=32;
    exit;
   end;
  else
   beep;
  end;
 until false;
end;

function shiplist(rasse,x,y,z,mode:integer;xclude:longint;t:string78;plan:byte):longint;
{ -1:ESC/kein Schiff -2:Planet/Basis }
var
 first,
 next,
 now:longint;
 s:array[0..18] of longint;
 i,d:word;
 n,
 p:word;
 redraw:byte;
 sdata:t_bdata;
 c:char;cs:byte;
 schiff:tp_schiff;
begin
 p:=0;
 first:=firstship(rasse,x,y,z,mode);
 if first=xclude then first:=nextship(first,rasse,x,y,z,mode);
 if first=xclude then first:=-1;
 if first=-1 then begin
  shiplist:=-1-byte(plan<>0);
  exit;
 end;
 d:=0;
 initb(sdata,12,12+32,62,19,$f,8);
 window(10,10+32,381+48+80,317+32);
 repeat
  writeg(sdata,#0'C'#$8f#12+t);
  case d of
   0:begin
    if p=0 then begin
     next:=first;
     if plan<>0 then begin
      i:=1;
      s[0]:=-2;
     end else begin
      i:=0;
     end;
    end else begin
     i:=1;
     s[0]:=next;
    end;
    repeat
     s[i]:=next;
     if next<>-1 then inc(i);
     next:=nextship(next,rasse,x,y,z,mode);
     if next=xclude then next:=nextship(next,rasse,x,y,z,mode);
    until (i>18)or(next=first);
    n:=i;
   end;
   1:begin
    i:=18;
    next:=s[0];
    repeat
     now:=lastship(s[0],rasse,x,y,z,mode);
     if now=xclude then now:=nextship(now,rasse,x,y,z,mode);
     dec(i);
     s[i]:=now;
    until i=0;
    n:=18;
    d:=1;
   end;
   2:begin
    p:=0;
    repeat
     if p=0 then begin
      next:=first;
      if plan<>0 then begin
       i:=1;
       s[0]:=-2;
      end else begin
       i:=0;
      end;
     end else begin
      i:=1;
      s[0]:=next;
     end;
     repeat
      s[i]:=next;
      if next<>-1 then inc(i);
      next:=nextship(next,rasse,x,y,z,mode);
      if next=xclude then next:=nextship(next,rasse,x,y,z,mode);
     until (i>18)or(next=first);
     n:=i;
    until next=first;
   end;
  end;
  if(p=0) then begin
   if n=0 then begin
    shiplist:=-1;
    exit;
   end;
  end;
  d:=0;
  for i:=0 to 17 do begin
   if i<n then begin
    writeg(sdata,#13#10' '#0'C'#$8c+az10[i+1]+':'#0'C'#$8e);
    if s[i]=-2 then case plan of
     1:writeg(sdata,'<Planet>            ');
     2:writeg(sdata,'<Basis>             ');
     3:writeg(sdata,'<Planet/Basis>      ');
    end else begin
     schiff:=getship(s[i]);
     with schiff^ do if (owner<>rasse)and(mission1<>25)and(mission2<>rasse)
     then writeg(sdata,#0'C'#$8d);
     writeg(sdata,nstring(schiff^.schiffname,20));
     writeg(sdata,nstring(rassen[schiff^.owner],30));
    end;
   end else writeg(sdata,#10);
  end;
  if next<>first
  then writeg(sdata,#13#10#0'C'#$8f'Seite:'#0'C'#$8a+strg(p)+
		       #0'C'#$8e' (PgUp/PgDn)');
  repeat
   redraw:=0;
   c:=upcase2(kbreadkey);
   if c=#0 then cs:=byte(kbreadkey) else cs:=kbscancode;
   case c of
    '0'..'9','A'..'Z':begin
     cs:=pos(c,az10)-1;
     if cs<n then begin
      shiplist:=s[cs];
      exit;
     end;
    end;
    #27:begin
     shiplist:=-1;
     exit;
    end;
    #13:begin
     shiplist:=s[0];
     exit;
    end;
    #0:case cs of
     $49:begin
      if p=0 then d:=2 else begin
       dec(p);
       d:=1;
      end;
      redraw:=1;
     end;
     $51:begin
      if next=first then p:=0 else inc(p);
      redraw:=1;
     end;
    else
     mreset;
    end;
   end;
  until redraw>0;
 until false;
end;

function PlanList(rasse,x,y,z,mode:integer):longint;
{-1:ESC -2 kein Planet}
var
 pagestart:array[0..58] of word;
 page:array[0..16] of tp_planet;
 pages,
 nlp,
 n,
 p,
 i,j:word;
 o:t_bdata;
 c:char;
 cs,
 redraw:byte;
 planet,
 planet1:tp_planet;
begin
 pages:=0;
 n:=0;
 nlp:=0;
 planet:=getplan(firstplan(rasse,x,y,z,mode));
 planet1:=planet;
 if planet<>nil then repeat
  if nlp=17 then nlp:=0;
  if nlp=0 then begin
   pagestart[pages]:=planet^.id_nr;
   inc(pages);
  end;
  page[nlp]:=planet;
  inc(nlp);
  planet:=getplan(nextplan(planet^.id_nr,rasse,x,y,z,mode));
 until planet=planet1;
 if nlp=0 then begin
  planlist:=-2;
  exit;
 end else if (nlp=1)and(pages=1) then begin
  planlist:=pagestart[0];
  exit;
 end;

 p:=0;
 window(10,10,13+35*8,13+19*16);
 initb(o,12,12,35,19,8,15);
 repeat
  if p<>pages-1 then n:=16 else n:=nlp-1;
  i:=pagestart[p];
  page[0]:=getplan(i);

  for j:=1 to n do begin
   i:=nextplan(i,rasse,x,y,z,mode);
   page[j]:=getplan(i);
  end;

  writeg(o,#0'C'#$8f#12'Planeten '#0'C'#$87'(*=eigene)'#0'C'#$8e);
  for i:=0 to n do begin
   with page[i]^ do begin
    if racetyp=rasse then writeg(o,#13#10' *') else writeg(o,#13#10'  ');
    writeg(o,#0'C'#$8c+az10[i+1]+':'#0'C'#$8e+name);
   end;
  end;
  if pages>1 then writeg(o,#13#10#0'C'#$8c'Seite: '+strg(p+1)+'/'+strg(pages));
  repeat
   c:=upcase2(kbreadkey);
   if c=#0 then cs:=byte(kbreadkey) else cs:=kbscancode;
   case c of
    '0'..'9','A'..'Z':begin
     cs:=pos(c,az10)-1;
     if cs<=n then begin
      planlist:=page[cs]^.id_nr;
      exit;
     end;
    end;
    #27:begin
     planlist:=-1;
     exit;
    end;
    #0:case cs of
     $49:begin
      if p=0 then p:=pages-1 else dec(p);
      redraw:=1;
     end;
     $51:begin
      if p=pages-1 then p:=0 else inc(p);
      redraw:=1;
     end;
    end;
   end;
  until redraw>0;
 until false;
end;

function BaseList(rasse,x,y,z,mode:integer):longint;
{-1:ESC -2 kein base}
var
 pagestart:array[0..70] of word;
 page:array[0..16] of tp_starbase;
 pages,
 nlp,
 n,
 p,
 i,j:word;
 o:t_bdata;
 c:char;
 cs,
 redraw:byte;
 base,
 base1:tp_starbase;
begin
 pages:=0;
 n:=0;
 nlp:=0;

 base:=getbase(firstbase(rasse,x,y,z,mode));
 base1:=base;
 if base<>nil then repeat
  if nlp=17 then nlp:=0;
  if nlp=0 then begin
   pagestart[pages]:=base^.id_nr;
   inc(pages);
  end;
  page[nlp]:=base;
  inc(nlp);
  base:=getbase(nextbase(base^.id_nr,rasse,x,y,z,mode));
 until base=base1;

 if nlp=0 then begin
  baselist:=-2;
  exit;
 end else if (nlp=1)and(pages=1) then begin
  baselist:=pagestart[0];
  exit;
 end;

 p:=0;
 window(10,10,13+35*8,13+19*16);
 initb(o,12,12,35,19,8,15);
 repeat
  if p<>pages-1 then n:=16 else n:=nlp-1;
  i:=pagestart[p];
  page[0]:=getbase(i);
  for j:=1 to n do begin
   repeat
    inc(i);
    page[j]:=getbase(i);
   until (abs(page[j]^.posx-x)<100)
   and(abs(page[j]^.posy-y)<100)
   and(abs(page[j]^.posz-z)<100);
  end;
  writeg(o,#0'C'#$8f#12'Raumbasen '#0'C'#$87'(*=eigene)'#0'C'#$8e);
  for i:=0 to n do begin
   with page[i]^ do begin
    if owner=rasse then writeg(o,#13#10' *') else writeg(o,#13#10'  ');
    writeg(o,#0'C'#$8c+az10[i+1]+':'#0'C'#$8e+name);
   end;
  end;
  repeat
   c:=upcase2(kbreadkey);
   if c=#0 then cs:=byte(kbreadkey) else cs:=kbscancode;
   case c of
    '0'..'9','A'..'Z':begin
     cs:=pos(c,az10)-1;
     if cs<=n then begin
      baselist:=page[cs]^.id_nr;
      exit;
     end;
    end;
    #27:begin
     baselist:=-1;
     exit;
    end;
    #0:case cs of
     $49:begin
      if p=0 then p:=pages-1 else dec(p);
      redraw:=1;
     end;
     $51:begin
      if p=pages-1 then p:=0 else inc(p);
      redraw:=1;
     end;
    end;
   end;
  until redraw>0;
 until false;
end;

procedure VisualContact(rasse,typ:word;id:longint);
var
 d:t_bdata;
 s:tp_schiff;
 p:tp_planet;
 b:tp_starbase;
 tx,ty,tz:integer;
 tm:longint;
 oair:extended;
{$ifndef unix}
 st:string6;
{$else}
 st:array[1..6] of char;
{$endif}
begin
 case typ of
  0:{Schiff}begin
   initb(d,340,8,36,19,$f,8);
   window(338,6,629,9+19*16);
   writeg(d,#0'C'#$8f#12'Schiff:'#13#10);
   s:=getship(id);
   with s^ do with hulls[typnr] do begin
    showp(344,28,bild);
    writeg(d,#0'X'#9#0'C'#$8e'@'+strg(posx)+','+strg(posy)+','+strg(posz));
    writeg(d,#0'X'#9#10'^'+strg(targetx)+','+strg(targety)+','+strg(targetz)+
	     #10#0'X'#9#10#0'C'#$87);
    if baseid(posx,posy,posz)<>-1 then writeg(d,'(Basis) ');
    if planid(posx,posy,posz)<>-1 then writeg(d,'(Planet) ');
    writeg(d,#13#10#10#0'C'#$8f+schiffname+
	#13#10#0'C'#$8e+name+
	#13#10#0'C'#$8c);
    if damage=0 then writeg(d,#0'C'#$8a);
    writeg(d,w2s(damage div 10,3,false,false)+','+char(damage mod 10+48)+
	#0'C'#$8e' % beschädigt'#13#10#10#0'C'#$8f'Mission:'#13#10#0'C'#$8e);
    writemissions(s,rasse,d,mission1,mission2,mission3,mission4,false);
    writeg(d,#10#0'C'#$8f'Gewicht : '#0'C'#$8a+strg(sgewicht(s)));
    tx:=posx-targetx;
    ty:=posy-targety;
    tz:=posz-targetz;
    tm:=max(max(abs(tx),abs(ty)),max(abs(tz),1));
    writeg(d,#13#10#0'C'#$8f'Richtung: '#0'C'#$8a+strg((tx*100)div tm)+','+
			 strg((ty*100)div tm)+','+strg((tz*100)div tm));
    writeg(d,#13#10#0'C'#$8f'Warp    : '#0'C'#$8a+char(48+warp));
   end;
  end;
  1:{Basis}begin
   initb(d,340,8,36,21,$f,8);
   window(338,6,629,21*16+9);
   writeg(d,#0'C'#$8f#12'Basis:'#13#10);
   b:=getbase(id);
   with b^ do begin
    showp(344,28,169);
    writeg(d,#0'X'#9#0'C'#$8e'@'+strg(posx)+','+strg(posy)+','+strg(posz));
    writeg(d,#13#10#10#10#10#10#0'C'#$8f+name+#13#10#0'C'#$8e);
    tm:=planid(posx,posy,posz);
    if tm<>-1 then begin
     p:=getplan(tm);
     writeg(d,p^.name);
    end;
    if damage=0 then writeg(d,#13#10#0'C'#$8a)else writeg(d,#13#10#0'C'#$8c);
    writeg(d,w2s(damage div 10,3,false,false)+','+char(damage mod 10+48)+
	#0'C'#$8e' % beschädigt'#13#10#10+
	#0'C'#$8f'Verteidigung:'#0'C'#$8a+w2s(defs,5,false,false));
    writeg(d,#13#10#0'C'#$8f'Jäger       :'#0'C'#$8a+w2s(fighter,5,false,false));
    writeg(d,#13#10#0'C'#$8f'Besatzung   :'#0'C'#$8a);
    if crew<5000 then writeg(d,#0'C'#$8c);
    writeg(d,w2s(crew,5,false,false));
    writeg(d,#13#10#10#0'C'#$8f'TechLevel: '+
		w2s(techH and $f,2,false,false)+','+
		w2s(techE and $f,2,false,false)+','+
		w2s(TechB and $f,2,false,false)+','+
		w2s(TechT and $f,2,false,false)+','+
		w2s(TechTl and $f,2,false,false)+','+
		w2s(TechM and $f,2,false,false)+
		#13#10#0'C'#$87'            H  A  W  T  TR M');

    if tm<>-1 then with p^ do begin
     writeg(d,#13#10#10#0'C'#$8f'Neutronium :'#0'C'#$8a+w2s(minedneutr,6,false,false)+
		 #13#10#0'C'#$8f'Molybdenium:'#0'C'#$8a+w2s(minedmolyb,6,false,false)+
		 #13#10#0'C'#$8f'Duranium   :'#0'C'#$8a+w2s(mineddura,6,false,false)+
		 #13#10#0'C'#$8f'Tritanium  :'#0'C'#$8a+w2s(minedtrit,6,false,false));
    end else begin
     writeg(d,#13#10#10#0'C'#$8f'Neutronium :'#0'C'#$8a+w2s(neutr,6,false,false)+
		 #13#10#0'C'#$8f'Molybdenium:'#0'C'#$8a+w2s(molyb,6,false,false)+
		 #13#10#0'C'#$8f'Duranium   :'#0'C'#$8a+w2s(dura,6,false,false)+
		 #13#10#0'C'#$8f'Tritanium  :'#0'C'#$8a+w2s(trit,6,false,false));
    end;
   end;
  end;
  2:{Planet}begin
   initb(d,340,8,36,26,$f,8);
   window(338,6,629,26*16+9);
   writeg(d,#0'C'#$8f#12'Planet:'#13#10);
   p:=getplan(id);
   with p^ do begin
    showp(344,28,bild);
    writeg(d,#0'X'#9#0'C'#$8e'@'+strg(posx)+','+strg(posy)+','+strg(posz));
    writeg(d,#13#10#10#10#10#10#0'C'#$8f+name+#13#10#0'C'#$8e);
    tm:=baseid(posx,posy,posz);
    if tm<>-1 then begin
     b:=getbase(tm);
     writeg(d,b^.name);
    end;
    writeg(d,#13#10#10#0'C'#$8f'Kolonisten:'#0'C'#$8a+l2s(raceanz,8,false,false,false));
    writeg(d,   #13#10#0'C'#$8f'Natives   :'#0'C'#$8a+l2s(nativeanz,8,false,false,false)+#13#10#0'C'#$8e);
    if nativeanz>0 then writeg(d,natives[nativetyp]);
    writeg(d,#13#10#0'C'#$8f'Ges./Max. :'#0'C'#$8e+l2s(nativeanz+raceanz,8,false,false,false)+
	     '/'+l2s(size,8,false,false,false));
    writeg(d,#13#10#0'C'#$8f'Minen       :'#0'C'#$8a+w2s(mines,5,false,false)+
	     #13#10#0'C'#$8f'Fabriken    :'#0'C'#$8a+w2s(facts,5,false,false)+
	     #13#10#0'C'#$8f'Abwehrposten:'#0'C'#$8a+w2s(defs,5,false,false)+
	     #13#10#0'C'#$8f'Kasernen    :'#0'C'#$8a+w2s(forts,5,false,false));
    writeg(d,#13#10#10#0'C'#$8f'Gefördert:'+
		#13#10#0'C'#$8f'Neutronium :'#0'C'#$8a+w2s(minedneutr,6,false,false)+
		#13#10#0'C'#$8f'Molybdenium:'#0'C'#$8a+w2s(minedmolyb,6,false,false)+
		#13#10#0'C'#$8f'Duranium   :'#0'C'#$8a+w2s(mineddura,6,false,false)+
		#13#10#0'C'#$8f'Tritanium  :'#0'C'#$8a+w2s(minedtrit,6,false,false));
    writeg(d,#13#10#10#0'C'#$8f'Klima: '#0'C'#$8e+klima[nklima(climate)]);
    writeg(d,#13#10#0'C'#$8f'Luft : '#0'C'#$8e+air[nair(climate)]+
	     #0'C'#$8f' Typ: '#0'C'#$8a+w2s(climate shr 12,2,false,false)+'  ');
    tm:=trunc(optiair(rasse,climate)*1000+0.5);
    if tm<>1000 then begin
     st:=w2s(tm,4,false,false);
     if st[3]=' ' then st[3]:='0';
{$ifndef unix} st[0]:=#6;{$endif}
     st[5]:=st[4];
     st[4]:='.';
     st[6]:='%';
    end else st:='';
    writeg(d,#0'C'#$8b+st+'Optimal');
   end;
  end;
  3:{gegner-Schiff}begin
   initb(d,340,8,36,15,$f,8);
   window(338,6,629,9+15*16);
   writeg(d,#0'C'#$8f#12'Schiff:'#13#10);
   s:=getship(id);
   with s^ do with hulls[typnr] do begin
    showp(344,28,bild);
    writeg(d,#0'X'#9#0'C'#$8e'@'+strg(posx)+','+strg(posy)+','+strg(posz));
    writeg(d,#10#10#0'X'#9#10#0'C'#$87);
    if baseid(posx,posy,posz)<>-1 then writeg(d,'(Basis) ');
    if planid(posx,posy,posz)<>-1 then writeg(d,'(Planet) ');
    writeg(d,#13#10#10#0'C'#$8f+schiffname+
	#13#10#0'C'#$8e+name+
	#13#10#10#0'C'#$8f'Rasse:'#13#10#0'C'#$8e);
    writeg(d,rassen[s^.owner]);
    writeg(d,#13#10#10#0'C'#$8f'Gewicht : '#0'C'#$8a+strg(sgewicht(s)));
    tx:=targetx-posx;
    ty:=targety-posy;
    tz:=targetz-posz;
    tm:=max(max(abs(tx),abs(ty)),max(abs(tz),1));
    writeg(d,#13#10#0'C'#$8f'Richtung: '#0'C'#$8a+l2s((tx*100)div tm,9,true,false,true)+','+
	  l2s((ty*100)div tm,9,true,false,true)+','+l2s((tz*100)div tm,9,true,false,true));
    writeg(d,#13#10#0'C'#$8f'Warp    : '#0'C'#$8a+char(48+warp));
   end;
  end;
  4,5:{gegner-Planet}begin
   initb(d,340,8,36,13,$f,8);
   window(338,6,629,13*16+9);
   writeg(d,#0'C'#$8f#12'Planet:'#13#10);
   p:=getplan(id);
   with p^ do begin
    showp(344,28,bild);
    writeg(d,#0'X'#9#0'C'#$8e'@'+strg(posx)+','+strg(posy)+','+strg(posz));
    writeg(d,#13#10#10#10#10#10#0'C'#$8f+name+#13#10#0'C'#$8e);
    tm:=baseid(posx,posy,posz);
    if tm<>-1 then begin
     b:=getbase(tm);
     writeg(d,b^.name);
    end;
    writeg(d,#13#10);
    if (typ=5)and(raceanz<>0) then writeg(d,rassen[racetyp]);
    writeg(d,#13#10);
    if nativeanz>0 then writeg(d,natives[nativetyp]);
    writeg(d,#13#10#0'C'#$8f'Max. Bev. : '#0'C'#$8e+l2s(size,8,false,false,false));
    writeg(d,#13#10#0'C'#$8f'Klima: '#0'C'#$8e+klima[nklima(climate)]);
    writeg(d,#13#10#0'C'#$8f'Luft : '#0'C'#$8e+air[nair(climate)]+
	     #0'C'#$8f' Typ: '#0'C'#$8a+w2s(climate shr 12,2,false,false)+'  ');
    tm:=trunc(optiair(rasse,climate)*1000+0.5);
    if tm<>1000 then begin
     st:=w2s(tm,4,false,false);
     if st[3]=' ' then st[3]:='0';
{$ifndef unix}
     st[0]:=#6;
{$endif}
     st[5]:=st[4];
     st[4]:='.';
     st[6]:='%';
    end else st:='';
    writeg(d,#0'C'#$8b+st+'Optimal');
   end;
  end;
  6:{gegner-Basis}begin
   initb(d,340,8,36,11,$f,8);
   window(338,6,629,11*16+9);
   writeg(d,#0'C'#$8f#12'Basis:'#13#10);
   b:=getbase(id);
   with b^ do begin
    showp(344,28,169);
    writeg(d,#0'X'#9#0'C'#$8e'@'+strg(posx)+','+strg(posy)+','+strg(posz));
    writeg(d,#13#10#10#10#10#10#0'C'#$8f+name+#13#10#0'C'#$8e);
    tm:=planid(posx,posy,posz);
    if tm<>-1 then begin
     p:=getplan(tm);
     writeg(d,p^.name);
    end;
    if damage=0 then writeg(d,#13#10#0'C'#$8a)else writeg(d,#13#10#0'C'#$8c);
    writeg(d,w2s(damage div 10,3,false,false)+','+char(damage mod 10+48)+
	#0'C'#$8e' % beschädigt'#13#10#10);
    if crew<5000 then writeg(d,#0'C'#$8c'nicht Einstazbereit');
   end;
  end;
 end;
 kbreset;
 if kbreadkey=#0 then kbreadkey;
 mreset;
end;


end.
