 PRO diff_ref_nm, list, DARK=dark, NET=net, WRT=wrt, LIST_OUT=list_out, KEEP=keep, $
               layout = layout

@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
   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 )

   ref = READFITSL( list(0), head )

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

   resize = img_resize 

   ; check header for SUMROW and SUMCOL
   sumrow = FIX(chk_h4s(head,"SUMROW")) 
   sumcol = FIX(chk_h4s(head,"SUMCOL"))
   naxis1 = FIX(chk_h4s(head,"NAXIS1"))
   naxis2 = FIX(chk_h4s(head,"NAXIS2"))

   if ( sumrow  eq 0 ) then sumrow = 1
   if ( sumcol  eq 0 ) then sumcol = 1

   r1col  = FIX(chk_h4s(head,"R1COL")) - 20
   r1row  = FIX(chk_h4s(head,"R1ROW")) - 1
   r2col  = FIX(chk_h4s(head,"R2COL")) - 20
   r2row  = FIX(chk_h4s(head,"R2ROW")) - 1


   resize = sumrow * img_resize
                 
   IF resize NE 1.0 THEN  ref = resize_img(ref,resize,head)
                 
   IF dark EQ 1 THEN BEGIN
        detector = STRCOMPRESS(SXPAR(head,'DETECTOR'),/REMOVE_ALL)
        readport = STRCOMPRESS(SXPAR(head,'READPORT'),/REMOVE_ALL)
	ref = TEMPORARY(ref) - get_bias(head)
   ENDIF

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

   rsz = size(ref)  ; ref image size
   
   ref_name = cat_name(list(0))

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

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

   diff_list = ''
   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)
          print,text
          ;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 = FIX(chk_h4s(head,"SUMROW")) 
   sumcol = FIX(chk_h4s(head,"SUMCOL"))
   naxis1 = FIX(chk_h4s(head,"NAXIS1"))
   naxis2 = FIX(chk_h4s(head,"NAXIS2"))

   if ( sumrow  eq 0 ) then sumrow = 1
   if ( sumcol  eq 0 ) then sumcol = 1

   resize = sumrow * img_resize

   IF resize NE 1.0 THEN image = resize_img(image,resize,head)
   sz = size(image)	; image size
   
   ; check image and ref image size
   
   IF (sz(1) NE rsz(1)) OR (sz(2) NE rsz(2)) THEN BEGIN
      print,"%DIFF_REF: image size # reference image size.
      IF i EQ n-1 THEN GOTO,finish
      i=i+1 & GOTO,next_valid_image
   ENDIF       
          
   ; header need update for sumrow & sumcol
      
   head = fparmodify(head,'SUMROW','0')
   head = fparmodify(head,'SUMCOL','0')

   name = cat_name(list(i)) + "-" + ref_name

   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)
   ENDIF

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

   image = TEMPORARY(image) - ref 
   
   IF keep EQ 1 THEN chandle  ; save image in memory
   
   SXADDPAR,head,'HISTORY','=' + "'" + name + "'" + '/'
   
   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
     layout_nm,image,name,head,hindex
   ENDIF
      
    IF wrt EQ 1 THEN BEGIN
     WRITEFITS,wdir+name,image,head
     diff_list = [diff_list, wdir + name]
    ENDIF

   ENDFOR
   finish:

    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(diff_list NE '')
      diff_list = diff_list(ind)
      wrt_asc,ldir + list_out,diff_list

    ENDIF
RETURN
END

