%%HP: T(1)A(D)F(.);
DIR
  AdHy
     DUP2 SQ SWAP
SQ -  "Opp" TAG
ROT ROT / ACOS HMS
"A" TAG 90 OVER
HMS- "B" TAG
    
  OpHyp
     DUP2 SQ SWAP
SQ -  "Adj" TAG
ROT ROT / ASIN HMS
"A" TAG 90 OVER
HMS- "B" TAG
    
  OpAdj
     DUP2 SQ SWAP
SQ +  "Hyp" TAG
ROT ROT / ATAN HMS
"A" TAG 90 OVER
HMS- "B" TAG
    
  AdAng
     90 OVER HMS-
"B" TAG ROT ROT
HMS COS / "Hyp"
TAG DUP2 SWAP HMS
COS * "Opp" TAG
    
  OpAng
     90 OVER HMS-
"B" TAG ROT ROT
HMS SIN / "Hyp"
TAG DUP2 SWAP HMS
SIN * "Adj" TAG
    
  HyAng
     90 OVER HMS-
"B" TAG ROT ROT
HMS SIN * "Opp"
TAG DUP2 SWAP HMS
TAN * "Adj" TAG
    
  ssA
     1 CF RCLMENU
 a b A m
      
        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 3 PICK
HMS SIN a b * * 2
/ "A" TAG
        IF 1 FS?
        THEN { CONT
} TMENU HALT 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 3
PICK HMS SIN a b *
* 2 / "A" TAG
        END m MENU
      
    
  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 a b 5 PICK
HMS SIN * * 2 /
"A" TAG
      
    
  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 ROT ROT 3 PICK
a C HMS SIN * * 2
/ "A" TAG
      
    
  sAs
      a C b
       a 2 ^ b 2 ^
+ 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 ROT
ROT C HMS SIN b a
* * 2 / "A" TAG
      
    
  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 DUP b C HMS
SIN * * 2 / "A"
TAG
      
    
END
