*DECK             SPTWO 
USETEXT   TSOURCE 
USETEXT   TCEXECQ 
USETEXT   TSYMCNS 
USETEXT   TCOM37Q 
USETEXT   TCOM78Q 
USETEXT   TC7DECS 
PROC SPTWO(A);
BEGIN 
*CALL COMEX 
    ITEM A; #NON-ZERO VALUE#
    ITEM I,K,L,M,N; 
    XREF FUNC PTWO; 
    #SETS COMMON ITEMS
         SPTWOC- CODE INDICATION
              0) NOT A SUM OF A POWER OF TWO
              1) POWER OF TWO 
              2) SUM OF POWER OF TWO
              3) DIFFERENCE OF POWER OF TWO 
         SPTWO1- FIRST POWER OF TWO 
         SPTWO2- SECOND POWER OF TWO
         WHERE SPTWO1 GR SPTWO2 GQ 0
    # 
    I=ABS(A); 
    K=PTWO(I);
    IF K GQ 0 THEN
         BEGIN #POWER OF TWO #
         SPTWOC=1;
         SPTWO1=K;
         RETURN;
         END
    #LOOK FOR FIRST LOW-ORDER BIT#
    L=1; M=0; 
SP10: 
    IF L LAN I NQ L THEN
         BEGIN
         L=L+L; 
         M=M+1; 
         GOTO SP10; 
         END
    N=I+L;
    IF N LS 0 THEN
         BEGIN #OVERFLOW TO SIGN BIT# 
         SPTWOC=3;
         SPTWO1=59; 
         SPTWO2=M;
         RETURN;
         END
    K=PTWO(N);
    IF K GR 0 THEN
         BEGIN #DIFFERENCE OF POWER OF TWO# 
         SPTWOC=3;
         SPTWO1=K;
         SPTWO2=M;
         RETURN;
         END
    N=I LXR L; #TURN OFF LOW-ORDER BIT# 
    K=PTWO(N);
    IF K GR 0 THEN
         BEGIN #SUM OF POWER OF TWO#
         SPTWOC=2;
         SPTWO1=K;
         SPTWO2=M;
         RETURN;
         END
    #NEITHER A POWER OF TWO, NOR A SUM OF POWERS OF TWO, NOR A DIFFER-
    ENCE OF POWERS OF TWO#
    SPTWOC=0; 
END 
TERM
