       DOUBLE PRECISION FUNCTION   FSINSQ (V1,V2,TD,TR,TF,PW,PER)
C generates pulses with sine -squared rise    and fall:
C v1 : initial value
C v2 : pulse value
C TD : delay time
C TR : rise time
C TF : fall time
C PW : pulse width
C PER: period
       IMPLICIT double precision    (A-H,O-Z), INTEGER  (I-N)
       COMMON /CNTRLS/ TIME ,SKIP(159)
       DATA PI /3.1415926D0/
       IF (TIME . LE. TD) then
          FSINSQ = V1
          go to 999
       end if
       T=MOD((TIME -TD),PER)
       IF (T .LT. TR)  THEN
          VS=SIN(PI*T/(2.D0*TR))
          FSINSQ=V1+(V2-V1)*VS*VS
          go to 999
       END IF
       IF (T .LT. (TR+PW))   THEN
          FSINSQ=V2
          go to 999
       END IF
       IF (T .LT. (TR+PW+TF))   THEN
          VC=COS(PI*(T-TR-PW)/(2.D0*TF))
          FSINSQ=V1+(V2-V1)*VC*VC
          go to 999
       END IF
       FSINSQ=V1
  999  RETURN
       END
