      TITLE F_SIN 
      MODULE F_SIN 
      EXPORTC F_SIN,F_COS
      IMPORTC F_ZSTE,F_HANDLER
      AREADEF PROG,[PIC,READ,SHARED,CODE],DOUBLE
      AREADEF DATA,[WRITE,DATA],DOUBLE
      DEFSB   DATA
      AREA    PROG
      DCS     'F_SIN       '
F_SIN SPRD    FP,TOS
      LPRD    FP,12(SP)
      CMPQW   0,2(0(FP))
      SGTD    R0
      ADDD    R0,R0
      BR      st
F_COS SPRD    FP,TOS
      LPRD    FP,12(SP)
      MOVQD   1,R0
st    ABSF    0(0(FP)),F0
      MOVFL   F0,F0
      MULL    =0.63661977236758134,F0
      CMPL    F0,=1.E6
      BGT     bad
      ROUNDLD F0,R1
      MOVDL   R1,F2
      SUBL    F2,F0
      ADDL    F0,F0
      MOVLF   F0,F0
      ADDD    R1,R0
      ANDB    =3,R0
      MOVF    F0,F1
      MULF    F1,F1
      TBITB   =0,R0
      BFC     c2
      MOVF    =-.31915254E-3,F0
      MULF    F1,F0
      ADDF    =.15850387E-1,F0
      MULF    F1,F0
      SUBF    =.30842449,F0
      MULF    F1,F0
      ADDF    =1.0,F0
      BR      c3
c2    MOVF    =-.35875350E-4,F2
      MULF    F1,F2
      ADDF    =.24898677E-2,F2
      MULF    F1,F2
      SUBF    =.80745364E-1,F2
      MULF    F1,F2
      ADDF    =.78539815,F2
      MULF    F2,F0
c3    CMPQB   1,R0
      BGE     c4
      NEGF    F0,F0
c4    MOVF    F0,ans
      ADDR    ans,R0
      LPRD    FP,TOS
      RXP     4
bad   ADDR    mess,TOS
      CXP     F_ZSTE
      HANDLER
      CXP     F_HANDLER
txt   DCS     'argument is too big for SIN/COS'
lgt   EQU     *
      AREA    DATA
ans   ALLOCD  1
mess  ADDRESS mm
mm    ADDRESS txt
      DCD     lgt-txt
      END
