 PRO diff_of, list, DARK=dark, NET=net, WRT=wrt, LIST_OUT=list_out, KEEP=keep,$
	            layout=layout, OPS=ops, MOVIE=movie, FNAME=fname, $
                    MINI=MINI, MAXI=MAXI, IMG_SCL=IMG_SCL, $
                    FULL_RES=FULL_RES, FULL_IMG=FULL_IMG, BCF=BCF, $
                    BYT=byt,CUT=cut,GCT=gct,MPEG=MPEG,COSMIC=COSMIC
@wload.com
@chandle.com

   ;list = rd_asc(list)

   IF N_ELEMENTS( list ) LT 2 THEN RETURN

   IF NOT KEYWORD_SET ( layout ) THEN layout = 0 ; no layout
   IF NOT KEYWORD_SET ( keep ) THEN keep = 0     ; don't keep images in memory
   IF NOT KEYWORD_SET ( dark ) THEN dark = 0     ; don't subtract dark
   IF NOT KEYWORD_SET ( net ) THEN net = 0       ; don't normalize exp. time
   IF NOT KEYWORD_SET ( wrt ) THEN wrt = 0       ; don't write to disk
   IF NOT KEYWORD_SET ( list_out ) THEN list_out = "working.lst"
   IF NOT KEYWORD_SET ( ops ) THEN ops = 'fits'
   IF NOT KEYWORD_SET ( movie ) THEN movie =0 
   IF NOT KEYWORD_SET ( bcf ) THEN bcf = 1.035	; background correction factor by RS: bcf = 1.035
   IF NOT KEYWORD_SET ( gct ) THEN gct = .2
   
   IF NOT KEYWORD_SET(img_scl) THEN img_scl = 1.0
  ; IF N_ELEMENTS(img_scl) EQ 0 THEN img_scl = 1.0

   IF datatype(img_resize) EQ 'UND' THEN img_resize = img_scl 

  ; IF KEYWORD_SET(flat_field) THEN BEGIN
  ;  flat_on = readfitsl("/corm/data/flats/12014004.fts",h_on)
  ;  flat_of = readfitsl("/corm/data/flats/12014005.fts",h_of)
  ; ENDIF

    n = N_ELEMENTS( list )

   wdir = GETENV('WORK')+!delimiter+GETENV('USER')+!delimiter+ops+!delimiter

   IF chk_dir(wdir) EQ 0 THEN wdir = GETENV('HOME')+!delimiter

   list_o = ''
   ii = 0
   FOR i=0,n-1,2 DO BEGIN

   next_valid_image: print,"Loading on  line image: ",STRING(i/2,FORMAT='(I3)')," of ", $
                            STRING((n-1)/2,FORMAT='(I3)'),": ",list(i)

    image = readfitsl( list(i), head )
    namei = cat_name(list(i))        
        
    IF N_ELEMENTS(image) EQ 1 THEN BEGIN
          undefine, image
          text = " Error opening file: "+list(i)
          print,text
          ;dummy = WIDGET_MESSAGE(text,/ERROR)
    IF i EQ n-2 THEN GOTO,finish
          i=i+2 & GOTO,next_valid_image
    ENDIF

    resize = img_resize

   ; check header for SUMROW and SUMCOL
   
   sumrow  = FXPAR(head,"SUMROW")  > 1
   sumcol  = FXPAR(head,"SUMCOL")  > 1
   lebxsum = FXPAR(head,"LEBXSUM") > 1
   lebysum = FXPAR(head,"LEBYSUM") > 1

   nxsum = sumcol*lebxsum
   nysum = sumrow*lebysum

   naxis1 = FXPAR(head,"NAXIS1") 
   naxis2 = FXPAR(head,"NAXIS2")

   ;resize = img_resize 
   
   IF img_resize EQ -1 THEN nxsum = sumcol ; for full resolution
   
      IF datatype(image) EQ "INT" and min(image) LT 0 THEN BEGIN
   
        image = FLOAT(image)
        ind = WHERE(image LT 0)
        image(ind) = image(ind) + 65536.0
      
   ENDIF
   
   ;IF nxsum GT 0 THEN resize = nxsum * ABS(img_resize)
   resize =  ABS(img_resize) ; try this 

   image = resize_img(image,resize,head)
   ind1  = WHERE(image EQ 0)
 
   SXADDPAR,head,'RESIZE', resize                        
     
   ;*-------- read off line image ------------*     

    j = i+1

