;+
; Project     :	SOHO - CDS
;
; Name        :	MEMDUMP
;
; Purpose     :	Locates a byte array within the memory dump file.
;
; Explanation : Searches through the memory dump save file looking for a given byte array segment.
;
; Use         : <res = memdump(file, array)>
;                i.e print, memdump('primary',[1,2,3,4])
;
; Inputs      : file   : file containing mem dump array
;               array  : BYTE array containing segment to search for.
;
; Opt. Outputs:	None.
;
; Keywords    : None.
;
; Calls       :	longhex
;                
; Common      :	None.
;
; Restrictions:	None.
;
; Side effects:	None.
;
; Category    :	Operations..
;
; Prev. Hist. :	None.
;
; Written     :	Version 0.0, Martin Carter, RAL, 12/10/95
;
; Modified    :	0.1, MKC, 28/11/95
;                  Added setting of mem so can restore OK
;               0.2, MKC, 23/1/96
;                  Corrected word offset calculation.
;
; Version     :	Version 0.2, 23/1/96
;-
;**********************************************************

FUNCTION memdump, file, array

  ; set up mem for restore

  mem = 0

  ; read in memory dump array

  RESTORE, GETENV ( 'CDS_MEM_DUMP' ) + '/' + file + '.dump'

  ; convert long array to byte array

  mem = BYTE ( mem, 0, 4*N_ELEMENTS(mem) )

  ; search for given byte array  

  count = N_ELEMENTS(mem)
  list = LINDGEN( N_ELEMENTS(mem) )
  pos = 0

  WHILE count GT 0 AND pos LT N_ELEMENTS(array) DO BEGIN

    new_list = WHERE ( mem(list) EQ array(pos), count )

    PRINT, 'Matches = ', count, ' item = ', array(pos)

    pos = pos + 1
    IF count GT 0 THEN list = list(new_list) + 1

  ENDWHILE    

  list = list-N_ELEMENTS(array)

  PRINT, 'No. of matches       = ', count

  IF count GT 0 THEN BEGIN
    PRINT, 'Byte positions       = ', list
    PRINT, 'Byte offsets in word = ', list AND 3
    PRINT, 'Word offsets         = ', longhex(list/4)
    RETURN, longhex(list/4)
  ENDIF ELSE BEGIN
    RETURN, ''
  ENDELSE
  
END