{$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 menus4;

interface
uses
 types;

procedure transfersp(s1:tp_schiff;var i1:sint;var i2:lint;delta:integer);
procedure transferspneutr(s1:tp_schiff;var i2:lint;delta:integer);
procedure transferspcreds(s1:tp_schiff;var i2:lint;delta:integer);
procedure transferspcols(s2:tp_schiff;var i2:lint;delta:lint);
procedure transfersbcols(s2:tp_schiff;var i2:lint;delta:lint);
procedure transfersbtb(s1:tp_schiff;var i1:sint;var i2:sint;delta:integer);
procedure transfersbfighters(s1:tp_schiff;var i1:sint;var i2:byte;delta:integer);

procedure transfersscols(s1,s2:tp_schiff;delta:lint);
procedure transferssneutr(s1,s2:tp_schiff;delta:integer);
procedure transfersscreds(s1,s2:tp_schiff;delta:integer);
procedure transferss(s1,s2:tp_schiff;var i1,i2:sint;delta:integer);


implementation

uses
 tstring,
 utils,
 kb,
 grafik,
 data,
 maus2kb,
 schedule,
 listen,
 menus1,
 menus2,
 menus3,
 menus5;


procedure transferss(s1,s2:tp_schiff;var i1,i2:sint;delta:integer);
var
 s3:tp_schiff;
 i3:integer;
 d:boolean;
begin
 if delta=0 then exit;
 if delta<0 then begin { immer s1->s2}
  s3:=s2;
  s2:=s1;
  s1:=s3;
  i3:=i2;
  i2:=i1;
  i1:=i3;
  delta:=-delta;
  d:=true;
 end else d:=false;
 if delta>i1 then delta:=i1;
 i3:=hulls[s2^.typnr].maxmasse-sgewicht(s2);
 if delta>i3 then delta:=i3;
 inc(i2,delta);
 dec(i1,delta);
 if d then begin
  i3:=i2;
  i2:=i1;
  i1:=i3;
 end;
end;

procedure transfersscreds(s1,s2:tp_schiff;delta:integer);
var
 s3:tp_schiff;
 i3:integer;
 d:boolean;
begin
 if delta=0 then exit;
 if delta<0 then begin { immer s1->s2}
  s3:=s2;
  s2:=s1;
  s1:=s3;
  delta:=-delta;
  d:=true;
 end else d:=false;
 with s1^ do if delta>cred then delta:=cred;
 with s2^ do if delta>10000-cred then delta:=10000-cred;
 inc(s2^.cred,delta);
 dec(s1^.cred,delta);
end;

procedure transferssneutr(s1,s2:tp_schiff;delta:integer);
var
 s3:tp_schiff;
 i3:integer;
begin
 if delta=0 then exit;
 if delta<0 then begin { immer s1->s2}
  s3:=s2;
  s2:=s1;
  s1:=s3;
  delta:=-delta;
 end;
 with s1^ do if delta>neutr then delta:=neutr;
 with s2^ do with hulls[typnr] do begin
  if delta>maxfuel-neutr then delta:=maxfuel-neutr;
  i3:=maxmasse-sgewicht(s2);
 end;
 if delta>i3 then delta:=i3;
 inc(s2^.neutr,delta);
 dec(s1^.neutr,delta);
end;

procedure transfersp(s1:tp_schiff;var i1:sint;var i2:lint;delta:integer);
var
 s3:tp_schiff;
 i3:integer;
begin
 if delta=0 then exit;
 if delta<0 then begin
  delta:=-delta;
  if delta>i2 then delta:=i2;
  i3:=hulls[s1^.typnr].maxmasse-sgewicht(s1);
  if delta>i3 then delta:=i3;
  inc(i1,delta);
  dec(i2,delta);
 end else begin
  if delta>i1 then delta:=i1;
  dec(i1,delta);
  inc(i2,delta);
 end;
end;

procedure transfersbfighters(s1:tp_schiff;var i1:sint;var i2:byte;delta:integer);
var
 s3:tp_schiff;
 i3:integer;
begin
 if delta=0 then exit;
 if delta<0 then begin
  delta:=-delta;
  if delta>i2 then delta:=i2;
  i3:=hulls[s1^.typnr].maxmasse-sgewicht(s1);
  if delta>i3 then delta:=i3;
  inc(i1,delta);
  dec(i2,delta);
 end else begin
  if delta>i1 then delta:=i1;
  if delta+i2>150 then delta:=150-i2;
  dec(i1,delta);
  inc(i2,delta);
 end;
end;

procedure transfersbtb(s1:tp_schiff;var i1:sint;var i2:sint;delta:integer);
var
 s3:tp_schiff;
 i3:integer;
begin
 if delta=0 then exit;
 if delta<0 then begin
  delta:=-delta;
  if delta>i2 then delta:=i2;
  i3:=hulls[s1^.typnr].maxmasse-sgewicht(s1);
  if delta>i3 then delta:=i3;
  inc(i1,delta);
  dec(i2,delta);
 end else begin
  if delta>i1 then delta:=i1;
  if delta+i2>10000 then delta:=10000-i2;
  dec(i1,delta);
  inc(i2,delta);
 end;
end;

procedure transferspneutr(s1:tp_schiff;var i2:lint;delta:integer);
var
 s3:tp_schiff;
 i3:integer;
begin
 if delta=0 then exit;
 if delta<0 then begin
  delta:=-delta;
  if delta>i2 then delta:=i2;
  with s1^ do with hulls[typnr] do begin
   i3:=maxmasse-sgewicht(s1);
   if delta>i3 then delta:=i3;
   i3:=maxfuel-neutr;
   if delta>i3 then delta:=i3;
   inc(neutr,delta);
   dec(i2,delta);
  end;
 end else begin
  with s1^ do if delta>neutr then delta:=neutr;
  dec(s1^.neutr,delta);
  inc(i2,delta);
 end;
end;

procedure transferspcreds(s1:tp_schiff;var i2:lint;delta:integer);
var
 s3:tp_schiff;
 i3:integer;
begin
 if delta=0 then exit;
 if delta<0 then begin
  delta:=-delta;
  if delta>i2 then delta:=i2;
  i3:=10000-s1^.cred;
  if delta>i3 then delta:=i3;
  inc(s1^.cred,delta);
  dec(i2,delta);
 end else begin
  with s1^ do if delta>cred then delta:=cred;
  dec(s1^.cred,delta);
  inc(i2,delta);
 end;
end;

procedure transfersscols(s1,s2:tp_schiff;delta:lint);
var
 s3:tp_schiff;
 i3:lint;
begin
 if delta=0 then exit;
 if delta<0 then begin { immer s1->s2}
  s3:=s2;
  s2:=s1;
  s1:=s3;
  delta:=-delta;
 end;
 if delta>s1^.colons then delta:=s1^.colons;
 with s2^ do with hulls[typnr] do begin
  i3:=maxmasse-sgewicht(s2);
  if i3>delta div 100 then i3:=delta div 100;
  i3:=i3*100;
  inc(colons,i3);
  dec(s1^.colons,i3);
  dec(delta,i3);
  if delta>100 then delta:=99;
  i3:=64;
  while (delta>0)and(i3>0) do begin
   if delta>=i3 then begin
    inc(colons,i3);
    if sgewicht(s2)>maxmasse then begin
     dec(colons,i3);
    end else begin
     dec(s1^.colons,i3);
     dec(delta,i3);
    end;
   end;
   i3:=i3 div 2;
  end;
 end;
end;

procedure transferspcols(s2:tp_schiff;var i2:lint;delta:lint);
var
 s3:tp_schiff;
 i3:lint;
begin
 if delta=0 then exit;
 if delta<0 then with s2^ do with hulls[typnr] do begin
  delta:=-delta;
  if delta>i2 then delta:=i2;
  i3:=maxmasse-sgewicht(s2);
  if i3>delta div 100 then i3:=delta div 100;
  i3:=i3*100;
  inc(colons,i3);
  dec(i2,i3);
  dec(delta,i3);
  if delta>100 then delta:=99;
  i3:=64;
  while(delta>0)and(i3>0) do begin
   if delta>=i3 then begin
    inc(colons,i3);
    if sgewicht(s2)>maxmasse then begin
     dec(colons,i3);
    end else begin
     dec(i2,i3);
     dec(delta,i3);
    end;
   end;
   i3:=i3 div 2;
  end;
 end else begin
  with s2^ do begin
   if delta>colons then delta:=colons;
   dec(colons,delta);
  end;
  inc(i2,delta);
 end;
end;

procedure transfersbcols(s2:tp_schiff;var i2:lint;delta:lint);
var
 s3:tp_schiff;
 i3:lint;
begin
 if delta=0 then exit;
 if delta<0 then with s2^ do with hulls[typnr] do begin
  delta:=-delta;
  if delta>i2-5000 then delta:=i2-5000;
  if delta<0 then exit;
  i3:=maxmasse-sgewicht(s2);
  if i3>delta div 100 then i3:=delta div 100;
  i3:=i3*100;
  inc(colons,i3);
  dec(i2,i3);
  dec(delta,i3);
  if delta>100 then delta:=99;
  i3:=64;
  while(delta>0)and(i3>0) do begin
   if delta>=i3 then begin
    inc(colons,i3);
    if sgewicht(s2)>maxmasse then begin
     dec(colons,i3);
    end else begin
     dec(i2,i3);
     dec(delta,i3);
    end;
   end;
   i3:=i3 div 2;
  end;
 end else with s2^ do begin
  if delta>colons then delta:=colons;
  if delta>50000-i2 then delta:=50000-i2;
  dec(colons,delta);
  inc(i2,delta);
 end;
end;

end.