next_off:  
    IF (j GT 1) AND (datatype(bckgr) NE 'UND') THEN BEGIN
      IF list(j) EQ list(j-2) THEN BEGIN
       new_bckgr = 0
       print,"Previous off line image: ",list(j) 
       goto,mkdiff
      ENDIF
    ENDIF

    print,"Loading off line image: ",list(j)
    bckgr = readfitsl( list(j), head1 )
                            
    name1 = cat_name( list(j))
    new_bckgr = 1
    
    IF N_ELEMENTS(bckgr) EQ 1 THEN BEGIN
       undefine, bckgr
       text = " Error opening file: "+list(j)
       print,text
       ;dummy = WIDGET_MESSAGE(text,/ERROR)
          
       ; here need to check if other off line image is avaliable   

       IF j EQ n-1 THEN GOTO,finish
       j = j + 2 & GOTO,next_off
 
       ;bckgr  = bckgr_old
       ;name1 = name1_old
    ENDIF

    resize = img_resize 
        
    ; check header for SUMROW and SUMCOL
    
   sumrow  = FXPAR(head1,"SUMROW")  > 1 
   sumcol  = FXPAR(head1,"SUMCOL")  > 1
   lebxsum = FXPAR(head1,"LEBXSUM") > 1
   lebysum = FXPAR(head1,"LEBYSUM") > 1

   nxsum = sumcol*lebxsum
   nysum = sumrow*lebysum

   naxis1 = FXPAR(head1,"NAXIS1")
   naxis2 = FXPAR(head1,"NAXIS2") 

   ;resize = img_resize 
   
   IF img_resize EQ -1 THEN nxsum = sumcol ; for full resolution
   
   IF datatype(bckgr) EQ "INT" and min(bckgr) LT 0 THEN BEGIN
   
    bckgr = FLOAT(bckgr)
    ind = WHERE(bckgr LT 0)
    bckgr(ind) = bckgr(ind) + 65536.0
   
   
   ENDIF

   ;IF nxsum GT 0 THEN resize = nxsum * ABS(img_resize)  
   resize =  ABS(img_resize) ; try this 

   bckgr = resize_img(bckgr,resize,head1)
   ind2 = WHERE(bckgr EQ 0)

   SXADDPAR,head,'RESIZE', resize                
           
    sz = size(bckgr)	; image size
    rsz = size(image)	; image size
    
    ; check image and bckgr image size
   
    IF (sz(1) NE rsz(1)) OR (sz(2) NE rsz(2)) THEN BEGIN
        print,"%DIFF_OFF: on line image size # off line image size.
        IF i EQ n-2 THEN GOTO,finish
        i=i+2 & GOTO,next_valid_image
    ENDIF               
        
    ;*------ off line image loaded --------*
        
   ; continue with processing      
        
mkdiff:

     ;IF KEYWORD_SET(cut) THEN BEGIN
     ;  IF datatype(bckgr) EQ 'INT' THEN BEGIN
         ;find missing frames
     ;    mfb = WHERE( bckgr EQ 0 ) 
     ;  ENDIF
     ;  IF datatype(image) EQ 'INT' THEN BEGIN
     ;    mfi = WHERE( image EQ 0 )
     ;  ENDIF
     ;ENDIF

     IF dark EQ 1 THEN BEGIN
          detector = STRCOMPRESS(SXPAR(head,'DETECTOR'),/REMOVE_ALL)
          readport = STRCOMPRESS(SXPAR(head,'READPORT'),/REMOVE_ALL)
          
          image = TEMPORARY(image) - get_bias(head)*lebxsum*lebysum
	  
          IF new_bckgr EQ 1 THEN BEGIN
           detector = STRCOMPRESS(SXPAR(head1,'DETECTOR'),/REMOVE_ALL)
           readport = STRCOMPRESS(SXPAR(head1,'READPORT'),/REMOVE_ALL)
          
	   bckgr = TEMPORARY(bckgr) - get_bias(head1)*lebxsum*lebysum	
          ENDIF  
     ENDIF

     IF net EQ 1 THEN BEGIN
          exptime = FLOAT(chk_h4s(head,"EXPTIME"))
          ;exptime = FLOAT(chk_h4s(head,"EXPCMD"))
          ;IF exptime EQ -1 THEN XVAREDIT,exptime
          
          image = TEMPORARY(image) / exptime
          
          IF new_bckgr EQ 1 THEN BEGIN
           exptime = FLOAT(chk_h4s(head1,"EXPTIME"))
                  
           bckgr = TEMPORARY(bckgr) / exptime
          ENDIF
     ENDIF
     
     ;   
     image = TEMPORARY(image) - bckgr * bcf
     IF ind1(0) GT -1 THEN image(ind1) = 0
     IF ind2(0) GT -1 THEN image(ind2) = 0

     name =  namei + "-" +  name1     
 
     IF NOT KEYWORD_SET ( mini ) THEN mini = min(image)
     IF NOT KEYWORD_SET ( maxi ) THEN maxi = max(image)
    
     SXADDPAR,head,'HISTORY','=' + "'" + name + "'" + '/'
     SXADDPAR,head,'HISTORY','=' + "'" + name1 + " " +STRCOMPRESS(STRING(bcf))+"'" + '/'

     IF NOT KEYWORD_SET ( mini ) THEN mini = min(image)
     IF NOT KEYWORD_SET ( maxi ) THEN maxi = max(image)

