 PRO diff_img, list, DARK=dark, NET=net, WRT=wrt, LIST_OUT=list_out, KEEP=keep

@wload.com
@chandle.com

   IF N_ELEMENTS( list ) LT 2 THEN RETURN

   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 N_ELEMENTS(img_resize) EQ 0 THEN img_resize = 1.0
    
   n = N_ELEMENTS( list )

   img0 = READFITSL( list(0), head )

   IF N_ELEMENTS(img0) EQ 1 THEN BEGIN
    text = " Error opening file: "+list(0)
    dummy = WIDGET_MESSAGE(text,/ERROR)
    RETURN
   ENDIF

              ; IF img_resize EQ -1 THEN BEGIN
              ; check header for SUMROW and SUMCOL

   sumrow  = FXPAR(head,"SUMROW") 
   sumcol  = FXPAR(head,"SUMCOL")
   lebxsum = FXPAR(head,"LEBXSUM")
   lebysum = FXPAR(head,"LEBYSUM")
   if ( sumrow  eq 0 ) then sumrow = 1
   if ( sumcol  eq 0 ) then sumcol = 1
   if ( lebxsum eq 0 ) then lebxsum = 1
   if ( lebysum eq 0 ) then 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(img0) EQ "INT" and min(img0) LT 0 THEN BEGIN
   
    img0 = FLOAT(img0)
    ind = WHERE(img0 LT 0)
    img0(ind) = img0(ind) + 65536.0
   
   
   ENDIF  
    
   IF nxsum GT 0 THEN BEGIN
      resize = nxsum * ABS(img_resize)
      img0 = resize_img(img0,resize,head)
   ENDIF ELSE BEGIN
      img0 = resize_img(img0,resize,head)
   ENDELSE

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

   IF net EQ 1 THEN BEGIN
      exptime = FLOAT(chk_h4s(head,"EXPTIME"))
      IF exptime EQ -1 THEN XVAREDIT,exptime
      img0 = img0 / exptime
   ENDIF

   name0 = cat_name(list(0))

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

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

   list_o = ''
   FOR i=1,n-1 DO BEGIN

   next_valid_image: print,"Image ",i," : ",list(i)

        image = readfitsl( list(i), head )

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

        ;resize = img_resize 
        ; check header for SUMROW and SUMCOL
        
   sumrow  = FXPAR(head,"SUMROW") 
   sumcol  = FXPAR(head,"SUMCOL")
   lebxsum = FXPAR(head,"LEBXSUM")
   lebysum = FXPAR(head,"LEBYSUM")
   if ( sumrow  eq 0 ) then sumrow = 1
   if ( sumcol  eq 0 ) then sumcol = 1
   if ( lebxsum eq 0 ) then lebxsum = 1
   if ( lebysum eq 0 ) then 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 BEGIN
      resize = nxsum * ABS(img_resize)
      image = resize_img(image,resize,head)
   ENDIF ELSE BEGIN
      image = resize_img(image,resize,head)
   ENDELSE

   sz = size(image)	; image size

        namei = cat_name(list(i))
        name =  namei + "-" +  name0

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

        IF net EQ 1 THEN BEGIN
          exptime = FLOAT(chk_h4s(head,"EXPTIME"))
          IF exptime EQ -1 THEN XVAREDIT,exptime
          image = image / exptime
        ENDIF
        img1 = image
        image = image - img0 
        
        IF keep EQ 1 THEN chandle  ; save image in memory

        SXADDPAR,head,'HISTORY','=' + "'" + name + "'" + '/'

        IF wrt EQ 1 THEN BEGIN

          WRITEFITS,wdir+name,image,head

          list_o = [list_o, wdir + name]

        ENDIF

       img0 = img1
       name0= namei

   ENDFOR
   finish:

   img1 = 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

RETURN
END

