FUNCTION tki_rscscan, itgtime, incdx, numofloops
;

;#############################################################################
;#
;# Function name    : TKI_RSCSCAN
;#
;# Author           : Dietmar Germerott
;# Language         : IDL
;# Purpose          : Record 50 RSC Pictures with defined Integrationtime
;# Creation date    : 19-MAY-1996
;# Update date      : 03-JUN-1996
;# External modules : 
;#
;# Call Sequence    : VAR = tki_rscscan(itgtime, incdx, numofloops)
;#
;# Arguments        : itgtime - integrationtime
;#                    incdx   - MC increments in MC steps
;#                    numofloops - number of loops
;#
;# Description      : 
;#
;#
;#############################################################################

@tki_common_priv                ;/* INSERT TKI COMMON VARIABLES */

   result = 0 & statemc2=0
   blockloops = 0 & dummy=0
   tmp_point1 = [0, 0]
   tmp_point1 = [0, 0]

   incdx = FIX(incdx)
   numofloops = FIX(numofloops)

   IF ((incdx GT 127) OR (incdx LT -128) OR (numofloops LE 0)) THEN BEGIN

      mess_text = ' % E % PARERR Parameter Error in RSCscan '
      tki_message, mess_text, 01b
      mess_text = ' % I % Check incdx or numofloops '
      tki_message, mess_text, 03b
      result = -5

   ENDIF
   
   IF (incdx NE 0) THEN BEGIN
      
      IF (usr_info.lev GT 'f0'xb) THEN BEGIN ;user level gt f0h (def e0) allows Rastersteps

         tki_message, ' % E % NORASSTEP Rastersteps are no longer allowed for RSCscan ', 01b
         RETURN, -100
      ENDIF ELSE BEGIN
         tki_message, ' % W % Special privilege for Rastersteps in RSCscan ', 03b
         
      ENDELSE
      
   ENDIF

   
   result = tki_do_pow_cmd ('81'xb, 47, 1)

   IF (result EQ -17) THEN BEGIN

      mess_text = ' % E % CFGERR Error in RSCscan '
      tki_message, mess_text, 01b
      mess_text = ' % I % Check if Configuration is enabled for RSC '
      tki_message, mess_text, 03b
      RETURN, -17

   ENDIF

   rsc_info.cmd = '61'xb        ;/* RSC_ON */
   rsc_info.time_id = FIX(itgtime) ;/* SET INTEGRATIONTIME */
   rsc_info.format = 35         ;/* SET PICTUREFORMAT 35 */

   result = 0

   result = tki_rsc_exec ( rsc_info.cmd, rsc_info.time_id) ;/* SETUP RSC */

   IF (result NE 0) THEN GOTO, errorx

   IF (incdx NE 0) THEN BEGIN

      statemc2 = tki_get_mcpower (1, 40, result)

      IF (result EQ -17) THEN GOTO, error1

                                ;/* SET STEPS FOR SCAN */

      result = tki_do_mc_cmd ('26'xb, 1, incdx, 0, 0)

      IF (result NE 0) THEN GOTO, errorx

   ENDIF

   tmp_point1 = [environ(32).val, environ(33).val]
   
                                ;Set Plot Color
   
   fill_col.tmp =  fill_col.i
   fill_col.i =  fill_col.y + fill_col.rstep
   fill_col.rstep = - fill_col.rstep
   
   WHILE ((result EQ 0) AND (blockloops LT numofloops)) DO BEGIN

      result = tki_rscih()
      
      rsc_info.cmd = '60'xb     ;/* RSC_READIMAGE */

      loop = 0

      WHILE ((result EQ 0) AND (loop LT 50)) DO BEGIN

         result = tki_rsc_exec ( rsc_info.cmd, rsc_info.time_id)

         IF (result LT 0) THEN RETURN, result

         IF (abort_flag NE 0) THEN BEGIN

            result = -47
            GOTO, errorx

         ENDIF

         IF (incdx NE 0) THEN BEGIN

            newpos = environ(2).val + incdx
            result = tki_mcmove (1, newpos, 0)
         ENDIF

         loop = loop + 1

      ENDWHILE                  ;/* loop */

      blockloops = blockloops + 1

   ENDWHILE                     ;/* blockloops */

;-----------------------------------------------------------------------------

;/* CALCULATE SCAN AREA */

   tmp_point2 = [environ(32).val, environ(33).val] ;/* POINT AFTER SCAN */

   l_y = ABS(tmp_point2(0) - tmp_point1(0)) ;/* SCAN WIDTH IN Y - DIRECTION */

   IF (l_y EQ 0) THEN l_y = slit_s.w ;/* IF NO STEPS SET WIDTH TO SLIT WIDTH */

   l_z = slit_s.u + slit_s.l    ;/* SCAN WIDTH IN Z-DIRECTION */
   c_z = tmp_point2(1)
   c_y = tmp_point1(0) + (tmp_point2(0) - tmp_point1(0)) / 2.0

   area_tmp.y_size = l_y / 16.0 ; l_y is in 1/16 arcsec
   area_tmp.z_size = l_z / 16.0 ; l_z is in 1/16 arcsec
   area_tmp.y_point = c_y / 16.0 ; c_y is in 1/16 arcsec
   area_tmp.z_point = c_z / 16.0 ; c_z is in 1/16 arcsec
   area_tmp.slitnr = global_s.slit
   area_tmp.index = area_cnt

   area_s = [area_s, area_tmp]
   area_cnt = area_cnt + 1

;-----------------------------------------------------------------------------

errorx:

   IF (incdx NE 0) THEN BEGIN

      dummy = tki_do_mc_cmd ('30'xb, 1, 0, 0, 0)
      dummy = tki_do_pow_cmd ('81'xb, 40, statemc2)

   ENDIF

error1:

   fill_col.i = fill_col.tmp    ;Reset Plot Color
   rsc_info.cmd = '62'xb        ;/* RSC_OFF */
   dummy = tki_rsc_exec (rsc_info.cmd, rsc_info.time_id)
   dummy = tki_do_pow_cmd ('81'xb, 47, 0) ;/* SWITCH OFF RSC */

   RETURN, result

END



;---------------------------------------------------------------------------
; End of 'TKI_RSCSCAN.PRO'.
;---------------------------------------------------------------------------