;     IF KEYWORD_SET(cosmic) THEN BEGIN
;       image = ccosmics(image)
;     ENDIF


     IF KEYWORD_SET(cut) THEN BEGIN
      IF cut EQ -1 THEN undefine,cut
     ENDIF 

     IF KEYWORD_SET(cut) THEN BEGIN
      IF ii EQ 0 THEN  BEGIN
        image = cut_img(image>mini,upper=cut)
        mini = min(image)
        maxi = max(image)
       ENDIF ELSE BEGIN
        image = image > mini < maxi
       ENDELSE
     ENDIF

     IF KEYWORD_SET(byt) THEN BEGIN
      IF byt EQ -1 THEN undefine,byt
     ENDIF 

     IF KEYWORD_SET(byt) THEN BEGIN
;       image = gammascal(image,gct)
;       image = BYTSCL(image,min=mini,top=maxi)
       image = BYTSCL(image,min=mini,max=maxi)
     ENDIF

     IF keep EQ 1 THEN chandle  ; save image in memory

     IF layout EQ 1 THEN BEGIN
   
     IF N_ELEMENTS(lo) EQ 0 THEN $
      lo = { layout1, cmask:1, cgrid:1, clogo:1, cdate:1, cid:1, cgrp:1 }
     
      IF keep EQ 0 THEN hindex = -1
      ;IF N_ELEMENTS(msk) EQ 0 THEN BEGIN 	; I can do that, becouse diff_of is only for C1 !
      ; detector = STRCOMPRESS(SXPAR(head,'DETECTOR'),/REMOVE_ALL)
      ; msk = get_mask(detector)
      ;ENDIF
      ;layout_nm,image,name,head,index,msk=msk,mini=mini,maxi=maxi
       h = LASCO_FITSHDR2STRUCT(head)
       layout,image,name,head,index,hdr=h,mini=mini,maxi=255
     ENDIF
   
     IF wrt EQ 1 THEN BEGIN

       WRITEFITS,wdir+name,image,head

       list_o = [list_o, wdir + name]

     ENDIF

       ;img0 = bckgr
       ;name0= namei

     IF movie EQ 1 THEN BEGIN
    
       maxnum = (n-1)/2 + 1

       ff = FINDFILE(fname)
       IF ff(0) EQ '' THEN WRITE_DISK_MOVIE,fname,image,head,/new,maxnum=maxnum $
       ELSE WRITE_DISK_MOVIE, fname, image , head

     ENDIF

   ii = ii + 1
   ENDFOR
   finish:

   ;bckgr = 0 ; or undefine
   
   IF wrt EQ 1 THEN BEGIN
    ldir = GETENV('WORK')+!delimiter+GETENV('USER')+!delimiter+'list'+ $
           !delimiter
    IF chk_dir(ldir) EQ 0 THEN ldir = GETENV('HOME')+!delimiter

    ind = WHERE(list_o NE '')
    list_o = list_o(ind)

    wrt_asc,ldir + list_out,list_o
   ENDIF

   wdir = GETENV('WORK')+!delimiter+GETENV('USER')+!delimiter+'movie'+!delimiter
   IF chk_dir(wdir) EQ 0 THEN wdir = GETENV('HOME')+!delimiter

   IF KEYWORD_SET(mpeg) THEN BEGIN
    mpeg_name = wdir + 'dmc1.mpg'
    mvi2mpg,file=fname,mpeg_name=mpeg_name,/FULL
   ENDIF

RETURN
END

