pro ssmem_progress, winid, px_window, garr, f, subajn, chin, chen, $
 flun, flen, txt, kp, init = init, caller = caller

    xsz = 600
    ysz = 500
    nf1 = n_elements(f) - 1l

    win0 = !d.window
    mul0 = !p.multi
    device, get_decomposed = dc0
    tvlct, r0, g0, b0, /get
    reg0 = !p.region

;    if keyword_set(init) then begin
    if not is_number( winid ) then begin 
        window, xsize = xsz, ysize = ysz, /free, /pixmap
        px_window = !d.window
        window, xsize = xsz, ysize = ysz, /free
        winid = !d.window
    endif else wset, px_window

    !p.multi = [0, 2, 2]
    device, decomposed = 0
    loadct, 5, /silent

    gmin = min(garr, max = gmax)
    !p.region = [0., 0.52, 0.5, 1.0]
    plot, garr[*, 0], yrange = [gmin, gmax], xstyle = 1, $
     xtitle = 'pixel', title = 'Grad. Slice'
    for i = 1, 4 do oplot, garr[*, i], linestyle = i
    wid = 0.02
    marg = (f[nf1] / f[0])^(wid / 2.)
    xran = [f[0] / marg < (f[0] - 0.1), f[nf1] * marg > (f[nf1] + 0.1)]
    !p.region = [0.5, 0.52, 1.0, 1.0]
    plot, f, subajn, psym = -1, xrange = xran, xstyle = 1, /xlog, $
     ystyle = 2, $
     xtitle = 'frequency [GHz]', title = 'Grad. Size'
    plots, f[kp], subajn[kp], psym = 4
    low = chin - chen
    high = chin + chen
    !p.region = [0., 0.04, 0.5, 0.52]
    plot, f, chin, psym = -1, xrange = xran, xstyle = 1, /xlog, $
     yrange = [min(low), max(high)], ystyle = 2, $
     xtitle = 'frequency [GHz]', title = 'Norm. Chi-Sq.'
    errplot, f, low, high, width = wid
    plots, f[kp], chin[kp], psym = 4
    low = flun - flen
    high = flun + flen
    !p.region = [0.5, 0.04, 1.0, 0.52]
    plot, f, flun, psym = -1, xrange = xran, xstyle = 1, /xlog, $
     yrange = [min(low), max(high)], ystyle = 2, $
     xtitle = 'frequency [GHz]', title = 'Norm. Flux'
    errplot, f, low, high, width = wid
    plots, f[kp], flun[kp], psym = 4
    xyouts, 0.5, 0.01, txt, alignment = 0.5, /norm

    wset, winid
    device, copy = [0, 0, xsz, ysz, 0, 0, px_window]

    !p.region = reg0
    tvlct, r0, g0, b0
    device, decomposed = dc0
    !p.multi = mul0
    wset, win0

end

