%%HP: T(1)A(D)F(.);
DIR
  Ad&Hy
   DUP2 SQ SWAP SQ -  "Opp"
TAG UNROT / ACOS HMS "A" TAG
90 OVER HMS- "B" TAG
  
  Op&Hyp
   DUP2 SQ SWAP SQ -  "Adj"
TAG UNROT / ASIN HMS "A" TAG
90 OVER HMS- "B" TAG
  
  Op&Adj
   DUP2 SQ SWAP SQ +  "Hyp"
TAG UNROT / ATAN HMS "A" TAG
90 OVER HMS- "B" TAG
  
  Ad&Ang
   90 OVER HMS- "B" TAG UNROT
HMS COS / "Hyp" TAG DUP2 SWAP
HMS COS * "Opp" TAG
  
  Op&Ang
   90 OVER HMS- "B" TAG UNROT
HMS SIN / "Hyp" TAG DUP2 SWAP
HMS SIN * "Adj" TAG
  
  Hy&Ang
   90 OVER HMS- "B" TAG UNROT
HMS SIN * "Opp" TAG DUP2 SWAP
HMS TAN * "Adj" TAG
  
  ssA
   1 CF  a b A
    
      IF b A HMS SIN * a < a b
< AND
      THEN 1 SF
      END b A HMS SIN * a /
ASIN
      IFERR HMS
      THEN DROP "No Solution"
KILL
      END "3" TAG DUP A HMS+
180 SWAP HMS- "1" TAG DUP HMS
SIN a * A HMS SIN / "Sd3" TAG
ROT
      IF 1 FS?
      THEN b A HMS SIN * a /
ASIN 180 SWAP - HMS "3b" TAG
DUP A HMS+ 180 SWAP HMS- "1b"
TAG DUP HMS SIN a * A HMS SIN
/ "Sd3b" TAG ROT
      END
    
  
  sss
    a b c
     a SQ b SQ + c SQ - 2 a b *
* / ACOS HMS "1" TAG a SQ c
SQ + b SQ - 2 a c * * / ACOS
HMS "2" TAG DUP2 HMS+ 180
SWAP HMS- "3" TAG
    
  
  sAs
    a C b
     a SQ b SQ + 2 a b C HMS
COS * * * -  "Sd3" TAG DUP C
HMS SIN / b SWAP / ASIN HMS
"3" TAG DUP 180 SWAP C HMS+
HMS- "2" TAG UNROT
    
  
  sAA
    a C A
     a A HMS SIN / C HMS SIN
* "Sd3" TAG 180 A C HMS+ HMS-
"3" TAG DUP2 HMS SIN * C HMS
SIN / "Sd2" TAG UNROT
    
  
  AsA
    C b A
     180 A C HMS+ HMS- "3"
TAG DUP HMS SIN C HMS SIN b *
SWAP / "Sd3" TAG SWAP OVER C
HMS SIN / A HMS SIN * "Sd1"
TAG
    
  
END