code 35030;
    procedure INCOMGAM(X,A,KLGAM,GRGAM,GAM,EPS);
    value X,A,EPS; real X,A,KLGAM,GRGAM,GAM,EPS;
    begin real C0,C1,C2,D0,D1,D2,X2,AX,P,Q,R,S,R1,R2,SCF;
        integer N;
        S:= EXP(-X + A * LN(X)); SCF:= "+300;
        if X <= (if A < 3 then 1 else A) then 
        begin X2:= X * X; AX:= A * X; D0:= 1; P:= A; C0:= S;
            D1:=(A+1)*(A+2-X); C1:=((A+1) * (A+2)+X) * S;
             R2:= C1/D1;
             for N:= 1, N+1 while ABS((R2-R1)/R2) > EPS do 
                begin P:= 2+P; Q:= (P+1) * (P*(P+2)-AX);
                R:= N * (N+A) * (P+2) * X2;
                C2:= (Q*C1 + R*C0)/P; D2:= (Q*D1 + R*D0)/P;
                 R1:=R2; R2:=C2/D2;
                C0:=C1; C1:=C2; D0:=D1; D1:=D2;
                if ABS(C1) > SCF or ABS(D1) > SCF then 
               begin C0:= C0/SCF; C1:= C1/SCF;
                       D0:= D0/SCF; D1:= D1/SCF
               end 
            end; KLGAM:= R2/A; GRGAM:= GAM - KLGAM
        end else 
        begin C0:=A*S; C1:=(1+X)* C0; Q:= X +2  - A;
            D0:= X; D1:= X * Q; R2:= C1/D1;
            for N:=1, N+1 while ABS((R2-R1)/R2)>EPS do 
            begin     Q:= 2 + Q; R:= N * (N+1-A);
                C2:= Q*C1-R*C0; D2:= Q*D1-R*D0;
                R1:=R2; R2:=C2/D2;
                C0:=C1; C1:=C2; D0:=D1; D1:=D2;
                if ABS(C1) > SCF or ABS(D1) > SCF then 
               begin C0:= C0/SCF; C1:= C1/SCF;
                       D0:= D0/SCF; D1:= D1/SCF
               end 
            end; GRGAM:= R2/A; KLGAM:= GAM - GRGAM
        end 
    end INCOMGAM

        eop